Commit 2d99237c authored by ksakamoto's avatar ksakamoto Committed by Commit bot

DevTools: Enable network emulation on Service Workers

This patch moves the functionality of
RenderFrameDevToolsAgentHost::DispatchProtocolMessage() to
DevToolsAgentHostImpl so that SW agent host can handle the
emulateNetworkConditions message.

BUG=444820

Review URL: https://codereview.chromium.org/1029523002

Cr-Commit-Position: refs/heads/master@{#321898}
parent 7e894073
......@@ -9,9 +9,11 @@
#include "base/basictypes.h"
#include "base/guid.h"
#include "base/json/json_writer.h"
#include "base/lazy_instance.h"
#include "content/browser/devtools/devtools_manager.h"
#include "content/browser/devtools/forwarding_agent_host.h"
#include "content/browser/devtools/protocol/devtools_protocol_handler.h"
#include "content/browser/devtools/render_frame_devtools_agent_host.h"
#include "content/browser/devtools/service_worker_devtools_agent_host.h"
#include "content/browser/devtools/service_worker_devtools_manager.h"
......@@ -65,7 +67,10 @@ scoped_refptr<DevToolsAgentHost> DevToolsAgentHost::GetForWorker(
}
DevToolsAgentHostImpl::DevToolsAgentHostImpl()
: id_(base::GenerateGUID()),
: protocol_handler_(new DevToolsProtocolHandler(
base::Bind(&DevToolsAgentHostImpl::SendMessageToClient,
base::Unretained(this)))),
id_(base::GenerateGUID()),
client_(NULL) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
g_instances.Get()[id_] = this;
......@@ -219,4 +224,27 @@ void DevToolsAgentHostImpl::Inspect(BrowserContext* browser_context) {
manager->delegate()->Inspect(browser_context, this);
}
bool DevToolsAgentHostImpl::DispatchProtocolMessage(
const std::string& message) {
scoped_ptr<base::DictionaryValue> command =
protocol_handler_->ParseCommand(message);
if (!command)
return true;
DevToolsManagerDelegate* delegate =
DevToolsManager::GetInstance()->delegate();
if (delegate) {
scoped_ptr<base::DictionaryValue> response(
delegate->HandleCommand(this, command.get()));
if (response) {
std::string json_response;
base::JSONWriter::Write(response.get(), &json_response);
SendMessageToClient(json_response);
return true;
}
}
return protocol_handler_->HandleOptionalCommand(command.Pass());
}
} // namespace content
......@@ -18,6 +18,7 @@ class Message;
namespace content {
class BrowserContext;
class DevToolsProtocolHandler;
// Describes interface for managing devtools agents from the browser process.
class CONTENT_EXPORT DevToolsAgentHostImpl : public DevToolsAgentHost {
......@@ -29,7 +30,7 @@ class CONTENT_EXPORT DevToolsAgentHostImpl : public DevToolsAgentHost {
virtual void Detach() = 0;
// Sends a message to the agent.
void DispatchProtocolMessage(const std::string& message) override = 0;
bool DispatchProtocolMessage(const std::string& message) override;
// Opens the inspector for this host.
void Inspect(BrowserContext* browser_context);
......@@ -50,6 +51,8 @@ class CONTENT_EXPORT DevToolsAgentHostImpl : public DevToolsAgentHost {
DevToolsAgentHostImpl();
~DevToolsAgentHostImpl() override;
scoped_ptr<DevToolsProtocolHandler> protocol_handler_;
void HostClosed();
void SendMessageToClient(const std::string& message);
static void NotifyCallbacks(DevToolsAgentHostImpl* agent_host, bool attached);
......
......@@ -40,10 +40,11 @@ void ForwardingAgentHost::Detach() {
delegate_->Detach();
}
void ForwardingAgentHost::DispatchProtocolMessage(
bool ForwardingAgentHost::DispatchProtocolMessage(
const std::string& message) {
if (delegate_)
delegate_->SendMessageToBackend(message);
return true;
}
DevToolsAgentHost::Type ForwardingAgentHost::GetType() {
......
......@@ -29,7 +29,7 @@ class ForwardingAgentHost
// DevToolsAgentHostImpl implementation.
void Attach() override;
void Detach() override;
void DispatchProtocolMessage(const std::string& message) override;
bool DispatchProtocolMessage(const std::string& message) override;
// DevToolsAgentHost implementation
Type GetType() override;
......
......@@ -16,10 +16,14 @@ void IPCDevToolsAgentHost::Detach() {
OnClientDetached();
}
void IPCDevToolsAgentHost::DispatchProtocolMessage(
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) {
......
......@@ -19,7 +19,7 @@ class CONTENT_EXPORT IPCDevToolsAgentHost : public DevToolsAgentHostImpl {
// DevToolsAgentHostImpl implementation.
void Attach() override;
void Detach() override;
void DispatchProtocolMessage(const std::string& message) override;
bool DispatchProtocolMessage(const std::string& message) override;
void InspectElement(int x, int y) override;
protected:
......
......@@ -5,7 +5,6 @@
#include "content/browser/devtools/render_frame_devtools_agent_host.h"
#include "base/basictypes.h"
#include "base/json/json_writer.h"
#include "base/lazy_instance.h"
#include "base/strings/utf_string_conversions.h"
#include "content/browser/child_process_security_policy_impl.h"
......@@ -29,7 +28,6 @@
#include "content/common/view_messages.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/devtools_manager_delegate.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/notification_types.h"
#include "content/public/browser/render_widget_host_iterator.h"
......@@ -147,9 +145,6 @@ RenderFrameDevToolsAgentHost::RenderFrameDevToolsAgentHost(RenderFrameHost* rfh)
devtools::tracing::TracingHandler::Renderer)),
emulation_handler_(new devtools::emulation::EmulationHandler(
page_handler_.get())),
protocol_handler_(new DevToolsProtocolHandler(
base::Bind(&RenderFrameDevToolsAgentHost::DispatchOnInspectorFrontend,
base::Unretained(this)))),
frame_trace_recorder_(new DevToolsFrameTraceRecorder()),
reattaching_(false) {
DevToolsProtocolDispatcher* dispatcher = protocol_handler_->dispatcher();
......@@ -177,32 +172,6 @@ WebContents* RenderFrameDevToolsAgentHost::GetWebContents() {
return web_contents();
}
void RenderFrameDevToolsAgentHost::DispatchProtocolMessage(
const std::string& message) {
scoped_ptr<base::DictionaryValue> command =
protocol_handler_->ParseCommand(message);
if (!command)
return;
DevToolsManagerDelegate* delegate =
DevToolsManager::GetInstance()->delegate();
if (delegate) {
scoped_ptr<base::DictionaryValue> response(
delegate->HandleCommand(this, command.get()));
if (response) {
std::string json_response;
base::JSONWriter::Write(response.get(), &json_response);
DispatchOnInspectorFrontend(json_response);
return;
}
}
if (protocol_handler_->HandleOptionalCommand(command.Pass()))
return;
IPCDevToolsAgentHost::DispatchProtocolMessage(message);
}
void RenderFrameDevToolsAgentHost::SendMessageToAgent(IPC::Message* msg) {
if (!render_frame_host_)
return;
......@@ -557,13 +526,6 @@ void RenderFrameDevToolsAgentHost::OnDispatchOnInspectorFrontend(
ProcessChunkedMessageFromAgent(message);
}
void RenderFrameDevToolsAgentHost::DispatchOnInspectorFrontend(
const std::string& message) {
if (!IsAttached() || !render_frame_host_)
return;
SendMessageToClient(message);
}
bool RenderFrameDevToolsAgentHost::IsChildFrame() {
return render_frame_host_ && render_frame_host_->GetParent();
}
......
......@@ -24,7 +24,6 @@ namespace content {
class BrowserContext;
class DevToolsFrameTraceRecorder;
class DevToolsProtocolHandler;
class RenderFrameHost;
class RenderFrameHostImpl;
......@@ -81,7 +80,6 @@ class CONTENT_EXPORT RenderFrameDevToolsAgentHost
RenderFrameHost* host);
// IPCDevToolsAgentHost overrides.
void DispatchProtocolMessage(const std::string& message) override;
void SendMessageToAgent(IPC::Message* msg) override;
void OnClientAttached() override;
void OnClientDetached() override;
......@@ -123,7 +121,6 @@ class CONTENT_EXPORT RenderFrameDevToolsAgentHost
bool OnSetTouchEventEmulationEnabled(const IPC::Message& message);
void OnDispatchOnInspectorFrontend(const DevToolsMessageChunk& message);
void DispatchOnInspectorFrontend(const std::string& message);
void ClientDetachedFromRenderer();
......@@ -143,7 +140,6 @@ class CONTENT_EXPORT RenderFrameDevToolsAgentHost
service_worker_handler_;
scoped_ptr<devtools::tracing::TracingHandler> tracing_handler_;
scoped_ptr<devtools::emulation::EmulationHandler> emulation_handler_;
scoped_ptr<DevToolsProtocolHandler> protocol_handler_;
scoped_ptr<DevToolsFrameTraceRecorder> frame_trace_recorder_;
#if defined(OS_ANDROID)
scoped_ptr<PowerSaveBlockerImpl> power_save_blocker_;
......
......@@ -81,8 +81,8 @@ class CONTENT_EXPORT DevToolsAgentHost
// Returns true if there is a client attached.
virtual bool IsAttached() = 0;
// Sends a message to the agent.
virtual void DispatchProtocolMessage(const std::string& message) = 0;
// Sends a message to the agent. Returns true if the message is handled.
virtual bool DispatchProtocolMessage(const std::string& message) = 0;
// Starts inspecting element at position (|x|, |y|) in the specified page.
virtual void InspectElement(int x, int y) = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment