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

Unified Diff: content/browser/renderer_host/resource_dispatcher_host_impl.cc

Issue 10310124: Implement a ResourceThrottle for URL overriding in Chrome on Android. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: incorporated feedback Created 8 years, 7 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: content/browser/renderer_host/resource_dispatcher_host_impl.cc
diff --git a/content/browser/renderer_host/resource_dispatcher_host_impl.cc b/content/browser/renderer_host/resource_dispatcher_host_impl.cc
index aeb257368cec219484bfcc40fdd12b1277de5731..7590d1dc9e351926e881a258e8d7dc8e38f6adec 100644
--- a/content/browser/renderer_host/resource_dispatcher_host_impl.cc
+++ b/content/browser/renderer_host/resource_dispatcher_host_impl.cc
@@ -1411,7 +1411,7 @@ void ResourceDispatcherHostImpl::OnReceivedRedirect(net::URLRequest* request,
<< new_url.possibly_invalid_spec();
// Tell the renderer that this request was disallowed.
- CancelRequestInternal(request, false);
+ CancelRequestInternal(request, false, false);
return;
}
@@ -1432,7 +1432,7 @@ void ResourceDispatcherHostImpl::OnReceivedRedirect(net::URLRequest* request,
if (!info->resource_handler()->OnRequestRedirected(info->GetRequestID(),
new_url,
response, defer_redirect))
- CancelRequestInternal(request, false);
+ CancelRequestInternal(request, false, false);
}
void ResourceDispatcherHostImpl::OnAuthRequired(
@@ -1539,7 +1539,7 @@ void ResourceDispatcherHostImpl::OnResponseStarted(net::URLRequest* request) {
MaybeUpdateUploadProgress(info, request);
if (!CompleteResponseStarted(request)) {
- CancelRequestInternal(request, false);
+ CancelRequestInternal(request, false, false);
} else {
// Check if the handler paused the request in their OnResponseStarted.
if (PauseRequestIfNeeded(info)) {
@@ -1594,6 +1594,20 @@ bool ResourceDispatcherHostImpl::CompleteResponseStarted(
void ResourceDispatcherHostImpl::CancelRequest(int child_id,
int request_id,
bool from_renderer) {
+ CancelRequestWorker(child_id, request_id, from_renderer, false);
+}
+
+void ResourceDispatcherHostImpl::CancelRequestWithHandledExternallyStatus(
+ int child_id, int request_id) {
+ CancelRequestWorker(child_id, request_id, false, true);
+}
+
+void ResourceDispatcherHostImpl::CancelRequestWorker(int child_id,
+ int request_id,
+ bool from_renderer,
+ bool handled_externally) {
+ // The renderer will only ever ask us to perform a regular cancel.
+ DCHECK(!(handled_externally && from_renderer));
GlobalRequestID id(child_id, request_id);
if (from_renderer) {
// When the old renderer dies, it sends a message to us to cancel its
@@ -1613,7 +1627,7 @@ void ResourceDispatcherHostImpl::CancelRequest(int child_id,
net::URLRequest* request = i->second;
bool started_before_cancel = request->is_pending();
- if (CancelRequestInternal(request, from_renderer) &&
+ if (CancelRequestInternal(request, from_renderer, handled_externally) &&
!started_before_cancel) {
// If the request isn't in flight, then we won't get an asynchronous
// notification from the request, so we have to signal ourselves to finish
@@ -1627,8 +1641,10 @@ void ResourceDispatcherHostImpl::CancelRequest(int child_id,
}
}
-bool ResourceDispatcherHostImpl::CancelRequestInternal(net::URLRequest* request,
- bool from_renderer) {
+bool ResourceDispatcherHostImpl::CancelRequestInternal(
+ net::URLRequest* request,
+ bool from_renderer,
+ bool handled_externally) {
VLOG(1) << "CancelRequest: " << request->url().spec();
// WebKit will send us a cancel for downloads since it no longer handles them.
@@ -1643,7 +1659,10 @@ bool ResourceDispatcherHostImpl::CancelRequestInternal(net::URLRequest* request,
info->ssl_client_auth_handler()->OnRequestCancelled();
info->set_ssl_client_auth_handler(NULL);
}
- request->Cancel();
+ if (handled_externally)
+ request->CancelWithHandledExternallyStatus();
+ else
+ request->Cancel();
// Our callers assume |request| is valid after we return.
DCHECK(IsValidRequest(request));
return true;
@@ -1750,7 +1769,7 @@ void ResourceDispatcherHostImpl::BeginRequestInternal(
if (!info->resource_handler()->OnWillStart(
info->GetRequestID(), request->url(),
&defer_start)) {
- CancelRequestInternal(request, false);
+ CancelRequestInternal(request, false, false);
return;
}
@@ -1953,7 +1972,7 @@ bool ResourceDispatcherHostImpl::CompleteRead(net::URLRequest* request,
bool defer = false;
if (!info->resource_handler()->OnReadCompleted(info->GetRequestID(),
bytes_read, &defer)) {
- CancelRequestInternal(request, false);
+ CancelRequestInternal(request, false, false);
return false;
}

Powered by Google App Engine
This is Rietveld 408576698