diff options
author | dgozman <dgozman@chromium.org> | 2014-09-15 03:29:26 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-15 10:30:41 +0000 |
commit | 0bd04aebcbb49766fd04dc393f4c86747de754a8 (patch) | |
tree | 99c5c263a75db871e8d455d34b7a363fbc40a574 /chrome | |
parent | e7202dac6b1fac6a3e980f2dee73a0f42d4d12ab (diff) | |
download | chromium_src-0bd04aebcbb49766fd04dc393f4c86747de754a8.zip chromium_src-0bd04aebcbb49766fd04dc393f4c86747de754a8.tar.gz chromium_src-0bd04aebcbb49766fd04dc393f4c86747de754a8.tar.bz2 |
[DevTools] Split network handling off ChromeDevToolsManagerDelegate to be reused on Android.
BUG=none
Review URL: https://codereview.chromium.org/563923006
Cr-Commit-Position: refs/heads/master@{#294798}
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/devtools/BUILD.gn | 2 | ||||
-rw-r--r-- | chrome/browser/devtools/chrome_devtools_manager_delegate.cc | 100 | ||||
-rw-r--r-- | chrome/browser/devtools/chrome_devtools_manager_delegate.h | 15 | ||||
-rw-r--r-- | chrome/browser/devtools/devtools_network_protocol_handler.cc | 115 | ||||
-rw-r--r-- | chrome/browser/devtools/devtools_network_protocol_handler.h | 49 | ||||
-rw-r--r-- | chrome/chrome_debugger.gypi | 2 |
6 files changed, 174 insertions, 109 deletions
diff --git a/chrome/browser/devtools/BUILD.gn b/chrome/browser/devtools/BUILD.gn index dce1eaa..d1def53 100644 --- a/chrome/browser/devtools/BUILD.gn +++ b/chrome/browser/devtools/BUILD.gn @@ -31,6 +31,8 @@ static_library("devtools") { "devtools_network_controller.h", "devtools_network_interceptor.cc", "devtools_network_interceptor.h", + "devtools_network_protocol_handler.cc", + "devtools_network_protocol_handler.h", "devtools_network_transaction.cc", "devtools_network_transaction.h", "devtools_network_transaction_factory.cc", diff --git a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc index a7cd2f6..fd9cfed 100644 --- a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc +++ b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc @@ -5,20 +5,12 @@ #include "chrome/browser/devtools/chrome_devtools_manager_delegate.h" #include "base/values.h" -#include "chrome/browser/devtools/devtools_network_conditions.h" -#include "chrome/browser/devtools/devtools_network_controller.h" -#include "chrome/browser/devtools/devtools_protocol.h" -#include "chrome/browser/devtools/devtools_protocol_constants.h" #include "chrome/browser/devtools/devtools_window.h" #include "chrome/browser/profiles/profile.h" -#include "content/public/browser/browser_thread.h" #include "content/public/browser/devtools_agent_host.h" -#include "content/public/browser/render_process_host.h" -#include "content/public/browser/render_view_host.h" -#include "content/public/browser/site_instance.h" -#include "content/public/browser/web_contents.h" -ChromeDevToolsManagerDelegate::ChromeDevToolsManagerDelegate() { +ChromeDevToolsManagerDelegate::ChromeDevToolsManagerDelegate() + : network_protocol_handler_(new DevToolsNetworkProtocolHandler()) { } ChromeDevToolsManagerDelegate::~ChromeDevToolsManagerDelegate() { @@ -40,95 +32,11 @@ void ChromeDevToolsManagerDelegate::Inspect( base::DictionaryValue* ChromeDevToolsManagerDelegate::HandleCommand( content::DevToolsAgentHost* agent_host, base::DictionaryValue* command_dict) { - scoped_ptr<DevToolsProtocol::Command> command( - DevToolsProtocol::ParseCommand(command_dict)); - if (!command) - return NULL; - - namespace network = ::chrome::devtools::Network; - const std::string method = command->method(); - scoped_ptr<DevToolsProtocol::Response> response; - - if (method == network::emulateNetworkConditions::kName) { - response = EmulateNetworkConditions(agent_host, command.get()); - } else if (method == network::canEmulateNetworkConditions::kName) { - response = CanEmulateNetworkConditions(agent_host, command.get()); - } - - if (response) - return response->Serialize(); - return NULL; -} - -Profile* ChromeDevToolsManagerDelegate::GetProfile( - content::DevToolsAgentHost* agent_host) { - content::WebContents* web_contents = agent_host->GetWebContents(); - if (!web_contents) - return NULL; - return Profile::FromBrowserContext(web_contents->GetBrowserContext()); -} - -scoped_ptr<DevToolsProtocol::Response> -ChromeDevToolsManagerDelegate::CanEmulateNetworkConditions( - content::DevToolsAgentHost* agent_host, - DevToolsProtocol::Command* command) { - base::DictionaryValue* result = new base::DictionaryValue(); - result->SetBoolean(chrome::devtools::kResult, true); - return command->SuccessResponse(result); -} - -scoped_ptr<DevToolsProtocol::Response> -ChromeDevToolsManagerDelegate::EmulateNetworkConditions( - content::DevToolsAgentHost* agent_host, - DevToolsProtocol::Command* command) { - base::DictionaryValue* params = command->params(); - namespace names = ::chrome::devtools::Network::emulateNetworkConditions; - - bool offline = false; - if (!params || !params->GetBoolean(names::kParamOffline, &offline)) - return command->InvalidParamResponse(names::kParamOffline); - - double latency = 0.0; - if (!params->GetDouble(names::kParamLatency, &latency)) - return command->InvalidParamResponse(names::kParamLatency); - if (latency < 0.0) - latency = 0.0; - - double download_throughput = 0.0; - if (!params->GetDouble(names::kParamDownloadThroughput, &download_throughput)) - return command->InvalidParamResponse(names::kParamDownloadThroughput); - if (download_throughput < 0.0) - download_throughput = 0.0; - - double upload_throughput = 0.0; - if (!params->GetDouble(names::kParamUploadThroughput, &upload_throughput)) - return command->InvalidParamResponse(names::kParamUploadThroughput); - if (upload_throughput < 0.0) - upload_throughput = 0.0; - - scoped_ptr<DevToolsNetworkConditions> conditions( - new DevToolsNetworkConditions( - offline, latency, download_throughput, upload_throughput)); - - UpdateNetworkState(agent_host, conditions.Pass()); - return command->SuccessResponse(NULL); -} - -void ChromeDevToolsManagerDelegate::UpdateNetworkState( - content::DevToolsAgentHost* agent_host, - scoped_ptr<DevToolsNetworkConditions> conditions) { - Profile* profile = GetProfile(agent_host); - if (!profile) - return; - profile->GetDevToolsNetworkController()->SetNetworkState( - agent_host->GetId(), conditions.Pass()); + return network_protocol_handler_->HandleCommand(agent_host, command_dict); } void ChromeDevToolsManagerDelegate::DevToolsAgentStateChanged( content::DevToolsAgentHost* agent_host, bool attached) { - scoped_ptr<DevToolsNetworkConditions> conditions; - if (attached) - conditions.reset(new DevToolsNetworkConditions()); - UpdateNetworkState(agent_host, conditions.Pass()); + network_protocol_handler_->DevToolsAgentStateChanged(agent_host, attached); } diff --git a/chrome/browser/devtools/chrome_devtools_manager_delegate.h b/chrome/browser/devtools/chrome_devtools_manager_delegate.h index 98d4649..3885e48 100644 --- a/chrome/browser/devtools/chrome_devtools_manager_delegate.h +++ b/chrome/browser/devtools/chrome_devtools_manager_delegate.h @@ -8,6 +8,7 @@ #include "base/compiler_specific.h" #include "base/macros.h" #include "base/memory/scoped_ptr.h" +#include "chrome/browser/devtools/devtools_network_protocol_handler.h" #include "chrome/browser/devtools/devtools_protocol.h" #include "content/public/browser/devtools_manager_delegate.h" @@ -29,19 +30,7 @@ class ChromeDevToolsManagerDelegate : public content::DevToolsManagerDelegate { base::DictionaryValue* command_dict) OVERRIDE; private: - Profile* GetProfile(content::DevToolsAgentHost* agent_host); - - scoped_ptr<DevToolsProtocol::Response> CanEmulateNetworkConditions( - content::DevToolsAgentHost* agent_host, - DevToolsProtocol::Command* command); - - scoped_ptr<DevToolsProtocol::Response> EmulateNetworkConditions( - content::DevToolsAgentHost* agent_host, - DevToolsProtocol::Command* command); - - void UpdateNetworkState( - content::DevToolsAgentHost* agent_host, - scoped_ptr<DevToolsNetworkConditions> conditions); + scoped_ptr<DevToolsNetworkProtocolHandler> network_protocol_handler_; DISALLOW_COPY_AND_ASSIGN(ChromeDevToolsManagerDelegate); }; diff --git a/chrome/browser/devtools/devtools_network_protocol_handler.cc b/chrome/browser/devtools/devtools_network_protocol_handler.cc new file mode 100644 index 0000000..d1151d2 --- /dev/null +++ b/chrome/browser/devtools/devtools_network_protocol_handler.cc @@ -0,0 +1,115 @@ +// Copyright 2014 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 "chrome/browser/devtools/devtools_network_protocol_handler.h" + +#include "base/values.h" +#include "chrome/browser/devtools/devtools_network_conditions.h" +#include "chrome/browser/devtools/devtools_network_controller.h" +#include "chrome/browser/devtools/devtools_protocol_constants.h" +#include "chrome/browser/profiles/profile.h" +#include "content/public/browser/devtools_agent_host.h" +#include "content/public/browser/web_contents.h" + +DevToolsNetworkProtocolHandler::DevToolsNetworkProtocolHandler() { +} + +DevToolsNetworkProtocolHandler::~DevToolsNetworkProtocolHandler() { +} + +base::DictionaryValue* DevToolsNetworkProtocolHandler::HandleCommand( + content::DevToolsAgentHost* agent_host, + base::DictionaryValue* command_dict) { + scoped_ptr<DevToolsProtocol::Command> command( + DevToolsProtocol::ParseCommand(command_dict)); + if (!command) + return NULL; + + namespace network = ::chrome::devtools::Network; + const std::string method = command->method(); + scoped_ptr<DevToolsProtocol::Response> response; + + if (method == network::emulateNetworkConditions::kName) { + response = EmulateNetworkConditions(agent_host, command.get()); + } else if (method == network::canEmulateNetworkConditions::kName) { + response = CanEmulateNetworkConditions(agent_host, command.get()); + } + + if (response) + return response->Serialize(); + return NULL; +} + +Profile* DevToolsNetworkProtocolHandler::GetProfile( + content::DevToolsAgentHost* agent_host) { + content::WebContents* web_contents = agent_host->GetWebContents(); + if (!web_contents) + return NULL; + return Profile::FromBrowserContext(web_contents->GetBrowserContext()); +} + +scoped_ptr<DevToolsProtocol::Response> +DevToolsNetworkProtocolHandler::CanEmulateNetworkConditions( + content::DevToolsAgentHost* agent_host, + DevToolsProtocol::Command* command) { + base::DictionaryValue* result = new base::DictionaryValue(); + result->SetBoolean(chrome::devtools::kResult, true); + return command->SuccessResponse(result); +} + +scoped_ptr<DevToolsProtocol::Response> +DevToolsNetworkProtocolHandler::EmulateNetworkConditions( + content::DevToolsAgentHost* agent_host, + DevToolsProtocol::Command* command) { + base::DictionaryValue* params = command->params(); + namespace names = ::chrome::devtools::Network::emulateNetworkConditions; + + bool offline = false; + if (!params || !params->GetBoolean(names::kParamOffline, &offline)) + return command->InvalidParamResponse(names::kParamOffline); + + double latency = 0.0; + if (!params->GetDouble(names::kParamLatency, &latency)) + return command->InvalidParamResponse(names::kParamLatency); + if (latency < 0.0) + latency = 0.0; + + double download_throughput = 0.0; + if (!params->GetDouble(names::kParamDownloadThroughput, &download_throughput)) + return command->InvalidParamResponse(names::kParamDownloadThroughput); + if (download_throughput < 0.0) + download_throughput = 0.0; + + double upload_throughput = 0.0; + if (!params->GetDouble(names::kParamUploadThroughput, &upload_throughput)) + return command->InvalidParamResponse(names::kParamUploadThroughput); + if (upload_throughput < 0.0) + upload_throughput = 0.0; + + scoped_ptr<DevToolsNetworkConditions> conditions( + new DevToolsNetworkConditions( + offline, latency, download_throughput, upload_throughput)); + + UpdateNetworkState(agent_host, conditions.Pass()); + return command->SuccessResponse(NULL); +} + +void DevToolsNetworkProtocolHandler::UpdateNetworkState( + content::DevToolsAgentHost* agent_host, + scoped_ptr<DevToolsNetworkConditions> conditions) { + Profile* profile = GetProfile(agent_host); + if (!profile) + return; + profile->GetDevToolsNetworkController()->SetNetworkState( + agent_host->GetId(), conditions.Pass()); +} + +void DevToolsNetworkProtocolHandler::DevToolsAgentStateChanged( + content::DevToolsAgentHost* agent_host, + bool attached) { + scoped_ptr<DevToolsNetworkConditions> conditions; + if (attached) + conditions.reset(new DevToolsNetworkConditions()); + UpdateNetworkState(agent_host, conditions.Pass()); +} diff --git a/chrome/browser/devtools/devtools_network_protocol_handler.h b/chrome/browser/devtools/devtools_network_protocol_handler.h new file mode 100644 index 0000000..7dae622 --- /dev/null +++ b/chrome/browser/devtools/devtools_network_protocol_handler.h @@ -0,0 +1,49 @@ +// Copyright 2014 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 CHROME_BROWSER_DEVTOOLS_DEVTOOLS_NETWORK_PROTOCOL_HANDLER_H_ +#define CHROME_BROWSER_DEVTOOLS_DEVTOOLS_NETWORK_PROTOCOL_HANDLER_H_ + +#include "base/compiler_specific.h" +#include "base/macros.h" +#include "base/memory/scoped_ptr.h" +#include "chrome/browser/devtools/devtools_protocol.h" + +namespace content { +class DevToolsAgentHost; +} + +class DevToolsNetworkConditions; +class Profile; + +class DevToolsNetworkProtocolHandler { + public: + DevToolsNetworkProtocolHandler(); + ~DevToolsNetworkProtocolHandler(); + + void DevToolsAgentStateChanged(content::DevToolsAgentHost* agent_host, + bool attached); + base::DictionaryValue* HandleCommand( + content::DevToolsAgentHost* agent_host, + base::DictionaryValue* command_dict); + + private: + Profile* GetProfile(content::DevToolsAgentHost* agent_host); + + scoped_ptr<DevToolsProtocol::Response> CanEmulateNetworkConditions( + content::DevToolsAgentHost* agent_host, + DevToolsProtocol::Command* command); + + scoped_ptr<DevToolsProtocol::Response> EmulateNetworkConditions( + content::DevToolsAgentHost* agent_host, + DevToolsProtocol::Command* command); + + void UpdateNetworkState( + content::DevToolsAgentHost* agent_host, + scoped_ptr<DevToolsNetworkConditions> conditions); + + DISALLOW_COPY_AND_ASSIGN(DevToolsNetworkProtocolHandler); +}; + +#endif // CHROME_BROWSER_DEVTOOLS_DEVTOOLS_NETWORK_PROTOCOL_HANDLER_H_ diff --git a/chrome/chrome_debugger.gypi b/chrome/chrome_debugger.gypi index 4c6a56f..817496f 100644 --- a/chrome/chrome_debugger.gypi +++ b/chrome/chrome_debugger.gypi @@ -27,6 +27,8 @@ 'browser/devtools/devtools_network_controller.h', 'browser/devtools/devtools_network_interceptor.cc', 'browser/devtools/devtools_network_interceptor.h', + 'browser/devtools/devtools_network_protocol_handler.cc', + 'browser/devtools/devtools_network_protocol_handler.h', 'browser/devtools/devtools_network_transaction.cc', 'browser/devtools/devtools_network_transaction.h', 'browser/devtools/devtools_network_transaction_factory.cc', |