| 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 <list> | 5 #include <list> |
| 6 #include <map> | 6 #include <map> |
| 7 #include <set> | 7 #include <set> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 #include "content/public/browser/notification_service.h" | 46 #include "content/public/browser/notification_service.h" |
| 47 #include "content/public/browser/notification_source.h" | 47 #include "content/public/browser/notification_source.h" |
| 48 #include "content/public/test/test_browser_thread_bundle.h" | 48 #include "content/public/test/test_browser_thread_bundle.h" |
| 49 #include "content/public/test/test_utils.h" | 49 #include "content/public/test/test_utils.h" |
| 50 #include "extensions/browser/extension_prefs.h" | 50 #include "extensions/browser/extension_prefs.h" |
| 51 #include "extensions/browser/extension_registry.h" | 51 #include "extensions/browser/extension_registry.h" |
| 52 #include "extensions/browser/extension_system.h" | 52 #include "extensions/browser/extension_system.h" |
| 53 #include "extensions/common/extension.h" | 53 #include "extensions/common/extension.h" |
| 54 #include "extensions/common/id_util.h" | 54 #include "extensions/common/id_util.h" |
| 55 #include "extensions/common/manifest_constants.h" | 55 #include "extensions/common/manifest_constants.h" |
| 56 #include "google_apis/gaia/fake_identity_provider.h" |
| 57 #include "google_apis/gaia/fake_oauth2_token_service.h" |
| 56 #include "libxml/globals.h" | 58 #include "libxml/globals.h" |
| 57 #include "net/base/backoff_entry.h" | 59 #include "net/base/backoff_entry.h" |
| 58 #include "net/base/escape.h" | 60 #include "net/base/escape.h" |
| 59 #include "net/base/load_flags.h" | 61 #include "net/base/load_flags.h" |
| 62 #include "net/http/http_request_headers.h" |
| 60 #include "net/url_request/test_url_fetcher_factory.h" | 63 #include "net/url_request/test_url_fetcher_factory.h" |
| 61 #include "net/url_request/url_request_status.h" | 64 #include "net/url_request/url_request_status.h" |
| 62 #include "testing/gmock/include/gmock/gmock.h" | 65 #include "testing/gmock/include/gmock/gmock.h" |
| 63 #include "testing/gtest/include/gtest/gtest.h" | 66 #include "testing/gtest/include/gtest/gtest.h" |
| 64 #include "url/third_party/mozilla/url_parse.h" | 67 #include "url/third_party/mozilla/url_parse.h" |
| 65 | 68 |
| 66 #if defined(OS_CHROMEOS) | 69 #if defined(OS_CHROMEOS) |
| 67 #include "chrome/browser/chromeos/login/users/user_manager.h" | 70 #include "chrome/browser/chromeos/login/users/user_manager.h" |
| 68 #include "chrome/browser/chromeos/settings/cros_settings.h" | 71 #include "chrome/browser/chromeos/settings/cros_settings.h" |
| 69 #include "chrome/browser/chromeos/settings/device_settings_service.h" | 72 #include "chrome/browser/chromeos/settings/device_settings_service.h" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 | 118 |
| 116 const char kEmptyUpdateUrlData[] = ""; | 119 const char kEmptyUpdateUrlData[] = ""; |
| 117 | 120 |
| 118 const char kAuthUserQueryKey[] = "authuser"; | 121 const char kAuthUserQueryKey[] = "authuser"; |
| 119 | 122 |
| 120 int kExpectedLoadFlags = | 123 int kExpectedLoadFlags = |
| 121 net::LOAD_DO_NOT_SEND_COOKIES | | 124 net::LOAD_DO_NOT_SEND_COOKIES | |
| 122 net::LOAD_DO_NOT_SAVE_COOKIES | | 125 net::LOAD_DO_NOT_SAVE_COOKIES | |
| 123 net::LOAD_DISABLE_CACHE; | 126 net::LOAD_DISABLE_CACHE; |
| 124 | 127 |
| 125 int kExpectedLoadFlagsForProtectedDownload = net::LOAD_DISABLE_CACHE; | 128 int kExpectedLoadFlagsForDownloadWithCookies = net::LOAD_DISABLE_CACHE; |
| 126 | 129 |
| 127 const ManifestFetchData::PingData kNeverPingedData( | 130 const ManifestFetchData::PingData kNeverPingedData( |
| 128 ManifestFetchData::kNeverPinged, ManifestFetchData::kNeverPinged, true); | 131 ManifestFetchData::kNeverPinged, ManifestFetchData::kNeverPinged, true); |
| 129 | 132 |
| 130 class MockExtensionDownloaderDelegate : public ExtensionDownloaderDelegate { | 133 class MockExtensionDownloaderDelegate : public ExtensionDownloaderDelegate { |
| 131 public: | 134 public: |
| 132 MOCK_METHOD4(OnExtensionDownloadFailed, void(const std::string&, | 135 MOCK_METHOD4(OnExtensionDownloadFailed, void(const std::string&, |
| 133 Error, | 136 Error, |
| 134 const PingResult&, | 137 const PingResult&, |
| 135 const std::set<int>&)); | 138 const std::set<int>&)); |
| (...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 596 SetupPendingExtensionManagerForTest(1, GURL(update_url), | 599 SetupPendingExtensionManagerForTest(1, GURL(update_url), |
| 597 pending_extension_manager); | 600 pending_extension_manager); |
| 598 } else { | 601 } else { |
| 599 service.CreateTestExtensions(1, 1, &extensions, &update_url, | 602 service.CreateTestExtensions(1, 1, &extensions, &update_url, |
| 600 Manifest::INTERNAL); | 603 Manifest::INTERNAL); |
| 601 service.set_extensions(extensions, ExtensionList()); | 604 service.set_extensions(extensions, ExtensionList()); |
| 602 } | 605 } |
| 603 | 606 |
| 604 // Set up and start the updater. | 607 // Set up and start the updater. |
| 605 net::TestURLFetcherFactory factory; | 608 net::TestURLFetcherFactory factory; |
| 606 ExtensionUpdater updater( | 609 ExtensionUpdater updater(&service, |
| 607 &service, service.extension_prefs(), service.pref_service(), | 610 service.extension_prefs(), |
| 608 service.profile(), 60*60*24, NULL); | 611 service.pref_service(), |
| 612 service.profile(), |
| 613 60 * 60 * 24, |
| 614 NULL, |
| 615 make_scoped_ptr<IdentityProvider>(NULL)); |
| 609 updater.Start(); | 616 updater.Start(); |
| 610 | 617 |
| 611 // Tell the update that it's time to do update checks. | 618 // Tell the update that it's time to do update checks. |
| 612 EXPECT_EQ(0u, observer.StartedCount()); | 619 EXPECT_EQ(0u, observer.StartedCount()); |
| 613 SimulateTimerFired(&updater); | 620 SimulateTimerFired(&updater); |
| 614 EXPECT_EQ(1u, observer.StartedCount()); | 621 EXPECT_EQ(1u, observer.StartedCount()); |
| 615 | 622 |
| 616 // Get the url our mock fetcher was asked to fetch. | 623 // Get the url our mock fetcher was asked to fetch. |
| 617 net::TestURLFetcher* fetcher = | 624 net::TestURLFetcher* fetcher = |
| 618 factory.GetFetcherByID(ExtensionDownloader::kManifestFetcherId); | 625 factory.GetFetcherByID(ExtensionDownloader::kManifestFetcherId); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 685 EXPECT_EQ(id, params["id"]); | 692 EXPECT_EQ(id, params["id"]); |
| 686 EXPECT_EQ(version, params["v"]); | 693 EXPECT_EQ(version, params["v"]); |
| 687 EXPECT_EQ("a%3D1%26b%3D2%26c", params["ap"]); | 694 EXPECT_EQ("a%3D1%26b%3D2%26c", params["ap"]); |
| 688 } | 695 } |
| 689 | 696 |
| 690 void TestUpdateUrlDataFromGallery(const std::string& gallery_url) { | 697 void TestUpdateUrlDataFromGallery(const std::string& gallery_url) { |
| 691 net::TestURLFetcherFactory factory; | 698 net::TestURLFetcherFactory factory; |
| 692 | 699 |
| 693 MockService service(prefs_.get()); | 700 MockService service(prefs_.get()); |
| 694 MockExtensionDownloaderDelegate delegate; | 701 MockExtensionDownloaderDelegate delegate; |
| 695 ExtensionDownloader downloader(&delegate, service.request_context()); | 702 ExtensionDownloader downloader(&delegate, service.request_context(), NULL); |
| 696 ExtensionList extensions; | 703 ExtensionList extensions; |
| 697 std::string url(gallery_url); | 704 std::string url(gallery_url); |
| 698 | 705 |
| 699 service.CreateTestExtensions(1, 1, &extensions, &url, Manifest::INTERNAL); | 706 service.CreateTestExtensions(1, 1, &extensions, &url, Manifest::INTERNAL); |
| 700 | 707 |
| 701 const std::string& id = extensions[0]->id(); | 708 const std::string& id = extensions[0]->id(); |
| 702 EXPECT_CALL(delegate, GetPingDataForExtension(id, _)); | 709 EXPECT_CALL(delegate, GetPingDataForExtension(id, _)); |
| 703 | 710 |
| 704 downloader.AddExtension(*extensions[0].get(), 0); | 711 downloader.AddExtension(*extensions[0].get(), 0); |
| 705 downloader.StartAllPending(NULL); | 712 downloader.StartAllPending(NULL); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 727 std::map<std::string, std::string> params; | 734 std::map<std::string, std::string> params; |
| 728 VerifyQueryAndExtractParameters(fetch_data.full_url().query(), ¶ms); | 735 VerifyQueryAndExtractParameters(fetch_data.full_url().query(), ¶ms); |
| 729 EXPECT_EQ(id, params["id"]); | 736 EXPECT_EQ(id, params["id"]); |
| 730 EXPECT_EQ(version, params["v"]); | 737 EXPECT_EQ(version, params["v"]); |
| 731 EXPECT_EQ(install_source, params["installsource"]); | 738 EXPECT_EQ(install_source, params["installsource"]); |
| 732 } | 739 } |
| 733 | 740 |
| 734 void TestDetermineUpdates() { | 741 void TestDetermineUpdates() { |
| 735 TestingProfile profile; | 742 TestingProfile profile; |
| 736 MockExtensionDownloaderDelegate delegate; | 743 MockExtensionDownloaderDelegate delegate; |
| 737 ExtensionDownloader downloader(&delegate, profile.GetRequestContext()); | 744 ExtensionDownloader downloader( |
| 745 &delegate, profile.GetRequestContext(), NULL); |
| 738 | 746 |
| 739 // Check passing an empty list of parse results to DetermineUpdates | 747 // Check passing an empty list of parse results to DetermineUpdates |
| 740 ManifestFetchData fetch_data(GURL("http://localhost/foo"), 0); | 748 ManifestFetchData fetch_data(GURL("http://localhost/foo"), 0); |
| 741 UpdateManifest::Results updates; | 749 UpdateManifest::Results updates; |
| 742 std::vector<int> updateable; | 750 std::vector<int> updateable; |
| 743 downloader.DetermineUpdates(fetch_data, updates, &updateable); | 751 downloader.DetermineUpdates(fetch_data, updates, &updateable); |
| 744 EXPECT_TRUE(updateable.empty()); | 752 EXPECT_TRUE(updateable.empty()); |
| 745 | 753 |
| 746 // Create two updates - expect that DetermineUpdates will return the first | 754 // Create two updates - expect that DetermineUpdates will return the first |
| 747 // one (v1.0 installed, v1.1 available) but not the second one (both | 755 // one (v1.0 installed, v1.1 available) but not the second one (both |
| (...skipping 22 matching lines...) Expand all Loading... |
| 770 | 778 |
| 771 void TestDetermineUpdatesPending() { | 779 void TestDetermineUpdatesPending() { |
| 772 // Create a set of test extensions | 780 // Create a set of test extensions |
| 773 ServiceForManifestTests service(prefs_.get()); | 781 ServiceForManifestTests service(prefs_.get()); |
| 774 PendingExtensionManager* pending_extension_manager = | 782 PendingExtensionManager* pending_extension_manager = |
| 775 service.pending_extension_manager(); | 783 service.pending_extension_manager(); |
| 776 SetupPendingExtensionManagerForTest(3, GURL(), pending_extension_manager); | 784 SetupPendingExtensionManagerForTest(3, GURL(), pending_extension_manager); |
| 777 | 785 |
| 778 TestingProfile profile; | 786 TestingProfile profile; |
| 779 MockExtensionDownloaderDelegate delegate; | 787 MockExtensionDownloaderDelegate delegate; |
| 780 ExtensionDownloader downloader(&delegate, profile.GetRequestContext()); | 788 ExtensionDownloader downloader( |
| 789 &delegate, profile.GetRequestContext(), NULL); |
| 781 | 790 |
| 782 ManifestFetchData fetch_data(GURL("http://localhost/foo"), 0); | 791 ManifestFetchData fetch_data(GURL("http://localhost/foo"), 0); |
| 783 UpdateManifest::Results updates; | 792 UpdateManifest::Results updates; |
| 784 | 793 |
| 785 std::list<std::string> ids_for_update_check; | 794 std::list<std::string> ids_for_update_check; |
| 786 pending_extension_manager->GetPendingIdsForUpdateCheck( | 795 pending_extension_manager->GetPendingIdsForUpdateCheck( |
| 787 &ids_for_update_check); | 796 &ids_for_update_check); |
| 788 | 797 |
| 789 std::list<std::string>::const_iterator it; | 798 std::list<std::string>::const_iterator it; |
| 790 for (it = ids_for_update_check.begin(); | 799 for (it = ids_for_update_check.begin(); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 809 EXPECT_EQ(static_cast<int>(i), updateable[i]); | 818 EXPECT_EQ(static_cast<int>(i), updateable[i]); |
| 810 } | 819 } |
| 811 } | 820 } |
| 812 | 821 |
| 813 void TestMultipleManifestDownloading() { | 822 void TestMultipleManifestDownloading() { |
| 814 net::TestURLFetcherFactory factory; | 823 net::TestURLFetcherFactory factory; |
| 815 factory.set_remove_fetcher_on_delete(true); | 824 factory.set_remove_fetcher_on_delete(true); |
| 816 net::TestURLFetcher* fetcher = NULL; | 825 net::TestURLFetcher* fetcher = NULL; |
| 817 MockService service(prefs_.get()); | 826 MockService service(prefs_.get()); |
| 818 MockExtensionDownloaderDelegate delegate; | 827 MockExtensionDownloaderDelegate delegate; |
| 819 ExtensionDownloader downloader(&delegate, service.request_context()); | 828 ExtensionDownloader downloader(&delegate, service.request_context(), NULL); |
| 820 downloader.manifests_queue_.set_backoff_policy(&kNoBackoffPolicy); | 829 downloader.manifests_queue_.set_backoff_policy(&kNoBackoffPolicy); |
| 821 | 830 |
| 822 GURL kUpdateUrl("http://localhost/manifest1"); | 831 GURL kUpdateUrl("http://localhost/manifest1"); |
| 823 | 832 |
| 824 scoped_ptr<ManifestFetchData> fetch1(new ManifestFetchData(kUpdateUrl, 0)); | 833 scoped_ptr<ManifestFetchData> fetch1(new ManifestFetchData(kUpdateUrl, 0)); |
| 825 scoped_ptr<ManifestFetchData> fetch2(new ManifestFetchData(kUpdateUrl, 0)); | 834 scoped_ptr<ManifestFetchData> fetch2(new ManifestFetchData(kUpdateUrl, 0)); |
| 826 scoped_ptr<ManifestFetchData> fetch3(new ManifestFetchData(kUpdateUrl, 0)); | 835 scoped_ptr<ManifestFetchData> fetch3(new ManifestFetchData(kUpdateUrl, 0)); |
| 827 scoped_ptr<ManifestFetchData> fetch4(new ManifestFetchData(kUpdateUrl, 0)); | 836 scoped_ptr<ManifestFetchData> fetch4(new ManifestFetchData(kUpdateUrl, 0)); |
| 828 ManifestFetchData::PingData zeroDays(0, 0, true); | 837 ManifestFetchData::PingData zeroDays(0, 0, true); |
| 829 fetch1->AddExtension( | 838 fetch1->AddExtension( |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 949 if (fetcher) | 958 if (fetcher) |
| 950 ADD_FAILURE() << "Unexpected fetch: " << fetcher->GetOriginalURL(); | 959 ADD_FAILURE() << "Unexpected fetch: " << fetcher->GetOriginalURL(); |
| 951 } | 960 } |
| 952 | 961 |
| 953 void TestManifestRetryDownloading() { | 962 void TestManifestRetryDownloading() { |
| 954 net::TestURLFetcherFactory factory; | 963 net::TestURLFetcherFactory factory; |
| 955 net::TestURLFetcher* fetcher = NULL; | 964 net::TestURLFetcher* fetcher = NULL; |
| 956 NotificationsObserver observer; | 965 NotificationsObserver observer; |
| 957 MockService service(prefs_.get()); | 966 MockService service(prefs_.get()); |
| 958 MockExtensionDownloaderDelegate delegate; | 967 MockExtensionDownloaderDelegate delegate; |
| 959 ExtensionDownloader downloader(&delegate, service.request_context()); | 968 ExtensionDownloader downloader(&delegate, service.request_context(), NULL); |
| 960 downloader.manifests_queue_.set_backoff_policy(&kNoBackoffPolicy); | 969 downloader.manifests_queue_.set_backoff_policy(&kNoBackoffPolicy); |
| 961 | 970 |
| 962 GURL kUpdateUrl("http://localhost/manifest1"); | 971 GURL kUpdateUrl("http://localhost/manifest1"); |
| 963 | 972 |
| 964 scoped_ptr<ManifestFetchData> fetch(new ManifestFetchData(kUpdateUrl, 0)); | 973 scoped_ptr<ManifestFetchData> fetch(new ManifestFetchData(kUpdateUrl, 0)); |
| 965 ManifestFetchData::PingData zeroDays(0, 0, true); | 974 ManifestFetchData::PingData zeroDays(0, 0, true); |
| 966 fetch->AddExtension( | 975 fetch->AddExtension( |
| 967 "1111", "1.0", &zeroDays, kEmptyUpdateUrlData, std::string()); | 976 "1111", "1.0", &zeroDays, kEmptyUpdateUrlData, std::string()); |
| 968 | 977 |
| 969 // This will start the first fetcher. | 978 // This will start the first fetcher. |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1022 RunUntilIdle(); | 1031 RunUntilIdle(); |
| 1023 | 1032 |
| 1024 Mock::VerifyAndClearExpectations(&delegate); | 1033 Mock::VerifyAndClearExpectations(&delegate); |
| 1025 } | 1034 } |
| 1026 | 1035 |
| 1027 void TestSingleExtensionDownloading(bool pending, bool retry, bool fail) { | 1036 void TestSingleExtensionDownloading(bool pending, bool retry, bool fail) { |
| 1028 net::TestURLFetcherFactory factory; | 1037 net::TestURLFetcherFactory factory; |
| 1029 net::TestURLFetcher* fetcher = NULL; | 1038 net::TestURLFetcher* fetcher = NULL; |
| 1030 scoped_ptr<ServiceForDownloadTests> service( | 1039 scoped_ptr<ServiceForDownloadTests> service( |
| 1031 new ServiceForDownloadTests(prefs_.get())); | 1040 new ServiceForDownloadTests(prefs_.get())); |
| 1032 ExtensionUpdater updater(service.get(), service->extension_prefs(), | 1041 ExtensionUpdater updater(service.get(), |
| 1042 service->extension_prefs(), |
| 1033 service->pref_service(), | 1043 service->pref_service(), |
| 1034 service->profile(), | 1044 service->profile(), |
| 1035 kUpdateFrequencySecs, | 1045 kUpdateFrequencySecs, |
| 1036 NULL); | 1046 NULL, |
| 1047 make_scoped_ptr<IdentityProvider>(NULL)); |
| 1037 updater.Start(); | 1048 updater.Start(); |
| 1038 MockExtensionDownloaderDelegate delegate; | 1049 MockExtensionDownloaderDelegate delegate; |
| 1039 delegate.DelegateTo(&updater); | 1050 delegate.DelegateTo(&updater); |
| 1040 ResetDownloader( | 1051 ResetDownloader( |
| 1041 &updater, | 1052 &updater, |
| 1042 new ExtensionDownloader(&delegate, service->request_context())); | 1053 new ExtensionDownloader(&delegate, service->request_context(), NULL)); |
| 1043 updater.downloader_->extensions_queue_.set_backoff_policy( | 1054 updater.downloader_->extensions_queue_.set_backoff_policy( |
| 1044 &kNoBackoffPolicy); | 1055 &kNoBackoffPolicy); |
| 1045 | 1056 |
| 1046 GURL test_url("http://localhost/extension.crx"); | 1057 GURL test_url("http://localhost/extension.crx"); |
| 1047 | 1058 |
| 1048 std::string id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; | 1059 std::string id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; |
| 1049 std::string hash; | 1060 std::string hash; |
| 1050 Version version("0.0.1"); | 1061 Version version("0.0.1"); |
| 1051 std::set<int> requests; | 1062 std::set<int> requests; |
| 1052 requests.insert(0); | 1063 requests.insert(0); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1118 // Expect that ExtensionUpdater asked the mock extensions service to | 1129 // Expect that ExtensionUpdater asked the mock extensions service to |
| 1119 // install a file with the test data for the right id. | 1130 // install a file with the test data for the right id. |
| 1120 EXPECT_EQ(id, service->extension_id()); | 1131 EXPECT_EQ(id, service->extension_id()); |
| 1121 base::FilePath tmpfile_path = service->install_path(); | 1132 base::FilePath tmpfile_path = service->install_path(); |
| 1122 EXPECT_FALSE(tmpfile_path.empty()); | 1133 EXPECT_FALSE(tmpfile_path.empty()); |
| 1123 EXPECT_EQ(extension_file_path, tmpfile_path); | 1134 EXPECT_EQ(extension_file_path, tmpfile_path); |
| 1124 } | 1135 } |
| 1125 } | 1136 } |
| 1126 | 1137 |
| 1127 // Update a single extension in an environment where the download request | 1138 // Update a single extension in an environment where the download request |
| 1128 // initially responds with a 403 status. Expect the fetcher to automatically | 1139 // initially responds with a 403 status. If |identity_provider| is not NULL, |
| 1129 // retry with cookies enabled. | 1140 // this will first expect a request which includes an Authorization header |
| 1130 void TestSingleProtectedExtensionDownloading(bool use_https, | 1141 // with an OAuth2 bearer token; otherwise, or if OAuth2 failure is simulated, |
| 1131 bool fail, | 1142 // this expects the downloader to fall back onto cookie-based credentials. |
| 1132 int max_authuser, | 1143 void TestProtectedDownload( |
| 1133 int valid_authuser) { | 1144 const std::string& url_prefix, |
| 1145 bool enable_oauth2, |
| 1146 bool succeed_with_oauth2, |
| 1147 int valid_authuser, |
| 1148 int max_authuser) { |
| 1149 const char kFakeAccountId[] = "bobloblaw@lawblog.example.com"; |
| 1150 const char kFakeOAuth2Token[] = "ce n'est pas un jeton"; |
| 1151 |
| 1134 net::TestURLFetcherFactory factory; | 1152 net::TestURLFetcherFactory factory; |
| 1135 net::TestURLFetcher* fetcher = NULL; | 1153 net::TestURLFetcher* fetcher = NULL; |
| 1136 scoped_ptr<ServiceForDownloadTests> service( | 1154 scoped_ptr<ServiceForDownloadTests> service( |
| 1137 new ServiceForDownloadTests(prefs_.get())); | 1155 new ServiceForDownloadTests(prefs_.get())); |
| 1138 ExtensionUpdater updater(service.get(), service->extension_prefs(), | 1156 ExtensionUpdater updater(service.get(), |
| 1157 service->extension_prefs(), |
| 1139 service->pref_service(), | 1158 service->pref_service(), |
| 1140 service->profile(), | 1159 service->profile(), |
| 1141 kUpdateFrequencySecs, | 1160 kUpdateFrequencySecs, |
| 1142 NULL); | 1161 NULL, |
| 1162 make_scoped_ptr<IdentityProvider>(NULL)); |
| 1143 updater.Start(); | 1163 updater.Start(); |
| 1164 |
| 1165 scoped_ptr<FakeOAuth2TokenService> fake_token_service; |
| 1166 scoped_ptr<FakeIdentityProvider> fake_identity_provider; |
| 1167 if (enable_oauth2) { |
| 1168 fake_token_service.reset(new FakeOAuth2TokenService()); |
| 1169 fake_identity_provider.reset(new FakeIdentityProvider( |
| 1170 fake_token_service.get())); |
| 1171 fake_identity_provider->LogIn(kFakeAccountId); |
| 1172 fake_token_service->AddAccount(kFakeAccountId); |
| 1173 } |
| 1174 |
| 1144 ResetDownloader( | 1175 ResetDownloader( |
| 1145 &updater, | 1176 &updater, |
| 1146 new ExtensionDownloader(&updater, service->request_context())); | 1177 new ExtensionDownloader(&updater, |
| 1178 service->request_context(), |
| 1179 fake_identity_provider.get())); |
| 1147 updater.downloader_->extensions_queue_.set_backoff_policy( | 1180 updater.downloader_->extensions_queue_.set_backoff_policy( |
| 1148 &kNoBackoffPolicy); | 1181 &kNoBackoffPolicy); |
| 1149 | 1182 |
| 1150 GURL test_url(use_https ? "https://localhost/extension.crx" : | 1183 GURL test_url(base::StringPrintf("%s/extension.crx", url_prefix.c_str())); |
| 1151 "http://localhost/extension.crx"); | |
| 1152 | |
| 1153 std::string id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; | 1184 std::string id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; |
| 1154 std::string hash; | 1185 std::string hash; |
| 1155 Version version("0.0.1"); | 1186 Version version("0.0.1"); |
| 1156 std::set<int> requests; | 1187 std::set<int> requests; |
| 1157 requests.insert(0); | 1188 requests.insert(0); |
| 1158 scoped_ptr<ExtensionDownloader::ExtensionFetch> fetch( | 1189 scoped_ptr<ExtensionDownloader::ExtensionFetch> fetch( |
| 1159 new ExtensionDownloader::ExtensionFetch( | 1190 new ExtensionDownloader::ExtensionFetch( |
| 1160 id, test_url, hash, version.GetString(), requests)); | 1191 id, test_url, hash, version.GetString(), requests)); |
| 1161 updater.downloader_->FetchUpdatedExtension(fetch.Pass()); | 1192 updater.downloader_->FetchUpdatedExtension(fetch.Pass()); |
| 1162 | 1193 |
| 1163 fetcher = factory.GetFetcherByID(ExtensionDownloader::kExtensionFetcherId); | 1194 fetcher = factory.GetFetcherByID(ExtensionDownloader::kExtensionFetcherId); |
| 1164 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); | 1195 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); |
| 1165 EXPECT_TRUE(fetcher->GetLoadFlags() == kExpectedLoadFlags); | 1196 EXPECT_EQ(kExpectedLoadFlags, fetcher->GetLoadFlags()); |
| 1166 | 1197 |
| 1167 // Fake a 403 response. | 1198 // Fake a 403 response. |
| 1168 fetcher->set_url(test_url); | 1199 fetcher->set_url(test_url); |
| 1169 fetcher->set_status(net::URLRequestStatus()); | 1200 fetcher->set_status(net::URLRequestStatus()); |
| 1170 fetcher->set_response_code(403); | 1201 fetcher->set_response_code(403); |
| 1171 fetcher->delegate()->OnURLFetchComplete(fetcher); | 1202 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 1203 if (fake_token_service) { |
| 1204 fake_token_service->IssueAllTokensForAccount( |
| 1205 kFakeAccountId, kFakeOAuth2Token, base::Time::Now()); |
| 1206 } |
| 1172 RunUntilIdle(); | 1207 RunUntilIdle(); |
| 1173 | 1208 |
| 1174 // Verify that the fetcher has been switched to protected download mode | 1209 bool using_oauth2 = false; |
| 1175 // so that cookies would be sent with the next request (https only). | 1210 int expected_load_flags = kExpectedLoadFlags; |
| 1211 // Verify that the fetch has had its credentials properly incremented. |
| 1176 fetcher = factory.GetFetcherByID(ExtensionDownloader::kExtensionFetcherId); | 1212 fetcher = factory.GetFetcherByID(ExtensionDownloader::kExtensionFetcherId); |
| 1177 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); | 1213 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); |
| 1178 if (use_https) { | 1214 net::HttpRequestHeaders fetch_headers; |
| 1179 EXPECT_TRUE( | 1215 fetcher->GetExtraRequestHeaders(&fetch_headers); |
| 1180 fetcher->GetLoadFlags() == kExpectedLoadFlagsForProtectedDownload); | 1216 // If the download URL is not https, no credentials should be provided. |
| 1217 if (!test_url.SchemeIsSecure()) { |
| 1218 // No cookies. |
| 1219 EXPECT_EQ(kExpectedLoadFlags, fetcher->GetLoadFlags()); |
| 1220 // No Authorization header. |
| 1221 EXPECT_FALSE(fetch_headers.HasHeader( |
| 1222 net::HttpRequestHeaders::kAuthorization)); |
| 1223 expected_load_flags = kExpectedLoadFlags; |
| 1181 } else { | 1224 } else { |
| 1182 EXPECT_TRUE(fetcher->GetLoadFlags() == kExpectedLoadFlags); | 1225 // HTTPS is in use, so credentials are allowed. |
| 1226 if (enable_oauth2 && test_url.DomainIs("google.com")) { |
| 1227 // If an IdentityProvider is present and the URL is a google.com |
| 1228 // URL, the fetcher should be in OAuth2 mode after the intitial |
| 1229 // challenge. |
| 1230 EXPECT_TRUE(fetch_headers.HasHeader( |
| 1231 net::HttpRequestHeaders::kAuthorization)); |
| 1232 std::string expected_header_value = base::StringPrintf("Bearer %s", |
| 1233 kFakeOAuth2Token); |
| 1234 std::string actual_header_value; |
| 1235 fetch_headers.GetHeader(net::HttpRequestHeaders::kAuthorization, |
| 1236 &actual_header_value); |
| 1237 EXPECT_EQ(expected_header_value, actual_header_value); |
| 1238 using_oauth2 = true; |
| 1239 } else { |
| 1240 // No IdentityProvider (or no google.com), so expect cookies instead of |
| 1241 // an Authorization header. |
| 1242 EXPECT_FALSE(fetch_headers.HasHeader( |
| 1243 net::HttpRequestHeaders::kAuthorization)); |
| 1244 EXPECT_EQ(kExpectedLoadFlagsForDownloadWithCookies, |
| 1245 fetcher->GetLoadFlags()); |
| 1246 expected_load_flags = kExpectedLoadFlagsForDownloadWithCookies; |
| 1247 } |
| 1183 } | 1248 } |
| 1184 | 1249 |
| 1185 // Attempt to fetch again after the auth failure. | 1250 bool success = false; |
| 1186 bool succeed = !fail; | 1251 if (using_oauth2) { |
| 1187 if (fail) { | 1252 if (succeed_with_oauth2) { |
| 1188 // Do not simulate incremental authuser retries. | 1253 success = true; |
| 1189 if (max_authuser == 0) { | 1254 } else { |
| 1190 // Fail and verify that the fetch queue is cleared. | 1255 // Simulate OAuth2 failure and ensure that we fall back on cookies. |
| 1191 fetcher->set_url(test_url); | 1256 fetcher->set_url(test_url); |
| 1192 fetcher->set_status(net::URLRequestStatus()); | 1257 fetcher->set_status(net::URLRequestStatus()); |
| 1193 fetcher->set_response_code(401); | 1258 fetcher->set_response_code(403); |
| 1194 fetcher->delegate()->OnURLFetchComplete(fetcher); | 1259 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 1195 RunUntilIdle(); | 1260 RunUntilIdle(); |
| 1196 | 1261 |
| 1197 EXPECT_EQ(0U, updater.downloader_->extensions_queue_.active_request()); | 1262 const ExtensionDownloader::ExtensionFetch& fetch = |
| 1198 return; | 1263 *updater.downloader_->extensions_queue_.active_request(); |
| 1264 EXPECT_EQ(0, GetAuthUserQueryValue(fetch.url)); |
| 1265 EXPECT_EQ(ExtensionDownloader::ExtensionFetch::CREDENTIALS_COOKIES, |
| 1266 fetch.credentials); |
| 1267 |
| 1268 fetcher = factory.GetFetcherByID( |
| 1269 ExtensionDownloader::kExtensionFetcherId); |
| 1270 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); |
| 1271 fetcher->GetExtraRequestHeaders(&fetch_headers); |
| 1272 EXPECT_FALSE(fetch_headers.HasHeader( |
| 1273 net::HttpRequestHeaders::kAuthorization)); |
| 1274 EXPECT_EQ(kExpectedLoadFlagsForDownloadWithCookies, |
| 1275 fetcher->GetLoadFlags()); |
| 1276 expected_load_flags = kExpectedLoadFlagsForDownloadWithCookies; |
| 1199 } | 1277 } |
| 1278 } |
| 1200 | 1279 |
| 1201 // Simulate incremental authuser retries. | 1280 if (!success) { |
| 1202 for (int user_index = 0; user_index <= max_authuser; ++user_index) { | 1281 // Not yet ready to simulate a successful fetch. At this point we begin |
| 1282 // simulating cookie-based authentication with increasing values of |
| 1283 // authuser (starting from 0.) |
| 1284 int user_index = 0; |
| 1285 for (; user_index <= max_authuser; ++user_index) { |
| 1203 const ExtensionDownloader::ExtensionFetch& fetch = | 1286 const ExtensionDownloader::ExtensionFetch& fetch = |
| 1204 *updater.downloader_->extensions_queue_.active_request(); | 1287 *updater.downloader_->extensions_queue_.active_request(); |
| 1205 EXPECT_EQ(user_index, GetAuthUserQueryValue(fetch.url)); | 1288 EXPECT_EQ(user_index, GetAuthUserQueryValue(fetch.url)); |
| 1206 if (user_index == valid_authuser) { | 1289 if (user_index == valid_authuser) { |
| 1207 succeed = true; | 1290 success = true; |
| 1208 break; | 1291 break; |
| 1209 } | 1292 } |
| 1293 // Simulate an authorization failure which should elicit an increment |
| 1294 // of the authuser value. |
| 1210 fetcher = | 1295 fetcher = |
| 1211 factory.GetFetcherByID(ExtensionDownloader::kExtensionFetcherId); | 1296 factory.GetFetcherByID(ExtensionDownloader::kExtensionFetcherId); |
| 1212 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); | 1297 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); |
| 1298 EXPECT_EQ(expected_load_flags, fetcher->GetLoadFlags()); |
| 1213 fetcher->set_url(fetch.url); | 1299 fetcher->set_url(fetch.url); |
| 1214 fetcher->set_status(net::URLRequestStatus()); | 1300 fetcher->set_status(net::URLRequestStatus()); |
| 1215 fetcher->set_response_code(403); | 1301 fetcher->set_response_code(403); |
| 1216 fetcher->delegate()->OnURLFetchComplete(fetcher); | 1302 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 1217 RunUntilIdle(); | 1303 RunUntilIdle(); |
| 1218 } | 1304 } |
| 1305 |
| 1306 // Simulate exhaustion of all available authusers. |
| 1307 if (!success && user_index > max_authuser) { |
| 1308 const ExtensionDownloader::ExtensionFetch& fetch = |
| 1309 *updater.downloader_->extensions_queue_.active_request(); |
| 1310 fetcher = |
| 1311 factory.GetFetcherByID(ExtensionDownloader::kExtensionFetcherId); |
| 1312 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); |
| 1313 fetcher->set_url(fetch.url); |
| 1314 fetcher->set_status(net::URLRequestStatus()); |
| 1315 fetcher->set_response_code(401); |
| 1316 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 1317 RunUntilIdle(); |
| 1318 } |
| 1219 } | 1319 } |
| 1220 | 1320 |
| 1221 // Succeed | 1321 // Simulate successful authorization with a 200 response. |
| 1222 if (succeed) { | 1322 if (success) { |
| 1223 fetcher = | 1323 fetcher = |
| 1224 factory.GetFetcherByID(ExtensionDownloader::kExtensionFetcherId); | 1324 factory.GetFetcherByID(ExtensionDownloader::kExtensionFetcherId); |
| 1225 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); | 1325 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); |
| 1226 base::FilePath extension_file_path(FILE_PATH_LITERAL("/whatever")); | 1326 base::FilePath extension_file_path(FILE_PATH_LITERAL("/whatever")); |
| 1227 fetcher->set_url(test_url); | 1327 fetcher->set_url(test_url); |
| 1228 fetcher->set_status(net::URLRequestStatus()); | 1328 fetcher->set_status(net::URLRequestStatus()); |
| 1229 fetcher->set_response_code(200); | 1329 fetcher->set_response_code(200); |
| 1230 fetcher->SetResponseFilePath(extension_file_path); | 1330 fetcher->SetResponseFilePath(extension_file_path); |
| 1231 fetcher->delegate()->OnURLFetchComplete(fetcher); | 1331 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 1232 RunUntilIdle(); | 1332 RunUntilIdle(); |
| 1233 | 1333 |
| 1234 // Verify installation would proceed as normal. | 1334 // Verify installation would proceed as normal. |
| 1235 EXPECT_EQ(id, service->extension_id()); | 1335 EXPECT_EQ(id, service->extension_id()); |
| 1236 base::FilePath tmpfile_path = service->install_path(); | 1336 base::FilePath tmpfile_path = service->install_path(); |
| 1237 EXPECT_FALSE(tmpfile_path.empty()); | 1337 EXPECT_FALSE(tmpfile_path.empty()); |
| 1238 EXPECT_EQ(extension_file_path, tmpfile_path); | 1338 EXPECT_EQ(extension_file_path, tmpfile_path); |
| 1239 } | 1339 } |
| 1240 } | 1340 } |
| 1241 | 1341 |
| 1242 // Two extensions are updated. If |updates_start_running| is true, the | 1342 // Two extensions are updated. If |updates_start_running| is true, the |
| 1243 // mock extensions service has UpdateExtension(...) return true, and | 1343 // mock extensions service has UpdateExtension(...) return true, and |
| 1244 // the test is responsible for creating fake CrxInstallers. Otherwise, | 1344 // the test is responsible for creating fake CrxInstallers. Otherwise, |
| 1245 // UpdateExtension() returns false, signaling install failures. | 1345 // UpdateExtension() returns false, signaling install failures. |
| 1246 void TestMultipleExtensionDownloading(bool updates_start_running) { | 1346 void TestMultipleExtensionDownloading(bool updates_start_running) { |
| 1247 net::TestURLFetcherFactory factory; | 1347 net::TestURLFetcherFactory factory; |
| 1248 net::TestURLFetcher* fetcher = NULL; | 1348 net::TestURLFetcher* fetcher = NULL; |
| 1249 ServiceForDownloadTests service(prefs_.get()); | 1349 ServiceForDownloadTests service(prefs_.get()); |
| 1250 ExtensionUpdater updater( | 1350 ExtensionUpdater updater(&service, |
| 1251 &service, service.extension_prefs(), service.pref_service(), | 1351 service.extension_prefs(), |
| 1252 service.profile(), kUpdateFrequencySecs, NULL); | 1352 service.pref_service(), |
| 1353 service.profile(), |
| 1354 kUpdateFrequencySecs, |
| 1355 NULL, |
| 1356 make_scoped_ptr<IdentityProvider>(NULL)); |
| 1253 updater.Start(); | 1357 updater.Start(); |
| 1254 ResetDownloader( | 1358 ResetDownloader( |
| 1255 &updater, | 1359 &updater, |
| 1256 new ExtensionDownloader(&updater, service.request_context())); | 1360 new ExtensionDownloader(&updater, service.request_context(), NULL)); |
| 1257 updater.downloader_->extensions_queue_.set_backoff_policy( | 1361 updater.downloader_->extensions_queue_.set_backoff_policy( |
| 1258 &kNoBackoffPolicy); | 1362 &kNoBackoffPolicy); |
| 1259 | 1363 |
| 1260 EXPECT_FALSE(updater.crx_install_is_running_); | 1364 EXPECT_FALSE(updater.crx_install_is_running_); |
| 1261 | 1365 |
| 1262 GURL url1("http://localhost/extension1.crx"); | 1366 GURL url1("http://localhost/extension1.crx"); |
| 1263 GURL url2("http://localhost/extension2.crx"); | 1367 GURL url2("http://localhost/extension2.crx"); |
| 1264 | 1368 |
| 1265 std::string id1 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; | 1369 std::string id1 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; |
| 1266 std::string id2 = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"; | 1370 std::string id2 = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"; |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1451 prefs->SetLastActivePingDay(id, now - TimeDelta::FromSeconds(15)); | 1555 prefs->SetLastActivePingDay(id, now - TimeDelta::FromSeconds(15)); |
| 1452 } else if (active_ping_days > 0) { | 1556 } else if (active_ping_days > 0) { |
| 1453 Time last_active_ping_day = now - | 1557 Time last_active_ping_day = now - |
| 1454 TimeDelta::FromDays(active_ping_days) - | 1558 TimeDelta::FromDays(active_ping_days) - |
| 1455 TimeDelta::FromSeconds(15); | 1559 TimeDelta::FromSeconds(15); |
| 1456 prefs->SetLastActivePingDay(id, last_active_ping_day); | 1560 prefs->SetLastActivePingDay(id, last_active_ping_day); |
| 1457 } | 1561 } |
| 1458 if (active_bit) | 1562 if (active_bit) |
| 1459 prefs->SetActiveBit(id, true); | 1563 prefs->SetActiveBit(id, true); |
| 1460 | 1564 |
| 1461 ExtensionUpdater updater( | 1565 ExtensionUpdater updater(&service, |
| 1462 &service, service.extension_prefs(), service.pref_service(), | 1566 service.extension_prefs(), |
| 1463 service.profile(), kUpdateFrequencySecs, NULL); | 1567 service.pref_service(), |
| 1568 service.profile(), |
| 1569 kUpdateFrequencySecs, |
| 1570 NULL, |
| 1571 make_scoped_ptr<IdentityProvider>(NULL)); |
| 1464 ExtensionUpdater::CheckParams params; | 1572 ExtensionUpdater::CheckParams params; |
| 1465 updater.Start(); | 1573 updater.Start(); |
| 1466 updater.CheckNow(params); | 1574 updater.CheckNow(params); |
| 1467 | 1575 |
| 1468 // Make the updater do manifest fetching, and note the urls it tries to | 1576 // Make the updater do manifest fetching, and note the urls it tries to |
| 1469 // fetch. | 1577 // fetch. |
| 1470 std::vector<GURL> fetched_urls; | 1578 std::vector<GURL> fetched_urls; |
| 1471 net::TestURLFetcher* fetcher = | 1579 net::TestURLFetcher* fetcher = |
| 1472 factory.GetFetcherByID(ExtensionDownloader::kManifestFetcherId); | 1580 factory.GetFetcherByID(ExtensionDownloader::kManifestFetcherId); |
| 1473 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); | 1581 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1544 // the first time we fetched the extension, or 2) We sent a ping value of | 1652 // the first time we fetched the extension, or 2) We sent a ping value of |
| 1545 // >= 1 day for the extension. | 1653 // >= 1 day for the extension. |
| 1546 void TestHandleManifestResults() { | 1654 void TestHandleManifestResults() { |
| 1547 ServiceForManifestTests service(prefs_.get()); | 1655 ServiceForManifestTests service(prefs_.get()); |
| 1548 GURL update_url("http://www.google.com/manifest"); | 1656 GURL update_url("http://www.google.com/manifest"); |
| 1549 ExtensionList tmp; | 1657 ExtensionList tmp; |
| 1550 service.CreateTestExtensions(1, 1, &tmp, &update_url.spec(), | 1658 service.CreateTestExtensions(1, 1, &tmp, &update_url.spec(), |
| 1551 Manifest::INTERNAL); | 1659 Manifest::INTERNAL); |
| 1552 service.set_extensions(tmp, ExtensionList()); | 1660 service.set_extensions(tmp, ExtensionList()); |
| 1553 | 1661 |
| 1554 ExtensionUpdater updater( | 1662 ExtensionUpdater updater(&service, |
| 1555 &service, service.extension_prefs(), service.pref_service(), | 1663 service.extension_prefs(), |
| 1556 service.profile(), kUpdateFrequencySecs, NULL); | 1664 service.pref_service(), |
| 1665 service.profile(), |
| 1666 kUpdateFrequencySecs, |
| 1667 NULL, |
| 1668 make_scoped_ptr<IdentityProvider>(NULL)); |
| 1557 updater.Start(); | 1669 updater.Start(); |
| 1558 ResetDownloader( | 1670 ResetDownloader( |
| 1559 &updater, | 1671 &updater, |
| 1560 new ExtensionDownloader(&updater, service.request_context())); | 1672 new ExtensionDownloader(&updater, service.request_context(), NULL)); |
| 1561 | 1673 |
| 1562 ManifestFetchData fetch_data(update_url, 0); | 1674 ManifestFetchData fetch_data(update_url, 0); |
| 1563 const Extension* extension = tmp[0].get(); | 1675 const Extension* extension = tmp[0].get(); |
| 1564 fetch_data.AddExtension(extension->id(), | 1676 fetch_data.AddExtension(extension->id(), |
| 1565 extension->VersionString(), | 1677 extension->VersionString(), |
| 1566 &kNeverPingedData, | 1678 &kNeverPingedData, |
| 1567 kEmptyUpdateUrlData, | 1679 kEmptyUpdateUrlData, |
| 1568 std::string()); | 1680 std::string()); |
| 1569 UpdateManifest::Results results; | 1681 UpdateManifest::Results results; |
| 1570 results.daystart_elapsed_seconds = 750; | 1682 results.daystart_elapsed_seconds = 750; |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1648 } | 1760 } |
| 1649 | 1761 |
| 1650 TEST_F(ExtensionUpdaterTest, TestSingleExtensionDownloadingFailureWithRetry) { | 1762 TEST_F(ExtensionUpdaterTest, TestSingleExtensionDownloadingFailureWithRetry) { |
| 1651 TestSingleExtensionDownloading(false, true, true); | 1763 TestSingleExtensionDownloading(false, true, true); |
| 1652 } | 1764 } |
| 1653 | 1765 |
| 1654 TEST_F(ExtensionUpdaterTest, TestSingleExtensionDownloadingFailurePending) { | 1766 TEST_F(ExtensionUpdaterTest, TestSingleExtensionDownloadingFailurePending) { |
| 1655 TestSingleExtensionDownloading(true, false, true); | 1767 TestSingleExtensionDownloading(true, false, true); |
| 1656 } | 1768 } |
| 1657 | 1769 |
| 1658 TEST_F(ExtensionUpdaterTest, SingleProtectedExtensionDownloading) { | 1770 TEST_F(ExtensionUpdaterTest, ProtectedDownloadCookieAuth) { |
| 1659 TestSingleProtectedExtensionDownloading(true, false, 0, 0); | 1771 TestProtectedDownload( |
| 1772 "https://chrome.google.com/webstore/download", |
| 1773 false, false, // No OAuth2 support |
| 1774 0, 0); |
| 1660 } | 1775 } |
| 1661 | 1776 |
| 1662 TEST_F(ExtensionUpdaterTest, SingleProtectedExtensionDownloadingFailure) { | 1777 TEST_F(ExtensionUpdaterTest, ProtectedDownloadCookieFailure) { |
| 1663 TestSingleProtectedExtensionDownloading(true, true, 0, 0); | 1778 TestProtectedDownload( |
| 1779 "https://chrome.google.com/webstore/download", |
| 1780 false, false, // No OAuth2 support |
| 1781 0, -1); // max_authuser=-1 simulates no valid authuser value. |
| 1664 } | 1782 } |
| 1665 | 1783 |
| 1666 TEST_F(ExtensionUpdaterTest, SingleProtectedExtensionDownloadingNoHTTPS) { | 1784 TEST_F(ExtensionUpdaterTest, ProtectedDownloadWithNonDefaultAuthUser1) { |
| 1667 TestSingleProtectedExtensionDownloading(false, false, 0, 0); | 1785 TestProtectedDownload("https://google.com", false, false, 1, 1); |
| 1668 } | 1786 } |
| 1669 | 1787 |
| 1670 TEST_F(ExtensionUpdaterTest, | 1788 TEST_F(ExtensionUpdaterTest, ProtectedDownloadWithNonDefaultAuthUser2) { |
| 1671 SingleProtectedExtensionDownloadingWithNonDefaultAuthUser1) { | 1789 TestProtectedDownload("https://google.com", false, false, 2, 2); |
| 1672 TestSingleProtectedExtensionDownloading(true, true, 2, 1); | |
| 1673 } | 1790 } |
| 1674 | 1791 |
| 1675 TEST_F(ExtensionUpdaterTest, | 1792 TEST_F(ExtensionUpdaterTest, ProtectedDownloadAuthUserExhaustionFailure) { |
| 1676 SingleProtectedExtensionDownloadingWithNonDefaultAuthUser2) { | 1793 TestProtectedDownload("https://google.com", false, false, 2, 5); |
| 1677 TestSingleProtectedExtensionDownloading(true, true, 2, 2); | |
| 1678 } | 1794 } |
| 1679 | 1795 |
| 1680 TEST_F(ExtensionUpdaterTest, | 1796 TEST_F(ExtensionUpdaterTest, ProtectedDownloadWithOAuth2Token) { |
| 1681 SingleProtectedExtensionDownloadingAuthUserExhaustionFailure) { | 1797 TestProtectedDownload( |
| 1682 TestSingleProtectedExtensionDownloading(true, true, 2, 5); | 1798 "https://google.com", |
| 1799 true, true, |
| 1800 0, -1); |
| 1801 } |
| 1802 |
| 1803 TEST_F(ExtensionUpdaterTest, ProtectedDownloadWithOAuth2Failure) { |
| 1804 TestProtectedDownload( |
| 1805 "https://google.com", |
| 1806 true, false, |
| 1807 0, -1); |
| 1808 } |
| 1809 |
| 1810 TEST_F(ExtensionUpdaterTest, ProtectedDownloadNoOAuth2WithNonGoogleDomain) { |
| 1811 TestProtectedDownload( |
| 1812 "https://not-google.com", |
| 1813 true, true, |
| 1814 0, -1); |
| 1815 } |
| 1816 |
| 1817 TEST_F(ExtensionUpdaterTest, ProtectedDownloadFailWithoutHTTPS) { |
| 1818 TestProtectedDownload( |
| 1819 "http://google.com", |
| 1820 true, true, |
| 1821 0, 0); |
| 1683 } | 1822 } |
| 1684 | 1823 |
| 1685 TEST_F(ExtensionUpdaterTest, TestMultipleExtensionDownloadingUpdatesFail) { | 1824 TEST_F(ExtensionUpdaterTest, TestMultipleExtensionDownloadingUpdatesFail) { |
| 1686 TestMultipleExtensionDownloading(false); | 1825 TestMultipleExtensionDownloading(false); |
| 1687 } | 1826 } |
| 1688 TEST_F(ExtensionUpdaterTest, TestMultipleExtensionDownloadingUpdatesSucceed) { | 1827 TEST_F(ExtensionUpdaterTest, TestMultipleExtensionDownloadingUpdatesSucceed) { |
| 1689 TestMultipleExtensionDownloading(true); | 1828 TestMultipleExtensionDownloading(true); |
| 1690 } | 1829 } |
| 1691 | 1830 |
| 1692 TEST_F(ExtensionUpdaterTest, TestManifestRetryDownloading) { | 1831 TEST_F(ExtensionUpdaterTest, TestManifestRetryDownloading) { |
| 1693 TestManifestRetryDownloading(); | 1832 TestManifestRetryDownloading(); |
| 1694 } | 1833 } |
| 1695 | 1834 |
| 1696 TEST_F(ExtensionUpdaterTest, TestGalleryRequestsWithOrganicBrand) { | 1835 TEST_F(ExtensionUpdaterTest, TestGalleryRequestsWithOrganicBrand) { |
| 1697 TestGalleryRequestsWithBrand(true); | 1836 TestGalleryRequestsWithBrand(true); |
| 1698 } | 1837 } |
| 1699 | 1838 |
| 1700 TEST_F(ExtensionUpdaterTest, TestGalleryRequestsWithNonOrganicBrand) { | 1839 TEST_F(ExtensionUpdaterTest, TestGalleryRequestsWithNonOrganicBrand) { |
| 1701 TestGalleryRequestsWithBrand(false); | 1840 TestGalleryRequestsWithBrand(false); |
| 1702 } | 1841 } |
| 1703 | 1842 |
| 1704 TEST_F(ExtensionUpdaterTest, TestHandleManifestResults) { | 1843 TEST_F(ExtensionUpdaterTest, TestHandleManifestResults) { |
| 1705 TestHandleManifestResults(); | 1844 TestHandleManifestResults(); |
| 1706 } | 1845 } |
| 1707 | 1846 |
| 1708 TEST_F(ExtensionUpdaterTest, TestNonAutoUpdateableLocations) { | 1847 TEST_F(ExtensionUpdaterTest, TestNonAutoUpdateableLocations) { |
| 1709 net::TestURLFetcherFactory factory; | 1848 net::TestURLFetcherFactory factory; |
| 1710 ServiceForManifestTests service(prefs_.get()); | 1849 ServiceForManifestTests service(prefs_.get()); |
| 1711 ExtensionUpdater updater(&service, service.extension_prefs(), | 1850 ExtensionUpdater updater(&service, |
| 1712 service.pref_service(), service.profile(), | 1851 service.extension_prefs(), |
| 1713 kUpdateFrequencySecs, NULL); | 1852 service.pref_service(), |
| 1853 service.profile(), |
| 1854 kUpdateFrequencySecs, |
| 1855 NULL, |
| 1856 make_scoped_ptr<IdentityProvider>(NULL)); |
| 1714 MockExtensionDownloaderDelegate delegate; | 1857 MockExtensionDownloaderDelegate delegate; |
| 1715 // Set the downloader directly, so that all its events end up in the mock | 1858 // Set the downloader directly, so that all its events end up in the mock |
| 1716 // |delegate|. | 1859 // |delegate|. |
| 1717 ExtensionDownloader* downloader = | 1860 ExtensionDownloader* downloader = |
| 1718 new ExtensionDownloader(&delegate, service.request_context()); | 1861 new ExtensionDownloader(&delegate, service.request_context(), NULL); |
| 1719 ResetDownloader(&updater, downloader); | 1862 ResetDownloader(&updater, downloader); |
| 1720 | 1863 |
| 1721 // Non-internal non-external extensions should be rejected. | 1864 // Non-internal non-external extensions should be rejected. |
| 1722 ExtensionList extensions; | 1865 ExtensionList extensions; |
| 1723 service.CreateTestExtensions(1, 1, &extensions, NULL, | 1866 service.CreateTestExtensions(1, 1, &extensions, NULL, |
| 1724 Manifest::INVALID_LOCATION); | 1867 Manifest::INVALID_LOCATION); |
| 1725 service.CreateTestExtensions(2, 1, &extensions, NULL, Manifest::INTERNAL); | 1868 service.CreateTestExtensions(2, 1, &extensions, NULL, Manifest::INTERNAL); |
| 1726 ASSERT_EQ(2u, extensions.size()); | 1869 ASSERT_EQ(2u, extensions.size()); |
| 1727 const std::string& updateable_id = extensions[1]->id(); | 1870 const std::string& updateable_id = extensions[1]->id(); |
| 1728 | 1871 |
| 1729 // These expectations fail if the delegate's methods are invoked for the | 1872 // These expectations fail if the delegate's methods are invoked for the |
| 1730 // first extension, which has a non-matching id. | 1873 // first extension, which has a non-matching id. |
| 1731 EXPECT_CALL(delegate, GetUpdateUrlData(updateable_id)).WillOnce(Return("")); | 1874 EXPECT_CALL(delegate, GetUpdateUrlData(updateable_id)).WillOnce(Return("")); |
| 1732 EXPECT_CALL(delegate, GetPingDataForExtension(updateable_id, _)); | 1875 EXPECT_CALL(delegate, GetPingDataForExtension(updateable_id, _)); |
| 1733 | 1876 |
| 1734 service.set_extensions(extensions, ExtensionList()); | 1877 service.set_extensions(extensions, ExtensionList()); |
| 1735 ExtensionUpdater::CheckParams params; | 1878 ExtensionUpdater::CheckParams params; |
| 1736 updater.Start(); | 1879 updater.Start(); |
| 1737 updater.CheckNow(params); | 1880 updater.CheckNow(params); |
| 1738 } | 1881 } |
| 1739 | 1882 |
| 1740 TEST_F(ExtensionUpdaterTest, TestUpdatingDisabledExtensions) { | 1883 TEST_F(ExtensionUpdaterTest, TestUpdatingDisabledExtensions) { |
| 1741 net::TestURLFetcherFactory factory; | 1884 net::TestURLFetcherFactory factory; |
| 1742 ServiceForManifestTests service(prefs_.get()); | 1885 ServiceForManifestTests service(prefs_.get()); |
| 1743 ExtensionUpdater updater(&service, service.extension_prefs(), | 1886 ExtensionUpdater updater(&service, |
| 1744 service.pref_service(), service.profile(), | 1887 service.extension_prefs(), |
| 1745 kUpdateFrequencySecs, NULL); | 1888 service.pref_service(), |
| 1889 service.profile(), |
| 1890 kUpdateFrequencySecs, |
| 1891 NULL, |
| 1892 make_scoped_ptr<IdentityProvider>(NULL)); |
| 1746 MockExtensionDownloaderDelegate delegate; | 1893 MockExtensionDownloaderDelegate delegate; |
| 1747 // Set the downloader directly, so that all its events end up in the mock | 1894 // Set the downloader directly, so that all its events end up in the mock |
| 1748 // |delegate|. | 1895 // |delegate|. |
| 1749 ExtensionDownloader* downloader = | 1896 ExtensionDownloader* downloader = |
| 1750 new ExtensionDownloader(&delegate, service.request_context()); | 1897 new ExtensionDownloader(&delegate, service.request_context(), NULL); |
| 1751 ResetDownloader(&updater, downloader); | 1898 ResetDownloader(&updater, downloader); |
| 1752 | 1899 |
| 1753 // Non-internal non-external extensions should be rejected. | 1900 // Non-internal non-external extensions should be rejected. |
| 1754 ExtensionList enabled_extensions; | 1901 ExtensionList enabled_extensions; |
| 1755 ExtensionList disabled_extensions; | 1902 ExtensionList disabled_extensions; |
| 1756 service.CreateTestExtensions(1, 1, &enabled_extensions, NULL, | 1903 service.CreateTestExtensions(1, 1, &enabled_extensions, NULL, |
| 1757 Manifest::INTERNAL); | 1904 Manifest::INTERNAL); |
| 1758 service.CreateTestExtensions(2, 1, &disabled_extensions, NULL, | 1905 service.CreateTestExtensions(2, 1, &disabled_extensions, NULL, |
| 1759 Manifest::INTERNAL); | 1906 Manifest::INTERNAL); |
| 1760 ASSERT_EQ(1u, enabled_extensions.size()); | 1907 ASSERT_EQ(1u, enabled_extensions.size()); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1772 ExtensionUpdater::CheckParams params; | 1919 ExtensionUpdater::CheckParams params; |
| 1773 updater.Start(); | 1920 updater.Start(); |
| 1774 updater.CheckNow(params); | 1921 updater.CheckNow(params); |
| 1775 } | 1922 } |
| 1776 | 1923 |
| 1777 TEST_F(ExtensionUpdaterTest, TestManifestFetchesBuilderAddExtension) { | 1924 TEST_F(ExtensionUpdaterTest, TestManifestFetchesBuilderAddExtension) { |
| 1778 net::TestURLFetcherFactory factory; | 1925 net::TestURLFetcherFactory factory; |
| 1779 MockService service(prefs_.get()); | 1926 MockService service(prefs_.get()); |
| 1780 MockExtensionDownloaderDelegate delegate; | 1927 MockExtensionDownloaderDelegate delegate; |
| 1781 scoped_ptr<ExtensionDownloader> downloader( | 1928 scoped_ptr<ExtensionDownloader> downloader( |
| 1782 new ExtensionDownloader(&delegate, service.request_context())); | 1929 new ExtensionDownloader(&delegate, service.request_context(), NULL)); |
| 1783 EXPECT_EQ(0u, ManifestFetchersCount(downloader.get())); | 1930 EXPECT_EQ(0u, ManifestFetchersCount(downloader.get())); |
| 1784 | 1931 |
| 1785 // First, verify that adding valid extensions does invoke the callbacks on | 1932 // First, verify that adding valid extensions does invoke the callbacks on |
| 1786 // the delegate. | 1933 // the delegate. |
| 1787 std::string id = id_util::GenerateId("foo"); | 1934 std::string id = id_util::GenerateId("foo"); |
| 1788 EXPECT_CALL(delegate, GetPingDataForExtension(id, _)).WillOnce(Return(false)); | 1935 EXPECT_CALL(delegate, GetPingDataForExtension(id, _)).WillOnce(Return(false)); |
| 1789 EXPECT_TRUE( | 1936 EXPECT_TRUE( |
| 1790 downloader->AddPendingExtension(id, GURL("http://example.com/update"), | 1937 downloader->AddPendingExtension(id, GURL("http://example.com/update"), |
| 1791 0)); | 1938 0)); |
| 1792 downloader->StartAllPending(NULL); | 1939 downloader->StartAllPending(NULL); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1803 // Extensions with empty IDs should be rejected. | 1950 // Extensions with empty IDs should be rejected. |
| 1804 EXPECT_FALSE(downloader->AddPendingExtension(std::string(), GURL(), 0)); | 1951 EXPECT_FALSE(downloader->AddPendingExtension(std::string(), GURL(), 0)); |
| 1805 downloader->StartAllPending(NULL); | 1952 downloader->StartAllPending(NULL); |
| 1806 EXPECT_EQ(1u, ManifestFetchersCount(downloader.get())); | 1953 EXPECT_EQ(1u, ManifestFetchersCount(downloader.get())); |
| 1807 | 1954 |
| 1808 // TODO(akalin): Test that extensions with empty update URLs | 1955 // TODO(akalin): Test that extensions with empty update URLs |
| 1809 // converted from user scripts are rejected. | 1956 // converted from user scripts are rejected. |
| 1810 | 1957 |
| 1811 // Reset the ExtensionDownloader so that it drops the current fetcher. | 1958 // Reset the ExtensionDownloader so that it drops the current fetcher. |
| 1812 downloader.reset( | 1959 downloader.reset( |
| 1813 new ExtensionDownloader(&delegate, service.request_context())); | 1960 new ExtensionDownloader(&delegate, service.request_context(), NULL)); |
| 1814 EXPECT_EQ(0u, ManifestFetchersCount(downloader.get())); | 1961 EXPECT_EQ(0u, ManifestFetchersCount(downloader.get())); |
| 1815 | 1962 |
| 1816 // Extensions with empty update URLs should have a default one | 1963 // Extensions with empty update URLs should have a default one |
| 1817 // filled in. | 1964 // filled in. |
| 1818 id = id_util::GenerateId("foo3"); | 1965 id = id_util::GenerateId("foo3"); |
| 1819 EXPECT_CALL(delegate, GetPingDataForExtension(id, _)).WillOnce(Return(false)); | 1966 EXPECT_CALL(delegate, GetPingDataForExtension(id, _)).WillOnce(Return(false)); |
| 1820 EXPECT_TRUE(downloader->AddPendingExtension(id, GURL(), 0)); | 1967 EXPECT_TRUE(downloader->AddPendingExtension(id, GURL(), 0)); |
| 1821 downloader->StartAllPending(NULL); | 1968 downloader->StartAllPending(NULL); |
| 1822 EXPECT_EQ(1u, ManifestFetchersCount(downloader.get())); | 1969 EXPECT_EQ(1u, ManifestFetchersCount(downloader.get())); |
| 1823 | 1970 |
| 1824 net::TestURLFetcher* fetcher = | 1971 net::TestURLFetcher* fetcher = |
| 1825 factory.GetFetcherByID(ExtensionDownloader::kManifestFetcherId); | 1972 factory.GetFetcherByID(ExtensionDownloader::kManifestFetcherId); |
| 1826 ASSERT_TRUE(fetcher); | 1973 ASSERT_TRUE(fetcher); |
| 1827 EXPECT_FALSE(fetcher->GetOriginalURL().is_empty()); | 1974 EXPECT_FALSE(fetcher->GetOriginalURL().is_empty()); |
| 1828 } | 1975 } |
| 1829 | 1976 |
| 1830 TEST_F(ExtensionUpdaterTest, TestStartUpdateCheckMemory) { | 1977 TEST_F(ExtensionUpdaterTest, TestStartUpdateCheckMemory) { |
| 1831 net::TestURLFetcherFactory factory; | 1978 net::TestURLFetcherFactory factory; |
| 1832 MockService service(prefs_.get()); | 1979 MockService service(prefs_.get()); |
| 1833 MockExtensionDownloaderDelegate delegate; | 1980 MockExtensionDownloaderDelegate delegate; |
| 1834 ExtensionDownloader downloader(&delegate, service.request_context()); | 1981 ExtensionDownloader downloader(&delegate, service.request_context(), NULL); |
| 1835 | 1982 |
| 1836 StartUpdateCheck(&downloader, new ManifestFetchData(GURL(), 0)); | 1983 StartUpdateCheck(&downloader, new ManifestFetchData(GURL(), 0)); |
| 1837 // This should delete the newly-created ManifestFetchData. | 1984 // This should delete the newly-created ManifestFetchData. |
| 1838 StartUpdateCheck(&downloader, new ManifestFetchData(GURL(), 0)); | 1985 StartUpdateCheck(&downloader, new ManifestFetchData(GURL(), 0)); |
| 1839 // This should add into |manifests_pending_|. | 1986 // This should add into |manifests_pending_|. |
| 1840 StartUpdateCheck(&downloader, new ManifestFetchData(GURL( | 1987 StartUpdateCheck(&downloader, new ManifestFetchData(GURL( |
| 1841 GURL("http://www.google.com")), 0)); | 1988 GURL("http://www.google.com")), 0)); |
| 1842 // The dtor of |downloader| should delete the pending fetchers. | 1989 // The dtor of |downloader| should delete the pending fetchers. |
| 1843 } | 1990 } |
| 1844 | 1991 |
| 1845 TEST_F(ExtensionUpdaterTest, TestCheckSoon) { | 1992 TEST_F(ExtensionUpdaterTest, TestCheckSoon) { |
| 1846 ServiceForManifestTests service(prefs_.get()); | 1993 ServiceForManifestTests service(prefs_.get()); |
| 1847 net::TestURLFetcherFactory factory; | 1994 net::TestURLFetcherFactory factory; |
| 1848 ExtensionUpdater updater( | 1995 ExtensionUpdater updater(&service, |
| 1849 &service, service.extension_prefs(), service.pref_service(), | 1996 service.extension_prefs(), |
| 1850 service.profile(), kUpdateFrequencySecs, NULL); | 1997 service.pref_service(), |
| 1998 service.profile(), |
| 1999 kUpdateFrequencySecs, |
| 2000 NULL, |
| 2001 make_scoped_ptr<IdentityProvider>(NULL)); |
| 1851 EXPECT_FALSE(updater.WillCheckSoon()); | 2002 EXPECT_FALSE(updater.WillCheckSoon()); |
| 1852 updater.Start(); | 2003 updater.Start(); |
| 1853 EXPECT_FALSE(updater.WillCheckSoon()); | 2004 EXPECT_FALSE(updater.WillCheckSoon()); |
| 1854 updater.CheckSoon(); | 2005 updater.CheckSoon(); |
| 1855 EXPECT_TRUE(updater.WillCheckSoon()); | 2006 EXPECT_TRUE(updater.WillCheckSoon()); |
| 1856 updater.CheckSoon(); | 2007 updater.CheckSoon(); |
| 1857 EXPECT_TRUE(updater.WillCheckSoon()); | 2008 EXPECT_TRUE(updater.WillCheckSoon()); |
| 1858 RunUntilIdle(); | 2009 RunUntilIdle(); |
| 1859 EXPECT_FALSE(updater.WillCheckSoon()); | 2010 EXPECT_FALSE(updater.WillCheckSoon()); |
| 1860 updater.CheckSoon(); | 2011 updater.CheckSoon(); |
| 1861 EXPECT_TRUE(updater.WillCheckSoon()); | 2012 EXPECT_TRUE(updater.WillCheckSoon()); |
| 1862 updater.Stop(); | 2013 updater.Stop(); |
| 1863 EXPECT_FALSE(updater.WillCheckSoon()); | 2014 EXPECT_FALSE(updater.WillCheckSoon()); |
| 1864 } | 2015 } |
| 1865 | 2016 |
| 1866 // TODO(asargent) - (http://crbug.com/12780) add tests for: | 2017 // TODO(asargent) - (http://crbug.com/12780) add tests for: |
| 1867 // -prodversionmin (shouldn't update if browser version too old) | 2018 // -prodversionmin (shouldn't update if browser version too old) |
| 1868 // -manifests & updates arriving out of order / interleaved | 2019 // -manifests & updates arriving out of order / interleaved |
| 1869 // -malformed update url (empty, file://, has query, has a # fragment, etc.) | 2020 // -malformed update url (empty, file://, has query, has a # fragment, etc.) |
| 1870 // -An extension gets uninstalled while updates are in progress (so it doesn't | 2021 // -An extension gets uninstalled while updates are in progress (so it doesn't |
| 1871 // "come back from the dead") | 2022 // "come back from the dead") |
| 1872 // -An extension gets manually updated to v3 while we're downloading v2 (ie | 2023 // -An extension gets manually updated to v3 while we're downloading v2 (ie |
| 1873 // you don't get downgraded accidentally) | 2024 // you don't get downgraded accidentally) |
| 1874 // -An update manifest mentions multiple updates | 2025 // -An update manifest mentions multiple updates |
| 1875 | 2026 |
| 1876 } // namespace extensions | 2027 } // namespace extensions |
| OLD | NEW |