DevTools: add support for navigating to other tab while inspecting.
Review URL: http://codereview.chromium.org/53098
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@12640 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/renderer/devtools_agent.cc b/chrome/renderer/devtools_agent.cc
index e86d58c..d08b0c7 100644
--- a/chrome/renderer/devtools_agent.cc
+++ b/chrome/renderer/devtools_agent.cc
@@ -82,6 +82,8 @@
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(DevToolsAgent, message)
+ IPC_MESSAGE_HANDLER(DevToolsAgentMsg_Attach, OnAttach)
+ IPC_MESSAGE_HANDLER(DevToolsAgentMsg_Detach, OnDetach)
IPC_MESSAGE_HANDLER(DevToolsAgentMsg_DebugAttach, OnDebugAttach)
IPC_MESSAGE_HANDLER(DevToolsAgentMsg_DebugDetach, OnDebugDetach)
IPC_MESSAGE_HANDLER(DevToolsAgentMsg_DebugBreak, OnDebugBreak)
@@ -112,6 +114,16 @@
view_->EvaluateScript(L"", script);
}
+void DevToolsAgent::OnAttach() {
+ view_loop_->PostTask(FROM_HERE, NewRunnableMethod(
+ this, &DevToolsAgent::Attach));
+}
+
+void DevToolsAgent::OnDetach() {
+ view_loop_->PostTask(FROM_HERE, NewRunnableMethod(
+ this, &DevToolsAgent::Detach));
+}
+
void DevToolsAgent::OnDebugAttach() {
DCHECK(MessageLoop::current() == io_loop_);
if (!debugger_) {
@@ -183,14 +195,25 @@
this, &DevToolsAgent::InspectElement, x, y));
}
+void DevToolsAgent::Attach() {
+ WebDevToolsAgent* web_agent = GetWebAgent();
+ if (web_agent) {
+ web_agent->Attach();
+ }
+}
+
+void DevToolsAgent::Detach() {
+ WebDevToolsAgent* web_agent = GetWebAgent();
+ if (web_agent) {
+ web_agent->Detach();
+ }
+}
+
void DevToolsAgent::DispatchRpcMessage(const std::string& raw_msg) {
- if (!view_)
- return;
- WebView* web_view = view_->webview();
- if (!web_view)
- return;
- WebDevToolsAgent* web_agent = web_view->GetWebDevToolsAgent();
- web_agent->DispatchMessageFromClient(raw_msg);
+ WebDevToolsAgent* web_agent = GetWebAgent();
+ if (web_agent) {
+ web_agent->DispatchMessageFromClient(raw_msg);
+ }
}
void DevToolsAgent::OnDebuggerCommand(const std::string& command) {
@@ -199,11 +222,17 @@
}
void DevToolsAgent::InspectElement(int x, int y) {
+ WebDevToolsAgent* web_agent = GetWebAgent();
+ if (web_agent) {
+ web_agent->InspectElement(x, y);
+ }
+}
+
+WebDevToolsAgent* DevToolsAgent::GetWebAgent() {
if (!view_)
- return;
+ return NULL;
WebView* web_view = view_->webview();
if (!web_view)
- return;
- WebDevToolsAgent* web_agent = web_view->GetWebDevToolsAgent();
- web_agent->InspectElement(x, y);
+ return NULL;
+ return web_view->GetWebDevToolsAgent();
}