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..198e29d32c197ec1023f55d4f7abcc88ddbd9edb 100644 |
--- a/chrome/browser/devtools/devtools_network_transaction.cc |
+++ b/chrome/browser/devtools/devtools_network_transaction.cc |
@@ -10,6 +10,14 @@ |
#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) |
@@ -45,7 +53,7 @@ void DevToolsNetworkTransaction::OnCallback(int rv) { |
return; |
DCHECK(!callback_.is_null()); |
if (callback_type_ == START || callback_type_ == READ) { |
- if (controller_->ShouldThrottle(request_)) { |
+ if (controller_->ShouldThrottle(this)) { |
Throttle(rv); |
return; |
} |
@@ -68,7 +76,7 @@ int DevToolsNetworkTransaction::SetupCallback( |
return result; |
} |
- if (!controller_->ShouldThrottle(request_)) |
+ if (!controller_->ShouldThrottle(this)) |
return result; |
// Only START and READ operation throttling is supported. |
@@ -109,17 +117,45 @@ int DevToolsNetworkTransaction::Start( |
const net::BoundNetLog& net_log) { |
DCHECK(request); |
request_ = request; |
+ ProcessRequest(); |
- if (controller_->ShouldFail(request_)) { |
+ if (controller_->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( |
+ 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_) |