OLD | NEW |
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_interceptor.h" | 8 #include "chrome/browser/devtools/devtools_network_interceptor.h" |
9 #include "net/base/load_timing_info.h" | 9 #include "net/base/load_timing_info.h" |
10 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
(...skipping 20 matching lines...) Expand all Loading... |
31 proxy_callback_(base::Bind(&DevToolsNetworkTransaction::OnCallback, | 31 proxy_callback_(base::Bind(&DevToolsNetworkTransaction::OnCallback, |
32 base::Unretained(this))) { | 32 base::Unretained(this))) { |
33 DCHECK(controller); | 33 DCHECK(controller); |
34 } | 34 } |
35 | 35 |
36 DevToolsNetworkTransaction::~DevToolsNetworkTransaction() { | 36 DevToolsNetworkTransaction::~DevToolsNetworkTransaction() { |
37 if (interceptor_) | 37 if (interceptor_) |
38 interceptor_->RemoveThrottable(this); | 38 interceptor_->RemoveThrottable(this); |
39 } | 39 } |
40 | 40 |
41 bool DevToolsNetworkTransaction::HasStarted() { | |
42 return !!request_; | |
43 } | |
44 | |
45 bool DevToolsNetworkTransaction::HasFailed() { | |
46 return failed_; | |
47 } | |
48 | |
49 int64_t DevToolsNetworkTransaction::ThrottledByteCount() { | 41 int64_t DevToolsNetworkTransaction::ThrottledByteCount() { |
50 return throttled_byte_count_; | 42 return throttled_byte_count_; |
51 } | 43 } |
52 | 44 |
53 void DevToolsNetworkTransaction::Throttled(int64_t count) { | 45 void DevToolsNetworkTransaction::Throttled(int64_t count) { |
54 throttled_byte_count_ -= count; | 46 throttled_byte_count_ -= count; |
55 } | 47 } |
56 | 48 |
57 void DevToolsNetworkTransaction::GetSendEndTiming(base::TimeTicks* send_end) { | 49 void DevToolsNetworkTransaction::GetSendEndTiming(base::TimeTicks* send_end) { |
58 net::LoadTimingInfo load_timing_info; | 50 net::LoadTimingInfo load_timing_info; |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 Throttle(result); | 112 Throttle(result); |
121 return net::ERR_IO_PENDING; | 113 return net::ERR_IO_PENDING; |
122 } | 114 } |
123 | 115 |
124 void DevToolsNetworkTransaction::Fail() { | 116 void DevToolsNetworkTransaction::Fail() { |
125 DCHECK(request_); | 117 DCHECK(request_); |
126 DCHECK(!failed_); | 118 DCHECK(!failed_); |
127 failed_ = true; | 119 failed_ = true; |
128 network_transaction_->SetBeforeNetworkStartCallback( | 120 network_transaction_->SetBeforeNetworkStartCallback( |
129 BeforeNetworkStartCallback()); | 121 BeforeNetworkStartCallback()); |
| 122 if (interceptor_) { |
| 123 interceptor_->RemoveThrottable(this); |
| 124 interceptor_.reset(); |
| 125 } |
130 if (callback_.is_null()) | 126 if (callback_.is_null()) |
131 return; | 127 return; |
132 net::CompletionCallback callback = callback_; | 128 net::CompletionCallback callback = callback_; |
133 callback_.Reset(); | 129 callback_.Reset(); |
134 callback_type_ = NONE; | 130 callback_type_ = NONE; |
135 callback.Run(net::ERR_INTERNET_DISCONNECTED); | 131 callback.Run(net::ERR_INTERNET_DISCONNECTED); |
136 } | 132 } |
137 | 133 |
138 int DevToolsNetworkTransaction::Start( | 134 int DevToolsNetworkTransaction::Start( |
139 const net::HttpRequestInfo* request, | 135 const net::HttpRequestInfo* request, |
140 const net::CompletionCallback& callback, | 136 const net::CompletionCallback& callback, |
141 const net::BoundNetLog& net_log) { | 137 const net::BoundNetLog& net_log) { |
142 DCHECK(request); | 138 DCHECK(request); |
143 request_ = request; | 139 request_ = request; |
144 | 140 |
145 std::string client_id; | 141 std::string client_id; |
146 ProcessRequest(&client_id); | 142 ProcessRequest(&client_id); |
147 interceptor_ = controller_->GetInterceptor(client_id); | 143 interceptor_ = controller_->GetInterceptor(client_id); |
148 if (interceptor_) | |
149 interceptor_->AddThrottable(this); | |
150 | 144 |
151 if (interceptor_ && interceptor_->ShouldFail()) { | 145 if (interceptor_ && interceptor_->ShouldFail()) { |
152 failed_ = true; | 146 failed_ = true; |
153 network_transaction_->SetBeforeNetworkStartCallback( | 147 network_transaction_->SetBeforeNetworkStartCallback( |
154 BeforeNetworkStartCallback()); | 148 BeforeNetworkStartCallback()); |
| 149 interceptor_.reset(); |
155 return net::ERR_INTERNET_DISCONNECTED; | 150 return net::ERR_INTERNET_DISCONNECTED; |
156 } | 151 } |
| 152 |
| 153 if (interceptor_) |
| 154 interceptor_->AddThrottable(this); |
157 int rv = network_transaction_->Start(request_, proxy_callback_, net_log); | 155 int rv = network_transaction_->Start(request_, proxy_callback_, net_log); |
158 return SetupCallback(callback, rv, START); | 156 return SetupCallback(callback, rv, START); |
159 } | 157 } |
160 | 158 |
161 void DevToolsNetworkTransaction::ProcessRequest(std::string* client_id) { | 159 void DevToolsNetworkTransaction::ProcessRequest(std::string* client_id) { |
162 DCHECK(request_); | 160 DCHECK(request_); |
163 bool has_devtools_client_id = request_->extra_headers.HasHeader( | 161 bool has_devtools_client_id = request_->extra_headers.HasHeader( |
164 kDevToolsEmulateNetworkConditionsClientId); | 162 kDevToolsEmulateNetworkConditionsClientId); |
165 if (!has_devtools_client_id) | 163 if (!has_devtools_client_id) |
166 return; | 164 return; |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 } | 293 } |
296 | 294 |
297 void DevToolsNetworkTransaction::ThrottleFinished() { | 295 void DevToolsNetworkTransaction::ThrottleFinished() { |
298 DCHECK(!callback_.is_null()); | 296 DCHECK(!callback_.is_null()); |
299 DCHECK(callback_type_ == READ || callback_type_ == START); | 297 DCHECK(callback_type_ == READ || callback_type_ == START); |
300 net::CompletionCallback callback = callback_; | 298 net::CompletionCallback callback = callback_; |
301 callback_.Reset(); | 299 callback_.Reset(); |
302 callback_type_ = NONE; | 300 callback_type_ = NONE; |
303 callback.Run(throttled_result_); | 301 callback.Run(throttled_result_); |
304 } | 302 } |
OLD | NEW |