summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authordominich@chromium.org <dominich@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-25 19:03:27 +0000
committerdominich@chromium.org <dominich@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-25 19:03:27 +0000
commit1459fb6d13c6e8da1fd72a569e9410a1d038bd59 (patch)
tree869478ccf95444e29cffb9e5e70acc0015379057 /content
parent8b001f3e36a29f590e57d46e8e1b357685eb38c1 (diff)
downloadchromium_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/DEPS4
-rw-r--r--content/browser/renderer_host/resource_dispatcher_host.cc63
-rw-r--r--content/browser/renderer_host/resource_dispatcher_host.h25
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);
};