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_) |