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

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

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

Powered by Google App Engine
This is Rietveld 408576698