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

Side by Side Diff: chrome/browser/renderer_host/chrome_resource_dispatcher_host_observer.cc

Issue 6966017: Remove a chrome dependency by removing Prerender from ResourceDispatcherHost. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase to gavinp's changes Created 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/renderer_host/chrome_resource_dispatcher_host_observer. h"
6
7 #include "base/logging.h"
8 #include "chrome/browser/prerender/prerender_manager.h"
9 #include "chrome/browser/prerender/prerender_tracker.h"
10 #include "content/browser/browser_thread.h"
11 #include "content/browser/resource_context.h"
12 #include "content/common/resource_messages.h"
13 #include "net/base/load_flags.h"
14
15 ChromeResourceDispatcherHostObserver::ChromeResourceDispatcherHostObserver(
16 prerender::PrerenderTracker* prerender_tracker)
17 : prerender_tracker_(prerender_tracker) {
18 }
19
20 ChromeResourceDispatcherHostObserver::~ChromeResourceDispatcherHostObserver() {
21 }
22
23 bool ChromeResourceDispatcherHostObserver::ShouldBeginRequest(
24 int child_id, int route_id,
25 const ResourceHostMsg_Request& request_data,
26 const content::ResourceContext& resource_context,
27 const GURL& referrer) {
28 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
29 bool is_prerendering = prerender_tracker_->IsPrerenderingOnIOThread(
30 child_id, route_id);
31
32 // Handle a PREFETCH resource type. If prefetch is disabled, squelch the
33 // request. Otherwise, do a normal request to warm the cache.
34 if (request_data.resource_type == ResourceType::PREFETCH) {
35 // All PREFETCH requests should be GETs, but be defensive about it.
36 if (request_data.method != "GET")
37 return false;
38
39 // If prefetch is disabled, kill the request.
40 if (!ResourceDispatcherHost::is_prefetch_enabled())
41 return false;
42 }
43
44 // Handle a PRERENDER motivated request. Very similar to rel=prefetch, these
45 // rel=prerender requests instead launch an early render of the entire page.
46 if (request_data.resource_type == ResourceType::PRERENDER) {
47 if (prerender::PrerenderManager::IsPrerenderingPossible()) {
48 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
49 NewRunnableFunction(prerender::HandleTag,
50 resource_context.prerender_manager(),
51 child_id,
52 route_id,
53 request_data.url,
54 referrer,
55 is_prerendering));
56 return false;
mmenke 2011/05/24 19:50:20 You should be doing this one line down. If preren
dominich 2011/05/24 20:20:34 Good catch, thank you! Done.
57 }
58 }
59
60 // Abort any prerenders that spawn requests that use invalid HTTP methods.
61 if (is_prerendering &&
62 !prerender::PrerenderManager::IsValidHttpMethod(request_data.method)) {
63 prerender_tracker_->TryCancelOnIOThread(
64 child_id, route_id,
65 prerender::FINAL_STATUS_INVALID_HTTP_METHOD);
66 return false;
67 }
68
69 return true;
70 }
71
72 void ChromeResourceDispatcherHostObserver::MutateLoadFlags(int child_id,
73 int route_id,
74 int* load_flags) {
75 DCHECK(load_flags);
76 if (prerender_tracker_->IsPrerenderingOnIOThread(child_id, route_id))
77 *load_flags |= net::LOAD_PRERENDERING;
78 }
OLDNEW
« no previous file with comments | « chrome/browser/renderer_host/chrome_resource_dispatcher_host_observer.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698