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

Unified Diff: chrome/browser/devtools/devtools_network_controller.cc

Issue 182993003: Add the ability for DevTools to wrap network transactions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rename parameter Created 6 years, 8 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/browser/devtools/devtools_network_controller.cc
diff --git a/chrome/browser/devtools/devtools_network_controller.cc b/chrome/browser/devtools/devtools_network_controller.cc
new file mode 100644
index 0000000000000000000000000000000000000000..c81e2f608bb4a3d580df08fd4cfc5066af29fc08
--- /dev/null
+++ b/chrome/browser/devtools/devtools_network_controller.cc
@@ -0,0 +1,101 @@
+// 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_controller.h"
+
+#include "chrome/browser/devtools/devtools_network_transaction.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_io_data.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/resource_context.h"
+
+namespace {
+
+const char kDevToolsRequestInitiator[] = "X-DevTools-Request-Initiator";
+
+} // namespace
+
+DevToolsNetworkController::DevToolsNetworkController() {
+}
+
+DevToolsNetworkController::~DevToolsNetworkController() {
+}
+
+void DevToolsNetworkController::AddTransaction(
+ DevToolsNetworkTransaction* transaction) {
+ transactions_.insert(transaction);
pfeldman 2014/04/23 13:00:28 DCHECK every method on the IO thread please.
eustas 2014/04/29 08:14:42 Done. But I've used thread checker to avoid compex
+}
+
+void DevToolsNetworkController::RemoveTransaction(
+ DevToolsNetworkTransaction* transaction) {
+ DCHECK(transactions_.find(transaction) != transactions_.end());
+ transactions_.erase(transaction);
+}
+
+// static
+void DevToolsNetworkController::DisableNetwork(
+ Profile* profile,
+ const std::string& client_id,
+ bool disable_network) {
+ DCHECK(profile);
+ content::ResourceContext* resource_context = profile->GetResourceContext();
+ DCHECK(resource_context);
+ content::BrowserThread::PostTask(
+ content::BrowserThread::IO,
+ FROM_HERE,
+ base::Bind(
+ &DevToolsNetworkController::DisableNetworkOnIO,
+ resource_context,
+ client_id,
+ disable_network));
+}
+
+// static
+void DevToolsNetworkController::DisableNetworkOnIO(
+ content::ResourceContext* resource_context,
+ const std::string& client_id,
+ bool disable_network) {
+ DCHECK(resource_context);
+ DevToolsNetworkController* controller = ProfileIOData::FromResourceContext(
+ resource_context)->network_controller();
+ DCHECK(controller);
+ controller->DisableNetwork(client_id, disable_network);
+}
+
+void DevToolsNetworkController::DisableNetwork(
+ const std::string& client_id,
+ bool disable_network) {
+ if (!disable_network) {
+ clients_.erase(client_id);
+ return;
+ }
+ clients_.insert(client_id);
+
+ // Iterate over a copy of set, because failing of transaction could result in
+ // creating a new one, or (theoretically) destroying one.
+ Transactions old_transactions(transactions_);
+ for (Transactions::iterator it = old_transactions.begin();
+ it != old_transactions.end(); ++it) {
+ if (transactions_.find(*it) == transactions_.end())
+ continue;
+ if (!(*it)->request() || (*it)->failed())
+ continue;
+ if (ShouldFail((*it)->request()))
+ (*it)->Fail();
+ }
+}
+
+bool DevToolsNetworkController::ShouldFail(
+ const net::HttpRequestInfo* request) {
+ DCHECK(request);
+ if (clients_.empty())
+ return false;
+
+ if (request->extra_headers.HasHeader(kDevToolsRequestInitiator))
+ return false;
+
+ // TODO: Add domain blacklist.
+
+ return true;
+}

Powered by Google App Engine
This is Rietveld 408576698