summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsgjesse@chromium.org <sgjesse@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-11-06 10:39:35 +0000
committersgjesse@chromium.org <sgjesse@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-11-06 10:39:35 +0000
commit574036712fa0d0347e088333117ed2ef99c087f5 (patch)
treec839fd80e1613bee978d1e4692a89080601efcf2
parent9c72092d36013e13633a6c94e02fac848f9c0cd9 (diff)
downloadchromium_src-574036712fa0d0347e088333117ed2ef99c087f5.zip
chromium_src-574036712fa0d0347e088333117ed2ef99c087f5.tar.gz
chromium_src-574036712fa0d0347e088333117ed2ef99c087f5.tar.bz2
Changed the call to attach the debugger to V8 to run in the renderer thread. With V8 r648 (Review URL: http://codereview.chromium.org/8909) attaching the debugger to V8 will initialize V8 if not already initialized. This needs to be serialized with the initialization of V8 in the renderer thread.
This change does not require the changes in V8 r648, but will not have any effect without. Added a few comments. BUG=3723 Review URL: http://codereview.chromium.org/8735 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@4875 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/renderer/debug_message_handler.cc18
-rw-r--r--chrome/renderer/debug_message_handler.h5
2 files changed, 21 insertions, 2 deletions
diff --git a/chrome/renderer/debug_message_handler.cc b/chrome/renderer/debug_message_handler.cc
index 451a28b..27c5885 100644
--- a/chrome/renderer/debug_message_handler.cc
+++ b/chrome/renderer/debug_message_handler.cc
@@ -26,6 +26,12 @@ void DebugMessageHandler::EvaluateScript(const std::wstring& script) {
}
}
+void DebugMessageHandler::Attach() {
+ DCHECK(MessageLoop::current() == view_loop_);
+ debugger_->Attach();
+}
+
+
///////////////////////////////////////////////
// all methods below called from the IO thread
@@ -34,7 +40,11 @@ void DebugMessageHandler::DebuggerOutput(const std::wstring& out) {
}
void DebugMessageHandler::OnBreak(bool force) {
+ // Set the debug break flag in the V8 enging.
debugger_->Break(force);
+
+ // If a forced break has been requested make sure that it will occour by
+ // running some JavaScript in the renderer.
if (force && view_loop_) {
view_loop_->PostTask(FROM_HERE, NewRunnableMethod(
this, &DebugMessageHandler::EvaluateScript,
@@ -46,7 +56,13 @@ void DebugMessageHandler::OnAttach() {
if (!debugger_) {
debugger_ = new Debugger(this);
}
- debugger_->Attach();
+
+ // Run the actual debugger attach in the renderer as it uses V8 methods which
+ // most run in the V8 thread.
+ if (view_loop_) {
+ view_loop_->PostTask(FROM_HERE, NewRunnableMethod(
+ this, &DebugMessageHandler::Attach));
+ }
}
void DebugMessageHandler::OnCommand(const std::wstring& cmd) {
diff --git a/chrome/renderer/debug_message_handler.h b/chrome/renderer/debug_message_handler.h
index f02ad88..9720ef1 100644
--- a/chrome/renderer/debug_message_handler.h
+++ b/chrome/renderer/debug_message_handler.h
@@ -21,9 +21,12 @@ class DebugMessageHandler : public IPC::ChannelProxy::MessageFilter,
virtual ~DebugMessageHandler();
private:
- // evaluate javascript URL in the renderer
+ // Evaluate javascript URL in the renderer
void EvaluateScript(const std::wstring& script);
+ // Attach in the renderer
+ void Attach();
+
// Debugger::Delegate callback method to handle debugger output.
void DebuggerOutput(const std::wstring& out);