Index: chrome/browser/devtools/chrome_devtools_manager_delegate.cc |
diff --git a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc |
index 473309d4d369f19091d17bac186f4cb6adceaa9f..3dd74acb923b37cca00a53a1fc4652d9e66e4195 100644 |
--- a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc |
+++ b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc |
@@ -61,9 +61,15 @@ base::DictionaryValue* ChromeDevToolsManagerDelegate::HandleCommand( |
DevToolsProtocol::ParseCommand(command_dict)); |
if (!command) |
return NULL; |
+ |
const std::string method = command->method(); |
+ scoped_ptr<DevToolsProtocol::Response> response; |
+ |
if (method == chrome::devtools::Network::emulateNetworkConditions::kName) |
- return EmulateNetworkConditions(agent_host, command.get())->Serialize(); |
+ response = EmulateNetworkConditions(agent_host, command.get()); |
+ |
+ if (response) |
+ return response->Serialize(); |
return NULL; |
} |
@@ -81,41 +87,35 @@ ChromeDevToolsManagerDelegate::EmulateNetworkConditions( |
content::DevToolsAgentHost* agent_host, |
DevToolsProtocol::Command* command) { |
base::DictionaryValue* params = command->params(); |
- |
- std::vector<std::string> domains; |
- base::ListValue* domain_list = NULL; |
- const char* domains_param = |
- chrome::devtools::Network::emulateNetworkConditions::kParamDomains; |
- if (!params || !params->GetList(domains_param, &domain_list)) |
- return command->InvalidParamResponse(domains_param); |
- size_t size = domain_list->GetSize(); |
- for (size_t i = 0; i < size; ++i) { |
- std::string domain; |
- if (!domain_list->GetString(i, &domain)) |
- return command->InvalidParamResponse(domains_param); |
- domains.push_back(domain); |
- } |
+ namespace names = ::chrome::devtools::Network::emulateNetworkConditions; |
bool offline = false; |
- const char* offline_param = |
- chrome::devtools::Network::emulateNetworkConditions::kParamOffline; |
- if (!params->GetBoolean(offline_param, &offline)) |
- return command->InvalidParamResponse(offline_param); |
- |
- double maximal_throughput = 0.0; |
- const char* maximal_throughput_param = |
-chrome::devtools::Network::emulateNetworkConditions::kParamMaximalThroughput; |
- if (!params->GetDouble(maximal_throughput_param, &maximal_throughput)) |
- return command->InvalidParamResponse(maximal_throughput_param); |
- if (maximal_throughput < 0.0) |
- maximal_throughput = 0.0; |
+ 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; |
EnsureDevtoolsCallbackRegistered(); |
- scoped_refptr<DevToolsNetworkConditions> conditions; |
- if (offline || maximal_throughput) |
- conditions = new DevToolsNetworkConditions(domains, maximal_throughput); |
+ scoped_refptr<DevToolsNetworkConditions> conditions( |
+ new DevToolsNetworkConditions( |
+ offline, latency, download_throughput, upload_throughput)); |
- emulate_network_conditions_client_id_ = agent_host->GetId(); |
UpdateNetworkState(agent_host, conditions); |
return command->SuccessResponse(NULL); |
} |
@@ -126,14 +126,15 @@ void ChromeDevToolsManagerDelegate::UpdateNetworkState( |
Profile* profile = GetProfile(agent_host); |
if (!profile) |
return; |
- profile->GetDevToolsNetworkController()->SetNetworkState(conditions); |
+ profile->GetDevToolsNetworkController()->SetNetworkState( |
+ agent_host->GetId(), conditions); |
} |
void ChromeDevToolsManagerDelegate::OnDevToolsStateChanged( |
content::DevToolsAgentHost* agent_host, |
bool attached) { |
- if (agent_host->GetId() == emulate_network_conditions_client_id_) { |
- emulate_network_conditions_client_id_ = std::string(); |
- UpdateNetworkState(agent_host, scoped_refptr<DevToolsNetworkConditions>()); |
- } |
+ scoped_refptr<DevToolsNetworkConditions> conditions; |
+ if (attached) |
+ conditions = new DevToolsNetworkConditions(); |
+ UpdateNetworkState(agent_host, conditions); |
} |