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

Unified 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: Addressed comments 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 side-by-side diff with in-line comments
Download patch
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_)

Powered by Google App Engine
This is Rietveld 408576698