Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(213)

Side by Side Diff: chrome/browser/devtools/devtools_network_controller.cc

Issue 182993003: Add the ability for DevTools to wrap network transactions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments, added unit tests Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698