Index: content/browser/renderer_host/resource_dispatcher_host.cc |
diff --git a/content/browser/renderer_host/resource_dispatcher_host.cc b/content/browser/renderer_host/resource_dispatcher_host.cc |
index 451f99e0ecae7defef1fa19d4d1f219d3df29a11..58e8d9879a976186e4ae50b19c77b0db59727039 100644 |
--- a/content/browser/renderer_host/resource_dispatcher_host.cc |
+++ b/content/browser/renderer_host/resource_dispatcher_host.cc |
@@ -25,8 +25,6 @@ |
#include "chrome/browser/download/save_file_manager.h" |
#include "chrome/browser/external_protocol_handler.h" |
#include "chrome/browser/net/url_request_tracking.h" |
-#include "chrome/browser/prerender/prerender_manager.h" |
-#include "chrome/browser/prerender/prerender_tracker.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/renderer_host/download_resource_handler.h" |
#include "chrome/browser/renderer_host/safe_browsing_resource_handler.h" |
@@ -281,7 +279,8 @@ ResourceDispatcherHost::ResourceDispatcherHost( |
is_shutdown_(false), |
max_outstanding_requests_cost_per_process_( |
kMaxOutstandingRequestsCostPerProcess), |
- filter_(NULL) { |
+ filter_(NULL), |
+ observer_(NULL) { |
resource_queue_.Initialize(resource_queue_delegates); |
} |
@@ -433,48 +432,14 @@ void ResourceDispatcherHost::BeginRequest( |
} |
const GURL referrer = MaybeStripReferrer(request_data.referrer); |
- const bool is_prerendering = |
- prerender::PrerenderTracker::GetInstance()->IsPrerenderingOnIOThread( |
- child_id, route_id); |
- |
- // Handle a PREFETCH resource type. If prefetch is disabled, squelch the |
- // request. If prerendering is enabled, trigger a prerender for the URL |
- // and abort the request, to prevent double-gets. Otherwise, do a normal |
- // prefetch. |
- if (request_data.resource_type == ResourceType::PREFETCH) { |
- // All PREFETCH requests should be GETs, but be defensive about it. |
- if (request_data.method != "GET") { |
- AbortRequestBeforeItStarts(filter_, sync_result, route_id, request_id); |
- return; |
- } |
- if (!ResourceDispatcherHost::is_prefetch_enabled()) { |
- AbortRequestBeforeItStarts(filter_, sync_result, route_id, request_id); |
- return; |
- } |
- if (prerender::PrerenderManager::IsPrerenderingPossible()) { |
- BrowserThread::PostTask( |
- BrowserThread::UI, FROM_HERE, |
- NewRunnableFunction(prerender::HandlePrefetchTag, |
- resource_context.prerender_manager(), |
- child_id, |
- route_id, |
- request_data.url, |
- referrer, |
- is_prerendering)); |
- AbortRequestBeforeItStarts(filter_, sync_result, route_id, request_id); |
- return; |
- } |
- // Otherwise, treat like a normal request, and fall-through. |
- } |
- // Abort any prerenders that spawn requests that use invalid HTTP methods. |
- if (is_prerendering && |
- !prerender::PrerenderManager::IsValidHttpMethod(request_data.method)) { |
- if (prerender::PrerenderTracker::GetInstance()->TryCancelOnIOThread( |
- child_id, route_id, prerender::FINAL_STATUS_INVALID_HTTP_METHOD)) { |
- AbortRequestBeforeItStarts(filter_, sync_result, route_id, request_id); |
- return; |
- } |
+ // Allow the observer to block/handle the request. |
+ if (observer_ && !observer_->ShouldBeginRequest(child_id, route_id, |
+ request_data, |
+ resource_context, |
+ referrer)) { |
+ AbortRequestBeforeItStarts(filter_, sync_result, route_id, request_id); |
+ return; |
} |
// Construct the event handler. |
@@ -524,12 +489,13 @@ void ResourceDispatcherHost::BeginRequest( |
load_flags |= net::LOAD_DO_NOT_PROMPT_FOR_LOGIN; |
} |
- if (is_prerendering) |
- load_flags |= net::LOAD_PRERENDER; |
- |
if (sync_result) |
load_flags |= net::LOAD_IGNORE_LIMITS; |
+ // Allow the observer to change the load flags. |
+ if (observer_) |
+ observer_->MutateLoadFlags(child_id, route_id, &load_flags); |
+ |
// Raw headers are sensitive, as they inclide Cookie/Set-Cookie, so only |
// allow requesting them if requestor has ReadRawCookies permission. |
if ((load_flags & net::LOAD_REPORT_RAW_HEADERS) |
@@ -2034,7 +2000,6 @@ net::RequestPriority ResourceDispatcherHost::DetermineRequestPriority( |
} |
} |
- |
// static |
bool ResourceDispatcherHost::is_prefetch_enabled() { |
return is_prefetch_enabled_; |