OLD | NEW |
---|---|
(Empty) | |
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. | |
4 | |
5 #include "chrome/browser/devtools/devtools_network_controller.h" | |
6 | |
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" | |
12 | |
13 DevToolsNetworkController::DevToolsNetworkController() | |
14 : last_transaction_id_(0) { | |
15 } | |
16 | |
17 DevToolsNetworkController::~DevToolsNetworkController() { | |
18 } | |
19 | |
20 uint64 DevToolsNetworkController::GenerateTransactionId() { | |
21 return last_transaction_id_++; | |
22 } | |
23 | |
24 void DevToolsNetworkController::AddTransaction( | |
25 uint64 transaction_id, | |
26 DevToolsNetworkTransaction* transaction) { | |
27 transactions_[transaction_id] = transaction; | |
28 } | |
29 | |
30 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:
| |
31 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.
| |
32 } | |
33 | |
34 // static | |
35 void DevToolsNetworkController::DisableNetwork( | |
36 Profile* profile, | |
37 const std::string& client_id, | |
38 bool disable_network) { | |
39 CHECK(profile); | |
40 content::ResourceContext* resource_context = profile->GetResourceContext(); | |
41 CHECK(resource_context); | |
42 content::BrowserThread::PostTask( | |
43 content::BrowserThread::IO, | |
44 FROM_HERE, | |
45 base::Bind( | |
46 &DevToolsNetworkController::DisableNetworkOnIO, | |
47 resource_context, | |
48 client_id, | |
49 disable_network)); | |
50 } | |
51 | |
52 // static | |
53 void DevToolsNetworkController::DisableNetworkOnIO( | |
54 content::ResourceContext* resource_context, | |
55 const std::string& client_id, | |
56 bool disable_network) { | |
57 CHECK(resource_context); | |
58 DevToolsNetworkController* controller = ProfileIOData::FromResourceContext( | |
59 resource_context)->network_controller(); | |
mmenke
2014/04/18 15:41:42
nit: +2 indent.
eustas
2014/04/21 11:34:59
Done.
| |
60 CHECK(controller); | |
61 controller->DisableNetwork(client_id, disable_network); | |
62 } | |
63 | |
64 void DevToolsNetworkController::DisableNetwork( | |
65 const std::string& client_id, | |
66 bool disable_network) { | |
67 ClientsSet::iterator client = clients_set_.find(client_id); | |
68 if (client != clients_set_.end()) { | |
69 if (!disable_network) | |
70 clients_set_.erase(client); | |
71 return; | |
72 } | |
73 | |
74 if (!disable_network) | |
75 return; | |
76 | |
77 bool first_client = clients_set_.size() == 0; | |
78 clients_set_.insert(client_id); | |
79 if (!first_client) | |
80 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
| |
81 | |
82 Transactions::iterator it = transactions_.begin(); | |
83 while (it != transactions_.end()) { | |
84 Transactions::iterator current = it++; | |
85 DevToolsNetworkTransaction* transaction = current->second; | |
86 if (transaction->started() && ShouldFail(transaction)) { | |
87 transactions_.erase(current); | |
88 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.
| |
89 } | |
90 } | |
91 } | |
92 | |
93 bool DevToolsNetworkController::ShouldFail( | |
94 const DevToolsNetworkTransaction* transaction) { | |
95 CHECK(transaction); | |
96 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
| |
97 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.
| |
98 return false; | |
99 | |
100 if (transaction->has_devtools_request_header()) | |
101 return false; | |
102 | |
103 // TODO: Add domain blacklist. | |
104 | |
105 return true; | |
106 } | |
OLD | NEW |