OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |