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

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: Another round of comments 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.
33 if (request_data.resource_type == ResourceType::PREFETCH) {
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 prerender_tracker_->TryCancelOnIOThread(
61 child_id, route_id,
62 prerender::FINAL_STATUS_INVALID_HTTP_METHOD);
63 return false;
64 }
65
66 return true;
67 }
68
69 void ChromeResourceDispatcherHostObserver::MutateLoadFlags(int child_id,
70 int route_id,
71 int* load_flags) {
72 DCHECK(load_flags);
73 if (prerender_tracker_->IsPrerenderingOnIOThread(child_id, route_id))
74 *load_flags |= net::LOAD_PRERENDER;
75 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698