| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/extensions/extension_service.h" | 5 #include "chrome/browser/extensions/extension_service.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 104 #include "content/public/test/test_utils.h" | 104 #include "content/public/test/test_utils.h" |
| 105 #include "extensions/browser/extension_dialog_auto_confirm.h" | 105 #include "extensions/browser/extension_dialog_auto_confirm.h" |
| 106 #include "extensions/browser/extension_prefs.h" | 106 #include "extensions/browser/extension_prefs.h" |
| 107 #include "extensions/browser/extension_registry.h" | 107 #include "extensions/browser/extension_registry.h" |
| 108 #include "extensions/browser/extension_system.h" | 108 #include "extensions/browser/extension_system.h" |
| 109 #include "extensions/browser/extension_util.h" | 109 #include "extensions/browser/extension_util.h" |
| 110 #include "extensions/browser/external_install_info.h" | 110 #include "extensions/browser/external_install_info.h" |
| 111 #include "extensions/browser/external_provider_interface.h" | 111 #include "extensions/browser/external_provider_interface.h" |
| 112 #include "extensions/browser/install_flag.h" | 112 #include "extensions/browser/install_flag.h" |
| 113 #include "extensions/browser/management_policy.h" | 113 #include "extensions/browser/management_policy.h" |
| 114 #include "extensions/browser/mock_external_provider.h" |
| 114 #include "extensions/browser/test_extension_registry_observer.h" | 115 #include "extensions/browser/test_extension_registry_observer.h" |
| 115 #include "extensions/browser/test_management_policy.h" | 116 #include "extensions/browser/test_management_policy.h" |
| 116 #include "extensions/browser/uninstall_reason.h" | 117 #include "extensions/browser/uninstall_reason.h" |
| 117 #include "extensions/common/constants.h" | 118 #include "extensions/common/constants.h" |
| 118 #include "extensions/common/extension.h" | 119 #include "extensions/common/extension.h" |
| 119 #include "extensions/common/extension_builder.h" | 120 #include "extensions/common/extension_builder.h" |
| 120 #include "extensions/common/extension_l10n_util.h" | 121 #include "extensions/common/extension_l10n_util.h" |
| 121 #include "extensions/common/extension_resource.h" | 122 #include "extensions/common/extension_resource.h" |
| 122 #include "extensions/common/manifest_constants.h" | 123 #include "extensions/common/manifest_constants.h" |
| 123 #include "extensions/common/manifest_handlers/background_info.h" | 124 #include "extensions/common/manifest_handlers/background_info.h" |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 using extensions::ExtensionRegistry; | 171 using extensions::ExtensionRegistry; |
| 171 using extensions::ExtensionResource; | 172 using extensions::ExtensionResource; |
| 172 using extensions::ExtensionSystem; | 173 using extensions::ExtensionSystem; |
| 173 using extensions::ExternalInstallError; | 174 using extensions::ExternalInstallError; |
| 174 using extensions::ExternalInstallInfoFile; | 175 using extensions::ExternalInstallInfoFile; |
| 175 using extensions::ExternalInstallInfoUpdateUrl; | 176 using extensions::ExternalInstallInfoUpdateUrl; |
| 176 using extensions::ExternalProviderInterface; | 177 using extensions::ExternalProviderInterface; |
| 177 using extensions::FakeSafeBrowsingDatabaseManager; | 178 using extensions::FakeSafeBrowsingDatabaseManager; |
| 178 using extensions::FeatureSwitch; | 179 using extensions::FeatureSwitch; |
| 179 using extensions::Manifest; | 180 using extensions::Manifest; |
| 181 using extensions::MockExternalProvider; |
| 180 using extensions::PermissionSet; | 182 using extensions::PermissionSet; |
| 181 using extensions::TestExtensionSystem; | 183 using extensions::TestExtensionSystem; |
| 182 using extensions::UnloadedExtensionInfo; | 184 using extensions::UnloadedExtensionInfo; |
| 183 using extensions::URLPatternSet; | 185 using extensions::URLPatternSet; |
| 184 | 186 |
| 185 namespace keys = extensions::manifest_keys; | 187 namespace keys = extensions::manifest_keys; |
| 186 | 188 |
| 187 namespace { | 189 namespace { |
| 188 | 190 |
| 189 // Extension ids used during testing. | 191 // Extension ids used during testing. |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 267 manifest.SetString(extensions::manifest_keys::kName, name); | 269 manifest.SetString(extensions::manifest_keys::kName, name); |
| 268 std::string error; | 270 std::string error; |
| 269 scoped_refptr<Extension> extension = | 271 scoped_refptr<Extension> extension = |
| 270 Extension::Create(path, location, manifest, Extension::NO_FLAGS, &error); | 272 Extension::Create(path, location, manifest, Extension::NO_FLAGS, &error); |
| 271 EXPECT_TRUE(extension.get() != nullptr) << error; | 273 EXPECT_TRUE(extension.get() != nullptr) << error; |
| 272 return extension; | 274 return extension; |
| 273 } | 275 } |
| 274 | 276 |
| 275 } // namespace | 277 } // namespace |
| 276 | 278 |
| 277 class MockExtensionProvider : public extensions::ExternalProviderInterface { | |
| 278 public: | |
| 279 MockExtensionProvider( | |
| 280 VisitorInterface* visitor, | |
| 281 Manifest::Location location) | |
| 282 : location_(location), visitor_(visitor), visit_count_(0) { | |
| 283 } | |
| 284 | |
| 285 ~MockExtensionProvider() override {} | |
| 286 | |
| 287 void UpdateOrAddExtension(const std::string& id, | |
| 288 const std::string& version, | |
| 289 const base::FilePath& path) { | |
| 290 extension_map_[id] = std::make_pair(version, path); | |
| 291 } | |
| 292 | |
| 293 void RemoveExtension(const std::string& id) { | |
| 294 extension_map_.erase(id); | |
| 295 } | |
| 296 | |
| 297 // ExternalProvider implementation: | |
| 298 void VisitRegisteredExtension() override { | |
| 299 visit_count_++; | |
| 300 for (DataMap::const_iterator i = extension_map_.begin(); | |
| 301 i != extension_map_.end(); ++i) { | |
| 302 std::unique_ptr<base::Version> version( | |
| 303 new base::Version(i->second.first)); | |
| 304 | |
| 305 std::unique_ptr<ExternalInstallInfoFile> info(new ExternalInstallInfoFile( | |
| 306 i->first, std::move(version), i->second.second, location_, | |
| 307 Extension::NO_FLAGS, false, false)); | |
| 308 visitor_->OnExternalExtensionFileFound(*info); | |
| 309 } | |
| 310 visitor_->OnExternalProviderReady(this); | |
| 311 } | |
| 312 | |
| 313 bool HasExtension(const std::string& id) const override { | |
| 314 return extension_map_.find(id) != extension_map_.end(); | |
| 315 } | |
| 316 | |
| 317 bool GetExtensionDetails( | |
| 318 const std::string& id, | |
| 319 Manifest::Location* location, | |
| 320 std::unique_ptr<base::Version>* version) const override { | |
| 321 DataMap::const_iterator it = extension_map_.find(id); | |
| 322 if (it == extension_map_.end()) | |
| 323 return false; | |
| 324 | |
| 325 if (version) | |
| 326 version->reset(new base::Version(it->second.first)); | |
| 327 | |
| 328 if (location) | |
| 329 *location = location_; | |
| 330 | |
| 331 return true; | |
| 332 } | |
| 333 | |
| 334 bool IsReady() const override { return true; } | |
| 335 | |
| 336 void ServiceShutdown() override {} | |
| 337 | |
| 338 int visit_count() const { return visit_count_; } | |
| 339 void set_visit_count(int visit_count) { | |
| 340 visit_count_ = visit_count; | |
| 341 } | |
| 342 | |
| 343 private: | |
| 344 typedef std::map< std::string, std::pair<std::string, base::FilePath> > | |
| 345 DataMap; | |
| 346 DataMap extension_map_; | |
| 347 Manifest::Location location_; | |
| 348 VisitorInterface* visitor_; | |
| 349 | |
| 350 // visit_count_ tracks the number of calls to VisitRegisteredExtension(). | |
| 351 // Mutable because it must be incremented on each call to | |
| 352 // VisitRegisteredExtension(), which must be a const method to inherit | |
| 353 // from the class being mocked. | |
| 354 mutable int visit_count_; | |
| 355 | |
| 356 DISALLOW_COPY_AND_ASSIGN(MockExtensionProvider); | |
| 357 }; | |
| 358 | |
| 359 class MockProviderVisitor | 279 class MockProviderVisitor |
| 360 : public extensions::ExternalProviderInterface::VisitorInterface { | 280 : public extensions::ExternalProviderInterface::VisitorInterface { |
| 361 public: | 281 public: |
| 362 // The provider will return |fake_base_path| from | 282 // The provider will return |fake_base_path| from |
| 363 // GetBaseCrxFilePath(). User can test the behavior with | 283 // GetBaseCrxFilePath(). User can test the behavior with |
| 364 // and without an empty path using this parameter. | 284 // and without an empty path using this parameter. |
| 365 explicit MockProviderVisitor(base::FilePath fake_base_path) | 285 explicit MockProviderVisitor(base::FilePath fake_base_path) |
| 366 : ids_found_(0), | 286 : ids_found_(0), |
| 367 fake_base_path_(fake_base_path), | 287 fake_base_path_(fake_base_path), |
| 368 expected_creation_flags_(Extension::NO_FLAGS) { | 288 expected_creation_flags_(Extension::NO_FLAGS) { |
| (...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 628 } | 548 } |
| 629 | 549 |
| 630 base::FilePath good2_path() { | 550 base::FilePath good2_path() { |
| 631 return data_dir() | 551 return data_dir() |
| 632 .AppendASCII("good") | 552 .AppendASCII("good") |
| 633 .AppendASCII("Extensions") | 553 .AppendASCII("Extensions") |
| 634 .AppendASCII(good2) | 554 .AppendASCII(good2) |
| 635 .AppendASCII("1.0"); | 555 .AppendASCII("1.0"); |
| 636 } | 556 } |
| 637 | 557 |
| 638 void TestExternalProvider(MockExtensionProvider* provider, | 558 void TestExternalProvider(MockExternalProvider* provider, |
| 639 Manifest::Location location); | 559 Manifest::Location location); |
| 640 | 560 |
| 641 // Grants all optional permissions stated in manifest to active permission | 561 // Grants all optional permissions stated in manifest to active permission |
| 642 // set for extension |id|. | 562 // set for extension |id|. |
| 643 void GrantAllOptionalPermissions(const std::string& id) { | 563 void GrantAllOptionalPermissions(const std::string& id) { |
| 644 const Extension* extension = service()->GetInstalledExtension(id); | 564 const Extension* extension = service()->GetInstalledExtension(id); |
| 645 const PermissionSet& all_optional_permissions = | 565 const PermissionSet& all_optional_permissions = |
| 646 extensions::PermissionsParser::GetOptionalPermissions(extension); | 566 extensions::PermissionsParser::GetOptionalPermissions(extension); |
| 647 extensions::PermissionsUpdater perms_updater(profile()); | 567 extensions::PermissionsUpdater perms_updater(profile()); |
| 648 perms_updater.AddPermissions(extension, all_optional_permissions); | 568 perms_updater.AddPermissions(extension, all_optional_permissions); |
| (...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1269 // Aforementioned extension will not be loaded if | 1189 // Aforementioned extension will not be loaded if |
| 1270 // there is no '--enable-experimental-extension-apis' command line flag. | 1190 // there is no '--enable-experimental-extension-apis' command line flag. |
| 1271 InitializeInstalledExtensionService(pref_path, source_install_dir); | 1191 InitializeInstalledExtensionService(pref_path, source_install_dir); |
| 1272 | 1192 |
| 1273 service()->Init(); | 1193 service()->Init(); |
| 1274 | 1194 |
| 1275 // Check and try to uninstall it. | 1195 // Check and try to uninstall it. |
| 1276 // If we don't check whether the extension is loaded before we uninstall it | 1196 // If we don't check whether the extension is loaded before we uninstall it |
| 1277 // in CheckExternalUninstall, a crash will happen here because we will get or | 1197 // in CheckExternalUninstall, a crash will happen here because we will get or |
| 1278 // dereference a NULL pointer (extension) inside UninstallExtension. | 1198 // dereference a NULL pointer (extension) inside UninstallExtension. |
| 1279 MockExtensionProvider provider(NULL, Manifest::EXTERNAL_REGISTRY); | 1199 MockExternalProvider provider(NULL, Manifest::EXTERNAL_REGISTRY); |
| 1280 service()->OnExternalProviderReady(&provider); | 1200 service()->OnExternalProviderReady(&provider); |
| 1281 } | 1201 } |
| 1282 | 1202 |
| 1283 // Test that external extensions with incorrect IDs are not installed. | 1203 // Test that external extensions with incorrect IDs are not installed. |
| 1284 TEST_F(ExtensionServiceTest, FailOnWrongId) { | 1204 TEST_F(ExtensionServiceTest, FailOnWrongId) { |
| 1285 InitializeEmptyExtensionService(); | 1205 InitializeEmptyExtensionService(); |
| 1286 base::FilePath path = data_dir().AppendASCII("good.crx"); | 1206 base::FilePath path = data_dir().AppendASCII("good.crx"); |
| 1287 | 1207 |
| 1288 std::unique_ptr<base::Version> version(new base::Version("1.0.0.0")); | 1208 std::unique_ptr<base::Version> version(new base::Version("1.0.0.0")); |
| 1289 | 1209 |
| (...skipping 2232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3522 { | 3442 { |
| 3523 ManagementPrefUpdater pref(profile_->GetTestingPrefService()); | 3443 ManagementPrefUpdater pref(profile_->GetTestingPrefService()); |
| 3524 // // Blacklist everything. | 3444 // // Blacklist everything. |
| 3525 // pref.SetBlacklistedByDefault(true); | 3445 // pref.SetBlacklistedByDefault(true); |
| 3526 // Mark good.crx for force-installation. | 3446 // Mark good.crx for force-installation. |
| 3527 pref.SetIndividualExtensionAutoInstalled( | 3447 pref.SetIndividualExtensionAutoInstalled( |
| 3528 good_crx, "http://example.com/update_url", true); | 3448 good_crx, "http://example.com/update_url", true); |
| 3529 } | 3449 } |
| 3530 | 3450 |
| 3531 // Have policy force-install an extension. | 3451 // Have policy force-install an extension. |
| 3532 MockExtensionProvider* provider = | 3452 MockExternalProvider* provider = |
| 3533 new MockExtensionProvider(service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); | 3453 new MockExternalProvider(service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); |
| 3534 AddMockExternalProvider(provider); | 3454 AddMockExternalProvider(provider); |
| 3535 provider->UpdateOrAddExtension( | 3455 provider->UpdateOrAddExtension( |
| 3536 good_crx, "1.0.0.0", data_dir().AppendASCII("good_crx")); | 3456 good_crx, "1.0.0.0", data_dir().AppendASCII("good_crx")); |
| 3537 | 3457 |
| 3538 // Reloading extensions should find our externally registered extension | 3458 // Reloading extensions should find our externally registered extension |
| 3539 // and install it. | 3459 // and install it. |
| 3540 content::WindowedNotificationObserver observer( | 3460 content::WindowedNotificationObserver observer( |
| 3541 extensions::NOTIFICATION_CRX_INSTALLER_DONE, | 3461 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 3542 content::NotificationService::AllSources()); | 3462 content::NotificationService::AllSources()); |
| 3543 service()->CheckForExternalUpdates(); | 3463 service()->CheckForExternalUpdates(); |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3737 { | 3657 { |
| 3738 ManagementPrefUpdater pref(profile_->GetTestingPrefService()); | 3658 ManagementPrefUpdater pref(profile_->GetTestingPrefService()); |
| 3739 // Blacklist everything. | 3659 // Blacklist everything. |
| 3740 pref.SetBlacklistedByDefault(true); | 3660 pref.SetBlacklistedByDefault(true); |
| 3741 // Mark good.crx for force-installation. | 3661 // Mark good.crx for force-installation. |
| 3742 pref.SetIndividualExtensionAutoInstalled( | 3662 pref.SetIndividualExtensionAutoInstalled( |
| 3743 good_crx, "http://example.com/update_url", true); | 3663 good_crx, "http://example.com/update_url", true); |
| 3744 } | 3664 } |
| 3745 | 3665 |
| 3746 // Have policy force-install an extension. | 3666 // Have policy force-install an extension. |
| 3747 MockExtensionProvider* provider = | 3667 MockExternalProvider* provider = |
| 3748 new MockExtensionProvider(service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); | 3668 new MockExternalProvider(service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); |
| 3749 AddMockExternalProvider(provider); | 3669 AddMockExternalProvider(provider); |
| 3750 provider->UpdateOrAddExtension( | 3670 provider->UpdateOrAddExtension( |
| 3751 good_crx, "1.0.0.0", data_dir().AppendASCII("good.crx")); | 3671 good_crx, "1.0.0.0", data_dir().AppendASCII("good.crx")); |
| 3752 | 3672 |
| 3753 // Reloading extensions should find our externally registered extension | 3673 // Reloading extensions should find our externally registered extension |
| 3754 // and install it. | 3674 // and install it. |
| 3755 content::WindowedNotificationObserver observer( | 3675 content::WindowedNotificationObserver observer( |
| 3756 extensions::NOTIFICATION_CRX_INSTALLER_DONE, | 3676 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 3757 content::NotificationService::AllSources()); | 3677 content::NotificationService::AllSources()); |
| 3758 service()->CheckForExternalUpdates(); | 3678 service()->CheckForExternalUpdates(); |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3993 base::FilePath crx_path = temp_dir.GetPath().AppendASCII("temp.crx"); | 3913 base::FilePath crx_path = temp_dir.GetPath().AppendASCII("temp.crx"); |
| 3994 | 3914 |
| 3995 PackCRX(path, pem_path, crx_path); | 3915 PackCRX(path, pem_path, crx_path); |
| 3996 | 3916 |
| 3997 { | 3917 { |
| 3998 // Block one of the required permissions. | 3918 // Block one of the required permissions. |
| 3999 ManagementPrefUpdater pref(profile_->GetTestingPrefService()); | 3919 ManagementPrefUpdater pref(profile_->GetTestingPrefService()); |
| 4000 pref.AddBlockedPermission("*", "tabs"); | 3920 pref.AddBlockedPermission("*", "tabs"); |
| 4001 } | 3921 } |
| 4002 | 3922 |
| 4003 // Use MockExtensionProvider to simulate force installing extension. | 3923 // Use MockExternalProvider to simulate force installing extension. |
| 4004 MockExtensionProvider* provider = | 3924 MockExternalProvider* provider = |
| 4005 new MockExtensionProvider(service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); | 3925 new MockExternalProvider(service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); |
| 4006 AddMockExternalProvider(provider); | 3926 AddMockExternalProvider(provider); |
| 4007 provider->UpdateOrAddExtension(permissions_blocklist, "1.0", crx_path); | 3927 provider->UpdateOrAddExtension(permissions_blocklist, "1.0", crx_path); |
| 4008 | 3928 |
| 4009 { | 3929 { |
| 4010 // Attempts to force install this extension. | 3930 // Attempts to force install this extension. |
| 4011 content::WindowedNotificationObserver observer( | 3931 content::WindowedNotificationObserver observer( |
| 4012 extensions::NOTIFICATION_CRX_INSTALLER_DONE, | 3932 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 4013 content::NotificationService::AllSources()); | 3933 content::NotificationService::AllSources()); |
| 4014 service()->CheckForExternalUpdates(); | 3934 service()->CheckForExternalUpdates(); |
| 4015 observer.Wait(); | 3935 observer.Wait(); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4096 | 4016 |
| 4097 // Install two arbitary extensions with specified manifest. | 4017 // Install two arbitary extensions with specified manifest. |
| 4098 std::string ext1 = PackAndInstallCRX(path, INSTALL_NEW)->id(); | 4018 std::string ext1 = PackAndInstallCRX(path, INSTALL_NEW)->id(); |
| 4099 std::string ext2 = PackAndInstallCRX(path2, INSTALL_NEW)->id(); | 4019 std::string ext2 = PackAndInstallCRX(path2, INSTALL_NEW)->id(); |
| 4100 ASSERT_NE(ext1, permissions_blocklist); | 4020 ASSERT_NE(ext1, permissions_blocklist); |
| 4101 ASSERT_NE(ext2, permissions_blocklist); | 4021 ASSERT_NE(ext2, permissions_blocklist); |
| 4102 ASSERT_NE(ext1, ext2); | 4022 ASSERT_NE(ext1, ext2); |
| 4103 | 4023 |
| 4104 // Force install another extension with known id and same manifest as 'ext2'. | 4024 // Force install another extension with known id and same manifest as 'ext2'. |
| 4105 std::string ext2_forced = permissions_blocklist; | 4025 std::string ext2_forced = permissions_blocklist; |
| 4106 MockExtensionProvider* provider = | 4026 MockExternalProvider* provider = |
| 4107 new MockExtensionProvider(service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); | 4027 new MockExternalProvider(service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); |
| 4108 AddMockExternalProvider(provider); | 4028 AddMockExternalProvider(provider); |
| 4109 provider->UpdateOrAddExtension(ext2_forced, "2.0", crx_path); | 4029 provider->UpdateOrAddExtension(ext2_forced, "2.0", crx_path); |
| 4110 | 4030 |
| 4111 content::WindowedNotificationObserver observer( | 4031 content::WindowedNotificationObserver observer( |
| 4112 extensions::NOTIFICATION_CRX_INSTALLER_DONE, | 4032 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 4113 content::NotificationService::AllSources()); | 4033 content::NotificationService::AllSources()); |
| 4114 service()->CheckForExternalUpdates(); | 4034 service()->CheckForExternalUpdates(); |
| 4115 observer.Wait(); | 4035 observer.Wait(); |
| 4116 | 4036 |
| 4117 extensions::ExtensionRegistry* registry = | 4037 extensions::ExtensionRegistry* registry = |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4159 #if defined(OS_WIN) | 4079 #if defined(OS_WIN) |
| 4160 #define MAYBE_ExternalExtensionAutoAcknowledgement DISABLED_ExternalExtensionAut
oAcknowledgement | 4080 #define MAYBE_ExternalExtensionAutoAcknowledgement DISABLED_ExternalExtensionAut
oAcknowledgement |
| 4161 #else | 4081 #else |
| 4162 #define MAYBE_ExternalExtensionAutoAcknowledgement ExternalExtensionAutoAcknowle
dgement | 4082 #define MAYBE_ExternalExtensionAutoAcknowledgement ExternalExtensionAutoAcknowle
dgement |
| 4163 #endif | 4083 #endif |
| 4164 TEST_F(ExtensionServiceTest, MAYBE_ExternalExtensionAutoAcknowledgement) { | 4084 TEST_F(ExtensionServiceTest, MAYBE_ExternalExtensionAutoAcknowledgement) { |
| 4165 InitializeEmptyExtensionService(); | 4085 InitializeEmptyExtensionService(); |
| 4166 | 4086 |
| 4167 { | 4087 { |
| 4168 // Register and install an external extension. | 4088 // Register and install an external extension. |
| 4169 MockExtensionProvider* provider = | 4089 MockExternalProvider* provider = |
| 4170 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 4090 new MockExternalProvider(service(), Manifest::EXTERNAL_PREF); |
| 4171 AddMockExternalProvider(provider); | 4091 AddMockExternalProvider(provider); |
| 4172 provider->UpdateOrAddExtension( | 4092 provider->UpdateOrAddExtension( |
| 4173 good_crx, "1.0.0.0", data_dir().AppendASCII("good.crx")); | 4093 good_crx, "1.0.0.0", data_dir().AppendASCII("good.crx")); |
| 4174 } | 4094 } |
| 4175 { | 4095 { |
| 4176 // Have policy force-install an extension. | 4096 // Have policy force-install an extension. |
| 4177 MockExtensionProvider* provider = new MockExtensionProvider( | 4097 MockExternalProvider* provider = |
| 4178 service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); | 4098 new MockExternalProvider(service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); |
| 4179 AddMockExternalProvider(provider); | 4099 AddMockExternalProvider(provider); |
| 4180 provider->UpdateOrAddExtension( | 4100 provider->UpdateOrAddExtension( |
| 4181 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); | 4101 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); |
| 4182 } | 4102 } |
| 4183 | 4103 |
| 4184 // Providers are set up. Let them run. | 4104 // Providers are set up. Let them run. |
| 4185 int count = 2; | 4105 int count = 2; |
| 4186 content::WindowedNotificationObserver observer( | 4106 content::WindowedNotificationObserver observer( |
| 4187 extensions::NOTIFICATION_CRX_INSTALLER_DONE, | 4107 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 4188 base::Bind(&WaitForCountNotificationsCallback, &count)); | 4108 base::Bind(&WaitForCountNotificationsCallback, &count)); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 4199 } | 4119 } |
| 4200 | 4120 |
| 4201 // Tests that an extension added through an external source is initially | 4121 // Tests that an extension added through an external source is initially |
| 4202 // disabled with the "prompt for external extensions" feature. | 4122 // disabled with the "prompt for external extensions" feature. |
| 4203 TEST_F(ExtensionServiceTest, ExternalExtensionDisabledOnInstallation) { | 4123 TEST_F(ExtensionServiceTest, ExternalExtensionDisabledOnInstallation) { |
| 4204 FeatureSwitch::ScopedOverride external_prompt_override( | 4124 FeatureSwitch::ScopedOverride external_prompt_override( |
| 4205 FeatureSwitch::prompt_for_external_extensions(), true); | 4125 FeatureSwitch::prompt_for_external_extensions(), true); |
| 4206 InitializeEmptyExtensionService(); | 4126 InitializeEmptyExtensionService(); |
| 4207 | 4127 |
| 4208 // Register and install an external extension. | 4128 // Register and install an external extension. |
| 4209 MockExtensionProvider* provider = | 4129 MockExternalProvider* provider = |
| 4210 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 4130 new MockExternalProvider(service(), Manifest::EXTERNAL_PREF); |
| 4211 AddMockExternalProvider(provider); // Takes ownership. | 4131 AddMockExternalProvider(provider); // Takes ownership. |
| 4212 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", | 4132 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", |
| 4213 data_dir().AppendASCII("good.crx")); | 4133 data_dir().AppendASCII("good.crx")); |
| 4214 | 4134 |
| 4215 WaitForExternalExtensionInstalled(); | 4135 WaitForExternalExtensionInstalled(); |
| 4216 | 4136 |
| 4217 EXPECT_TRUE(registry()->disabled_extensions().Contains(good_crx)); | 4137 EXPECT_TRUE(registry()->disabled_extensions().Contains(good_crx)); |
| 4218 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); | 4138 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); |
| 4219 EXPECT_FALSE(prefs->IsExternalExtensionAcknowledged(good_crx)); | 4139 EXPECT_FALSE(prefs->IsExternalExtensionAcknowledged(good_crx)); |
| 4220 EXPECT_EQ(Extension::DISABLE_EXTERNAL_EXTENSION, | 4140 EXPECT_EQ(Extension::DISABLE_EXTERNAL_EXTENSION, |
| (...skipping 18 matching lines...) Expand all Loading... |
| 4239 // Test that if an extension is installed before the "prompt for external | 4159 // Test that if an extension is installed before the "prompt for external |
| 4240 // extensions" feature is enabled, but is updated when the feature is | 4160 // extensions" feature is enabled, but is updated when the feature is |
| 4241 // enabled, the extension is not disabled. | 4161 // enabled, the extension is not disabled. |
| 4242 TEST_F(ExtensionServiceTest, ExternalExtensionIsNotDisabledOnUpdate) { | 4162 TEST_F(ExtensionServiceTest, ExternalExtensionIsNotDisabledOnUpdate) { |
| 4243 auto external_prompt_override = | 4163 auto external_prompt_override = |
| 4244 base::MakeUnique<FeatureSwitch::ScopedOverride>( | 4164 base::MakeUnique<FeatureSwitch::ScopedOverride>( |
| 4245 FeatureSwitch::prompt_for_external_extensions(), false); | 4165 FeatureSwitch::prompt_for_external_extensions(), false); |
| 4246 InitializeEmptyExtensionService(); | 4166 InitializeEmptyExtensionService(); |
| 4247 | 4167 |
| 4248 // Register and install an external extension. | 4168 // Register and install an external extension. |
| 4249 MockExtensionProvider* provider = | 4169 MockExternalProvider* provider = |
| 4250 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 4170 new MockExternalProvider(service(), Manifest::EXTERNAL_PREF); |
| 4251 AddMockExternalProvider(provider); | 4171 AddMockExternalProvider(provider); |
| 4252 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", | 4172 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", |
| 4253 data_dir().AppendASCII("good.crx")); | 4173 data_dir().AppendASCII("good.crx")); |
| 4254 | 4174 |
| 4255 WaitForExternalExtensionInstalled(); | 4175 WaitForExternalExtensionInstalled(); |
| 4256 | 4176 |
| 4257 EXPECT_TRUE(registry()->enabled_extensions().Contains(good_crx)); | 4177 EXPECT_TRUE(registry()->enabled_extensions().Contains(good_crx)); |
| 4258 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); | 4178 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); |
| 4259 EXPECT_FALSE(prefs->IsExternalExtensionAcknowledged(good_crx)); | 4179 EXPECT_FALSE(prefs->IsExternalExtensionAcknowledged(good_crx)); |
| 4260 EXPECT_EQ(Extension::DISABLE_NONE, prefs->GetDisableReasons(good_crx)); | 4180 EXPECT_EQ(Extension::DISABLE_NONE, prefs->GetDisableReasons(good_crx)); |
| (...skipping 734 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4995 base::FilePath ms_messages_file = bad_locale.AppendASCII("_locales") | 4915 base::FilePath ms_messages_file = bad_locale.AppendASCII("_locales") |
| 4996 .AppendASCII("ms") | 4916 .AppendASCII("ms") |
| 4997 .AppendASCII("messages.json"); | 4917 .AppendASCII("messages.json"); |
| 4998 EXPECT_THAT(base::UTF16ToUTF8(GetErrors()[0]), testing::AllOf( | 4918 EXPECT_THAT(base::UTF16ToUTF8(GetErrors()[0]), testing::AllOf( |
| 4999 testing::HasSubstr( | 4919 testing::HasSubstr( |
| 5000 base::UTF16ToUTF8(ms_messages_file.LossyDisplayName())), | 4920 base::UTF16ToUTF8(ms_messages_file.LossyDisplayName())), |
| 5001 testing::HasSubstr("Dictionary keys must be quoted."))); | 4921 testing::HasSubstr("Dictionary keys must be quoted."))); |
| 5002 ASSERT_EQ(0u, loaded_.size()); | 4922 ASSERT_EQ(0u, loaded_.size()); |
| 5003 } | 4923 } |
| 5004 | 4924 |
| 5005 void ExtensionServiceTest::TestExternalProvider( | 4925 void ExtensionServiceTest::TestExternalProvider(MockExternalProvider* provider, |
| 5006 MockExtensionProvider* provider, Manifest::Location location) { | 4926 Manifest::Location location) { |
| 5007 // Verify that starting with no providers loads no extensions. | 4927 // Verify that starting with no providers loads no extensions. |
| 5008 service()->Init(); | 4928 service()->Init(); |
| 5009 ASSERT_EQ(0u, loaded_.size()); | 4929 ASSERT_EQ(0u, loaded_.size()); |
| 5010 | 4930 |
| 5011 provider->set_visit_count(0); | 4931 provider->set_visit_count(0); |
| 5012 | 4932 |
| 5013 // Register a test extension externally using the mock registry provider. | 4933 // Register a test extension externally using the mock registry provider. |
| 5014 base::FilePath source_path = data_dir().AppendASCII("good.crx"); | 4934 base::FilePath source_path = data_dir().AppendASCII("good.crx"); |
| 5015 | 4935 |
| 5016 // Add the extension. | 4936 // Add the extension. |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5153 } | 5073 } |
| 5154 } | 5074 } |
| 5155 | 5075 |
| 5156 // Tests the external installation feature | 5076 // Tests the external installation feature |
| 5157 #if defined(OS_WIN) | 5077 #if defined(OS_WIN) |
| 5158 TEST_F(ExtensionServiceTest, ExternalInstallRegistry) { | 5078 TEST_F(ExtensionServiceTest, ExternalInstallRegistry) { |
| 5159 // This should all work, even when normal extension installation is disabled. | 5079 // This should all work, even when normal extension installation is disabled. |
| 5160 InitializeExtensionServiceWithExtensionsDisabled(); | 5080 InitializeExtensionServiceWithExtensionsDisabled(); |
| 5161 | 5081 |
| 5162 // Now add providers. Extension system takes ownership of the objects. | 5082 // Now add providers. Extension system takes ownership of the objects. |
| 5163 MockExtensionProvider* reg_provider = | 5083 MockExternalProvider* reg_provider = |
| 5164 new MockExtensionProvider(service(), Manifest::EXTERNAL_REGISTRY); | 5084 new MockExternalProvider(service(), Manifest::EXTERNAL_REGISTRY); |
| 5165 AddMockExternalProvider(reg_provider); | 5085 AddMockExternalProvider(reg_provider); |
| 5166 TestExternalProvider(reg_provider, Manifest::EXTERNAL_REGISTRY); | 5086 TestExternalProvider(reg_provider, Manifest::EXTERNAL_REGISTRY); |
| 5167 } | 5087 } |
| 5168 #endif | 5088 #endif |
| 5169 | 5089 |
| 5170 TEST_F(ExtensionServiceTest, ExternalInstallPref) { | 5090 TEST_F(ExtensionServiceTest, ExternalInstallPref) { |
| 5171 InitializeEmptyExtensionService(); | 5091 InitializeEmptyExtensionService(); |
| 5172 | 5092 |
| 5173 // Now add providers. Extension system takes ownership of the objects. | 5093 // Now add providers. Extension system takes ownership of the objects. |
| 5174 MockExtensionProvider* pref_provider = | 5094 MockExternalProvider* pref_provider = |
| 5175 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 5095 new MockExternalProvider(service(), Manifest::EXTERNAL_PREF); |
| 5176 | 5096 |
| 5177 AddMockExternalProvider(pref_provider); | 5097 AddMockExternalProvider(pref_provider); |
| 5178 TestExternalProvider(pref_provider, Manifest::EXTERNAL_PREF); | 5098 TestExternalProvider(pref_provider, Manifest::EXTERNAL_PREF); |
| 5179 } | 5099 } |
| 5180 | 5100 |
| 5181 TEST_F(ExtensionServiceTest, ExternalInstallPrefUpdateUrl) { | 5101 TEST_F(ExtensionServiceTest, ExternalInstallPrefUpdateUrl) { |
| 5182 // This should all work, even when normal extension installation is disabled. | 5102 // This should all work, even when normal extension installation is disabled. |
| 5183 InitializeExtensionServiceWithExtensionsDisabled(); | 5103 InitializeExtensionServiceWithExtensionsDisabled(); |
| 5184 | 5104 |
| 5185 // TODO(skerner): The mock provider is not a good model of a provider | 5105 // TODO(skerner): The mock provider is not a good model of a provider |
| 5186 // that works with update URLs, because it adds file and version info. | 5106 // that works with update URLs, because it adds file and version info. |
| 5187 // Extend the mock to work with update URLs. This test checks the | 5107 // Extend the mock to work with update URLs. This test checks the |
| 5188 // behavior that is common to all external extension visitors. The | 5108 // behavior that is common to all external extension visitors. The |
| 5189 // browser test ExtensionManagementTest.ExternalUrlUpdate tests that | 5109 // browser test ExtensionManagementTest.ExternalUrlUpdate tests that |
| 5190 // what the visitor does results in an extension being downloaded and | 5110 // what the visitor does results in an extension being downloaded and |
| 5191 // installed. | 5111 // installed. |
| 5192 MockExtensionProvider* pref_provider = | 5112 MockExternalProvider* pref_provider = |
| 5193 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF_DOWNLOAD); | 5113 new MockExternalProvider(service(), Manifest::EXTERNAL_PREF_DOWNLOAD); |
| 5194 AddMockExternalProvider(pref_provider); | 5114 AddMockExternalProvider(pref_provider); |
| 5195 TestExternalProvider(pref_provider, Manifest::EXTERNAL_PREF_DOWNLOAD); | 5115 TestExternalProvider(pref_provider, Manifest::EXTERNAL_PREF_DOWNLOAD); |
| 5196 } | 5116 } |
| 5197 | 5117 |
| 5198 TEST_F(ExtensionServiceTest, ExternalInstallPolicyUpdateUrl) { | 5118 TEST_F(ExtensionServiceTest, ExternalInstallPolicyUpdateUrl) { |
| 5199 // This should all work, even when normal extension installation is disabled. | 5119 // This should all work, even when normal extension installation is disabled. |
| 5200 InitializeExtensionServiceWithExtensionsDisabled(); | 5120 InitializeExtensionServiceWithExtensionsDisabled(); |
| 5201 | 5121 |
| 5202 // TODO(skerner): The mock provider is not a good model of a provider | 5122 // TODO(skerner): The mock provider is not a good model of a provider |
| 5203 // that works with update URLs, because it adds file and version info. | 5123 // that works with update URLs, because it adds file and version info. |
| 5204 // Extend the mock to work with update URLs. This test checks the | 5124 // Extend the mock to work with update URLs. This test checks the |
| 5205 // behavior that is common to all external extension visitors. The | 5125 // behavior that is common to all external extension visitors. The |
| 5206 // browser test ExtensionManagementTest.ExternalUrlUpdate tests that | 5126 // browser test ExtensionManagementTest.ExternalUrlUpdate tests that |
| 5207 // what the visitor does results in an extension being downloaded and | 5127 // what the visitor does results in an extension being downloaded and |
| 5208 // installed. | 5128 // installed. |
| 5209 MockExtensionProvider* pref_provider = | 5129 MockExternalProvider* pref_provider = |
| 5210 new MockExtensionProvider(service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); | 5130 new MockExternalProvider(service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); |
| 5211 AddMockExternalProvider(pref_provider); | 5131 AddMockExternalProvider(pref_provider); |
| 5212 TestExternalProvider(pref_provider, Manifest::EXTERNAL_POLICY_DOWNLOAD); | 5132 TestExternalProvider(pref_provider, Manifest::EXTERNAL_POLICY_DOWNLOAD); |
| 5213 } | 5133 } |
| 5214 | 5134 |
| 5215 // Tests that external extensions get uninstalled when the external extension | 5135 // Tests that external extensions get uninstalled when the external extension |
| 5216 // providers can't account for them. | 5136 // providers can't account for them. |
| 5217 TEST_F(ExtensionServiceTest, ExternalUninstall) { | 5137 TEST_F(ExtensionServiceTest, ExternalUninstall) { |
| 5218 // Start the extensions service with one external extension already installed. | 5138 // Start the extensions service with one external extension already installed. |
| 5219 base::FilePath source_install_dir = | 5139 base::FilePath source_install_dir = |
| 5220 data_dir().AppendASCII("good").AppendASCII("Extensions"); | 5140 data_dir().AppendASCII("good").AppendASCII("Extensions"); |
| 5221 base::FilePath pref_path = source_install_dir | 5141 base::FilePath pref_path = source_install_dir |
| 5222 .DirName() | 5142 .DirName() |
| 5223 .AppendASCII("PreferencesExternal"); | 5143 .AppendASCII("PreferencesExternal"); |
| 5224 | 5144 |
| 5225 InitializeInstalledExtensionService(pref_path, source_install_dir); | 5145 InitializeInstalledExtensionService(pref_path, source_install_dir); |
| 5226 service()->Init(); | 5146 service()->Init(); |
| 5227 | 5147 |
| 5228 ASSERT_EQ(0u, GetErrors().size()); | 5148 ASSERT_EQ(0u, GetErrors().size()); |
| 5229 ASSERT_EQ(0u, loaded_.size()); | 5149 ASSERT_EQ(0u, loaded_.size()); |
| 5230 } | 5150 } |
| 5231 | 5151 |
| 5232 // Test that running multiple update checks simultaneously does not | 5152 // Test that running multiple update checks simultaneously does not |
| 5233 // keep the update from succeeding. | 5153 // keep the update from succeeding. |
| 5234 TEST_F(ExtensionServiceTest, MultipleExternalUpdateCheck) { | 5154 TEST_F(ExtensionServiceTest, MultipleExternalUpdateCheck) { |
| 5235 InitializeEmptyExtensionService(); | 5155 InitializeEmptyExtensionService(); |
| 5236 | 5156 |
| 5237 MockExtensionProvider* provider = | 5157 MockExternalProvider* provider = |
| 5238 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 5158 new MockExternalProvider(service(), Manifest::EXTERNAL_PREF); |
| 5239 AddMockExternalProvider(provider); | 5159 AddMockExternalProvider(provider); |
| 5240 | 5160 |
| 5241 // Verify that starting with no providers loads no extensions. | 5161 // Verify that starting with no providers loads no extensions. |
| 5242 service()->Init(); | 5162 service()->Init(); |
| 5243 ASSERT_EQ(0u, loaded_.size()); | 5163 ASSERT_EQ(0u, loaded_.size()); |
| 5244 | 5164 |
| 5245 // Start two checks for updates. | 5165 // Start two checks for updates. |
| 5246 provider->set_visit_count(0); | 5166 provider->set_visit_count(0); |
| 5247 service()->CheckForExternalUpdates(); | 5167 service()->CheckForExternalUpdates(); |
| 5248 service()->CheckForExternalUpdates(); | 5168 service()->CheckForExternalUpdates(); |
| (...skipping 1043 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6292 // because the extension is already installed. | 6212 // because the extension is already installed. |
| 6293 ASSERT_FALSE(AddPendingSyncInstall()); | 6213 ASSERT_FALSE(AddPendingSyncInstall()); |
| 6294 } | 6214 } |
| 6295 | 6215 |
| 6296 // Test that installing an external extension displays a GlobalError. | 6216 // Test that installing an external extension displays a GlobalError. |
| 6297 TEST_F(ExtensionServiceTest, ExternalInstallGlobalError) { | 6217 TEST_F(ExtensionServiceTest, ExternalInstallGlobalError) { |
| 6298 FeatureSwitch::ScopedOverride prompt( | 6218 FeatureSwitch::ScopedOverride prompt( |
| 6299 FeatureSwitch::prompt_for_external_extensions(), true); | 6219 FeatureSwitch::prompt_for_external_extensions(), true); |
| 6300 | 6220 |
| 6301 InitializeEmptyExtensionService(); | 6221 InitializeEmptyExtensionService(); |
| 6302 MockExtensionProvider* provider = | 6222 MockExternalProvider* provider = |
| 6303 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 6223 new MockExternalProvider(service(), Manifest::EXTERNAL_PREF); |
| 6304 AddMockExternalProvider(provider); | 6224 AddMockExternalProvider(provider); |
| 6305 | 6225 |
| 6306 service()->external_install_manager()->UpdateExternalExtensionAlert(); | 6226 service()->external_install_manager()->UpdateExternalExtensionAlert(); |
| 6307 // Should return false, meaning there aren't any extensions that the user | 6227 // Should return false, meaning there aren't any extensions that the user |
| 6308 // needs to know about. | 6228 // needs to know about. |
| 6309 EXPECT_FALSE(HasExternalInstallErrors(service())); | 6229 EXPECT_FALSE(HasExternalInstallErrors(service())); |
| 6310 | 6230 |
| 6311 // This is a normal extension, installed normally. | 6231 // This is a normal extension, installed normally. |
| 6312 // This should NOT trigger an alert. | 6232 // This should NOT trigger an alert. |
| 6313 base::FilePath path = data_dir().AppendASCII("good.crx"); | 6233 base::FilePath path = data_dir().AppendASCII("good.crx"); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 6342 EXPECT_TRUE(HasExternalInstallErrors(service())); | 6262 EXPECT_TRUE(HasExternalInstallErrors(service())); |
| 6343 } | 6263 } |
| 6344 | 6264 |
| 6345 // Test that external extensions are initially disabled, and that enabling | 6265 // Test that external extensions are initially disabled, and that enabling |
| 6346 // them clears the prompt. | 6266 // them clears the prompt. |
| 6347 TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) { | 6267 TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) { |
| 6348 FeatureSwitch::ScopedOverride prompt( | 6268 FeatureSwitch::ScopedOverride prompt( |
| 6349 FeatureSwitch::prompt_for_external_extensions(), true); | 6269 FeatureSwitch::prompt_for_external_extensions(), true); |
| 6350 | 6270 |
| 6351 InitializeEmptyExtensionService(); | 6271 InitializeEmptyExtensionService(); |
| 6352 MockExtensionProvider* provider = | 6272 MockExternalProvider* provider = |
| 6353 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 6273 new MockExternalProvider(service(), Manifest::EXTERNAL_PREF); |
| 6354 AddMockExternalProvider(provider); | 6274 AddMockExternalProvider(provider); |
| 6355 | 6275 |
| 6356 provider->UpdateOrAddExtension( | 6276 provider->UpdateOrAddExtension( |
| 6357 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); | 6277 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); |
| 6358 | 6278 |
| 6359 content::WindowedNotificationObserver observer( | 6279 content::WindowedNotificationObserver observer( |
| 6360 extensions::NOTIFICATION_CRX_INSTALLER_DONE, | 6280 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6361 content::NotificationService::AllSources()); | 6281 content::NotificationService::AllSources()); |
| 6362 service()->CheckForExternalUpdates(); | 6282 service()->CheckForExternalUpdates(); |
| 6363 observer.Wait(); | 6283 observer.Wait(); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6411 #if defined(OS_WIN) || defined(THREAD_SANITIZER) | 6331 #if defined(OS_WIN) || defined(THREAD_SANITIZER) |
| 6412 #define MAYBE_ExternalInstallMultiple DISABLED_ExternalInstallMultiple | 6332 #define MAYBE_ExternalInstallMultiple DISABLED_ExternalInstallMultiple |
| 6413 #else | 6333 #else |
| 6414 #define MAYBE_ExternalInstallMultiple ExternalInstallMultiple | 6334 #define MAYBE_ExternalInstallMultiple ExternalInstallMultiple |
| 6415 #endif | 6335 #endif |
| 6416 TEST_F(ExtensionServiceTest, MAYBE_ExternalInstallMultiple) { | 6336 TEST_F(ExtensionServiceTest, MAYBE_ExternalInstallMultiple) { |
| 6417 FeatureSwitch::ScopedOverride prompt( | 6337 FeatureSwitch::ScopedOverride prompt( |
| 6418 FeatureSwitch::prompt_for_external_extensions(), true); | 6338 FeatureSwitch::prompt_for_external_extensions(), true); |
| 6419 | 6339 |
| 6420 InitializeEmptyExtensionService(); | 6340 InitializeEmptyExtensionService(); |
| 6421 MockExtensionProvider* provider = | 6341 MockExternalProvider* provider = |
| 6422 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 6342 new MockExternalProvider(service(), Manifest::EXTERNAL_PREF); |
| 6423 AddMockExternalProvider(provider); | 6343 AddMockExternalProvider(provider); |
| 6424 | 6344 |
| 6425 provider->UpdateOrAddExtension( | 6345 provider->UpdateOrAddExtension( |
| 6426 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); | 6346 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); |
| 6427 provider->UpdateOrAddExtension( | 6347 provider->UpdateOrAddExtension( |
| 6428 good_crx, "1.0.0.0", data_dir().AppendASCII("good.crx")); | 6348 good_crx, "1.0.0.0", data_dir().AppendASCII("good.crx")); |
| 6429 provider->UpdateOrAddExtension( | 6349 provider->UpdateOrAddExtension( |
| 6430 theme_crx, "2.0", data_dir().AppendASCII("theme.crx")); | 6350 theme_crx, "2.0", data_dir().AppendASCII("theme.crx")); |
| 6431 | 6351 |
| 6432 int count = 3; | 6352 int count = 3; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 6460 EXPECT_FALSE(GetError(theme_crx)); | 6380 EXPECT_FALSE(GetError(theme_crx)); |
| 6461 EXPECT_FALSE(HasExternalInstallErrors(service())); | 6381 EXPECT_FALSE(HasExternalInstallErrors(service())); |
| 6462 EXPECT_FALSE(HasExternalInstallBubble(service())); | 6382 EXPECT_FALSE(HasExternalInstallBubble(service())); |
| 6463 } | 6383 } |
| 6464 | 6384 |
| 6465 TEST_F(ExtensionServiceTest, MultipleExternalInstallErrors) { | 6385 TEST_F(ExtensionServiceTest, MultipleExternalInstallErrors) { |
| 6466 FeatureSwitch::ScopedOverride prompt( | 6386 FeatureSwitch::ScopedOverride prompt( |
| 6467 FeatureSwitch::prompt_for_external_extensions(), true); | 6387 FeatureSwitch::prompt_for_external_extensions(), true); |
| 6468 InitializeEmptyExtensionService(); | 6388 InitializeEmptyExtensionService(); |
| 6469 | 6389 |
| 6470 MockExtensionProvider* reg_provider = | 6390 MockExternalProvider* reg_provider = |
| 6471 new MockExtensionProvider(service(), Manifest::EXTERNAL_REGISTRY); | 6391 new MockExternalProvider(service(), Manifest::EXTERNAL_REGISTRY); |
| 6472 AddMockExternalProvider(reg_provider); | 6392 AddMockExternalProvider(reg_provider); |
| 6473 | 6393 |
| 6474 std::string extension_info[][3] = { | 6394 std::string extension_info[][3] = { |
| 6475 // {id, path, version} | 6395 // {id, path, version} |
| 6476 {good_crx, "1.0.0.0", "good.crx"}, | 6396 {good_crx, "1.0.0.0", "good.crx"}, |
| 6477 {page_action, "1.0.0.0", "page_action.crx"}, | 6397 {page_action, "1.0.0.0", "page_action.crx"}, |
| 6478 {minimal_platform_app_crx, "0.1", "minimal_platform_app.crx"}}; | 6398 {minimal_platform_app_crx, "0.1", "minimal_platform_app.crx"}}; |
| 6479 | 6399 |
| 6480 for (size_t i = 0; i < arraysize(extension_info); ++i) { | 6400 for (size_t i = 0; i < arraysize(extension_info); ++i) { |
| 6481 reg_provider->UpdateOrAddExtension( | 6401 reg_provider->UpdateOrAddExtension( |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6528 | 6448 |
| 6529 TEST_F(ExtensionServiceTest, MultipleExternalInstallBubbleErrors) { | 6449 TEST_F(ExtensionServiceTest, MultipleExternalInstallBubbleErrors) { |
| 6530 FeatureSwitch::ScopedOverride prompt( | 6450 FeatureSwitch::ScopedOverride prompt( |
| 6531 FeatureSwitch::prompt_for_external_extensions(), true); | 6451 FeatureSwitch::prompt_for_external_extensions(), true); |
| 6532 // This sets up the ExtensionPrefs used by our ExtensionService to be | 6452 // This sets up the ExtensionPrefs used by our ExtensionService to be |
| 6533 // post-first run. | 6453 // post-first run. |
| 6534 ExtensionServiceInitParams params = CreateDefaultInitParams(); | 6454 ExtensionServiceInitParams params = CreateDefaultInitParams(); |
| 6535 params.is_first_run = false; | 6455 params.is_first_run = false; |
| 6536 InitializeExtensionService(params); | 6456 InitializeExtensionService(params); |
| 6537 | 6457 |
| 6538 MockExtensionProvider* provider = | 6458 MockExternalProvider* provider = |
| 6539 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 6459 new MockExternalProvider(service(), Manifest::EXTERNAL_PREF); |
| 6540 AddMockExternalProvider(provider); | 6460 AddMockExternalProvider(provider); |
| 6541 | 6461 |
| 6542 std::vector<BubbleErrorsTestData> data; | 6462 std::vector<BubbleErrorsTestData> data; |
| 6543 data.push_back(BubbleErrorsTestData( | 6463 data.push_back(BubbleErrorsTestData( |
| 6544 updates_from_webstore, "1", | 6464 updates_from_webstore, "1", |
| 6545 temp_dir().GetPath().AppendASCII("webstore.crx"), 1u)); | 6465 temp_dir().GetPath().AppendASCII("webstore.crx"), 1u)); |
| 6546 data.push_back(BubbleErrorsTestData( | 6466 data.push_back(BubbleErrorsTestData( |
| 6547 updates_from_webstore2, "1", | 6467 updates_from_webstore2, "1", |
| 6548 temp_dir().GetPath().AppendASCII("webstore2.crx"), 2u)); | 6468 temp_dir().GetPath().AppendASCII("webstore2.crx"), 2u)); |
| 6549 data.push_back(BubbleErrorsTestData(good_crx, "1.0.0.0", | 6469 data.push_back(BubbleErrorsTestData(good_crx, "1.0.0.0", |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6647 // existing visible alert that was previously opened by clicking menu item. | 6567 // existing visible alert that was previously opened by clicking menu item. |
| 6648 TEST_F(ExtensionServiceTest, BubbleAlertDoesNotHideAnotherAlertFromMenu) { | 6568 TEST_F(ExtensionServiceTest, BubbleAlertDoesNotHideAnotherAlertFromMenu) { |
| 6649 FeatureSwitch::ScopedOverride prompt( | 6569 FeatureSwitch::ScopedOverride prompt( |
| 6650 FeatureSwitch::prompt_for_external_extensions(), true); | 6570 FeatureSwitch::prompt_for_external_extensions(), true); |
| 6651 // This sets up the ExtensionPrefs used by our ExtensionService to be | 6571 // This sets up the ExtensionPrefs used by our ExtensionService to be |
| 6652 // post-first run. | 6572 // post-first run. |
| 6653 ExtensionServiceInitParams params = CreateDefaultInitParams(); | 6573 ExtensionServiceInitParams params = CreateDefaultInitParams(); |
| 6654 params.is_first_run = false; | 6574 params.is_first_run = false; |
| 6655 InitializeExtensionService(params); | 6575 InitializeExtensionService(params); |
| 6656 | 6576 |
| 6657 MockExtensionProvider* provider = | 6577 MockExternalProvider* provider = |
| 6658 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 6578 new MockExternalProvider(service(), Manifest::EXTERNAL_PREF); |
| 6659 AddMockExternalProvider(provider); | 6579 AddMockExternalProvider(provider); |
| 6660 | 6580 |
| 6661 std::vector<BubbleErrorsTestData> data; | 6581 std::vector<BubbleErrorsTestData> data; |
| 6662 data.push_back(BubbleErrorsTestData( | 6582 data.push_back(BubbleErrorsTestData( |
| 6663 updates_from_webstore, "1", | 6583 updates_from_webstore, "1", |
| 6664 temp_dir().GetPath().AppendASCII("webstore.crx"), 1u)); | 6584 temp_dir().GetPath().AppendASCII("webstore.crx"), 1u)); |
| 6665 data.push_back(BubbleErrorsTestData( | 6585 data.push_back(BubbleErrorsTestData( |
| 6666 updates_from_webstore2, "1", | 6586 updates_from_webstore2, "1", |
| 6667 temp_dir().GetPath().AppendASCII("webstore2.crx"), 2u)); | 6587 temp_dir().GetPath().AppendASCII("webstore2.crx"), 2u)); |
| 6668 | 6588 |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6751 // post-first run. | 6671 // post-first run. |
| 6752 ExtensionServiceInitParams params = CreateDefaultInitParams(); | 6672 ExtensionServiceInitParams params = CreateDefaultInitParams(); |
| 6753 params.is_first_run = false; | 6673 params.is_first_run = false; |
| 6754 InitializeExtensionService(params); | 6674 InitializeExtensionService(params); |
| 6755 | 6675 |
| 6756 base::FilePath crx_path = temp_dir().GetPath().AppendASCII("webstore.crx"); | 6676 base::FilePath crx_path = temp_dir().GetPath().AppendASCII("webstore.crx"); |
| 6757 PackCRX(data_dir().AppendASCII("update_from_webstore"), | 6677 PackCRX(data_dir().AppendASCII("update_from_webstore"), |
| 6758 data_dir().AppendASCII("update_from_webstore.pem"), | 6678 data_dir().AppendASCII("update_from_webstore.pem"), |
| 6759 crx_path); | 6679 crx_path); |
| 6760 | 6680 |
| 6761 MockExtensionProvider* provider = | 6681 MockExternalProvider* provider = |
| 6762 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 6682 new MockExternalProvider(service(), Manifest::EXTERNAL_PREF); |
| 6763 AddMockExternalProvider(provider); | 6683 AddMockExternalProvider(provider); |
| 6764 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6684 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
| 6765 | 6685 |
| 6766 content::WindowedNotificationObserver observer( | 6686 content::WindowedNotificationObserver observer( |
| 6767 extensions::NOTIFICATION_CRX_INSTALLER_DONE, | 6687 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6768 content::NotificationService::AllSources()); | 6688 content::NotificationService::AllSources()); |
| 6769 service()->CheckForExternalUpdates(); | 6689 service()->CheckForExternalUpdates(); |
| 6770 observer.Wait(); | 6690 observer.Wait(); |
| 6771 EXPECT_TRUE(HasExternalInstallErrors(service())); | 6691 EXPECT_TRUE(HasExternalInstallErrors(service())); |
| 6772 ASSERT_TRUE(GetError(updates_from_webstore)); | 6692 ASSERT_TRUE(GetError(updates_from_webstore)); |
| 6773 EXPECT_EQ(ExternalInstallError::BUBBLE_ALERT, | 6693 EXPECT_EQ(ExternalInstallError::BUBBLE_ALERT, |
| 6774 GetError(updates_from_webstore)->alert_type()); | 6694 GetError(updates_from_webstore)->alert_type()); |
| 6775 EXPECT_FALSE(service()->IsExtensionEnabled(updates_from_webstore)); | 6695 EXPECT_FALSE(service()->IsExtensionEnabled(updates_from_webstore)); |
| 6776 } | 6696 } |
| 6777 | 6697 |
| 6778 // Test that there is no bubble for external extensions if the profile is new. | 6698 // Test that there is no bubble for external extensions if the profile is new. |
| 6779 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreNewProfile) { | 6699 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreNewProfile) { |
| 6780 FeatureSwitch::ScopedOverride prompt( | 6700 FeatureSwitch::ScopedOverride prompt( |
| 6781 FeatureSwitch::prompt_for_external_extensions(), true); | 6701 FeatureSwitch::prompt_for_external_extensions(), true); |
| 6782 | 6702 |
| 6783 InitializeEmptyExtensionService(); | 6703 InitializeEmptyExtensionService(); |
| 6784 | 6704 |
| 6785 base::FilePath crx_path = temp_dir().GetPath().AppendASCII("webstore.crx"); | 6705 base::FilePath crx_path = temp_dir().GetPath().AppendASCII("webstore.crx"); |
| 6786 PackCRX(data_dir().AppendASCII("update_from_webstore"), | 6706 PackCRX(data_dir().AppendASCII("update_from_webstore"), |
| 6787 data_dir().AppendASCII("update_from_webstore.pem"), | 6707 data_dir().AppendASCII("update_from_webstore.pem"), |
| 6788 crx_path); | 6708 crx_path); |
| 6789 | 6709 |
| 6790 MockExtensionProvider* provider = | 6710 MockExternalProvider* provider = |
| 6791 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 6711 new MockExternalProvider(service(), Manifest::EXTERNAL_PREF); |
| 6792 AddMockExternalProvider(provider); | 6712 AddMockExternalProvider(provider); |
| 6793 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6713 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
| 6794 | 6714 |
| 6795 content::WindowedNotificationObserver observer( | 6715 content::WindowedNotificationObserver observer( |
| 6796 extensions::NOTIFICATION_CRX_INSTALLER_DONE, | 6716 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6797 content::NotificationService::AllSources()); | 6717 content::NotificationService::AllSources()); |
| 6798 service()->CheckForExternalUpdates(); | 6718 service()->CheckForExternalUpdates(); |
| 6799 observer.Wait(); | 6719 observer.Wait(); |
| 6800 EXPECT_TRUE(HasExternalInstallErrors(service())); | 6720 EXPECT_TRUE(HasExternalInstallErrors(service())); |
| 6801 ASSERT_TRUE(GetError(updates_from_webstore)); | 6721 ASSERT_TRUE(GetError(updates_from_webstore)); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 6812 | 6732 |
| 6813 ExtensionServiceInitParams params = CreateDefaultInitParams(); | 6733 ExtensionServiceInitParams params = CreateDefaultInitParams(); |
| 6814 params.is_first_run = false; | 6734 params.is_first_run = false; |
| 6815 InitializeExtensionService(params); | 6735 InitializeExtensionService(params); |
| 6816 | 6736 |
| 6817 base::FilePath crx_path = temp_dir().GetPath().AppendASCII("webstore.crx"); | 6737 base::FilePath crx_path = temp_dir().GetPath().AppendASCII("webstore.crx"); |
| 6818 PackCRX(data_dir().AppendASCII("update_from_webstore"), | 6738 PackCRX(data_dir().AppendASCII("update_from_webstore"), |
| 6819 data_dir().AppendASCII("update_from_webstore.pem"), | 6739 data_dir().AppendASCII("update_from_webstore.pem"), |
| 6820 crx_path); | 6740 crx_path); |
| 6821 | 6741 |
| 6822 MockExtensionProvider* provider = | 6742 MockExternalProvider* provider = |
| 6823 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6743 new MockExternalProvider(service_, Manifest::EXTERNAL_PREF); |
| 6824 AddMockExternalProvider(provider); | 6744 AddMockExternalProvider(provider); |
| 6825 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6745 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
| 6826 | 6746 |
| 6827 content::WindowedNotificationObserver observer( | 6747 content::WindowedNotificationObserver observer( |
| 6828 extensions::NOTIFICATION_CRX_INSTALLER_DONE, | 6748 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6829 content::NotificationService::AllSources()); | 6749 content::NotificationService::AllSources()); |
| 6830 service_->CheckForExternalUpdates(); | 6750 service_->CheckForExternalUpdates(); |
| 6831 observer.Wait(); | 6751 observer.Wait(); |
| 6832 EXPECT_TRUE(HasExternalInstallErrors(service_)); | 6752 EXPECT_TRUE(HasExternalInstallErrors(service_)); |
| 6833 | 6753 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 6855 | 6775 |
| 6856 ExtensionServiceInitParams params = CreateDefaultInitParams(); | 6776 ExtensionServiceInitParams params = CreateDefaultInitParams(); |
| 6857 params.is_first_run = false; | 6777 params.is_first_run = false; |
| 6858 InitializeExtensionService(params); | 6778 InitializeExtensionService(params); |
| 6859 | 6779 |
| 6860 base::FilePath crx_path = temp_dir().GetPath().AppendASCII("webstore.crx"); | 6780 base::FilePath crx_path = temp_dir().GetPath().AppendASCII("webstore.crx"); |
| 6861 PackCRX(data_dir().AppendASCII("update_from_webstore"), | 6781 PackCRX(data_dir().AppendASCII("update_from_webstore"), |
| 6862 data_dir().AppendASCII("update_from_webstore.pem"), | 6782 data_dir().AppendASCII("update_from_webstore.pem"), |
| 6863 crx_path); | 6783 crx_path); |
| 6864 | 6784 |
| 6865 MockExtensionProvider* provider = | 6785 MockExternalProvider* provider = |
| 6866 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6786 new MockExternalProvider(service_, Manifest::EXTERNAL_PREF); |
| 6867 AddMockExternalProvider(provider); | 6787 AddMockExternalProvider(provider); |
| 6868 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6788 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
| 6869 | 6789 |
| 6870 content::WindowedNotificationObserver observer( | 6790 content::WindowedNotificationObserver observer( |
| 6871 extensions::NOTIFICATION_CRX_INSTALLER_DONE, | 6791 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6872 content::NotificationService::AllSources()); | 6792 content::NotificationService::AllSources()); |
| 6873 service_->CheckForExternalUpdates(); | 6793 service_->CheckForExternalUpdates(); |
| 6874 observer.Wait(); | 6794 observer.Wait(); |
| 6875 EXPECT_TRUE(HasExternalInstallErrors(service_)); | 6795 EXPECT_TRUE(HasExternalInstallErrors(service_)); |
| 6876 | 6796 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 6897 // account - enabled extensions, even those that weren't acknowledged, should | 6817 // account - enabled extensions, even those that weren't acknowledged, should |
| 6898 // not be warned about. This lets us grandfather extensions in. | 6818 // not be warned about. This lets us grandfather extensions in. |
| 6899 TEST_F(ExtensionServiceTest, | 6819 TEST_F(ExtensionServiceTest, |
| 6900 ExternalInstallBubbleDoesntShowForEnabledExtensions) { | 6820 ExternalInstallBubbleDoesntShowForEnabledExtensions) { |
| 6901 auto external_prompt_override = | 6821 auto external_prompt_override = |
| 6902 base::MakeUnique<FeatureSwitch::ScopedOverride>( | 6822 base::MakeUnique<FeatureSwitch::ScopedOverride>( |
| 6903 FeatureSwitch::prompt_for_external_extensions(), false); | 6823 FeatureSwitch::prompt_for_external_extensions(), false); |
| 6904 InitializeEmptyExtensionService(); | 6824 InitializeEmptyExtensionService(); |
| 6905 | 6825 |
| 6906 // Register and install an external extension. | 6826 // Register and install an external extension. |
| 6907 MockExtensionProvider* provider = | 6827 MockExternalProvider* provider = |
| 6908 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 6828 new MockExternalProvider(service(), Manifest::EXTERNAL_PREF); |
| 6909 AddMockExternalProvider(provider); | 6829 AddMockExternalProvider(provider); |
| 6910 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", | 6830 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", |
| 6911 data_dir().AppendASCII("good.crx")); | 6831 data_dir().AppendASCII("good.crx")); |
| 6912 | 6832 |
| 6913 WaitForExternalExtensionInstalled(); | 6833 WaitForExternalExtensionInstalled(); |
| 6914 | 6834 |
| 6915 EXPECT_TRUE(registry()->enabled_extensions().Contains(good_crx)); | 6835 EXPECT_TRUE(registry()->enabled_extensions().Contains(good_crx)); |
| 6916 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); | 6836 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); |
| 6917 EXPECT_FALSE(prefs->IsExternalExtensionAcknowledged(good_crx)); | 6837 EXPECT_FALSE(prefs->IsExternalExtensionAcknowledged(good_crx)); |
| 6918 EXPECT_EQ(Extension::DISABLE_NONE, prefs->GetDisableReasons(good_crx)); | 6838 EXPECT_EQ(Extension::DISABLE_NONE, prefs->GetDisableReasons(good_crx)); |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7148 shared_module->manifest()->type()); | 7068 shared_module->manifest()->type()); |
| 7149 EXPECT_TRUE(registry()->enabled_extensions().Contains(kExtensionId)); | 7069 EXPECT_TRUE(registry()->enabled_extensions().Contains(kExtensionId)); |
| 7150 | 7070 |
| 7151 // Reload the extension and wait for it to complete. This previously crashed | 7071 // Reload the extension and wait for it to complete. This previously crashed |
| 7152 // (see crbug.com/676815). | 7072 // (see crbug.com/676815). |
| 7153 service()->ReloadExtension(kExtensionId); | 7073 service()->ReloadExtension(kExtensionId); |
| 7154 base::RunLoop().RunUntilIdle(); | 7074 base::RunLoop().RunUntilIdle(); |
| 7155 // The shared module should be enabled. | 7075 // The shared module should be enabled. |
| 7156 EXPECT_TRUE(registry()->enabled_extensions().Contains(kExtensionId)); | 7076 EXPECT_TRUE(registry()->enabled_extensions().Contains(kExtensionId)); |
| 7157 } | 7077 } |
| OLD | NEW |