Chromium Code Reviews| Index: chrome/browser/devtools/devtools_network_transaction.cc |
| diff --git a/chrome/browser/devtools/devtools_network_transaction.cc b/chrome/browser/devtools/devtools_network_transaction.cc |
| index 8a72e01d15db5caeedeebb1a8dcfd86ff06455b5..e891ca1596e13f319e899252fcd86610d99a9d3b 100644 |
| --- a/chrome/browser/devtools/devtools_network_transaction.cc |
| +++ b/chrome/browser/devtools/devtools_network_transaction.cc |
| @@ -5,11 +5,20 @@ |
| #include "chrome/browser/devtools/devtools_network_transaction.h" |
| #include "chrome/browser/devtools/devtools_network_controller.h" |
| +#include "chrome/browser/devtools/devtools_network_realm.h" |
| #include "net/base/net_errors.h" |
| #include "net/base/upload_progress.h" |
| #include "net/http/http_network_transaction.h" |
| #include "net/http/http_request_info.h" |
| +namespace { |
| + |
| +const char kDevToolsRequestInitiator[] = "X-DevTools-Request-Initiator"; |
| +const char kDevToolsEmulateNetworkConditionsClientId[] = |
| + "X-DevTools-Emulate-Network-Conditions-Client-Id"; |
| + |
| +} // namespace |
| + |
| DevToolsNetworkTransaction::DevToolsNetworkTransaction( |
| DevToolsNetworkController* controller, |
| scoped_ptr<net::HttpTransaction> network_transaction) |
| @@ -22,11 +31,11 @@ DevToolsNetworkTransaction::DevToolsNetworkTransaction( |
| proxy_callback_(base::Bind(&DevToolsNetworkTransaction::OnCallback, |
| base::Unretained(this))) { |
| DCHECK(controller); |
| - controller->AddTransaction(this); |
| } |
| DevToolsNetworkTransaction::~DevToolsNetworkTransaction() { |
| - controller_->RemoveTransaction(this); |
| + if (realm_) |
| + realm_->RemoveTransaction(this); |
| } |
| void DevToolsNetworkTransaction::Throttle(int result) { |
| @@ -37,7 +46,8 @@ void DevToolsNetworkTransaction::Throttle(int result) { |
| if (result > 0) |
| throttled_byte_count_ += result; |
| - controller_->ThrottleTransaction(this); |
| + if (realm_) |
| + realm_->ThrottleTransaction(this); |
| } |
| void DevToolsNetworkTransaction::OnCallback(int rv) { |
| @@ -45,7 +55,7 @@ void DevToolsNetworkTransaction::OnCallback(int rv) { |
| return; |
| DCHECK(!callback_.is_null()); |
| if (callback_type_ == START || callback_type_ == READ) { |
| - if (controller_->ShouldThrottle(request_)) { |
| + if (realm_ && realm_->ShouldThrottle(this)) { |
| Throttle(rv); |
| return; |
| } |
| @@ -68,7 +78,7 @@ int DevToolsNetworkTransaction::SetupCallback( |
| return result; |
| } |
| - if (!controller_->ShouldThrottle(request_)) |
| + if (!realm_ || !realm_->ShouldThrottle(this)) |
| return result; |
| // Only START and READ operation throttling is supported. |
| @@ -109,17 +119,46 @@ int DevToolsNetworkTransaction::Start( |
| const net::BoundNetLog& net_log) { |
| DCHECK(request); |
| request_ = request; |
| + realm_ = controller_->GetRealm(this); |
| + realm_->AddTransaction(this); |
| - if (controller_->ShouldFail(request_)) { |
| + if (realm_->ShouldFail(this)) { |
| failed_ = true; |
| network_transaction_->SetBeforeNetworkStartCallback( |
| BeforeNetworkStartCallback()); |
| return net::ERR_INTERNET_DISCONNECTED; |
| } |
| - int rv = network_transaction_->Start(request, proxy_callback_, net_log); |
| + int rv = network_transaction_->Start(request_, proxy_callback_, net_log); |
| return SetupCallback(callback, rv, START); |
| } |
| +void DevToolsNetworkTransaction::ProcessRequest() { |
| + DCHECK(request_); |
| + bool hasDevToolsClientId = request_->extra_headers.HasHeader( |
|
vsevik
2014/06/18 12:33:37
has_devtools_...
eustas
2014/06/18 12:57:47
Done.
|
| + kDevToolsEmulateNetworkConditionsClientId); |
| + bool hasDevToolsRequestInitiator = request_->extra_headers.HasHeader( |
| + kDevToolsRequestInitiator); |
| + if (!hasDevToolsClientId && !hasDevToolsRequestInitiator) |
| + return; |
| + |
| + custom_request_.reset(new net::HttpRequestInfo(*request_)); |
| + |
| + if (hasDevToolsClientId) { |
| + custom_request_->extra_headers.GetHeader( |
| + kDevToolsEmulateNetworkConditionsClientId, &client_id_); |
| + custom_request_->extra_headers.RemoveHeader( |
| + kDevToolsEmulateNetworkConditionsClientId); |
| + } |
| + |
| + if (hasDevToolsRequestInitiator) { |
| + custom_request_->extra_headers.GetHeader( |
| + kDevToolsRequestInitiator, &request_initiator_); |
| + custom_request_->extra_headers.RemoveHeader(kDevToolsRequestInitiator); |
| + } |
| + |
| + request_ = custom_request_.get(); |
| +} |
| + |
| int DevToolsNetworkTransaction::RestartIgnoringLastError( |
| const net::CompletionCallback& callback) { |
| if (failed_) |