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

Side by Side Diff: chrome/browser/extensions/extension_service_unittest.cc

Issue 2801583003: developerPrivate.repair: Skip not-corrupted and policy extensions (Closed)
Patch Set: fix WebstoreReinsallerBrowserTest Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/chrome_content_verifier_delegate.cc ('k') | chrome/browser/extensions/webstore_reinstaller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698