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

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

Issue 23847004: "Redirecting URLs to Packaged Apps" implementation: revised (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Limit interception to http:// and https:// Created 7 years, 3 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 <string> 7 #include <string>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 57
58 #if defined(USE_SYSTEM_PROTOBUF) 58 #if defined(USE_SYSTEM_PROTOBUF)
59 #include <google/protobuf/repeated_field.h> 59 #include <google/protobuf/repeated_field.h>
60 #else 60 #else
61 #include "third_party/protobuf/src/google/protobuf/repeated_field.h" 61 #include "third_party/protobuf/src/google/protobuf/repeated_field.h"
62 #endif 62 #endif
63 63
64 #if defined(OS_ANDROID) 64 #if defined(OS_ANDROID)
65 #include "chrome/browser/android/intercept_download_resource_throttle.h" 65 #include "chrome/browser/android/intercept_download_resource_throttle.h"
66 #include "components/navigation_interception/intercept_navigation_delegate.h" 66 #include "components/navigation_interception/intercept_navigation_delegate.h"
67 #else
68 #include "chrome/browser/apps/app_url_redirector.h"
67 #endif 69 #endif
68 70
69 #if defined(OS_CHROMEOS) 71 #if defined(OS_CHROMEOS)
70 #include "chrome/browser/chromeos/login/merge_session_throttle.h" 72 #include "chrome/browser/chromeos/login/merge_session_throttle.h"
71 // TODO(oshima): Enable this for other platforms. 73 // TODO(oshima): Enable this for other platforms.
72 #include "chrome/browser/renderer_host/offline_resource_throttle.h" 74 #include "chrome/browser/renderer_host/offline_resource_throttle.h"
73 #endif 75 #endif
74 76
75 using content::BrowserThread; 77 using content::BrowserThread;
76 using content::RenderViewHost; 78 using content::RenderViewHost;
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 257
256 ChromeURLRequestUserData* user_data = 258 ChromeURLRequestUserData* user_data =
257 ChromeURLRequestUserData::Create(request); 259 ChromeURLRequestUserData::Create(request);
258 bool is_prerendering = prerender_tracker_->IsPrerenderingOnIOThread( 260 bool is_prerendering = prerender_tracker_->IsPrerenderingOnIOThread(
259 child_id, route_id); 261 child_id, route_id);
260 if (is_prerendering) { 262 if (is_prerendering) {
261 user_data->set_is_prerender(true); 263 user_data->set_is_prerender(true);
262 request->SetPriority(net::IDLE); 264 request->SetPriority(net::IDLE);
263 } 265 }
264 266
267 ProfileIOData* io_data = ProfileIOData::FromResourceContext(
268 resource_context);
269
270 if (!is_prerendering && resource_type == ResourceType::MAIN_FRAME) {
265 #if defined(OS_ANDROID) 271 #if defined(OS_ANDROID)
266 if (!is_prerendering && resource_type == ResourceType::MAIN_FRAME) {
267 throttles->push_back( 272 throttles->push_back(
268 InterceptNavigationDelegate::CreateThrottleFor(request)); 273 InterceptNavigationDelegate::CreateThrottleFor(request));
274 #else
275 // Redirect some navigations to apps that have registered matching URL
276 // handlers ('url_handlers' in the manifest).
277 content::ResourceThrottle* url_to_app_throttle =
278 AppUrlRedirector::MaybeCreateThrottleFor(request, io_data);
279 if (url_to_app_throttle)
280 throttles->push_back(url_to_app_throttle);
281 #endif
269 } 282 }
270 #endif 283
271 #if defined(OS_CHROMEOS) 284 #if defined(OS_CHROMEOS)
272 if (resource_type == ResourceType::MAIN_FRAME) { 285 if (resource_type == ResourceType::MAIN_FRAME) {
273 // We check offline first, then check safe browsing so that we still can 286 // We check offline first, then check safe browsing so that we still can
274 // block unsafe site after we remove offline page. 287 // block unsafe site after we remove offline page.
275 throttles->push_back(new OfflineResourceThrottle( 288 throttles->push_back(new OfflineResourceThrottle(
276 child_id, route_id, request, appcache_service)); 289 child_id, route_id, request, appcache_service));
277 // Add interstitial page while merge session process (cookie 290 // Add interstitial page while merge session process (cookie
278 // reconstruction from OAuth2 refresh token in ChromeOS login) is still in 291 // reconstruction from OAuth2 refresh token in ChromeOS login) is still in
279 // progress while we are attempting to load a google property. 292 // progress while we are attempting to load a google property.
280 throttles->push_back(new MergeSessionThrottle( 293 throttles->push_back(new MergeSessionThrottle(
281 child_id, route_id, request)); 294 child_id, route_id, request));
282 } 295 }
283 #endif 296 #endif
284 297
285 // Don't attempt to append headers to requests that have already started. 298 // Don't attempt to append headers to requests that have already started.
286 // TODO(stevet): Remove this once the request ordering issues are resolved 299 // TODO(stevet): Remove this once the request ordering issues are resolved
287 // in crbug.com/128048. 300 // in crbug.com/128048.
288 if (!request->is_pending()) { 301 if (!request->is_pending()) {
289 net::HttpRequestHeaders headers; 302 net::HttpRequestHeaders headers;
290 headers.CopyFrom(request->extra_request_headers()); 303 headers.CopyFrom(request->extra_request_headers());
291 ProfileIOData* io_data = ProfileIOData::FromResourceContext(
292 resource_context);
293 bool incognito = io_data->is_incognito(); 304 bool incognito = io_data->is_incognito();
294 chrome_variations::VariationsHttpHeaderProvider::GetInstance()-> 305 chrome_variations::VariationsHttpHeaderProvider::GetInstance()->
295 AppendHeaders(request->url(), 306 AppendHeaders(request->url(),
296 incognito, 307 incognito,
297 !incognito && io_data->GetMetricsEnabledStateOnIOThread(), 308 !incognito && io_data->GetMetricsEnabledStateOnIOThread(),
298 &headers); 309 &headers);
299 request->SetExtraRequestHeaders(headers); 310 request->SetExtraRequestHeaders(headers);
300 } 311 }
301 312
302 #if defined(ENABLE_ONE_CLICK_SIGNIN) 313 #if defined(ENABLE_ONE_CLICK_SIGNIN)
303 AppendChromeSyncGaiaHeader(request, resource_context); 314 AppendChromeSyncGaiaHeader(request, resource_context);
304 #endif 315 #endif
305 316
306 AppendStandardResourceThrottles(request, 317 AppendStandardResourceThrottles(request,
307 resource_context, 318 resource_context,
308 child_id, 319 child_id,
309 route_id, 320 route_id,
310 resource_type, 321 resource_type,
311 throttles); 322 throttles);
312 323
313 ProfileIOData* io_data = ProfileIOData::FromResourceContext(resource_context);
314 if (io_data->resource_prefetch_predictor_observer()) { 324 if (io_data->resource_prefetch_predictor_observer()) {
315 io_data->resource_prefetch_predictor_observer()->OnRequestStarted( 325 io_data->resource_prefetch_predictor_observer()->OnRequestStarted(
316 request, resource_type, child_id, route_id); 326 request, resource_type, child_id, route_id);
317 } 327 }
318 } 328 }
319 329
320 void ChromeResourceDispatcherHostDelegate::DownloadStarting( 330 void ChromeResourceDispatcherHostDelegate::DownloadStarting(
321 net::URLRequest* request, 331 net::URLRequest* request,
322 content::ResourceContext* resource_context, 332 content::ResourceContext* resource_context,
323 int child_id, 333 int child_id,
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 if (!prerender::PrerenderManager::DoesURLHaveValidScheme(redirect_url) && 647 if (!prerender::PrerenderManager::DoesURLHaveValidScheme(redirect_url) &&
638 ResourceRequestInfo::ForRequest(request)->GetAssociatedRenderView( 648 ResourceRequestInfo::ForRequest(request)->GetAssociatedRenderView(
639 &child_id, &route_id) && 649 &child_id, &route_id) &&
640 prerender_tracker_->IsPrerenderingOnIOThread(child_id, route_id)) { 650 prerender_tracker_->IsPrerenderingOnIOThread(child_id, route_id)) {
641 ReportUnsupportedPrerenderScheme(redirect_url); 651 ReportUnsupportedPrerenderScheme(redirect_url);
642 prerender_tracker_->TryCancel( 652 prerender_tracker_->TryCancel(
643 child_id, route_id, prerender::FINAL_STATUS_UNSUPPORTED_SCHEME); 653 child_id, route_id, prerender::FINAL_STATUS_UNSUPPORTED_SCHEME);
644 request->Cancel(); 654 request->Cancel();
645 } 655 }
646 } 656 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698