diff options
author | dgozman <dgozman@chromium.org> | 2015-05-27 09:05:41 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-05-27 16:06:36 +0000 |
commit | 0a5834c562d3455f3e70c50506453d19170e0b51 (patch) | |
tree | 33c12066917b6ea645850546ced344ed1bf55004 /content/browser | |
parent | 22413355d403929a1390b24609d08918bb88b561 (diff) | |
download | chromium_src-0a5834c562d3455f3e70c50506453d19170e0b51.zip chromium_src-0a5834c562d3455f3e70c50506453d19170e0b51.tar.gz chromium_src-0a5834c562d3455f3e70c50506453d19170e0b51.tar.bz2 |
[DevTools] Inline IPCDevToolsAgentHost into subclasses.
BUG=none
Review URL: https://codereview.chromium.org/1155703003
Cr-Commit-Position: refs/heads/master@{#331583}
Diffstat (limited to 'content/browser')
11 files changed, 132 insertions, 186 deletions
diff --git a/content/browser/devtools/devtools_agent_host_impl.cc b/content/browser/devtools/devtools_agent_host_impl.cc index 4ccb496..dd8f86a 100644 --- a/content/browser/devtools/devtools_agent_host_impl.cc +++ b/content/browser/devtools/devtools_agent_host_impl.cc @@ -82,7 +82,8 @@ DevToolsAgentHostImpl::DevToolsAgentHostImpl() base::Unretained(this)))), id_(base::GenerateGUID()), client_(NULL), - handle_all_commands_(false) { + handle_all_commands_(false), + message_buffer_size_(0) { DCHECK_CURRENTLY_ON(BrowserThread::UI); g_instances.Get()[id_] = this; } @@ -170,6 +171,35 @@ void DevToolsAgentHostImpl::SendMessageToClient(const std::string& message) { client_->DispatchProtocolMessage(this, message); } +void DevToolsAgentHostImpl::ProcessChunkedMessageFromAgent( + const DevToolsMessageChunk& chunk) { + if (chunk.is_last && !chunk.post_state.empty()) + state_cookie_ = chunk.post_state; + + if (chunk.is_first && chunk.is_last) { + CHECK(message_buffer_size_ == 0); + SendMessageToClient(chunk.data); + return; + } + + if (chunk.is_first) { + message_buffer_ = std::string(); + message_buffer_.reserve(chunk.message_size); + message_buffer_size_ = chunk.message_size; + } + + CHECK(message_buffer_.size() + chunk.data.size() <= + message_buffer_size_); + message_buffer_.append(chunk.data); + + if (chunk.is_last) { + CHECK(message_buffer_.size() == message_buffer_size_); + SendMessageToClient(message_buffer_); + message_buffer_ = std::string(); + message_buffer_size_ = 0; + } +} + // static void DevToolsAgentHost::DetachAllClients() { if (g_instances == NULL) diff --git a/content/browser/devtools/devtools_agent_host_impl.h b/content/browser/devtools/devtools_agent_host_impl.h index 698bfe9..a09c9eb 100644 --- a/content/browser/devtools/devtools_agent_host_impl.h +++ b/content/browser/devtools/devtools_agent_host_impl.h @@ -9,6 +9,7 @@ #include "base/compiler_specific.h" #include "content/common/content_export.h" +#include "content/common/devtools_messages.h" #include "content/public/browser/devtools_agent_host.h" namespace IPC { @@ -29,9 +30,6 @@ class CONTENT_EXPORT DevToolsAgentHostImpl : public DevToolsAgentHost { // Informs the hosted agent that a client host has detached. virtual void Detach() = 0; - // Sends a message to the agent. - bool DispatchProtocolMessage(const std::string& message) override; - // Opens the inspector for this host. void Inspect(BrowserContext* browser_context); @@ -45,16 +43,19 @@ class CONTENT_EXPORT DevToolsAgentHostImpl : public DevToolsAgentHost { WebContents* GetWebContents() override; void DisconnectWebContents() override; void ConnectWebContents(WebContents* wc) override; + bool DispatchProtocolMessage(const std::string& message) override; protected: DevToolsAgentHostImpl(); ~DevToolsAgentHostImpl() override; scoped_ptr<DevToolsProtocolHandler> protocol_handler_; + std::string state_cookie_; void set_handle_all_protocol_commands() { handle_all_commands_ = true; } void HostClosed(); void SendMessageToClient(const std::string& message); + void ProcessChunkedMessageFromAgent(const DevToolsMessageChunk& chunk); static void NotifyCallbacks(DevToolsAgentHostImpl* agent_host, bool attached); private: @@ -63,6 +64,8 @@ class CONTENT_EXPORT DevToolsAgentHostImpl : public DevToolsAgentHost { const std::string id_; DevToolsAgentHostClient* client_; bool handle_all_commands_; + std::string message_buffer_; + uint32 message_buffer_size_; }; } // namespace content diff --git a/content/browser/devtools/ipc_devtools_agent_host.cc b/content/browser/devtools/ipc_devtools_agent_host.cc deleted file mode 100644 index dc3eebe..0000000 --- a/content/browser/devtools/ipc_devtools_agent_host.cc +++ /dev/null @@ -1,76 +0,0 @@ -// 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" - -namespace content { - -void IPCDevToolsAgentHost::Attach() { - SendMessageToAgent(new DevToolsAgentMsg_Attach(MSG_ROUTING_NONE, GetId())); - OnClientAttached(false); -} - -void IPCDevToolsAgentHost::Detach() { - SendMessageToAgent(new DevToolsAgentMsg_Detach(MSG_ROUTING_NONE)); - OnClientDetached(); -} - -bool IPCDevToolsAgentHost::DispatchProtocolMessage( - const std::string& message) { - if (DevToolsAgentHostImpl::DispatchProtocolMessage(message)) - return true; - - SendMessageToAgent(new DevToolsAgentMsg_DispatchOnInspectorBackend( - MSG_ROUTING_NONE, message)); - return true; -} - -void IPCDevToolsAgentHost::InspectElement(int x, int y) { - SendMessageToAgent(new DevToolsAgentMsg_InspectElement(MSG_ROUTING_NONE, - GetId(), x, y)); -} - -IPCDevToolsAgentHost::IPCDevToolsAgentHost() - : message_buffer_size_(0) { -} - -IPCDevToolsAgentHost::~IPCDevToolsAgentHost() { -} - -void IPCDevToolsAgentHost::Reattach() { - SendMessageToAgent(new DevToolsAgentMsg_Reattach( - MSG_ROUTING_NONE, GetId(), state_cookie_)); - OnClientAttached(true); -} - -void IPCDevToolsAgentHost::ProcessChunkedMessageFromAgent( - const DevToolsMessageChunk& chunk) { - if (chunk.is_last && !chunk.post_state.empty()) - state_cookie_ = chunk.post_state; - - if (chunk.is_first && chunk.is_last) { - CHECK(message_buffer_size_ == 0); - SendMessageToClient(chunk.data); - return; - } - - if (chunk.is_first) { - message_buffer_ = std::string(); - message_buffer_.reserve(chunk.message_size); - message_buffer_size_ = chunk.message_size; - } - - CHECK(message_buffer_.size() + chunk.data.size() <= - message_buffer_size_); - message_buffer_.append(chunk.data); - - if (chunk.is_last) { - CHECK(message_buffer_.size() == message_buffer_size_); - SendMessageToClient(message_buffer_); - message_buffer_ = std::string(); - message_buffer_size_ = 0; - } -} - -} // namespace content diff --git a/content/browser/devtools/ipc_devtools_agent_host.h b/content/browser/devtools/ipc_devtools_agent_host.h deleted file mode 100644 index 1f91078..0000000 --- a/content/browser/devtools/ipc_devtools_agent_host.h +++ /dev/null @@ -1,44 +0,0 @@ -// 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" -#include "content/common/devtools_messages.h" - -namespace IPC { -class Message; -} - -namespace content { - -class CONTENT_EXPORT IPCDevToolsAgentHost : public DevToolsAgentHostImpl { - public: - // DevToolsAgentHostImpl implementation. - void Attach() override; - void Detach() override; - bool DispatchProtocolMessage(const std::string& message) override; - void InspectElement(int x, int y) override; - - protected: - IPCDevToolsAgentHost(); - ~IPCDevToolsAgentHost() override; - - void Reattach(); - void ProcessChunkedMessageFromAgent(const DevToolsMessageChunk& chunk); - - virtual void SendMessageToAgent(IPC::Message* msg) = 0; - virtual void OnClientAttached(bool reattached) = 0; - virtual void OnClientDetached() = 0; - - private: - std::string message_buffer_; - uint32 message_buffer_size_; - std::string state_cookie_; -}; - -} // namespace content - -#endif // CONTENT_BROWSER_DEVTOOLS_IPC_DEVTOOLS_AGENT_HOST_H_ diff --git a/content/browser/devtools/render_frame_devtools_agent_host.cc b/content/browser/devtools/render_frame_devtools_agent_host.cc index 539fd46..b020a7c 100644 --- a/content/browser/devtools/render_frame_devtools_agent_host.cc +++ b/content/browser/devtools/render_frame_devtools_agent_host.cc @@ -177,14 +177,42 @@ WebContents* RenderFrameDevToolsAgentHost::GetWebContents() { return web_contents(); } -void RenderFrameDevToolsAgentHost::SendMessageToAgent(IPC::Message* msg) { - if (!render_frame_host_) - return; - msg->set_routing_id(render_frame_host_->GetRoutingID()); - render_frame_host_->Send(msg); +void RenderFrameDevToolsAgentHost::Attach() { + if (render_frame_host_) { + render_frame_host_->Send(new DevToolsAgentMsg_Attach( + render_frame_host_->GetRoutingID(), GetId())); + } + OnClientAttached(); +} + +void RenderFrameDevToolsAgentHost::Detach() { + if (render_frame_host_) { + render_frame_host_->Send(new DevToolsAgentMsg_Detach( + render_frame_host_->GetRoutingID())); + } + OnClientDetached(); +} + +bool RenderFrameDevToolsAgentHost::DispatchProtocolMessage( + const std::string& message) { + if (DevToolsAgentHostImpl::DispatchProtocolMessage(message)) + return true; + + if (render_frame_host_) { + render_frame_host_->Send(new DevToolsAgentMsg_DispatchOnInspectorBackend( + render_frame_host_->GetRoutingID(), message)); + } + return true; +} + +void RenderFrameDevToolsAgentHost::InspectElement(int x, int y) { + if (render_frame_host_) { + render_frame_host_->Send(new DevToolsAgentMsg_InspectElement( + render_frame_host_->GetRoutingID(), GetId(), x, y)); + } } -void RenderFrameDevToolsAgentHost::OnClientAttached(bool reattached) { +void RenderFrameDevToolsAgentHost::OnClientAttached() { if (!render_frame_host_) return; @@ -476,8 +504,11 @@ bool RenderFrameDevToolsAgentHost::Close() { void RenderFrameDevToolsAgentHost::ConnectRenderFrameHost( RenderFrameHost* rfh) { SetRenderFrameHost(rfh); - if (IsAttached()) - Reattach(); + if (IsAttached() && render_frame_host_) { + render_frame_host_->Send(new DevToolsAgentMsg_Reattach( + render_frame_host_->GetRoutingID(), GetId(), state_cookie_)); + OnClientAttached(); + } } void RenderFrameDevToolsAgentHost::DisconnectRenderFrameHost() { diff --git a/content/browser/devtools/render_frame_devtools_agent_host.h b/content/browser/devtools/render_frame_devtools_agent_host.h index a77cdbe..583c419 100644 --- a/content/browser/devtools/render_frame_devtools_agent_host.h +++ b/content/browser/devtools/render_frame_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/ipc_devtools_agent_host.h" +#include "content/browser/devtools/devtools_agent_host_impl.h" #include "content/common/content_export.h" #include "content/public/browser/web_contents_observer.h" @@ -42,7 +42,7 @@ namespace tracing { class TracingHandler; } } class CONTENT_EXPORT RenderFrameDevToolsAgentHost - : public IPCDevToolsAgentHost, + : public DevToolsAgentHostImpl, private WebContentsObserver { public: static void AddAllAgentHosts(DevToolsAgentHost::List* result); @@ -76,10 +76,11 @@ class CONTENT_EXPORT RenderFrameDevToolsAgentHost DevToolsAgentHost::List* result, RenderFrameHost* host); - // IPCDevToolsAgentHost overrides. - void SendMessageToAgent(IPC::Message* msg) override; - void OnClientAttached(bool reattached) override; - void OnClientDetached() override; + // DevToolsAgentHostImpl overrides. + void Attach() override; + void Detach() override; + void InspectElement(int x, int y) override; + bool DispatchProtocolMessage(const std::string& message) override; // WebContentsObserver overrides. void AboutToNavigateRenderFrame(RenderFrameHost* old_host, @@ -98,6 +99,9 @@ class CONTENT_EXPORT RenderFrameDevToolsAgentHost const GURL& url, ui::PageTransition transition_type) override; + void OnClientAttached(); + void OnClientDetached(); + void DisconnectRenderFrameHost(); void ConnectRenderFrameHost(RenderFrameHost* rvh); void ReattachToRenderFrameHost(RenderFrameHost* rvh); diff --git a/content/browser/devtools/service_worker_devtools_agent_host.cc b/content/browser/devtools/service_worker_devtools_agent_host.cc index 5a36ba1..fd491b0 100644 --- a/content/browser/devtools/service_worker_devtools_agent_host.cc +++ b/content/browser/devtools/service_worker_devtools_agent_host.cc @@ -92,22 +92,12 @@ void ServiceWorkerDevToolsAgentHost::UnregisterWorker() { service_worker_->version_id())); } -void ServiceWorkerDevToolsAgentHost::OnClientAttached(bool reattached) { - WorkerDevToolsAgentHost::OnClientAttached(reattached); +void ServiceWorkerDevToolsAgentHost::OnAttachedStateChanged(bool attached) { BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(&SetDevToolsAttachedOnIO, service_worker_->context_weak(), service_worker_->version_id(), - true)); -} - -void ServiceWorkerDevToolsAgentHost::OnClientDetached() { - WorkerDevToolsAgentHost::OnClientDetached(); - BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, - base::Bind(&SetDevToolsAttachedOnIO, - service_worker_->context_weak(), - service_worker_->version_id(), - false)); + attached)); } bool ServiceWorkerDevToolsAgentHost::Matches( diff --git a/content/browser/devtools/service_worker_devtools_agent_host.h b/content/browser/devtools/service_worker_devtools_agent_host.h index b0535cc..39c00db 100644 --- a/content/browser/devtools/service_worker_devtools_agent_host.h +++ b/content/browser/devtools/service_worker_devtools_agent_host.h @@ -25,16 +25,15 @@ class ServiceWorkerDevToolsAgentHost : public WorkerDevToolsAgentHost { void UnregisterWorker(); - // DevToolsAgentHost override. + // DevToolsAgentHost overrides. Type GetType() override; std::string GetTitle() override; GURL GetURL() override; bool Activate() override; bool Close() override; - // IPCDevToolsAgentHost override. - void OnClientAttached(bool reattached) override; - void OnClientDetached() override; + // WorkerDevToolsAgentHost overrides. + void OnAttachedStateChanged(bool attached) override; bool Matches(const ServiceWorkerIdentifier& other); diff --git a/content/browser/devtools/service_worker_devtools_manager.cc b/content/browser/devtools/service_worker_devtools_manager.cc index c02ab6e..0941cfc 100644 --- a/content/browser/devtools/service_worker_devtools_manager.cc +++ b/content/browser/devtools/service_worker_devtools_manager.cc @@ -4,7 +4,6 @@ #include "content/browser/devtools/service_worker_devtools_manager.h" -#include "content/browser/devtools/ipc_devtools_agent_host.h" #include "content/browser/devtools/service_worker_devtools_agent_host.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/render_process_host.h" diff --git a/content/browser/devtools/worker_devtools_agent_host.cc b/content/browser/devtools/worker_devtools_agent_host.cc index a0c1fc6..c94a71d 100644 --- a/content/browser/devtools/worker_devtools_agent_host.cc +++ b/content/browser/devtools/worker_devtools_agent_host.cc @@ -4,7 +4,6 @@ #include "content/browser/devtools/worker_devtools_agent_host.h" -#include "content/browser/devtools/ipc_devtools_agent_host.h" #include "content/browser/devtools/protocol/devtools_protocol_handler.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/render_process_host.h" @@ -16,31 +15,21 @@ BrowserContext* WorkerDevToolsAgentHost::GetBrowserContext() { return rph ? rph->GetBrowserContext() : nullptr; } -void WorkerDevToolsAgentHost::SendMessageToAgent( - IPC::Message* message_raw) { - scoped_ptr<IPC::Message> message(message_raw); - if (state_ != WORKER_INSPECTED) - return; - if (RenderProcessHost* host = RenderProcessHost::FromID(worker_id_.first)) { - message->set_routing_id(worker_id_.second); - host->Send(message.release()); - } -} - void WorkerDevToolsAgentHost::Attach() { if (state_ != WORKER_INSPECTED) { state_ = WORKER_INSPECTED; AttachToWorker(); } - IPCDevToolsAgentHost::Attach(); -} - -void WorkerDevToolsAgentHost::OnClientAttached(bool reattached) { - if (!reattached) - DevToolsAgentHostImpl::NotifyCallbacks(this, true); + if (RenderProcessHost* host = RenderProcessHost::FromID(worker_id_.first)) + host->Send(new DevToolsAgentMsg_Attach(worker_id_.second, GetId())); + OnAttachedStateChanged(true); + DevToolsAgentHostImpl::NotifyCallbacks(this, true); } -void WorkerDevToolsAgentHost::OnClientDetached() { +void WorkerDevToolsAgentHost::Detach() { + if (RenderProcessHost* host = RenderProcessHost::FromID(worker_id_.first)) + host->Send(new DevToolsAgentMsg_Detach(worker_id_.second)); + OnAttachedStateChanged(false); if (state_ == WORKER_INSPECTED) { state_ = WORKER_UNINSPECTED; DetachFromWorker(); @@ -50,6 +39,20 @@ void WorkerDevToolsAgentHost::OnClientDetached() { DevToolsAgentHostImpl::NotifyCallbacks(this, false); } +bool WorkerDevToolsAgentHost::DispatchProtocolMessage( + const std::string& message) { + if (state_ != WORKER_INSPECTED) + return true; + if (DevToolsAgentHostImpl::DispatchProtocolMessage(message)) + return true; + + if (RenderProcessHost* host = RenderProcessHost::FromID(worker_id_.first)) { + host->Send(new DevToolsAgentMsg_DispatchOnInspectorBackend( + worker_id_.second, message)); + } + return true; +} + bool WorkerDevToolsAgentHost::OnMessageReceived( const IPC::Message& msg) { DCHECK_CURRENTLY_ON(BrowserThread::UI); @@ -76,7 +79,11 @@ void WorkerDevToolsAgentHost::WorkerReadyForInspection() { DCHECK(IsAttached()); state_ = WORKER_INSPECTED; AttachToWorker(); - Reattach(); + if (RenderProcessHost* host = RenderProcessHost::FromID(worker_id_.first)) { + host->Send(new DevToolsAgentMsg_Reattach( + worker_id_.second, GetId(), state_cookie_)); + } + OnAttachedStateChanged(true); } } @@ -119,6 +126,9 @@ WorkerDevToolsAgentHost::~WorkerDevToolsAgentHost() { DCHECK_EQ(WORKER_TERMINATED, state_); } +void WorkerDevToolsAgentHost::OnAttachedStateChanged(bool attached) { +} + void WorkerDevToolsAgentHost::AttachToWorker() { if (RenderProcessHost* host = RenderProcessHost::FromID(worker_id_.first)) host->AddRoute(worker_id_.second, this); diff --git a/content/browser/devtools/worker_devtools_agent_host.h b/content/browser/devtools/worker_devtools_agent_host.h index 30fee5a..d252f56 100644 --- a/content/browser/devtools/worker_devtools_agent_host.h +++ b/content/browser/devtools/worker_devtools_agent_host.h @@ -5,7 +5,7 @@ #ifndef CONTENT_BROWSER_DEVTOOLS_WORKER_DEVTOOLS_AGENT_HOST_H_ #define CONTENT_BROWSER_DEVTOOLS_WORKER_DEVTOOLS_AGENT_HOST_H_ -#include "content/browser/devtools/ipc_devtools_agent_host.h" +#include "content/browser/devtools/devtools_agent_host_impl.h" #include "ipc/ipc_listener.h" namespace content { @@ -13,7 +13,7 @@ namespace content { class BrowserContext; class SharedWorkerInstance; -class WorkerDevToolsAgentHost : public IPCDevToolsAgentHost, +class WorkerDevToolsAgentHost : public DevToolsAgentHostImpl, public IPC::Listener { public: typedef std::pair<int, int> WorkerId; @@ -21,11 +21,10 @@ class WorkerDevToolsAgentHost : public IPCDevToolsAgentHost, // DevToolsAgentHost override. BrowserContext* GetBrowserContext() override; - // IPCDevToolsAgentHost implementation. - void SendMessageToAgent(IPC::Message* message) override; + // DevToolsAgentHostImpl overrides. void Attach() override; - void OnClientAttached(bool reattached) override; - void OnClientDetached() override; + void Detach() override; + bool DispatchProtocolMessage(const std::string& message) override; // IPC::Listener implementation. bool OnMessageReceived(const IPC::Message& msg) override; @@ -50,16 +49,17 @@ class WorkerDevToolsAgentHost : public IPCDevToolsAgentHost, WORKER_PAUSED_FOR_REATTACH, }; - void AttachToWorker(); - void DetachFromWorker(); - void WorkerCreated(); - void OnDispatchOnInspectorFrontend(const DevToolsMessageChunk& message); - + virtual void OnAttachedStateChanged(bool attached); const WorkerId& worker_id() const { return worker_id_; } private: friend class SharedWorkerDevToolsManagerTest; + void AttachToWorker(); + void DetachFromWorker(); + void WorkerCreated(); + void OnDispatchOnInspectorFrontend(const DevToolsMessageChunk& message); + WorkerState state_; WorkerId worker_id_; DISALLOW_COPY_AND_ASSIGN(WorkerDevToolsAgentHost); |