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..50d72e3edb9fb97478bfc73d9cb7cc9f6195b8d6 |
| --- /dev/null |
| +++ b/chrome/browser/devtools/devtools_network_controller.cc |
| @@ -0,0 +1,121 @@ |
| +// Copyright (c) 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 "net/base/request_priority.h" |
| +#include "net/http/http_network_layer.h" |
| +#include "net/http/http_network_session.h" |
| +#include "net/http/http_network_transaction.h" |
| + |
| +DevToolsNetworkController::DevToolsNetworkController( |
| + net::HttpNetworkSession* session) |
| + : network_layer_(new net::HttpNetworkLayer(session)) |
| + , weak_factory_(this) { |
|
mmenke
2014/03/11 21:16:53
nit: Comma goes on previous line
eustas
2014/03/12 15:38:33
Done.
|
| +} |
| + |
| +DevToolsNetworkController::~DevToolsNetworkController() { |
| +} |
| + |
| +void DevToolsNetworkController::SetBlockedDomains( |
|
mmenke
2014/03/11 21:16:53
nit: "// static"
eustas
2014/03/12 15:38:33
Done.
|
| + Profile* profile, |
| + const std::string& id, |
| + const std::vector<std::string>& blocked_domains) { |
| + CHECK(profile); |
| + DevToolsNetworkController* controller = ProfileIOData::FromResourceContext( |
| + profile->GetResourceContext())->devtools_network_controller(); |
|
mmenke
2014/03/11 21:16:53
We really shouldn't be dereferencing IO thread obj
eustas
2014/03/12 15:38:33
Done.
|
| + CHECK(controller); |
| + content::BrowserThread::PostTask( |
| + content::BrowserThread::IO, |
| + FROM_HERE, |
| + base::Bind( |
| + &DevToolsNetworkController::SetBlockedDomainsOnIO, |
| + base::Unretained(controller), |
| + id, |
| + blocked_domains)); |
| +} |
| + |
| +void DevToolsNetworkController::RemoveTransaction(const std::string& id) { |
|
mmenke
2014/03/11 21:16:53
I think using "id" for both transactions and block
eustas
2014/03/12 15:38:33
Done.
|
| + transactions_.erase(id); |
| +} |
| + |
| +void DevToolsNetworkController::SetBlockedDomainsOnIO( |
| + const std::string& id, |
| + const std::vector<std::string>& blocked_domains) { |
| + BlockedDomains* items = NULL; |
| + BlockedDomainsMap::iterator client = blocked_domains_map_.find(id); |
| + if (client != blocked_domains_map_.end()) |
| + items = client->second; |
| + size_t size = blocked_domains.size(); |
| + if (!size) { |
| + if (items) { |
| + delete items; |
| + blocked_domains_map_.erase(client); |
| + } |
| + } else { |
| + if (items) { |
| + items->clear(); |
| + } else { |
| + items = new BlockedDomains(); |
| + blocked_domains_map_[id] = items; |
| + } |
| + for (size_t i = 0; i < size; ++i) { |
| + items->push_back(blocked_domains[i]); |
| + } |
| + } |
| + |
| + Transactions::iterator it = transactions_.begin(); |
| + while (it != transactions_.end()) { |
| + Transactions::iterator current = it++; |
| + DevToolsNetworkTransaction* transaction = current->second; |
| + const GURL& url = transaction->GetURL(); |
| + for (size_t i = 0; i < size; ++i) { |
| + if (url.DomainIs(blocked_domains[i].data())) { |
| + transactions_.erase(current); |
| + transaction->Stop(); |
| + break; |
| + } |
| + } |
| + } |
| +} |
| + |
| +bool DevToolsNetworkController::IsBlockedURL(const GURL& url) { |
| + BlockedDomainsMap::const_iterator client = blocked_domains_map_.begin(); |
| + for (; client != blocked_domains_map_.end(); ++client) { |
| + BlockedDomains* items = client->second; |
| + BlockedDomains::const_iterator domain = items->begin(); |
| + for (; domain != items->end(); ++domain) { |
| + if (url.DomainIs(domain->data())) |
| + return true; |
| + } |
| + } |
| + return false; |
|
mmenke
2014/03/11 21:16:53
Use two space indent.
eustas
2014/03/12 15:38:33
ooops. fixed.
|
| +} |
| + |
| +int DevToolsNetworkController::CreateTransaction( |
| + net::RequestPriority priority, |
| + scoped_ptr<net::HttpTransaction>* trans) { |
| + scoped_ptr<net::HttpTransaction> network_transaction; |
| + int rv = network_layer_->CreateTransaction(priority, &network_transaction); |
| + if (rv != net::OK) { |
| + return rv; |
| + } |
| + DevToolsNetworkTransaction* transaction = new DevToolsNetworkTransaction( |
| + weak_factory_.GetWeakPtr(), network_transaction); |
| + transactions_[transaction->GetId()] = transaction; |
| + trans->reset(transaction); |
| + return net::OK; |
| +} |
| + |
| +net::HttpCache* DevToolsNetworkController::GetCache() { |
| + return network_layer_->GetCache(); |
| +} |
| + |
| +net::HttpNetworkSession* DevToolsNetworkController::GetSession() { |
| + return network_layer_->GetSession(); |
| +} |