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 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 #include "extensions/common/constants.h" | 72 #include "extensions/common/constants.h" |
73 #include "extensions/common/extension_urls.h" | 73 #include "extensions/common/extension_urls.h" |
74 #include "extensions/common/manifest_handlers/mime_types_handler.h" | 74 #include "extensions/common/manifest_handlers/mime_types_handler.h" |
75 #include "extensions/common/user_script.h" | 75 #include "extensions/common/user_script.h" |
76 #endif | 76 #endif |
77 | 77 |
78 #if defined(ENABLE_SUPERVISED_USERS) | 78 #if defined(ENABLE_SUPERVISED_USERS) |
79 #include "chrome/browser/supervised_user/supervised_user_resource_throttle.h" | 79 #include "chrome/browser/supervised_user/supervised_user_resource_throttle.h" |
80 #endif | 80 #endif |
81 | 81 |
82 #if defined(ENABLE_ONE_CLICK_SIGNIN) | |
83 #include "chrome/browser/ui/sync/one_click_signin_helper.h" | |
84 #endif | |
85 | |
86 #if defined(USE_SYSTEM_PROTOBUF) | 82 #if defined(USE_SYSTEM_PROTOBUF) |
87 #include <google/protobuf/repeated_field.h> | 83 #include <google/protobuf/repeated_field.h> |
88 #else | 84 #else |
89 #include "third_party/protobuf/src/google/protobuf/repeated_field.h" | 85 #include "third_party/protobuf/src/google/protobuf/repeated_field.h" |
90 #endif | 86 #endif |
91 | 87 |
92 #if defined(OS_ANDROID) | 88 #if defined(OS_ANDROID) |
93 #include "chrome/browser/android/intercept_download_resource_throttle.h" | 89 #include "chrome/browser/android/intercept_download_resource_throttle.h" |
94 #include "components/navigation_interception/intercept_navigation_delegate.h" | 90 #include "components/navigation_interception/intercept_navigation_delegate.h" |
95 #endif | 91 #endif |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
432 bool is_off_the_record = io_data->IsOffTheRecord(); | 428 bool is_off_the_record = io_data->IsOffTheRecord(); |
433 variations::VariationsHttpHeaderProvider::GetInstance()-> | 429 variations::VariationsHttpHeaderProvider::GetInstance()-> |
434 AppendHeaders(request->url(), | 430 AppendHeaders(request->url(), |
435 is_off_the_record, | 431 is_off_the_record, |
436 !is_off_the_record && | 432 !is_off_the_record && |
437 io_data->GetMetricsEnabledStateOnIOThread(), | 433 io_data->GetMetricsEnabledStateOnIOThread(), |
438 &headers); | 434 &headers); |
439 request->SetExtraRequestHeaders(headers); | 435 request->SetExtraRequestHeaders(headers); |
440 } | 436 } |
441 | 437 |
442 #if defined(ENABLE_ONE_CLICK_SIGNIN) | |
443 AppendChromeSyncGaiaHeader(request, resource_context); | |
444 #endif | |
445 | |
446 #if defined(ENABLE_CONFIGURATION_POLICY) | 438 #if defined(ENABLE_CONFIGURATION_POLICY) |
447 if (io_data->policy_header_helper()) | 439 if (io_data->policy_header_helper()) |
448 io_data->policy_header_helper()->AddPolicyHeaders(request->url(), request); | 440 io_data->policy_header_helper()->AddPolicyHeaders(request->url(), request); |
449 #endif | 441 #endif |
450 | 442 |
451 signin::AppendMirrorRequestHeaderIfPossible( | 443 signin::AppendMirrorRequestHeaderIfPossible( |
452 request, GURL() /* redirect_url */, io_data, | 444 request, GURL() /* redirect_url */, io_data, |
453 info->GetChildID(), info->GetRouteID()); | 445 info->GetChildID(), info->GetRouteID()); |
454 | 446 |
455 AppendStandardResourceThrottles(request, | 447 AppendStandardResourceThrottles(request, |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
586 if (throttle) | 578 if (throttle) |
587 throttles->push_back(throttle); | 579 throttles->push_back(throttle); |
588 #endif | 580 #endif |
589 | 581 |
590 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); | 582 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); |
591 if (info->GetVisibilityState() == blink::WebPageVisibilityStatePrerender) { | 583 if (info->GetVisibilityState() == blink::WebPageVisibilityStatePrerender) { |
592 throttles->push_back(new prerender::PrerenderResourceThrottle(request)); | 584 throttles->push_back(new prerender::PrerenderResourceThrottle(request)); |
593 } | 585 } |
594 } | 586 } |
595 | 587 |
596 #if defined(ENABLE_ONE_CLICK_SIGNIN) | |
597 void ChromeResourceDispatcherHostDelegate::AppendChromeSyncGaiaHeader( | |
598 net::URLRequest* request, | |
599 content::ResourceContext* resource_context) { | |
600 static const char kAllowChromeSignIn[] = "Allow-Chrome-SignIn"; | |
601 | |
602 ProfileIOData* io_data = ProfileIOData::FromResourceContext(resource_context); | |
603 OneClickSigninHelper::Offer offer = | |
604 OneClickSigninHelper::CanOfferOnIOThread(request, io_data); | |
605 switch (offer) { | |
606 case OneClickSigninHelper::CAN_OFFER: | |
607 request->SetExtraRequestHeaderByName(kAllowChromeSignIn, "1", false); | |
608 break; | |
609 case OneClickSigninHelper::DONT_OFFER: | |
610 request->RemoveRequestHeaderByName(kAllowChromeSignIn); | |
611 break; | |
612 case OneClickSigninHelper::IGNORE_REQUEST: | |
613 break; | |
614 } | |
615 } | |
616 #endif | |
617 | |
618 bool ChromeResourceDispatcherHostDelegate::ShouldForceDownloadResource( | 588 bool ChromeResourceDispatcherHostDelegate::ShouldForceDownloadResource( |
619 const GURL& url, const std::string& mime_type) { | 589 const GURL& url, const std::string& mime_type) { |
620 #if defined(ENABLE_EXTENSIONS) | 590 #if defined(ENABLE_EXTENSIONS) |
621 // Special-case user scripts to get downloaded instead of viewed. | 591 // Special-case user scripts to get downloaded instead of viewed. |
622 return extensions::UserScript::IsURLUserScript(url, mime_type); | 592 return extensions::UserScript::IsURLUserScript(url, mime_type); |
623 #else | 593 #else |
624 return false; | 594 return false; |
625 #endif | 595 #endif |
626 } | 596 } |
627 | 597 |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
696 } | 666 } |
697 | 667 |
698 void ChromeResourceDispatcherHostDelegate::OnResponseStarted( | 668 void ChromeResourceDispatcherHostDelegate::OnResponseStarted( |
699 net::URLRequest* request, | 669 net::URLRequest* request, |
700 content::ResourceContext* resource_context, | 670 content::ResourceContext* resource_context, |
701 content::ResourceResponse* response, | 671 content::ResourceResponse* response, |
702 IPC::Sender* sender) { | 672 IPC::Sender* sender) { |
703 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); | 673 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); |
704 ProfileIOData* io_data = ProfileIOData::FromResourceContext(resource_context); | 674 ProfileIOData* io_data = ProfileIOData::FromResourceContext(resource_context); |
705 | 675 |
706 #if defined(ENABLE_ONE_CLICK_SIGNIN) | |
707 // See if the response contains the Google-Accounts-SignIn header. If so, | |
708 // then the user has just finished signing in, and the server is allowing the | |
709 // browser to suggest connecting the user's profile to the account. | |
710 OneClickSigninHelper::ShowInfoBarIfPossible(request, io_data, | |
711 info->GetChildID(), | |
712 info->GetRouteID()); | |
713 #endif | |
714 | |
715 // See if the response contains the X-Chrome-Manage-Accounts header. If so | 676 // See if the response contains the X-Chrome-Manage-Accounts header. If so |
716 // show the profile avatar bubble so that user can complete signin/out action | 677 // show the profile avatar bubble so that user can complete signin/out action |
717 // the native UI. | 678 // the native UI. |
718 signin::ProcessMirrorResponseHeaderIfExists(request, io_data, | 679 signin::ProcessMirrorResponseHeaderIfExists(request, io_data, |
719 info->GetChildID(), | 680 info->GetChildID(), |
720 info->GetRouteID()); | 681 info->GetRouteID()); |
721 | 682 |
722 // Build in additional protection for the chrome web store origin. | 683 // Build in additional protection for the chrome web store origin. |
723 #if defined(ENABLE_EXTENSIONS) | 684 #if defined(ENABLE_EXTENSIONS) |
724 GURL webstore_url(extension_urls::GetWebstoreLaunchURL()); | 685 GURL webstore_url(extension_urls::GetWebstoreLaunchURL()); |
(...skipping 29 matching lines...) Expand all Loading... |
754 | 715 |
755 void ChromeResourceDispatcherHostDelegate::OnRequestRedirected( | 716 void ChromeResourceDispatcherHostDelegate::OnRequestRedirected( |
756 const GURL& redirect_url, | 717 const GURL& redirect_url, |
757 net::URLRequest* request, | 718 net::URLRequest* request, |
758 content::ResourceContext* resource_context, | 719 content::ResourceContext* resource_context, |
759 content::ResourceResponse* response) { | 720 content::ResourceResponse* response) { |
760 ProfileIOData* io_data = ProfileIOData::FromResourceContext(resource_context); | 721 ProfileIOData* io_data = ProfileIOData::FromResourceContext(resource_context); |
761 | 722 |
762 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); | 723 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); |
763 | 724 |
764 #if defined(ENABLE_ONE_CLICK_SIGNIN) | |
765 // See if the response contains the Google-Accounts-SignIn header. If so, | |
766 // then the user has just finished signing in, and the server is allowing the | |
767 // browser to suggest connecting the user's profile to the account. | |
768 OneClickSigninHelper::ShowInfoBarIfPossible(request, io_data, | |
769 info->GetChildID(), | |
770 info->GetRouteID()); | |
771 AppendChromeSyncGaiaHeader(request, resource_context); | |
772 #endif | |
773 | |
774 // In the Mirror world, Chrome should append a X-Chrome-Connected header to | 725 // In the Mirror world, Chrome should append a X-Chrome-Connected header to |
775 // all Gaia requests from a connected profile so Gaia could return a 204 | 726 // all Gaia requests from a connected profile so Gaia could return a 204 |
776 // response and let Chrome handle the action with native UI. The only | 727 // response and let Chrome handle the action with native UI. The only |
777 // exception is requests from gaia webview, since the native profile | 728 // exception is requests from gaia webview, since the native profile |
778 // management UI is built on top of it. | 729 // management UI is built on top of it. |
779 signin::AppendMirrorRequestHeaderIfPossible(request, redirect_url, io_data, | 730 signin::AppendMirrorRequestHeaderIfPossible(request, redirect_url, io_data, |
780 info->GetChildID(), info->GetRouteID()); | 731 info->GetChildID(), info->GetRouteID()); |
781 | 732 |
782 if (io_data->resource_prefetch_predictor_observer()) { | 733 if (io_data->resource_prefetch_predictor_observer()) { |
783 io_data->resource_prefetch_predictor_observer()->OnRequestRedirected( | 734 io_data->resource_prefetch_predictor_observer()->OnRequestRedirected( |
(...skipping 21 matching lines...) Expand all Loading... |
805 url_request->GetTotalReceivedBytes())); | 756 url_request->GetTotalReceivedBytes())); |
806 } | 757 } |
807 } | 758 } |
808 | 759 |
809 // static | 760 // static |
810 void ChromeResourceDispatcherHostDelegate:: | 761 void ChromeResourceDispatcherHostDelegate:: |
811 SetExternalProtocolHandlerDelegateForTesting( | 762 SetExternalProtocolHandlerDelegateForTesting( |
812 ExternalProtocolHandler::Delegate* delegate) { | 763 ExternalProtocolHandler::Delegate* delegate) { |
813 g_external_protocol_handler_delegate = delegate; | 764 g_external_protocol_handler_delegate = delegate; |
814 } | 765 } |
OLD | NEW |