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

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

Issue 342473004: DevTools: make network conditions emulation scoped (browser) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments Created 6 years, 6 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/devtools/devtools_network_transaction.h" 5 #include "chrome/browser/devtools/devtools_network_transaction.h"
6 6
7 #include "chrome/browser/devtools/devtools_network_controller.h" 7 #include "chrome/browser/devtools/devtools_network_controller.h"
8 #include "chrome/browser/devtools/devtools_network_realm.h"
8 #include "net/base/net_errors.h" 9 #include "net/base/net_errors.h"
9 #include "net/base/upload_progress.h" 10 #include "net/base/upload_progress.h"
10 #include "net/http/http_network_transaction.h" 11 #include "net/http/http_network_transaction.h"
11 #include "net/http/http_request_info.h" 12 #include "net/http/http_request_info.h"
12 13
14 namespace {
15
16 const char kDevToolsRequestInitiator[] = "X-DevTools-Request-Initiator";
17 const char kDevToolsEmulateNetworkConditionsClientId[] =
18 "X-DevTools-Emulate-Network-Conditions-Client-Id";
19
20 } // namespace
21
13 DevToolsNetworkTransaction::DevToolsNetworkTransaction( 22 DevToolsNetworkTransaction::DevToolsNetworkTransaction(
14 DevToolsNetworkController* controller, 23 DevToolsNetworkController* controller,
15 scoped_ptr<net::HttpTransaction> network_transaction) 24 scoped_ptr<net::HttpTransaction> network_transaction)
16 : controller_(controller), 25 : controller_(controller),
17 network_transaction_(network_transaction.Pass()), 26 network_transaction_(network_transaction.Pass()),
18 request_(NULL), 27 request_(NULL),
19 failed_(false), 28 failed_(false),
20 throttled_byte_count_(0), 29 throttled_byte_count_(0),
21 callback_type_(NONE), 30 callback_type_(NONE),
22 proxy_callback_(base::Bind(&DevToolsNetworkTransaction::OnCallback, 31 proxy_callback_(base::Bind(&DevToolsNetworkTransaction::OnCallback,
23 base::Unretained(this))) { 32 base::Unretained(this))) {
24 DCHECK(controller); 33 DCHECK(controller);
25 controller->AddTransaction(this);
26 } 34 }
27 35
28 DevToolsNetworkTransaction::~DevToolsNetworkTransaction() { 36 DevToolsNetworkTransaction::~DevToolsNetworkTransaction() {
29 controller_->RemoveTransaction(this); 37 if (realm_)
38 realm_->RemoveTransaction(this);
30 } 39 }
31 40
32 void DevToolsNetworkTransaction::Throttle(int result) { 41 void DevToolsNetworkTransaction::Throttle(int result) {
33 throttled_result_ = result; 42 throttled_result_ = result;
34 43
35 if (callback_type_ == START) 44 if (callback_type_ == START)
36 throttled_byte_count_ += network_transaction_->GetTotalReceivedBytes(); 45 throttled_byte_count_ += network_transaction_->GetTotalReceivedBytes();
37 if (result > 0) 46 if (result > 0)
38 throttled_byte_count_ += result; 47 throttled_byte_count_ += result;
39 48
40 controller_->ThrottleTransaction(this); 49 if (realm_)
50 realm_->ThrottleTransaction(this);
41 } 51 }
42 52
43 void DevToolsNetworkTransaction::OnCallback(int rv) { 53 void DevToolsNetworkTransaction::OnCallback(int rv) {
44 if (failed_) 54 if (failed_)
45 return; 55 return;
46 DCHECK(!callback_.is_null()); 56 DCHECK(!callback_.is_null());
47 if (callback_type_ == START || callback_type_ == READ) { 57 if (callback_type_ == START || callback_type_ == READ) {
48 if (controller_->ShouldThrottle(request_)) { 58 if (realm_ && realm_->ShouldThrottle(this)) {
49 Throttle(rv); 59 Throttle(rv);
50 return; 60 return;
51 } 61 }
52 } 62 }
53 net::CompletionCallback callback = callback_; 63 net::CompletionCallback callback = callback_;
54 callback_.Reset(); 64 callback_.Reset();
55 callback_type_ = NONE; 65 callback_type_ = NONE;
56 callback.Run(rv); 66 callback.Run(rv);
57 } 67 }
58 68
59 int DevToolsNetworkTransaction::SetupCallback( 69 int DevToolsNetworkTransaction::SetupCallback(
60 net::CompletionCallback callback, 70 net::CompletionCallback callback,
61 int result, 71 int result,
62 CallbackType callback_type) { 72 CallbackType callback_type) {
63 DCHECK(callback_type_ == NONE); 73 DCHECK(callback_type_ == NONE);
64 74
65 if (result == net::ERR_IO_PENDING) { 75 if (result == net::ERR_IO_PENDING) {
66 callback_type_ = callback_type; 76 callback_type_ = callback_type;
67 callback_ = callback; 77 callback_ = callback;
68 return result; 78 return result;
69 } 79 }
70 80
71 if (!controller_->ShouldThrottle(request_)) 81 if (!realm_ || !realm_->ShouldThrottle(this))
72 return result; 82 return result;
73 83
74 // Only START and READ operation throttling is supported. 84 // Only START and READ operation throttling is supported.
75 if (callback_type != START && callback_type != READ) 85 if (callback_type != START && callback_type != READ)
76 return result; 86 return result;
77 87
78 // In case of error |throttled_byte_count_| is unknown. 88 // In case of error |throttled_byte_count_| is unknown.
79 if (result < 0) 89 if (result < 0)
80 return result; 90 return result;
81 91
(...skipping 20 matching lines...) Expand all
102 callback_type_ = NONE; 112 callback_type_ = NONE;
103 callback.Run(net::ERR_INTERNET_DISCONNECTED); 113 callback.Run(net::ERR_INTERNET_DISCONNECTED);
104 } 114 }
105 115
106 int DevToolsNetworkTransaction::Start( 116 int DevToolsNetworkTransaction::Start(
107 const net::HttpRequestInfo* request, 117 const net::HttpRequestInfo* request,
108 const net::CompletionCallback& callback, 118 const net::CompletionCallback& callback,
109 const net::BoundNetLog& net_log) { 119 const net::BoundNetLog& net_log) {
110 DCHECK(request); 120 DCHECK(request);
111 request_ = request; 121 request_ = request;
122 realm_ = controller_->GetRealm(this);
123 realm_->AddTransaction(this);
112 124
113 if (controller_->ShouldFail(request_)) { 125 if (realm_->ShouldFail(this)) {
114 failed_ = true; 126 failed_ = true;
115 network_transaction_->SetBeforeNetworkStartCallback( 127 network_transaction_->SetBeforeNetworkStartCallback(
116 BeforeNetworkStartCallback()); 128 BeforeNetworkStartCallback());
117 return net::ERR_INTERNET_DISCONNECTED; 129 return net::ERR_INTERNET_DISCONNECTED;
118 } 130 }
119 int rv = network_transaction_->Start(request, proxy_callback_, net_log); 131 int rv = network_transaction_->Start(request_, proxy_callback_, net_log);
120 return SetupCallback(callback, rv, START); 132 return SetupCallback(callback, rv, START);
121 } 133 }
122 134
135 void DevToolsNetworkTransaction::ProcessRequest() {
136 DCHECK(request_);
137 bool hasDevToolsClientId = request_->extra_headers.HasHeader(
vsevik 2014/06/18 12:33:37 has_devtools_...
eustas 2014/06/18 12:57:47 Done.
138 kDevToolsEmulateNetworkConditionsClientId);
139 bool hasDevToolsRequestInitiator = request_->extra_headers.HasHeader(
140 kDevToolsRequestInitiator);
141 if (!hasDevToolsClientId && !hasDevToolsRequestInitiator)
142 return;
143
144 custom_request_.reset(new net::HttpRequestInfo(*request_));
145
146 if (hasDevToolsClientId) {
147 custom_request_->extra_headers.GetHeader(
148 kDevToolsEmulateNetworkConditionsClientId, &client_id_);
149 custom_request_->extra_headers.RemoveHeader(
150 kDevToolsEmulateNetworkConditionsClientId);
151 }
152
153 if (hasDevToolsRequestInitiator) {
154 custom_request_->extra_headers.GetHeader(
155 kDevToolsRequestInitiator, &request_initiator_);
156 custom_request_->extra_headers.RemoveHeader(kDevToolsRequestInitiator);
157 }
158
159 request_ = custom_request_.get();
160 }
161
123 int DevToolsNetworkTransaction::RestartIgnoringLastError( 162 int DevToolsNetworkTransaction::RestartIgnoringLastError(
124 const net::CompletionCallback& callback) { 163 const net::CompletionCallback& callback) {
125 if (failed_) 164 if (failed_)
126 return net::ERR_INTERNET_DISCONNECTED; 165 return net::ERR_INTERNET_DISCONNECTED;
127 int rv = network_transaction_->RestartIgnoringLastError(proxy_callback_); 166 int rv = network_transaction_->RestartIgnoringLastError(proxy_callback_);
128 return SetupCallback(callback, rv, RESTART_IGNORING_LAST_ERROR); 167 return SetupCallback(callback, rv, RESTART_IGNORING_LAST_ERROR);
129 } 168 }
130 169
131 int DevToolsNetworkTransaction::RestartWithCertificate( 170 int DevToolsNetworkTransaction::RestartWithCertificate(
132 net::X509Certificate* client_cert, 171 net::X509Certificate* client_cert,
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 } 261 }
223 262
224 void DevToolsNetworkTransaction::FireThrottledCallback() { 263 void DevToolsNetworkTransaction::FireThrottledCallback() {
225 DCHECK(!callback_.is_null()); 264 DCHECK(!callback_.is_null());
226 DCHECK(callback_type_ == READ || callback_type_ == START); 265 DCHECK(callback_type_ == READ || callback_type_ == START);
227 net::CompletionCallback callback = callback_; 266 net::CompletionCallback callback = callback_;
228 callback_.Reset(); 267 callback_.Reset();
229 callback_type_ = NONE; 268 callback_type_ = NONE;
230 callback.Run(throttled_result_); 269 callback.Run(throttled_result_);
231 } 270 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698