| 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 <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/base64.h" | 10 #include "base/base64.h" |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 prerender_tracker_(prerender_tracker) { | 264 prerender_tracker_(prerender_tracker) { |
| 265 } | 265 } |
| 266 | 266 |
| 267 ChromeResourceDispatcherHostDelegate::~ChromeResourceDispatcherHostDelegate() { | 267 ChromeResourceDispatcherHostDelegate::~ChromeResourceDispatcherHostDelegate() { |
| 268 #if defined(ENABLE_EXTENSIONS) | 268 #if defined(ENABLE_EXTENSIONS) |
| 269 CHECK(stream_target_info_.empty()); | 269 CHECK(stream_target_info_.empty()); |
| 270 #endif | 270 #endif |
| 271 } | 271 } |
| 272 | 272 |
| 273 bool ChromeResourceDispatcherHostDelegate::ShouldBeginRequest( | 273 bool ChromeResourceDispatcherHostDelegate::ShouldBeginRequest( |
| 274 int child_id, | |
| 275 int route_id, | |
| 276 const std::string& method, | 274 const std::string& method, |
| 277 const GURL& url, | 275 const GURL& url, |
| 278 ResourceType resource_type, | 276 ResourceType resource_type, |
| 279 content::ResourceContext* resource_context) { | 277 content::ResourceContext* resource_context) { |
| 280 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 278 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 281 | 279 |
| 282 // Handle a PREFETCH resource type. If prefetch is disabled, squelch the | 280 // Handle a PREFETCH resource type. If prefetch is disabled, squelch the |
| 283 // request. Otherwise, do a normal request to warm the cache. | 281 // request. Otherwise, do a normal request to warm the cache. |
| 284 if (resource_type == content::RESOURCE_TYPE_PREFETCH) { | 282 if (resource_type == content::RESOURCE_TYPE_PREFETCH) { |
| 285 // All PREFETCH requests should be GETs, but be defensive about it. | 283 // All PREFETCH requests should be GETs, but be defensive about it. |
| 286 if (method != "GET") | 284 if (method != "GET") |
| 287 return false; | 285 return false; |
| 288 | 286 |
| 289 // If prefetch is disabled, kill the request. | 287 // If prefetch is disabled, kill the request. |
| 290 if (!prefetch::IsPrefetchEnabled(resource_context)) | 288 if (!prefetch::IsPrefetchEnabled(resource_context)) |
| 291 return false; | 289 return false; |
| 292 } | 290 } |
| 293 | 291 |
| 294 return true; | 292 return true; |
| 295 } | 293 } |
| 296 | 294 |
| 297 void ChromeResourceDispatcherHostDelegate::RequestBeginning( | 295 void ChromeResourceDispatcherHostDelegate::RequestBeginning( |
| 298 net::URLRequest* request, | 296 net::URLRequest* request, |
| 299 content::ResourceContext* resource_context, | 297 content::ResourceContext* resource_context, |
| 300 content::AppCacheService* appcache_service, | 298 content::AppCacheService* appcache_service, |
| 301 ResourceType resource_type, | 299 ResourceType resource_type, |
| 302 int child_id, | |
| 303 int route_id, | |
| 304 ScopedVector<content::ResourceThrottle>* throttles) { | 300 ScopedVector<content::ResourceThrottle>* throttles) { |
| 305 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); | 301 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); |
| 306 bool is_prerendering = | 302 bool is_prerendering = |
| 307 info->GetVisibilityState() == blink::WebPageVisibilityStatePrerender; | 303 info->GetVisibilityState() == blink::WebPageVisibilityStatePrerender; |
| 308 if (is_prerendering) { | 304 if (is_prerendering) { |
| 309 // Requests with the IGNORE_LIMITS flag set (i.e., sync XHRs) | 305 // Requests with the IGNORE_LIMITS flag set (i.e., sync XHRs) |
| 310 // should remain at MAXIMUM_PRIORITY. | 306 // should remain at MAXIMUM_PRIORITY. |
| 311 if (request->load_flags() & net::LOAD_IGNORE_LIMITS) { | 307 if (request->load_flags() & net::LOAD_IGNORE_LIMITS) { |
| 312 DCHECK_EQ(request->priority(), net::MAXIMUM_PRIORITY); | 308 DCHECK_EQ(request->priority(), net::MAXIMUM_PRIORITY); |
| 313 } else { | 309 } else { |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 388 #if defined(ENABLE_ONE_CLICK_SIGNIN) | 384 #if defined(ENABLE_ONE_CLICK_SIGNIN) |
| 389 AppendChromeSyncGaiaHeader(request, resource_context); | 385 AppendChromeSyncGaiaHeader(request, resource_context); |
| 390 #endif | 386 #endif |
| 391 | 387 |
| 392 #if defined(ENABLE_CONFIGURATION_POLICY) | 388 #if defined(ENABLE_CONFIGURATION_POLICY) |
| 393 if (io_data->policy_header_helper()) | 389 if (io_data->policy_header_helper()) |
| 394 io_data->policy_header_helper()->AddPolicyHeaders(request->url(), request); | 390 io_data->policy_header_helper()->AddPolicyHeaders(request->url(), request); |
| 395 #endif | 391 #endif |
| 396 | 392 |
| 397 signin::AppendMirrorRequestHeaderIfPossible( | 393 signin::AppendMirrorRequestHeaderIfPossible( |
| 398 request, GURL() /* redirect_url */, | 394 request, GURL() /* redirect_url */, io_data); |
| 399 io_data, info->GetChildID(), info->GetRouteID()); | |
| 400 | 395 |
| 401 AppendStandardResourceThrottles(request, | 396 AppendStandardResourceThrottles(request, |
| 402 resource_context, | 397 resource_context, |
| 403 resource_type, | 398 resource_type, |
| 404 throttles); | 399 throttles); |
| 405 if (!is_prerendering) { | 400 if (!is_prerendering) { |
| 406 AppendComponentUpdaterThrottles(request, | 401 AppendComponentUpdaterThrottles(request, |
| 407 resource_context, | 402 resource_context, |
| 408 resource_type, | 403 resource_type, |
| 409 throttles); | 404 throttles); |
| (...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 685 | 680 |
| 686 prerender::URLRequestResponseStarted(request); | 681 prerender::URLRequestResponseStarted(request); |
| 687 } | 682 } |
| 688 | 683 |
| 689 void ChromeResourceDispatcherHostDelegate::OnRequestRedirected( | 684 void ChromeResourceDispatcherHostDelegate::OnRequestRedirected( |
| 690 const GURL& redirect_url, | 685 const GURL& redirect_url, |
| 691 net::URLRequest* request, | 686 net::URLRequest* request, |
| 692 content::ResourceContext* resource_context, | 687 content::ResourceContext* resource_context, |
| 693 content::ResourceResponse* response) { | 688 content::ResourceResponse* response) { |
| 694 ProfileIOData* io_data = ProfileIOData::FromResourceContext(resource_context); | 689 ProfileIOData* io_data = ProfileIOData::FromResourceContext(resource_context); |
| 690 |
| 691 #if defined(ENABLE_ONE_CLICK_SIGNIN) |
| 695 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); | 692 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); |
| 696 | 693 |
| 697 #if defined(ENABLE_ONE_CLICK_SIGNIN) | |
| 698 // See if the response contains the Google-Accounts-SignIn header. If so, | 694 // See if the response contains the Google-Accounts-SignIn header. If so, |
| 699 // then the user has just finished signing in, and the server is allowing the | 695 // then the user has just finished signing in, and the server is allowing the |
| 700 // browser to suggest connecting the user's profile to the account. | 696 // browser to suggest connecting the user's profile to the account. |
| 701 OneClickSigninHelper::ShowInfoBarIfPossible(request, io_data, | 697 OneClickSigninHelper::ShowInfoBarIfPossible(request, io_data, |
| 702 info->GetChildID(), | 698 info->GetChildID(), |
| 703 info->GetRouteID()); | 699 info->GetRouteID()); |
| 704 AppendChromeSyncGaiaHeader(request, resource_context); | 700 AppendChromeSyncGaiaHeader(request, resource_context); |
| 705 #endif | 701 #endif |
| 706 | 702 |
| 707 // In the Mirror world, Chrome should append a X-Chrome-Connected header to | 703 // In the Mirror world, Chrome should append a X-Chrome-Connected header to |
| 708 // all Gaia requests from a connected profile so Gaia could return a 204 | 704 // all Gaia requests from a connected profile so Gaia could return a 204 |
| 709 // response and let Chrome handle the action with native UI. The only | 705 // response and let Chrome handle the action with native UI. The only |
| 710 // exception is requests from gaia webview, since the native profile | 706 // exception is requests from gaia webview, since the native profile |
| 711 // management UI is built on top of it. | 707 // management UI is built on top of it. |
| 712 signin::AppendMirrorRequestHeaderIfPossible(request, redirect_url, io_data, | 708 signin::AppendMirrorRequestHeaderIfPossible(request, redirect_url, io_data); |
| 713 info->GetChildID(), info->GetRouteID()); | |
| 714 | 709 |
| 715 #if defined(ENABLE_CONFIGURATION_POLICY) | 710 #if defined(ENABLE_CONFIGURATION_POLICY) |
| 716 if (io_data->policy_header_helper()) | 711 if (io_data->policy_header_helper()) |
| 717 io_data->policy_header_helper()->AddPolicyHeaders(redirect_url, request); | 712 io_data->policy_header_helper()->AddPolicyHeaders(redirect_url, request); |
| 718 #endif | 713 #endif |
| 719 } | 714 } |
| 720 | 715 |
| 721 // Notification that a request has completed. | 716 // Notification that a request has completed. |
| 722 void ChromeResourceDispatcherHostDelegate::RequestComplete( | 717 void ChromeResourceDispatcherHostDelegate::RequestComplete( |
| 723 net::URLRequest* url_request) { | 718 net::URLRequest* url_request) { |
| 724 // Jump on the UI thread and inform the prerender about the bytes. | 719 // Jump on the UI thread and inform the prerender about the bytes. |
| 725 const ResourceRequestInfo* info = | 720 const ResourceRequestInfo* info = |
| 726 ResourceRequestInfo::ForRequest(url_request); | 721 ResourceRequestInfo::ForRequest(url_request); |
| 727 if (url_request && !url_request->was_cached()) { | 722 if (url_request && !url_request->was_cached()) { |
| 728 BrowserThread::PostTask(BrowserThread::UI, | 723 BrowserThread::PostTask(BrowserThread::UI, |
| 729 FROM_HERE, | 724 FROM_HERE, |
| 730 base::Bind(&UpdatePrerenderNetworkBytesCallback, | 725 base::Bind(&UpdatePrerenderNetworkBytesCallback, |
| 731 info->GetChildID(), | 726 info->GetChildID(), |
| 732 info->GetRouteID(), | 727 info->GetRouteID(), |
| 733 url_request->GetTotalReceivedBytes())); | 728 url_request->GetTotalReceivedBytes())); |
| 734 } | 729 } |
| 735 } | 730 } |
| 736 | 731 |
| 737 // static | 732 // static |
| 738 void ChromeResourceDispatcherHostDelegate:: | 733 void ChromeResourceDispatcherHostDelegate:: |
| 739 SetExternalProtocolHandlerDelegateForTesting( | 734 SetExternalProtocolHandlerDelegateForTesting( |
| 740 ExternalProtocolHandler::Delegate* delegate) { | 735 ExternalProtocolHandler::Delegate* delegate) { |
| 741 g_external_protocol_handler_delegate = delegate; | 736 g_external_protocol_handler_delegate = delegate; |
| 742 } | 737 } |
| OLD | NEW |