1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/devtools/devtools_network_controller.h"
7 #include "chrome/browser/devtools/devtools_network_transaction.h"
8 #include "chrome/browser/profiles/profile.h"
9 #include "chrome/browser/profiles/profile_io_data.h"
10 #include "content/public/browser/browser_thread.h"
11 #include "content/public/browser/resource_context.h"
13 using content::BrowserThread
;
17 const char kDevToolsRequestInitiator
[] = "X-DevTools-Request-Initiator";
21 DevToolsNetworkController::DevToolsNetworkController()
22 : weak_ptr_factory_(this) {
25 DevToolsNetworkController::~DevToolsNetworkController() {
28 void DevToolsNetworkController::AddTransaction(
29 DevToolsNetworkTransaction
* transaction
) {
30 DCHECK(thread_checker_
.CalledOnValidThread());
31 transactions_
.insert(transaction
);
34 void DevToolsNetworkController::RemoveTransaction(
35 DevToolsNetworkTransaction
* transaction
) {
36 DCHECK(thread_checker_
.CalledOnValidThread());
37 DCHECK(transactions_
.find(transaction
) != transactions_
.end());
38 transactions_
.erase(transaction
);
41 void DevToolsNetworkController::SetNetworkState(
42 const std::string
& client_id
,
44 DCHECK_CURRENTLY_ON(BrowserThread::UI
);
45 BrowserThread::PostTask(
46 content::BrowserThread::IO
,
49 &DevToolsNetworkController::SetNetworkStateOnIO
,
50 weak_ptr_factory_
.GetWeakPtr(),
55 void DevToolsNetworkController::SetNetworkStateOnIO(
56 const std::string
& client_id
,
58 DCHECK(thread_checker_
.CalledOnValidThread());
60 clients_
.erase(client_id
);
63 clients_
.insert(client_id
);
65 // Iterate over a copy of set, because failing of transaction could result in
66 // creating a new one, or (theoretically) destroying one.
67 Transactions
old_transactions(transactions_
);
68 for (Transactions::iterator it
= old_transactions
.begin();
69 it
!= old_transactions
.end(); ++it
) {
70 if (transactions_
.find(*it
) == transactions_
.end())
72 if (!(*it
)->request() || (*it
)->failed())
74 if (ShouldFail((*it
)->request()))
79 bool DevToolsNetworkController::ShouldFail(
80 const net::HttpRequestInfo
* request
) {
81 DCHECK(thread_checker_
.CalledOnValidThread());
86 if (request
->extra_headers
.HasHeader(kDevToolsRequestInitiator
))
89 // TODO: Add domain blacklist.