Index: content/browser/loader/resource_loader.cc |
diff --git a/content/browser/loader/resource_loader.cc b/content/browser/loader/resource_loader.cc |
index cb4696600eeb475be8b21f0d560ffe952ec15d05..9e8b91fd764a9ecda985a98fb2d8cfc8d7574b06 100644 |
--- a/content/browser/loader/resource_loader.cc |
+++ b/content/browser/loader/resource_loader.cc |
@@ -289,6 +289,20 @@ void ResourceLoader::OnSSLCertificateError(net::URLRequest* request, |
fatal); |
} |
+void ResourceLoader::OnBeforeNetworkStart(net::URLRequest* unused, |
+ bool* defer) { |
+ DCHECK_EQ(request_.get(), unused); |
+ |
+ // Give the handler a chance to delay the URLRequest from using the network. |
+ if (!handler_->OnBeforeNetworkStart( |
+ GetRequestInfo()->GetRequestID(), request_->url(), defer)) { |
+ Cancel(); |
+ return; |
+ } else if (*defer) { |
+ deferred_stage_ = DEFERRED_NETWORK_START; |
+ } |
+} |
+ |
void ResourceLoader::OnResponseStarted(net::URLRequest* unused) { |
DCHECK_EQ(request_.get(), unused); |
@@ -391,6 +405,9 @@ void ResourceLoader::Resume() { |
case DEFERRED_START: |
StartRequestInternal(); |
break; |
+ case DEFERRED_NETWORK_START: |
+ request_->ResumeNetworkStart(); |
+ break; |
case DEFERRED_REDIRECT: |
request_->FollowDeferredRedirect(); |
break; |