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

Side by Side Diff: chrome/browser/renderer_host/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: Added generic resource_dispatcher_host_observer 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"
7 #include "chrome/browser/prerender/prerender_manager.h"
8 #include "chrome/browser/prerender/prerender_tracker.h"
9 #include "chrome/browser/renderer_host/resource_dispatcher_host_observer.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 ResourceDispatcherHostObserver::ResourceDispatcherHostObserver() {
16 }
17
18 ResourceDispatcherHostObserver::~ResourceDispatcherHostObserver() {
19 }
20
21 bool ResourceDispatcherHostObserver::ShouldBeginRequest(
22 int child_id, int route_id,
23 const ResourceHostMsg_Request& request_data,
24 const content::ResourceContext& resource_context,
25 const GURL& referrer) {
26 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
27 bool is_prerendering =
28 g_browser_process->prerender_tracker()->IsPrerenderingOnIOThread(
29 child_id, route_id);
30
31 // Handle a PREFETCH resource type.
32 if (request_data.resource_type == ResourceType::PREFETCH) {
33 // All PREFETCH requests should be GETs, but be defensive about it.
34 if (request_data.method != "GET")
35 return false;
36
37 // If prefetch is disabled, kill the request.
38 if (!ResourceDispatcherHost::is_prefetch_enabled())
39 return false;
40
41 // If prerendering is enabled, trigger a prerender for the URL and abort the
42 // request to prevent double-gets.
43 if (prerender::PrerenderManager::IsPrerenderingPossible()) {
44 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
45 NewRunnableFunction(prerender::HandlePrefetchTag,
46 resource_context.prerender_manager(),
47 child_id,
48 route_id,
49 request_data.url,
50 referrer,
51 is_prerendering));
52 return false;
53 }
54 }
55
56 // Abort any prerenders that spawn requests that use invalid HTTP methods.
57 if (is_prerendering &&
58 !prerender::PrerenderManager::IsValidHttpMethod(request_data.method)) {
59 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
60 NewRunnableFunction(
61 prerender::DestroyPreloadForRenderView,
62 resource_context.prerender_manager(),
63 child_id,
64 route_id,
65 prerender::FINAL_STATUS_INVALID_HTTP_METHOD));
66 return false;
67 }
68
69 return true;
70 }
71
72 void ResourceDispatcherHostObserver::MutateLoadFlags(int child_id,
73 int route_id,
74 int* load_flags) {
75 DCHECK(load_flags);
76 if (g_browser_process->prerender_tracker()->IsPrerenderingOnIOThread(
77 child_id, route_id)) {
78 *load_flags |= net::LOAD_PRERENDER;
79 }
80 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698