Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2567)

Unified Diff: chrome/test/chromedriver/chrome/network_conditions_override_manager.cc

Issue 883083002: [chromedriver] Add Network Conditions Override Manager and tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix warning Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/chromedriver/chrome/network_conditions_override_manager.cc
diff --git a/chrome/test/chromedriver/chrome/network_conditions_override_manager.cc b/chrome/test/chromedriver/chrome/network_conditions_override_manager.cc
new file mode 100644
index 0000000000000000000000000000000000000000..18c90187939a73f6317e7dfd6ea42a00d030fa34
--- /dev/null
+++ b/chrome/test/chromedriver/chrome/network_conditions_override_manager.cc
@@ -0,0 +1,76 @@
+// Copyright (c) 2015 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/test/chromedriver/chrome/network_conditions_override_manager.h"
+
+#include "base/values.h"
+#include "chrome/test/chromedriver/chrome/devtools_client.h"
+#include "chrome/test/chromedriver/chrome/network_conditions.h"
+#include "chrome/test/chromedriver/chrome/status.h"
+
+NetworkConditionsOverrideManager::NetworkConditionsOverrideManager(
+ DevToolsClient* client)
+ : client_(client),
+ overridden_network_conditions_(NULL) {
+ client_->AddListener(this);
+}
+
+NetworkConditionsOverrideManager::~NetworkConditionsOverrideManager() {
+}
+
+Status NetworkConditionsOverrideManager::OverrideNetworkConditions(
+ const NetworkConditions& network_conditions) {
+ Status status = ApplyOverride(&network_conditions);
+ if (status.IsOk())
+ overridden_network_conditions_ = &network_conditions;
+ return status;
+}
+
+Status NetworkConditionsOverrideManager::OnConnected(DevToolsClient* client) {
+ return ApplyOverrideIfNeeded();
+}
+
+Status NetworkConditionsOverrideManager::OnEvent(
+ DevToolsClient* client,
+ const std::string& method,
+ const base::DictionaryValue& params) {
+ if (method == "Page.frameNavigated") {
+ const base::Value* unused_value;
+ if (!params.Get("frame.parentId", &unused_value))
+ return ApplyOverrideIfNeeded();
+ }
+ return Status(kOk);
+}
+
+Status NetworkConditionsOverrideManager::ApplyOverrideIfNeeded() {
+ if (overridden_network_conditions_)
+ return ApplyOverride(overridden_network_conditions_);
+ return Status(kOk);
+}
+
+Status NetworkConditionsOverrideManager::ApplyOverride(
+ const NetworkConditions* network_conditions) {
+ base::DictionaryValue params, empty_params;
+ params.SetBoolean("offline", network_conditions->offline);
+ params.SetDouble("latency", network_conditions->latency);
+ params.SetDouble("downloadThroughput",
+ network_conditions->download_throughput);
+ params.SetDouble("uploadThroughput", network_conditions->upload_throughput);
+
+ Status status = client_->SendCommand("Network.enable", empty_params);
+ if (status.IsError())
+ return status;
+
+ scoped_ptr<base::DictionaryValue> result;
+ bool can = false;
+ status = client_->SendCommandAndGetResult(
+ "Network.canEmulateNetworkConditions", empty_params, &result);
+ if (status.IsError() || !result->GetBoolean("result", &can))
+ return Status(kUnknownError,
+ "unable to detect if chrome can emulate network conditions", status);
+ if (!can)
+ return Status(kUnknownError, "Cannot emulate network conditions");
+
+ return client_->SendCommand("Network.emulateNetworkConditions", params);
+}

Powered by Google App Engine
This is Rietveld 408576698