diff options
author | dominich@chromium.org <dominich@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-25 19:03:27 +0000 |
---|---|---|
committer | dominich@chromium.org <dominich@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-25 19:03:27 +0000 |
commit | 1459fb6d13c6e8da1fd72a569e9410a1d038bd59 (patch) | |
tree | 869478ccf95444e29cffb9e5e70acc0015379057 /content | |
parent | 8b001f3e36a29f590e57d46e8e1b357685eb38c1 (diff) | |
download | chromium_src-1459fb6d13c6e8da1fd72a569e9410a1d038bd59.zip chromium_src-1459fb6d13c6e8da1fd72a569e9410a1d038bd59.tar.gz chromium_src-1459fb6d13c6e8da1fd72a569e9410a1d038bd59.tar.bz2 |
Remove a chrome dependency by removing Prerender from ResourceDispatcherHost.
BUG=82590,77090
TEST=Prerender*
Review URL: http://codereview.chromium.org/6966017
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@86667 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/browser/DEPS | 4 | ||||
-rw-r--r-- | content/browser/renderer_host/resource_dispatcher_host.cc | 63 | ||||
-rw-r--r-- | content/browser/renderer_host/resource_dispatcher_host.h | 25 |
3 files changed, 36 insertions, 56 deletions
diff --git a/content/browser/DEPS b/content/browser/DEPS index b3b6dbb..1ed42d6 100644 --- a/content/browser/DEPS +++ b/content/browser/DEPS @@ -53,10 +53,6 @@ include_rules = [ "+chrome/browser/prefs/pref_service.h",
"+chrome/common/pref_names.h",
- # http://crbug.com/77090
- "+chrome/browser/prerender/prerender_manager.h",
- "+chrome/browser/prerender/prerender_tracker.h",
-
# http://crbug.com/76788
"+chrome/browser/profiles/profile.h",
diff --git a/content/browser/renderer_host/resource_dispatcher_host.cc b/content/browser/renderer_host/resource_dispatcher_host.cc index 3567285..8aade02 100644 --- a/content/browser/renderer_host/resource_dispatcher_host.cc +++ b/content/browser/renderer_host/resource_dispatcher_host.cc @@ -24,8 +24,6 @@ #include "chrome/browser/download/download_util.h" #include "chrome/browser/download/save_file_manager.h" #include "chrome/browser/external_protocol/external_protocol_handler.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" @@ -280,7 +278,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); } @@ -432,54 +431,16 @@ 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. Otherwise, do a normal request to warm the cache. - 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; - } - // Otherwise, treat like a normal request, and fall-through. - } - - // Handle a PRERENDER motivated request. Very similar to rel=prefetch, these - // rel=prerender requests instead launch an early render of the entire page. - if (request_data.resource_type == ResourceType::PRERENDER) { - if (prerender::PrerenderManager::IsPrerenderingPossible()) { - BrowserThread::PostTask( - BrowserThread::UI, FROM_HERE, - NewRunnableFunction(prerender::HandleTag, - resource_context.prerender_manager(), - child_id, - route_id, - request_data.url, - referrer, - is_prerendering)); - } - // Prerendering or not, this request should stop. + + // 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; } - // 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; - } - } - // Construct the event handler. scoped_refptr<ResourceHandler> handler; if (sync_result) { @@ -527,12 +488,13 @@ void ResourceDispatcherHost::BeginRequest( load_flags |= net::LOAD_DO_NOT_PROMPT_FOR_LOGIN; } - if (is_prerendering) - load_flags |= net::LOAD_PRERENDERING; - 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) @@ -2048,7 +2010,6 @@ net::RequestPriority ResourceDispatcherHost::DetermineRequestPriority( } } - // static bool ResourceDispatcherHost::is_prefetch_enabled() { return is_prefetch_enabled_; diff --git a/content/browser/renderer_host/resource_dispatcher_host.h b/content/browser/renderer_host/resource_dispatcher_host.h index 3e007ef..d59fce4 100644 --- a/content/browser/renderer_host/resource_dispatcher_host.h +++ b/content/browser/renderer_host/resource_dispatcher_host.h @@ -59,6 +59,24 @@ class DeletableFileReference; class ResourceDispatcherHost : public net::URLRequest::Delegate { public: + class Observer { + public: + // Called when a request begins. Return false to abort the request. + virtual bool ShouldBeginRequest( + int child_id, int route_id, + const ResourceHostMsg_Request& request_data, + const content::ResourceContext& resource_context, + const GURL& referrer) = 0; + + // Called after the load flags have been set when a request begins. Use it + // to add or remove load flags. + virtual void MutateLoadFlags(int child_id, int route_id, + int* load_flags) = 0; + protected: + Observer() {} + virtual ~Observer() {} + }; + explicit ResourceDispatcherHost( const ResourceQueue::DelegateSet& resource_queue_delegates); virtual ~ResourceDispatcherHost(); @@ -244,6 +262,10 @@ class ResourceDispatcherHost : public net::URLRequest::Delegate { static bool is_prefetch_enabled(); static void set_is_prefetch_enabled(bool value); + // This does not take ownership of the observer. It is expected that the + // observer have a longer lifetime than the ResourceDispatcherHost. + void set_observer(Observer* observer) { observer_ = observer; } + private: FRIEND_TEST_ALL_PREFIXES(ResourceDispatcherHostTest, TestBlockedRequestsProcessDies); @@ -476,8 +498,9 @@ class ResourceDispatcherHost : public net::URLRequest::Delegate { // to the source of the message. ResourceMessageFilter* filter_; - static bool is_prefetch_enabled_; + Observer* observer_; + static bool is_prefetch_enabled_; DISALLOW_COPY_AND_ASSIGN(ResourceDispatcherHost); }; |