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

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: Passing tracker through. 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 "base/logging.h"
6 #include "chrome/browser/browser_process.h"
mmenke 2011/05/24 17:56:22 Is this needed?
dominich 2011/05/24 18:01:47 Done.
7 #include "chrome/browser/prerender/prerender_manager.h"
8 #include "chrome/browser/prerender/prerender_tracker.h"
9 #include "chrome/browser/renderer_host/chrome_resource_dispatcher_host_observer. h"
cbentzel 2011/05/24 17:13:54 I think this is supposed to come before the other
dominich 2011/05/24 18:01:47 Done.
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.
33 if (request_data.resource_type == ResourceType::PREFETCH) {
cbentzel 2011/05/24 17:13:54 Depending on when Gavin's prerender change goes in
34 // All PREFETCH requests should be GETs, but be defensive about it.
35 if (request_data.method != "GET")
36 return false;
37
38 // If prefetch is disabled, kill the request.
39 if (!ResourceDispatcherHost::is_prefetch_enabled())
40 return false;
41
42 // If prerendering is enabled, trigger a prerender for the URL and abort the
43 // request to prevent double-gets.
44 if (prerender::PrerenderManager::IsPrerenderingPossible()) {
45 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
46 NewRunnableFunction(prerender::HandlePrefetchTag,
47 resource_context.prerender_manager(),
48 child_id,
49 route_id,
50 request_data.url,
51 referrer,
52 is_prerendering));
53 return false;
54 }
55 }
56
57 // Abort any prerenders that spawn requests that use invalid HTTP methods.
58 if (is_prerendering &&
59 !prerender::PrerenderManager::IsValidHttpMethod(request_data.method)) {
60 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
cbentzel 2011/05/24 17:13:54 This should be using prerender_tracker->TryCancelO
dominich 2011/05/24 18:01:47 Done.
61 NewRunnableFunction(
62 prerender::DestroyPreloadForRenderView,
63 resource_context.prerender_manager(),
64 child_id,
65 route_id,
66 prerender::FINAL_STATUS_INVALID_HTTP_METHOD));
67 return false;
68 }
69
70 return true;
71 }
72
73 void ChromeResourceDispatcherHostObserver::MutateLoadFlags(int child_id,
74 int route_id,
75 int* load_flags) {
76 DCHECK(load_flags);
77 if (prerender_tracker_->IsPrerenderingOnIOThread(child_id, route_id))
78 *load_flags |= net::LOAD_PRERENDER;
79 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698