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

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

Issue 7058041: Remove ResourceDispatcherHost dependency on Chrome's LoginHandler and ExternalProtocolHandler. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix deps Created 9 years, 6 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/browser_process.h"
9 #include "chrome/browser/prerender/prerender_manager.h"
10 #include "chrome/browser/prerender/prerender_tracker.h"
11 #include "chrome/browser/renderer_host/safe_browsing_resource_handler.h"
12 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
13 #include "content/browser/browser_thread.h"
14 #include "content/browser/resource_context.h"
15 #include "content/browser/renderer_host/resource_dispatcher_host_request_info.h"
16 #include "content/common/resource_messages.h"
17 #include "net/base/load_flags.h"
18
19 // TODO(oshima): Enable this for other platforms.
20 #if defined(OS_CHROMEOS)
21 #include "chrome/browser/renderer_host/offline_resource_handler.h"
22 #endif
23
24 ChromeResourceDispatcherHostObserver::ChromeResourceDispatcherHostObserver(
25 ResourceDispatcherHost* resource_dispatcher_host,
26 prerender::PrerenderTracker* prerender_tracker)
27 : resource_dispatcher_host_(resource_dispatcher_host),
28 safe_browsing_(g_browser_process->safe_browsing_service()),
29 prerender_tracker_(prerender_tracker) {
30 }
31
32 ChromeResourceDispatcherHostObserver::~ChromeResourceDispatcherHostObserver() {
33 }
34
35 bool ChromeResourceDispatcherHostObserver::ShouldBeginRequest(
36 int child_id, int route_id,
37 const ResourceHostMsg_Request& request_data,
38 const content::ResourceContext& resource_context,
39 const GURL& referrer) {
40 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
41
42 // Handle a PREFETCH resource type. If prefetch is disabled, squelch the
43 // request. Otherwise, do a normal request to warm the cache.
44 if (request_data.resource_type == ResourceType::PREFETCH) {
45 // All PREFETCH requests should be GETs, but be defensive about it.
46 if (request_data.method != "GET")
47 return false;
48
49 // If prefetch is disabled, kill the request.
50 if (!ResourceDispatcherHost::is_prefetch_enabled())
51 return false;
52 }
53
54 // Handle a PRERENDER motivated request. Very similar to rel=prefetch, these
55 // rel=prerender requests instead launch an early render of the entire page.
56 if (request_data.resource_type == ResourceType::PRERENDER) {
57 if (prerender::PrerenderManager::IsPrerenderingPossible()) {
58 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
59 NewRunnableFunction(prerender::HandleTag,
60 resource_context.prerender_manager(),
61 child_id,
62 route_id,
63 request_data.url,
64 referrer));
65 }
66 // Prerendering or not, this request should be aborted.
67 return false;
68 }
69
70 // Abort any prerenders that spawn requests that use invalid HTTP methods.
71 if (prerender_tracker_->IsPrerenderingOnIOThread(child_id, route_id) &&
72 !prerender::PrerenderManager::IsValidHttpMethod(request_data.method)) {
73 prerender_tracker_->TryCancelOnIOThread(
74 child_id, route_id,
75 prerender::FINAL_STATUS_INVALID_HTTP_METHOD);
76 return false;
77 }
78
79 return true;
80 }
81
82 void ChromeResourceDispatcherHostObserver::RequestBeginning(
83 ResourceHandler** handler,
84 net::URLRequest* request,
85 bool is_subresource,
86 int child_id,
87 int route_id) {
88 if (prerender_tracker_->IsPrerenderingOnIOThread(child_id, route_id))
89 request->set_load_flags(request->load_flags() | net::LOAD_PRERENDERING);
90
91 // Insert safe browsing at the front of the chain, so it gets to decide
92 // on policies first.
93 if (safe_browsing_->enabled()) {
94 *handler = CreateSafeBrowsingResourceHandler(
95 *handler, child_id, route_id, is_subresource);
96 }
97
98 #if defined(OS_CHROMEOS)
99 // We check offline first, then check safe browsing so that we still can block
100 // unsafe site after we remove offline page.
101 *handler = new OfflineResourceHandler(
102 *handler, child_id, route_id, resource_dispatcher_host_, request);
103 #endif
104 }
105
106 void ChromeResourceDispatcherHostObserver::DownloadStarting(
107 ResourceHandler** handler,
108 int child_id,
109 int route_id) {
110 if (safe_browsing_->enabled()) {
111 *handler = CreateSafeBrowsingResourceHandler(
112 *handler, child_id, route_id, false);
113 }
114 }
115
116 bool ChromeResourceDispatcherHostObserver::ShouldDeferStart(
117 net::URLRequest* request,
118 const content::ResourceContext& resource_context) {
119 ResourceDispatcherHostRequestInfo* info =
120 resource_dispatcher_host_->InfoForRequest(request);
121 return prerender_tracker_->PotentiallyDelayRequestOnIOThread(
122 request->url(), resource_context.prerender_manager(),
123 info->child_id(), info->route_id(), info->request_id());
124 }
125
126 bool ChromeResourceDispatcherHostObserver::AcceptSSLClientCertificateRequest(
127 net::URLRequest* request, net::SSLCertRequestInfo* cert_request_info) {
128 if (request->load_flags() & net::LOAD_PREFETCH)
129 return false;
130
131 if (request->load_flags() & net::LOAD_PRERENDERING) {
132 int child_id, route_id;
133 if (ResourceDispatcherHost::RenderViewForRequest(
134 request, &child_id, &route_id)) {
135 if (prerender_tracker_->TryCancel(
136 child_id, route_id,
137 prerender::FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED)) {
138 return false;
139 }
140 }
141 }
142
143 return true;
144 }
145
146 bool ChromeResourceDispatcherHostObserver::AcceptAuthRequest(
147 net::URLRequest* request,
148 net::AuthChallengeInfo* auth_info) {
149 if (!(request->load_flags() & net::LOAD_PRERENDERING))
150 return true;
151
152 int child_id, route_id;
153 if (!ResourceDispatcherHost::RenderViewForRequest(
154 request, &child_id, &route_id)) {
155 NOTREACHED();
156 return true;
157 }
158
159 if (!prerender_tracker_->TryCancelOnIOThread(
160 child_id, route_id, prerender::FINAL_STATUS_AUTH_NEEDED)) {
161 return true;
162 }
163
164 return false;
165 }
166
167 ResourceHandler*
168 ChromeResourceDispatcherHostObserver::CreateSafeBrowsingResourceHandler(
169 ResourceHandler* handler, int child_id, int route_id,
170 bool subresource) {
171 return SafeBrowsingResourceHandler::Create(
172 handler, child_id, route_id, subresource, safe_browsing_,
173 resource_dispatcher_host_);
174 }
OLDNEW
« no previous file with comments | « chrome/browser/renderer_host/chrome_resource_dispatcher_host_observer.h ('k') | chrome/browser/ui/login/login_prompt.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698