Chromium Code Reviews| 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; |
| +} |