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

Unified Diff: net/http/http_stream_factory_impl_job.cc

Issue 9433015: Add a force pipelining option to load flags. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix build on other platforms Created 8 years, 10 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: net/http/http_stream_factory_impl_job.cc
diff --git a/net/http/http_stream_factory_impl_job.cc b/net/http/http_stream_factory_impl_job.cc
index 2bdc55e0c595149195a04ef1454e2b02a17ac222..a735fba93dfbb5b8158b15635a39b61af39447e3 100644
--- a/net/http/http_stream_factory_impl_job.cc
+++ b/net/http/http_stream_factory_impl_job.cc
@@ -562,6 +562,8 @@ int HttpStreamFactoryImpl::Job::DoStart() {
origin_ = HostPortPair(request_info_.url.HostNoBrackets(), port);
origin_url_ = HttpStreamFactory::ApplyHostMappingRules(
request_info_.url, &origin_);
+ http_pipelining_key_.reset(new HttpPipelinedHost::Key(
+ origin_, (request_info_.load_flags & LOAD_FORCE_HTTP_PIPELINING) != 0));
net_log_.BeginEvent(NetLog::TYPE_HTTP_STREAM_JOB,
HttpStreamJobParameters::Create(request_info_.url,
@@ -687,11 +689,15 @@ int HttpStreamFactoryImpl::Job::DoInitConnection() {
// connections and thus should make fewer preconnections. Explore
// preconnecting fewer than the requested num_connections.
existing_available_pipeline_ = stream_factory_->http_pipelined_host_pool_.
- IsExistingPipelineAvailableForOrigin(origin_);
+ IsExistingPipelineAvailableForKey(*http_pipelining_key_.get());
if (existing_available_pipeline_) {
return OK;
} else {
- request_->SetHttpPipeliningKey(origin_);
+ bool was_new_key = request_->SetHttpPipeliningKey(
+ *http_pipelining_key_.get());
+ if (!was_new_key && http_pipelining_key_->force_pipelining()) {
+ return ERR_IO_PENDING;
+ }
}
}
@@ -755,6 +761,11 @@ int HttpStreamFactoryImpl::Job::DoInitConnectionComplete(int result) {
waiting_job_ = NULL;
}
+ if (result < 0 && http_pipelining_key_->force_pipelining()) {
+ stream_factory_->AbortPipelinedRequestsWithKey(
+ this, *http_pipelining_key_.get(), result, server_ssl_config_);
+ }
+
// |result| may be the result of any of the stacked pools. The following
// logic is used when determining how to interpret an error.
// If |result| < 0:
@@ -887,14 +898,17 @@ int HttpStreamFactoryImpl::Job::DoCreateStream() {
bool using_proxy = (proxy_info_.is_http() || proxy_info_.is_https()) &&
request_info_.url.SchemeIs("http");
// TODO(simonjam): Support proxies.
- if (existing_available_pipeline_) {
+ if (existing_available_pipeline_ ||
+ stream_factory_->http_pipelined_host_pool_.
+ IsExistingPipelineAvailableForKey(*http_pipelining_key_.get())) {
mmenke 2012/02/23 18:54:58 nit: Suggest you indent this 4 spaces, so it's a
James Simonsen 2012/02/23 23:49:46 Done.
stream_.reset(stream_factory_->http_pipelined_host_pool_.
- CreateStreamOnExistingPipeline(origin_));
+ CreateStreamOnExistingPipeline(
+ *http_pipelining_key_.get()));
CHECK(stream_.get());
} else if (!using_proxy && IsRequestEligibleForPipelining()) {
stream_.reset(
stream_factory_->http_pipelined_host_pool_.CreateStreamOnNewPipeline(
- origin_,
+ *http_pipelining_key_.get(),
connection_.release(),
server_ssl_config_,
proxy_info_,
@@ -1209,10 +1223,13 @@ bool HttpStreamFactoryImpl::Job::IsOrphaned() const {
}
bool HttpStreamFactoryImpl::Job::IsRequestEligibleForPipelining() {
- if (!HttpStreamFactory::http_pipelining_enabled()) {
+ if (IsPreconnecting() || !request_) {
return false;
}
- if (IsPreconnecting() || !request_) {
+ if (http_pipelining_key_->force_pipelining()) {
+ return true;
+ }
+ if (!HttpStreamFactory::http_pipelining_enabled()) {
return false;
}
if (using_ssl_) {
@@ -1221,8 +1238,8 @@ bool HttpStreamFactoryImpl::Job::IsRequestEligibleForPipelining() {
if (request_info_.method != "GET" && request_info_.method != "HEAD") {
return false;
}
- return stream_factory_->http_pipelined_host_pool_.IsHostEligibleForPipelining(
- origin_);
+ return stream_factory_->http_pipelined_host_pool_.IsKeyEligibleForPipelining(
+ *http_pipelining_key_.get());
}
} // namespace net

Powered by Google App Engine
This is Rietveld 408576698