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

Unified Diff: net/http/http_stream_factory_impl_job.cc

Issue 6591030: Add HttpStreamFactory Job orphaning semantics. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Updated comment. Created 9 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
« no previous file with comments | « net/http/http_stream_factory_impl_job.h ('k') | net/http/http_stream_factory_impl_request.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 8ae5f82b91e3f21b463297142d128e08675eba21..f8d8a9e8895c619650b7022644f4aa507f00afaa 100644
--- a/net/http/http_stream_factory_impl_job.cc
+++ b/net/http/http_stream_factory_impl_job.cc
@@ -134,6 +134,11 @@ LoadState HttpStreamFactoryImpl::Job::GetLoadState() const {
}
}
+void HttpStreamFactoryImpl::Job::Orphan(const Request* request) {
+ DCHECK_EQ(request_, request);
+ request_ = NULL;
+}
+
bool HttpStreamFactoryImpl::Job::was_alternate_protocol_available() const {
return was_alternate_protocol_available_;
}
@@ -165,58 +170,99 @@ void HttpStreamFactoryImpl::Job::GetSSLInfo() {
void HttpStreamFactoryImpl::Job::OnStreamReadyCallback() {
DCHECK(stream_.get());
- request_->Complete(was_alternate_protocol_available(),
- was_npn_negotiated(),
- using_spdy(),
- net_log_.source());
- request_->OnStreamReady(ssl_config_, proxy_info_, stream_.release());
+ DCHECK(!IsPreconnecting());
+ if (IsOrphaned()) {
+ stream_factory_->OnOrphanedJobComplete(this);
+ } else {
+ request_->Complete(was_alternate_protocol_available(),
+ was_npn_negotiated(),
+ using_spdy(),
+ net_log_.source());
+ request_->OnStreamReady(this, ssl_config_, proxy_info_, stream_.release());
+ }
// |this| may be deleted after this call.
}
void HttpStreamFactoryImpl::Job::OnSpdySessionReadyCallback() {
DCHECK(!stream_.get());
+ DCHECK(!IsPreconnecting());
DCHECK(using_spdy());
DCHECK(new_spdy_session_);
scoped_refptr<SpdySession> spdy_session = new_spdy_session_;
new_spdy_session_ = NULL;
- stream_factory_->OnSpdySessionReady(this, spdy_session, spdy_session_direct_);
+ if (IsOrphaned()) {
+ stream_factory_->OnSpdySessionReady(
+ spdy_session, spdy_session_direct_, ssl_config_, proxy_info_,
+ was_alternate_protocol_available(), was_npn_negotiated(),
+ using_spdy(), net_log_.source());
+ stream_factory_->OnOrphanedJobComplete(this);
+ } else {
+ request_->OnSpdySessionReady(this, spdy_session, spdy_session_direct_);
+ }
// |this| may be deleted after this call.
}
void HttpStreamFactoryImpl::Job::OnStreamFailedCallback(int result) {
- request_->OnStreamFailed(result, ssl_config_);
+ DCHECK(!IsPreconnecting());
+ if (IsOrphaned())
+ stream_factory_->OnOrphanedJobComplete(this);
+ else
+ request_->OnStreamFailed(this, result, ssl_config_);
// |this| may be deleted after this call.
}
void HttpStreamFactoryImpl::Job::OnCertificateErrorCallback(
int result, const SSLInfo& ssl_info) {
- request_->OnCertificateError(result, ssl_config_, ssl_info);
+ DCHECK(!IsPreconnecting());
+ if (IsOrphaned())
+ stream_factory_->OnOrphanedJobComplete(this);
+ else
+ request_->OnCertificateError(this, result, ssl_config_, ssl_info);
// |this| may be deleted after this call.
}
void HttpStreamFactoryImpl::Job::OnNeedsProxyAuthCallback(
const HttpResponseInfo& response,
HttpAuthController* auth_controller) {
- request_->OnNeedsProxyAuth(
- response, ssl_config_, proxy_info_, auth_controller);
+ DCHECK(!IsPreconnecting());
+ if (IsOrphaned())
+ stream_factory_->OnOrphanedJobComplete(this);
+ else
+ request_->OnNeedsProxyAuth(
+ this, response, ssl_config_, proxy_info_, auth_controller);
// |this| may be deleted after this call.
}
void HttpStreamFactoryImpl::Job::OnNeedsClientAuthCallback(
SSLCertRequestInfo* cert_info) {
- request_->OnNeedsClientAuth(ssl_config_, cert_info);
+ DCHECK(!IsPreconnecting());
+ if (IsOrphaned())
+ stream_factory_->OnOrphanedJobComplete(this);
+ else
+ request_->OnNeedsClientAuth(this, ssl_config_, cert_info);
// |this| may be deleted after this call.
}
void HttpStreamFactoryImpl::Job::OnHttpsProxyTunnelResponseCallback(
const HttpResponseInfo& response_info,
HttpStream* stream) {
- request_->OnHttpsProxyTunnelResponse(
- response_info, ssl_config_, proxy_info_, stream);
+ DCHECK(!IsPreconnecting());
+ if (IsOrphaned())
+ stream_factory_->OnOrphanedJobComplete(this);
+ else
+ request_->OnHttpsProxyTunnelResponse(
+ this, response_info, ssl_config_, proxy_info_, stream);
// |this| may be deleted after this call.
}
void HttpStreamFactoryImpl::Job::OnPreconnectsComplete() {
+ DCHECK(!request_);
+ if (new_spdy_session_) {
+ stream_factory_->OnSpdySessionReady(
+ new_spdy_session_, spdy_session_direct_, ssl_config_,
+ proxy_info_, was_alternate_protocol_available(),
+ was_npn_negotiated(), using_spdy(), net_log_.source());
+ }
stream_factory_->OnPreconnectsComplete(this);
// |this| may be deleted after this call.
}
@@ -522,7 +568,7 @@ int HttpStreamFactoryImpl::Job::DoInitConnection() {
using_spdy_ = true;
next_state_ = STATE_CREATE_STREAM;
return OK;
- } else if (!IsPreconnecting()) {
+ } else if (request_) {
// Update the spdy session key for the request that launched this job.
request_->SetSpdySessionKey(spdy_session_key);
}
@@ -1134,4 +1180,8 @@ bool HttpStreamFactoryImpl::Job::IsPreconnecting() const {
return num_streams_ > 0;
}
+bool HttpStreamFactoryImpl::Job::IsOrphaned() const {
+ return !IsPreconnecting() && !request_;
+}
+
} // namespace net
« no previous file with comments | « net/http/http_stream_factory_impl_job.h ('k') | net/http/http_stream_factory_impl_request.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698