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..a751c265900252dc92822a8e53faf46c7538e1d0 |
--- /dev/null |
+++ b/chrome/browser/devtools/devtools_network_controller.cc |
@@ -0,0 +1,106 @@ |
+// 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" |
+ |
+DevToolsNetworkController::DevToolsNetworkController() |
+ : last_transaction_id_(0) { |
+} |
+ |
+DevToolsNetworkController::~DevToolsNetworkController() { |
+} |
+ |
+uint64 DevToolsNetworkController::GenerateTransactionId() { |
+ return last_transaction_id_++; |
+} |
+ |
+void DevToolsNetworkController::AddTransaction( |
+ uint64 transaction_id, |
+ DevToolsNetworkTransaction* transaction) { |
+ transactions_[transaction_id] = transaction; |
+} |
+ |
+void DevToolsNetworkController::RemoveTransaction(uint64 transaction_id) { |
mmenke
2014/04/18 15:41:42
Hrm...Are you planning on using the IDs for anythi
eustas
2014/04/21 11:34:59
GooOn 2014/04/18 15:41:42, mmenke wrote:
|
+ transactions_.erase(transaction_id); |
mmenke
2014/04/18 15:41:42
Suggect DCHECKing it was in the list (This won't b
eustas
2014/04/21 11:34:59
Done.
|
+} |
+ |
+// static |
+void DevToolsNetworkController::DisableNetwork( |
+ Profile* profile, |
+ const std::string& client_id, |
+ bool disable_network) { |
+ CHECK(profile); |
+ content::ResourceContext* resource_context = profile->GetResourceContext(); |
+ CHECK(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) { |
+ CHECK(resource_context); |
+ DevToolsNetworkController* controller = ProfileIOData::FromResourceContext( |
+ resource_context)->network_controller(); |
mmenke
2014/04/18 15:41:42
nit: +2 indent.
eustas
2014/04/21 11:34:59
Done.
|
+ CHECK(controller); |
+ controller->DisableNetwork(client_id, disable_network); |
+} |
+ |
+void DevToolsNetworkController::DisableNetwork( |
+ const std::string& client_id, |
+ bool disable_network) { |
+ ClientsSet::iterator client = clients_set_.find(client_id); |
+ if (client != clients_set_.end()) { |
+ if (!disable_network) |
+ clients_set_.erase(client); |
+ return; |
+ } |
+ |
+ if (!disable_network) |
+ return; |
+ |
+ bool first_client = clients_set_.size() == 0; |
+ clients_set_.insert(client_id); |
+ if (!first_client) |
+ return; |
mmenke
2014/04/18 15:41:42
I guess you're thinking about adding different opt
eustas
2014/04/21 11:34:59
Initially there was an idea to blacklist requests
|
+ |
+ Transactions::iterator it = transactions_.begin(); |
+ while (it != transactions_.end()) { |
+ Transactions::iterator current = it++; |
+ DevToolsNetworkTransaction* transaction = current->second; |
+ if (transaction->started() && ShouldFail(transaction)) { |
+ transactions_.erase(current); |
+ transaction->Fail(); |
mmenke
2014/04/18 15:41:42
This seems potentially re-entrant - failing a tran
eustas
2014/04/21 11:34:59
Done.
|
+ } |
+ } |
+} |
+ |
+bool DevToolsNetworkController::ShouldFail( |
+ const DevToolsNetworkTransaction* transaction) { |
+ CHECK(transaction); |
+ CHECK(transaction->started()); |
mmenke
2014/04/18 15:41:42
Should generally use DCHECKs instead of CHECKs, to
mmenke
2014/04/18 15:41:42
Also, I think the started check makes more sense a
eustas
2014/04/21 11:34:59
Done.
eustas
2014/04/21 11:34:59
Done. I've used CHECK to avoid building debug bina
|
+ if (clients_set_.size() == 0) |
mmenke
2014/04/18 15:41:42
Use empty() instead, for performance reasons.
eustas
2014/04/21 11:34:59
Done.
|
+ return false; |
+ |
+ if (transaction->has_devtools_request_header()) |
+ return false; |
+ |
+ // TODO: Add domain blacklist. |
+ |
+ return true; |
+} |