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

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: Fixed nits 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 "net/base/net_errors.h" 8 #include "net/base/net_errors.h"
9 #include "net/base/upload_progress.h" 9 #include "net/base/upload_progress.h"
10 #include "net/http/http_network_transaction.h" 10 #include "net/http/http_network_transaction.h"
11 #include "net/http/http_request_info.h" 11 #include "net/http/http_request_info.h"
12 12
13 namespace {
14
15 const char kDevToolsRequestInitiator[] = "X-DevTools-Request-Initiator";
16 const char kDevToolsEmulateNetworkConditionsClientId[] =
17 "X-DevTools-Emulate-Network-Conditions-Client-Id";
18
19 } // namespace
20
13 DevToolsNetworkTransaction::DevToolsNetworkTransaction( 21 DevToolsNetworkTransaction::DevToolsNetworkTransaction(
14 DevToolsNetworkController* controller, 22 DevToolsNetworkController* controller,
15 scoped_ptr<net::HttpTransaction> network_transaction) 23 scoped_ptr<net::HttpTransaction> network_transaction)
16 : controller_(controller), 24 : controller_(controller),
17 network_transaction_(network_transaction.Pass()), 25 network_transaction_(network_transaction.Pass()),
18 request_(NULL), 26 request_(NULL),
19 failed_(false), 27 failed_(false),
20 throttled_byte_count_(0), 28 throttled_byte_count_(0),
21 callback_type_(NONE), 29 callback_type_(NONE),
22 proxy_callback_(base::Bind(&DevToolsNetworkTransaction::OnCallback, 30 proxy_callback_(base::Bind(&DevToolsNetworkTransaction::OnCallback,
(...skipping 15 matching lines...) Expand all
38 throttled_byte_count_ += result; 46 throttled_byte_count_ += result;
39 47
40 controller_->ThrottleTransaction(this); 48 controller_->ThrottleTransaction(this);
41 } 49 }
42 50
43 void DevToolsNetworkTransaction::OnCallback(int rv) { 51 void DevToolsNetworkTransaction::OnCallback(int rv) {
44 if (failed_) 52 if (failed_)
45 return; 53 return;
46 DCHECK(!callback_.is_null()); 54 DCHECK(!callback_.is_null());
47 if (callback_type_ == START || callback_type_ == READ) { 55 if (callback_type_ == START || callback_type_ == READ) {
48 if (controller_->ShouldThrottle(request_)) { 56 if (controller_->ShouldThrottle(this)) {
49 Throttle(rv); 57 Throttle(rv);
50 return; 58 return;
51 } 59 }
52 } 60 }
53 net::CompletionCallback callback = callback_; 61 net::CompletionCallback callback = callback_;
54 callback_.Reset(); 62 callback_.Reset();
55 callback_type_ = NONE; 63 callback_type_ = NONE;
56 callback.Run(rv); 64 callback.Run(rv);
57 } 65 }
58 66
59 int DevToolsNetworkTransaction::SetupCallback( 67 int DevToolsNetworkTransaction::SetupCallback(
60 net::CompletionCallback callback, 68 net::CompletionCallback callback,
61 int result, 69 int result,
62 CallbackType callback_type) { 70 CallbackType callback_type) {
63 DCHECK(callback_type_ == NONE); 71 DCHECK(callback_type_ == NONE);
64 72
65 if (result == net::ERR_IO_PENDING) { 73 if (result == net::ERR_IO_PENDING) {
66 callback_type_ = callback_type; 74 callback_type_ = callback_type;
67 callback_ = callback; 75 callback_ = callback;
68 return result; 76 return result;
69 } 77 }
70 78
71 if (!controller_->ShouldThrottle(request_)) 79 if (!controller_->ShouldThrottle(this))
72 return result; 80 return result;
73 81
74 // Only START and READ operation throttling is supported. 82 // Only START and READ operation throttling is supported.
75 if (callback_type != START && callback_type != READ) 83 if (callback_type != START && callback_type != READ)
76 return result; 84 return result;
77 85
78 // In case of error |throttled_byte_count_| is unknown. 86 // In case of error |throttled_byte_count_| is unknown.
79 if (result < 0) 87 if (result < 0)
80 return result; 88 return result;
81 89
(...skipping 20 matching lines...) Expand all
102 callback_type_ = NONE; 110 callback_type_ = NONE;
103 callback.Run(net::ERR_INTERNET_DISCONNECTED); 111 callback.Run(net::ERR_INTERNET_DISCONNECTED);
104 } 112 }
105 113
106 int DevToolsNetworkTransaction::Start( 114 int DevToolsNetworkTransaction::Start(
107 const net::HttpRequestInfo* request, 115 const net::HttpRequestInfo* request,
108 const net::CompletionCallback& callback, 116 const net::CompletionCallback& callback,
109 const net::BoundNetLog& net_log) { 117 const net::BoundNetLog& net_log) {
110 DCHECK(request); 118 DCHECK(request);
111 request_ = request; 119 request_ = request;
120 ProcessRequest();
112 121
113 if (controller_->ShouldFail(request_)) { 122 if (controller_->ShouldFail(this)) {
114 failed_ = true; 123 failed_ = true;
115 network_transaction_->SetBeforeNetworkStartCallback( 124 network_transaction_->SetBeforeNetworkStartCallback(
116 BeforeNetworkStartCallback()); 125 BeforeNetworkStartCallback());
117 return net::ERR_INTERNET_DISCONNECTED; 126 return net::ERR_INTERNET_DISCONNECTED;
118 } 127 }
119 int rv = network_transaction_->Start(request, proxy_callback_, net_log); 128 int rv = network_transaction_->Start(request_, proxy_callback_, net_log);
120 return SetupCallback(callback, rv, START); 129 return SetupCallback(callback, rv, START);
121 } 130 }
122 131
132 void DevToolsNetworkTransaction::ProcessRequest() {
133 DCHECK(request_);
134 bool hasDevToolsClientId = request_->extra_headers.HasHeader(
135 kDevToolsEmulateNetworkConditionsClientId);
136 bool hasDevToolsRequestInitiator = request_->extra_headers.HasHeader(
137 kDevToolsRequestInitiator);
138 if (!hasDevToolsClientId && !hasDevToolsRequestInitiator)
139 return;
140
141 custom_request_.reset(new net::HttpRequestInfo(*request_));
142
143 if (hasDevToolsClientId) {
144 custom_request_->extra_headers.GetHeader(
145 kDevToolsEmulateNetworkConditionsClientId, &client_id_);
146 custom_request_->extra_headers.RemoveHeader(
147 kDevToolsEmulateNetworkConditionsClientId);
148 }
149
150 if (hasDevToolsRequestInitiator) {
151 custom_request_->extra_headers.GetHeader(
152 kDevToolsRequestInitiator, &request_initiator_);
153 custom_request_->extra_headers.RemoveHeader(kDevToolsRequestInitiator);
154 }
155
156 request_ = custom_request_.get();
157 }
158
123 int DevToolsNetworkTransaction::RestartIgnoringLastError( 159 int DevToolsNetworkTransaction::RestartIgnoringLastError(
124 const net::CompletionCallback& callback) { 160 const net::CompletionCallback& callback) {
125 if (failed_) 161 if (failed_)
126 return net::ERR_INTERNET_DISCONNECTED; 162 return net::ERR_INTERNET_DISCONNECTED;
127 int rv = network_transaction_->RestartIgnoringLastError(proxy_callback_); 163 int rv = network_transaction_->RestartIgnoringLastError(proxy_callback_);
128 return SetupCallback(callback, rv, RESTART_IGNORING_LAST_ERROR); 164 return SetupCallback(callback, rv, RESTART_IGNORING_LAST_ERROR);
129 } 165 }
130 166
131 int DevToolsNetworkTransaction::RestartWithCertificate( 167 int DevToolsNetworkTransaction::RestartWithCertificate(
132 net::X509Certificate* client_cert, 168 net::X509Certificate* client_cert,
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 } 258 }
223 259
224 void DevToolsNetworkTransaction::FireThrottledCallback() { 260 void DevToolsNetworkTransaction::FireThrottledCallback() {
225 DCHECK(!callback_.is_null()); 261 DCHECK(!callback_.is_null());
226 DCHECK(callback_type_ == READ || callback_type_ == START); 262 DCHECK(callback_type_ == READ || callback_type_ == START);
227 net::CompletionCallback callback = callback_; 263 net::CompletionCallback callback = callback_;
228 callback_.Reset(); 264 callback_.Reset();
229 callback_type_ = NONE; 265 callback_type_ = NONE;
230 callback.Run(throttled_result_); 266 callback.Run(throttled_result_);
231 } 267 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698