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

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

Issue 9875026: **NOTFORLANDING** New link rel=prerender API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: wdyt? Created 8 years, 9 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_delegate. h" 5 #include "chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate. h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "chrome/browser/browser_process.h" 8 #include "chrome/browser/browser_process.h"
9 #include "chrome/browser/content_settings/host_content_settings_map.h" 9 #include "chrome/browser/content_settings/host_content_settings_map.h"
10 #include "chrome/browser/download/download_request_limiter.h" 10 #include "chrome/browser/download/download_request_limiter.h"
11 #include "chrome/browser/download/download_resource_throttle.h" 11 #include "chrome/browser/download/download_resource_throttle.h"
12 #include "chrome/browser/download/download_util.h" 12 #include "chrome/browser/download/download_util.h"
13 #include "chrome/browser/extensions/user_script_listener.h" 13 #include "chrome/browser/extensions/user_script_listener.h"
14 #include "chrome/browser/external_protocol/external_protocol_handler.h" 14 #include "chrome/browser/external_protocol/external_protocol_handler.h"
15 #include "chrome/browser/instant/instant_loader.h" 15 #include "chrome/browser/instant/instant_loader.h"
16 #include "chrome/browser/net/load_timing_observer.h" 16 #include "chrome/browser/net/load_timing_observer.h"
17 #include "chrome/browser/prerender/prerender_manager.h" 17 #include "chrome/browser/prerender/prerender_manager.h"
18 #include "chrome/browser/prerender/prerender_manager_factory.h"
19 #include "chrome/browser/prerender/prerender_resource_throttle.h" 18 #include "chrome/browser/prerender/prerender_resource_throttle.h"
20 #include "chrome/browser/prerender/prerender_tracker.h" 19 #include "chrome/browser/prerender/prerender_tracker.h"
21 #include "chrome/browser/profiles/profile_io_data.h" 20 #include "chrome/browser/profiles/profile_io_data.h"
22 #include "chrome/browser/renderer_host/chrome_url_request_user_data.h" 21 #include "chrome/browser/renderer_host/chrome_url_request_user_data.h"
23 #include "chrome/browser/renderer_host/safe_browsing_resource_throttle.h" 22 #include "chrome/browser/renderer_host/safe_browsing_resource_throttle.h"
24 #include "chrome/browser/renderer_host/transfer_navigation_resource_throttle.h" 23 #include "chrome/browser/renderer_host/transfer_navigation_resource_throttle.h"
25 #include "chrome/browser/safe_browsing/safe_browsing_service.h" 24 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
26 #include "chrome/browser/ui/auto_login_prompter.h" 25 #include "chrome/browser/ui/auto_login_prompter.h"
27 #include "chrome/browser/ui/login/login_prompt.h" 26 #include "chrome/browser/ui/login/login_prompt.h"
28 #include "chrome/browser/ui/sync/one_click_signin_helper.h" 27 #include "chrome/browser/ui/sync/one_click_signin_helper.h"
(...skipping 15 matching lines...) Expand all
44 #include "chrome/browser/renderer_host/offline_resource_throttle.h" 43 #include "chrome/browser/renderer_host/offline_resource_throttle.h"
45 #endif 44 #endif
46 45
47 using content::BrowserThread; 46 using content::BrowserThread;
48 using content::RenderViewHost; 47 using content::RenderViewHost;
49 using content::ResourceDispatcherHostLoginDelegate; 48 using content::ResourceDispatcherHostLoginDelegate;
50 using content::ResourceRequestInfo; 49 using content::ResourceRequestInfo;
51 50
52 namespace { 51 namespace {
53 52
54 void AddPrerenderOnUI(
55 int render_process_id, int render_view_id,
56 const GURL& url, const content::Referrer& referrer) {
57 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
58 prerender::PrerenderManager* prerender_manager =
59 prerender::FindPrerenderManagerUsingRenderProcessId(render_process_id);
60 if (!prerender_manager || !prerender_manager->is_enabled())
61 return;
62
63 prerender_manager->AddPrerenderFromLinkRelPrerender(render_process_id,
64 render_view_id,
65 url,
66 referrer);
67 }
68
69 void NotifyDownloadInitiatedOnUI(int render_process_id, int render_view_id) { 53 void NotifyDownloadInitiatedOnUI(int render_process_id, int render_view_id) {
70 RenderViewHost* rvh = RenderViewHost::FromID(render_process_id, 54 RenderViewHost* rvh = RenderViewHost::FromID(render_process_id,
71 render_view_id); 55 render_view_id);
72 if (!rvh) 56 if (!rvh)
73 return; 57 return;
74 58
75 content::NotificationService::current()->Notify( 59 content::NotificationService::current()->Notify(
76 chrome::NOTIFICATION_DOWNLOAD_INITIATED, 60 chrome::NOTIFICATION_DOWNLOAD_INITIATED,
77 content::Source<RenderViewHost>(rvh), 61 content::Source<RenderViewHost>(rvh),
78 content::NotificationService::NoDetails()); 62 content::NotificationService::NoDetails());
(...skipping 27 matching lines...) Expand all
106 if (resource_type == ResourceType::PREFETCH) { 90 if (resource_type == ResourceType::PREFETCH) {
107 // All PREFETCH requests should be GETs, but be defensive about it. 91 // All PREFETCH requests should be GETs, but be defensive about it.
108 if (method != "GET") 92 if (method != "GET")
109 return false; 93 return false;
110 94
111 // If prefetch is disabled, kill the request. 95 // If prefetch is disabled, kill the request.
112 if (!prerender::PrerenderManager::IsPrefetchEnabled()) 96 if (!prerender::PrerenderManager::IsPrefetchEnabled())
113 return false; 97 return false;
114 } 98 }
115 99
116 // Handle a PRERENDER motivated request. Very similar to rel=prefetch, these
117 // rel=prerender requests instead launch an early render of the entire page.
118 if (resource_type == ResourceType::PRERENDER) {
119 if (prerender::PrerenderManager::IsPrerenderingPossible()) {
120 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
121 base::Bind(&AddPrerenderOnUI, child_id, route_id, url, referrer));
122 }
123 // Prerendering or not, this request should be aborted.
124 return false;
125 }
126
127 // Abort any prerenders that spawn requests that use invalid HTTP methods. 100 // Abort any prerenders that spawn requests that use invalid HTTP methods.
128 if (prerender_tracker_->IsPrerenderingOnIOThread(child_id, route_id) && 101 if (prerender_tracker_->IsPrerenderingOnIOThread(child_id, route_id) &&
129 !prerender::PrerenderManager::IsValidHttpMethod(method)) { 102 !prerender::PrerenderManager::IsValidHttpMethod(method)) {
130 prerender_tracker_->TryCancelOnIOThread( 103 prerender_tracker_->TryCancelOnIOThread(
131 child_id, route_id, prerender::FINAL_STATUS_INVALID_HTTP_METHOD); 104 child_id, route_id, prerender::FINAL_STATUS_INVALID_HTTP_METHOD);
132 return false; 105 return false;
133 } 106 }
134 107
135 return true; 108 return true;
136 } 109 }
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 #if defined(ENABLE_ONE_CLICK_SIGNIN) 317 #if defined(ENABLE_ONE_CLICK_SIGNIN)
345 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); 318 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request);
346 319
347 // See if the response contains the X-Google-Accounts-SignIn header. If so, 320 // See if the response contains the X-Google-Accounts-SignIn header. If so,
348 // then the user has just finished signing in, and the server is allowing the 321 // then the user has just finished signing in, and the server is allowing the
349 // browser to suggest connecting the user's profile to the account. 322 // browser to suggest connecting the user's profile to the account.
350 OneClickSigninHelper::ShowInfoBarIfPossible(request, info->GetChildID(), 323 OneClickSigninHelper::ShowInfoBarIfPossible(request, info->GetChildID(),
351 info->GetRouteID()); 324 info->GetRouteID());
352 #endif 325 #endif
353 } 326 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698