summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--content/browser/devtools/devtools_agent_host_impl.cc26
-rw-r--r--content/browser/devtools/devtools_agent_host_impl.h17
-rw-r--r--content/browser/devtools/devtools_external_agent_proxy_impl.cc66
-rw-r--r--content/browser/devtools/devtools_external_agent_proxy_impl.h34
-rw-r--r--content/browser/devtools/devtools_manager_unittest.cc59
-rw-r--r--content/browser/devtools/ipc_devtools_agent_host.cc42
-rw-r--r--content/browser/devtools/ipc_devtools_agent_host.h36
-rw-r--r--content/browser/devtools/render_view_devtools_agent_host.cc2
-rw-r--r--content/browser/devtools/render_view_devtools_agent_host.h6
-rw-r--r--content/browser/devtools/worker_devtools_manager.cc6
-rw-r--r--content/content_browser.gypi6
-rw-r--r--content/public/browser/devtools_external_agent_proxy.h37
-rw-r--r--content/public/browser/devtools_external_agent_proxy_delegate.h32
13 files changed, 327 insertions, 42 deletions
diff --git a/content/browser/devtools/devtools_agent_host_impl.cc b/content/browser/devtools/devtools_agent_host_impl.cc
index a4c9449..a0f337a 100644
--- a/content/browser/devtools/devtools_agent_host_impl.cc
+++ b/content/browser/devtools/devtools_agent_host_impl.cc
@@ -9,7 +9,6 @@
#include "base/basictypes.h"
#include "base/guid.h"
#include "base/lazy_instance.h"
-#include "content/common/devtools_messages.h"
namespace content {
@@ -38,32 +37,7 @@ scoped_refptr<DevToolsAgentHost> DevToolsAgentHost::GetForId(
return it->second;
}
-void DevToolsAgentHostImpl::Attach() {
- SendMessageToAgent(new DevToolsAgentMsg_Attach(MSG_ROUTING_NONE));
- NotifyClientAttaching();
-}
-
-void DevToolsAgentHostImpl::Reattach(const std::string& saved_agent_state) {
- SendMessageToAgent(new DevToolsAgentMsg_Reattach(
- MSG_ROUTING_NONE,
- saved_agent_state));
- NotifyClientAttaching();
-}
-
-void DevToolsAgentHostImpl::Detach() {
- SendMessageToAgent(new DevToolsAgentMsg_Detach(MSG_ROUTING_NONE));
- NotifyClientDetaching();
-}
-
-void DevToolsAgentHostImpl::DispatchOnInspectorBackend(
- const std::string& message) {
- SendMessageToAgent(new DevToolsAgentMsg_DispatchOnInspectorBackend(
- MSG_ROUTING_NONE, message));
-}
-
void DevToolsAgentHostImpl::InspectElement(int x, int y) {
- SendMessageToAgent(new DevToolsAgentMsg_InspectElement(MSG_ROUTING_NONE,
- x, y));
}
std::string DevToolsAgentHostImpl::GetId() {
diff --git a/content/browser/devtools/devtools_agent_host_impl.h b/content/browser/devtools/devtools_agent_host_impl.h
index 6e1f481..91f802a 100644
--- a/content/browser/devtools/devtools_agent_host_impl.h
+++ b/content/browser/devtools/devtools_agent_host_impl.h
@@ -27,11 +27,14 @@ class CONTENT_EXPORT DevToolsAgentHostImpl : public DevToolsAgentHost {
virtual ~CloseListener() {}
};
- // Sends the message to the devtools agent hosted by this object.
- void Attach();
- void Reattach(const std::string& saved_agent_state);
- void Detach();
- virtual void DispatchOnInspectorBackend(const std::string& message);
+ // Informs the hosted agent that a client host has attached.
+ virtual void Attach() = 0;
+
+ // Informs the hosted agent that a client host has detached.
+ virtual void Detach() = 0;
+
+ // Sends a message to the agent hosted by this object.
+ virtual void DispatchOnInspectorBackend(const std::string& message) = 0;
void set_close_listener(CloseListener* listener) {
close_listener_ = listener;
@@ -48,10 +51,6 @@ class CONTENT_EXPORT DevToolsAgentHostImpl : public DevToolsAgentHost {
DevToolsAgentHostImpl();
virtual ~DevToolsAgentHostImpl();
- virtual void SendMessageToAgent(IPC::Message* msg) = 0;
- virtual void NotifyClientAttaching() = 0;
- virtual void NotifyClientDetaching() = 0;
-
void NotifyCloseListener();
private:
diff --git a/content/browser/devtools/devtools_external_agent_proxy_impl.cc b/content/browser/devtools/devtools_external_agent_proxy_impl.cc
new file mode 100644
index 0000000..0d77b53
--- /dev/null
+++ b/content/browser/devtools/devtools_external_agent_proxy_impl.cc
@@ -0,0 +1,66 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/devtools/devtools_external_agent_proxy_impl.h"
+
+#include "content/browser/devtools/devtools_agent_host_impl.h"
+#include "content/public/browser/devtools_external_agent_proxy_delegate.h"
+
+namespace content {
+
+class DevToolsExternalAgentProxyImpl::ForwardingAgentHost
+ : public DevToolsAgentHostImpl {
+ public:
+ ForwardingAgentHost(DevToolsExternalAgentProxyDelegate* delegate)
+ : delegate_(delegate) {
+ }
+
+ void ConnectionClosed() {
+ NotifyCloseListener();
+ }
+
+ private:
+ ~ForwardingAgentHost() {
+ }
+
+ // DevToolsAgentHostImpl implementation.
+ virtual void Attach() OVERRIDE {
+ delegate_->Attach();
+ };
+
+ virtual void Detach() OVERRIDE {
+ delegate_->Detach();
+ };
+
+ virtual void DispatchOnInspectorBackend(const std::string& message) OVERRIDE {
+ delegate_->SendMessageToBackend(message);
+ }
+
+ DevToolsExternalAgentProxyDelegate* delegate_;
+};
+
+//static
+DevToolsExternalAgentProxy* DevToolsExternalAgentProxy::Create(
+ DevToolsExternalAgentProxyDelegate* delegate) {
+ return new DevToolsExternalAgentProxyImpl(delegate);
+}
+
+DevToolsExternalAgentProxyImpl::DevToolsExternalAgentProxyImpl(
+ DevToolsExternalAgentProxyDelegate* delegate)
+ : agent_host_(new ForwardingAgentHost(delegate)) {
+}
+
+DevToolsExternalAgentProxyImpl::~DevToolsExternalAgentProxyImpl() {
+}
+
+scoped_refptr<DevToolsAgentHost> DevToolsExternalAgentProxyImpl::
+ GetAgentHost() {
+ return agent_host_;
+}
+
+void DevToolsExternalAgentProxyImpl::ConnectionClosed() {
+ agent_host_->ConnectionClosed();
+}
+
+} // content
diff --git a/content/browser/devtools/devtools_external_agent_proxy_impl.h b/content/browser/devtools/devtools_external_agent_proxy_impl.h
new file mode 100644
index 0000000..39f40df
--- /dev/null
+++ b/content/browser/devtools/devtools_external_agent_proxy_impl.h
@@ -0,0 +1,34 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_EXTERNAL_AGENT_PROXY_IMPL_H
+#define CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_EXTERNAL_AGENT_PROXY_IMPL_H
+
+#include "base/memory/ref_counted.h"
+#include "content/public/browser/devtools_external_agent_proxy.h"
+
+namespace content {
+
+class DevToolsExternalAgentProxyImpl
+ : public DevToolsExternalAgentProxy {
+ public:
+ explicit DevToolsExternalAgentProxyImpl(
+ DevToolsExternalAgentProxyDelegate* delegate);
+ virtual ~DevToolsExternalAgentProxyImpl();
+
+ // DevToolsExternalAgentProxy implementation.
+ virtual scoped_refptr<DevToolsAgentHost> GetAgentHost() OVERRIDE;
+ virtual void ConnectionClosed() OVERRIDE;
+
+ private:
+ class ForwardingAgentHost;
+
+ scoped_refptr<ForwardingAgentHost> agent_host_;
+
+ DISALLOW_COPY_AND_ASSIGN(DevToolsExternalAgentProxyImpl);
+};
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_EXTERNAL_AGENT_PROXY_IMPL_H
diff --git a/content/browser/devtools/devtools_manager_unittest.cc b/content/browser/devtools/devtools_manager_unittest.cc
index deac3c1..e2ab0e3 100644
--- a/content/browser/devtools/devtools_manager_unittest.cc
+++ b/content/browser/devtools/devtools_manager_unittest.cc
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "base/basictypes.h"
+#include "base/memory/scoped_ptr.h"
#include "base/time.h"
#include "content/browser/devtools/devtools_manager_impl.h"
#include "content/browser/devtools/render_view_devtools_agent_host.h"
@@ -11,6 +12,8 @@
#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/devtools_client_host.h"
+#include "content/public/browser/devtools_external_agent_proxy.h"
+#include "content/public/browser/devtools_external_agent_proxy_delegate.h"
#include "content/public/browser/web_contents_delegate.h"
#include "content/test/test_content_browser_client.h"
#include "content/test/test_web_contents.h"
@@ -237,4 +240,60 @@ TEST_F(DevToolsManagerTest, ReattachOnCancelPendingNavigation) {
client_host.Close(DevToolsManager::GetInstance());
}
+class TestExternalAgentDelegate: public DevToolsExternalAgentProxyDelegate {
+ std::map<std::string,int> event_counter_;
+
+ void recordEvent(const std::string& name) {
+ if (event_counter_.find(name) == event_counter_.end())
+ event_counter_[name] = 0;
+ event_counter_[name] = event_counter_[name] + 1;
+ }
+
+ void expectEvent(int count, const std::string& name) {
+ EXPECT_EQ(count, event_counter_[name]);
+ }
+
+ virtual void Attach() OVERRIDE {
+ recordEvent("Attach");
+ };
+
+ virtual void Detach() OVERRIDE {
+ recordEvent("Detach");
+ };
+
+ virtual void SendMessageToBackend(const std::string& message) OVERRIDE {
+ recordEvent(std::string("SendMessageToBackend.") + message);
+ };
+
+ public :
+ ~TestExternalAgentDelegate() {
+ expectEvent(1, "Attach");
+ expectEvent(1, "Detach");
+ expectEvent(0, "SendMessageToBackend.message0");
+ expectEvent(1, "SendMessageToBackend.message1");
+ expectEvent(2, "SendMessageToBackend.message2");
+ }
+};
+
+TEST_F(DevToolsManagerTest, TestExternalProxy) {
+ TestExternalAgentDelegate delegate;
+
+ scoped_ptr<DevToolsExternalAgentProxy> proxy(
+ DevToolsExternalAgentProxy::Create(&delegate));
+
+ scoped_refptr<DevToolsAgentHost> agent_host = proxy->GetAgentHost();
+ EXPECT_EQ(agent_host, DevToolsAgentHost::GetForId(agent_host->GetId()));
+
+ DevToolsManager* manager = DevToolsManager::GetInstance();
+
+ TestDevToolsClientHost client_host;
+ manager->RegisterDevToolsClientHostFor(agent_host, &client_host);
+
+ manager->DispatchOnInspectorBackend(&client_host, "message1");
+ manager->DispatchOnInspectorBackend(&client_host, "message2");
+ manager->DispatchOnInspectorBackend(&client_host, "message2");
+
+ client_host.Close(manager);
+}
+
} // namespace content
diff --git a/content/browser/devtools/ipc_devtools_agent_host.cc b/content/browser/devtools/ipc_devtools_agent_host.cc
new file mode 100644
index 0000000..d8c5001
--- /dev/null
+++ b/content/browser/devtools/ipc_devtools_agent_host.cc
@@ -0,0 +1,42 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/devtools/ipc_devtools_agent_host.h"
+
+#include "content/common/devtools_messages.h"
+
+namespace content {
+
+void IPCDevToolsAgentHost::Attach() {
+ SendMessageToAgent(new DevToolsAgentMsg_Attach(MSG_ROUTING_NONE));
+ NotifyClientAttaching();
+}
+
+void IPCDevToolsAgentHost::Detach() {
+ SendMessageToAgent(new DevToolsAgentMsg_Detach(MSG_ROUTING_NONE));
+ NotifyClientDetaching();
+}
+
+void IPCDevToolsAgentHost::DispatchOnInspectorBackend(
+ const std::string& message) {
+ SendMessageToAgent(new DevToolsAgentMsg_DispatchOnInspectorBackend(
+ MSG_ROUTING_NONE, message));
+}
+
+void IPCDevToolsAgentHost::InspectElement(int x, int y) {
+ SendMessageToAgent(new DevToolsAgentMsg_InspectElement(MSG_ROUTING_NONE,
+ x, y));
+}
+
+IPCDevToolsAgentHost::~IPCDevToolsAgentHost() {
+}
+
+void IPCDevToolsAgentHost::Reattach(const std::string& saved_agent_state) {
+ SendMessageToAgent(new DevToolsAgentMsg_Reattach(
+ MSG_ROUTING_NONE,
+ saved_agent_state));
+ NotifyClientAttaching();
+}
+
+} // namespace content
diff --git a/content/browser/devtools/ipc_devtools_agent_host.h b/content/browser/devtools/ipc_devtools_agent_host.h
new file mode 100644
index 0000000..33e7a3e
--- /dev/null
+++ b/content/browser/devtools/ipc_devtools_agent_host.h
@@ -0,0 +1,36 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_DEVTOOLS_IPC_DEVTOOLS_AGENT_HOST_H_
+#define CONTENT_BROWSER_DEVTOOLS_IPC_DEVTOOLS_AGENT_HOST_H_
+
+#include "content/browser/devtools/devtools_agent_host_impl.h"
+
+namespace IPC {
+class Message;
+}
+
+namespace content {
+
+class CONTENT_EXPORT IPCDevToolsAgentHost : public DevToolsAgentHostImpl {
+ public:
+ // DevToolsAgentHostImpl implementation.
+ virtual void Attach() OVERRIDE;
+ virtual void Detach() OVERRIDE;
+ virtual void DispatchOnInspectorBackend(const std::string& message) OVERRIDE;
+ virtual void InspectElement(int x, int y) OVERRIDE;
+
+ protected:
+ virtual ~IPCDevToolsAgentHost();
+
+ void Reattach(const std::string& saved_agent_state);
+
+ virtual void SendMessageToAgent(IPC::Message* msg) = 0;
+ virtual void NotifyClientAttaching() = 0;
+ virtual void NotifyClientDetaching() = 0;
+};
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_DEVTOOLS_IPC_DEVTOOLS_AGENT_HOST_H_
diff --git a/content/browser/devtools/render_view_devtools_agent_host.cc b/content/browser/devtools/render_view_devtools_agent_host.cc
index 91f17a1..3687766 100644
--- a/content/browser/devtools/render_view_devtools_agent_host.cc
+++ b/content/browser/devtools/render_view_devtools_agent_host.cc
@@ -203,7 +203,7 @@ void RenderViewDevToolsAgentHost::DispatchOnInspectorBackend(
if (overridden_response)
OnDispatchOnInspectorFrontend(overridden_response->Serialize());
else
- DevToolsAgentHostImpl::DispatchOnInspectorBackend(message);
+ IPCDevToolsAgentHost::DispatchOnInspectorBackend(message);
}
void RenderViewDevToolsAgentHost::SendMessageToAgent(IPC::Message* msg) {
diff --git a/content/browser/devtools/render_view_devtools_agent_host.h b/content/browser/devtools/render_view_devtools_agent_host.h
index 436776b..53f89da 100644
--- a/content/browser/devtools/render_view_devtools_agent_host.h
+++ b/content/browser/devtools/render_view_devtools_agent_host.h
@@ -10,7 +10,7 @@
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
-#include "content/browser/devtools/devtools_agent_host_impl.h"
+#include "content/browser/devtools/ipc_devtools_agent_host.h"
#include "content/common/content_export.h"
#include "content/public/browser/render_view_host_observer.h"
#include "content/public/browser/web_contents_observer.h"
@@ -21,7 +21,7 @@ class RendererOverridesHandler;
class RenderViewHost;
class CONTENT_EXPORT RenderViewDevToolsAgentHost
- : public DevToolsAgentHostImpl,
+ : public IPCDevToolsAgentHost,
private WebContentsObserver {
public:
static void OnCancelPendingNavigation(RenderViewHost* pending,
@@ -40,7 +40,7 @@ class CONTENT_EXPORT RenderViewDevToolsAgentHost
// DevTooolsAgentHost overrides.
virtual RenderViewHost* GetRenderViewHost() OVERRIDE;
- // DevToolsAgentHostImpl overrides.
+ // IPCDevToolsAgentHost overrides.
virtual void DispatchOnInspectorBackend(const std::string& message) OVERRIDE;
virtual void SendMessageToAgent(IPC::Message* msg) OVERRIDE;
virtual void NotifyClientAttaching() OVERRIDE;
diff --git a/content/browser/devtools/worker_devtools_manager.cc b/content/browser/devtools/worker_devtools_manager.cc
index ae32629..4a19c62 100644
--- a/content/browser/devtools/worker_devtools_manager.cc
+++ b/content/browser/devtools/worker_devtools_manager.cc
@@ -9,8 +9,8 @@
#include "base/bind.h"
#include "base/lazy_instance.h"
-#include "content/browser/devtools/devtools_agent_host_impl.h"
#include "content/browser/devtools/devtools_manager_impl.h"
+#include "content/browser/devtools/ipc_devtools_agent_host.h"
#include "content/browser/devtools/worker_devtools_message_filter.h"
#include "content/browser/worker_host/worker_service_impl.h"
#include "content/common/devtools_messages.h"
@@ -56,7 +56,7 @@ struct WorkerDevToolsManager::TerminatedInspectedWorker {
class WorkerDevToolsManager::WorkerDevToolsAgentHost
- : public DevToolsAgentHostImpl {
+ : public IPCDevToolsAgentHost {
public:
explicit WorkerDevToolsAgentHost(WorkerId worker_id)
: has_worker_id_(false) {
@@ -117,7 +117,7 @@ class WorkerDevToolsManager::WorkerDevToolsAgentHost
worker_process_id, worker_route_id, *message);
}
- // DevToolsAgentHostImpl implementation.
+ // IPCDevToolsAgentHost implementation.
virtual void SendMessageToAgent(IPC::Message* message) OVERRIDE {
if (!has_worker_id_) {
delete message;
diff --git a/content/content_browser.gypi b/content/content_browser.gypi
index d70e151..bf67cedd 100644
--- a/content/content_browser.gypi
+++ b/content/content_browser.gypi
@@ -60,6 +60,8 @@
'public/browser/content_browser_client.h',
'public/browser/devtools_agent_host.h',
'public/browser/devtools_client_host.h',
+ 'public/browser/devtools_external_agent_proxy.h',
+ 'public/browser/devtools_external_agent_proxy_delegate.h',
'public/browser/download_danger_type.h',
'public/browser/download_id.h',
'public/browser/devtools_frontend_host_delegate.h',
@@ -304,6 +306,8 @@
'browser/devtools/devtools_agent_host_impl.h',
'browser/devtools/devtools_browser_target.cc',
'browser/devtools/devtools_browser_target.h',
+ 'browser/devtools/devtools_external_agent_proxy_impl.cc',
+ 'browser/devtools/devtools_external_agent_proxy_impl.h',
'browser/devtools/devtools_frontend_host.cc',
'browser/devtools/devtools_frontend_host.h',
'browser/devtools/devtools_http_handler_impl.cc',
@@ -318,6 +322,8 @@
'browser/devtools/devtools_protocol_constants.h',
'browser/devtools/devtools_tracing_handler.h',
'browser/devtools/devtools_tracing_handler.cc',
+ 'browser/devtools/ipc_devtools_agent_host.cc',
+ 'browser/devtools/ipc_devtools_agent_host.h',
'browser/devtools/render_view_devtools_agent_host.cc',
'browser/devtools/render_view_devtools_agent_host.h',
'browser/devtools/renderer_overrides_handler.cc',
diff --git a/content/public/browser/devtools_external_agent_proxy.h b/content/public/browser/devtools_external_agent_proxy.h
new file mode 100644
index 0000000..9e43c64
--- /dev/null
+++ b/content/public/browser/devtools_external_agent_proxy.h
@@ -0,0 +1,37 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_PUBLIC_BROWSER_DEVTOOLS_EXTERNAL_AGENT_PROXY_H_
+#define CONTENT_PUBLIC_BROWSER_DEVTOOLS_EXTERNAL_AGENT_PROXY_H_
+
+#include <string>
+
+#include "content/common/content_export.h"
+
+namespace content {
+
+class DevToolsAgentHost;
+class DevToolsExternalAgentProxyDelegate;
+
+// Describes interface for communication with an external DevTools agent.
+class DevToolsExternalAgentProxy {
+ public:
+ // Creates DevToolsExternalAgentProxy to communicate with an agent
+ // via the provided |delegate|.
+ // Caller get the proxy ownership and keeps the |delegate| ownership.
+ static CONTENT_EXPORT DevToolsExternalAgentProxy* Create(
+ DevToolsExternalAgentProxyDelegate* delegate);
+
+ // Returns the local DevToolsAgentHost for the external agent.
+ virtual scoped_refptr<DevToolsAgentHost> GetAgentHost() = 0;
+
+ // Informs the client that the connection has closed.
+ virtual void ConnectionClosed() = 0;
+
+ virtual ~DevToolsExternalAgentProxy() {}
+};
+
+} // namespace content
+
+#endif // CONTENT_PUBLIC_BROWSER_DEVTOOLS_EXTERNAL_AGENT_PROXY_H_
diff --git a/content/public/browser/devtools_external_agent_proxy_delegate.h b/content/public/browser/devtools_external_agent_proxy_delegate.h
new file mode 100644
index 0000000..d68854f
--- /dev/null
+++ b/content/public/browser/devtools_external_agent_proxy_delegate.h
@@ -0,0 +1,32 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_PUBLIC_BROWSER_DEVTOOLS_EXTERNAL_AGENT_PROXY_DELEGATE_H_
+#define CONTENT_PUBLIC_BROWSER_DEVTOOLS_EXTERNAL_AGENT_PROXY_DELEGATE_H_
+
+#include <string>
+
+#include "content/common/content_export.h"
+
+namespace content {
+
+// Describes the interface for sending messages to an external DevTools agent.
+class DevToolsExternalAgentProxyDelegate {
+ public:
+ // Informs the agent that a client host has attached.
+ virtual void Attach() = 0;
+
+ // Informs the agent that a client host has detached.
+ virtual void Detach() = 0;
+
+ // Sends a message to the agent.
+ virtual void SendMessageToBackend(const std::string& message) = 0;
+
+ protected:
+ virtual ~DevToolsExternalAgentProxyDelegate() {}
+};
+
+} // namespace content
+
+#endif // CONTENT_PUBLIC_BROWSER_DEVTOOLS_EXTERNAL_AGENT_PROXY_DELEGATE_H_