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 <algorithm> | 5 #include <algorithm> |
6 #include <set> | 6 #include <set> |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/at_exit.h" | 9 #include "base/at_exit.h" |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 #include "chrome/browser/sync/profile_sync_service_factory.h" | 65 #include "chrome/browser/sync/profile_sync_service_factory.h" |
66 #include "chrome/common/chrome_constants.h" | 66 #include "chrome/common/chrome_constants.h" |
67 #include "chrome/common/chrome_switches.h" | 67 #include "chrome/common/chrome_switches.h" |
68 #include "chrome/common/extensions/api/plugins/plugins_handler.h" | 68 #include "chrome/common/extensions/api/plugins/plugins_handler.h" |
69 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" | 69 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" |
70 #include "chrome/common/extensions/manifest_handlers/content_scripts_handler.h" | 70 #include "chrome/common/extensions/manifest_handlers/content_scripts_handler.h" |
71 #include "chrome/common/extensions/manifest_url_handler.h" | 71 #include "chrome/common/extensions/manifest_url_handler.h" |
72 #include "chrome/common/pref_names.h" | 72 #include "chrome/common/pref_names.h" |
73 #include "chrome/common/url_constants.h" | 73 #include "chrome/common/url_constants.h" |
74 #include "chrome/test/base/scoped_browser_locale.h" | 74 #include "chrome/test/base/scoped_browser_locale.h" |
| 75 #include "chrome/test/base/testing_pref_service_syncable.h" |
75 #include "chrome/test/base/testing_profile.h" | 76 #include "chrome/test/base/testing_profile.h" |
76 #include "components/crx_file/id_util.h" | 77 #include "components/crx_file/id_util.h" |
77 #include "components/pref_registry/pref_registry_syncable.h" | 78 #include "components/pref_registry/pref_registry_syncable.h" |
78 #include "content/public/browser/dom_storage_context.h" | 79 #include "content/public/browser/dom_storage_context.h" |
79 #include "content/public/browser/gpu_data_manager.h" | 80 #include "content/public/browser/gpu_data_manager.h" |
80 #include "content/public/browser/indexed_db_context.h" | 81 #include "content/public/browser/indexed_db_context.h" |
81 #include "content/public/browser/notification_registrar.h" | 82 #include "content/public/browser/notification_registrar.h" |
82 #include "content/public/browser/notification_service.h" | 83 #include "content/public/browser/notification_service.h" |
83 #include "content/public/browser/plugin_service.h" | 84 #include "content/public/browser/plugin_service.h" |
84 #include "content/public/browser/render_process_host.h" | 85 #include "content/public/browser/render_process_host.h" |
(...skipping 995 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1080 #if defined(ENABLE_PLUGINS) | 1081 #if defined(ENABLE_PLUGINS) |
1081 PluginService::GetInstance()->Init(); | 1082 PluginService::GetInstance()->Init(); |
1082 #endif | 1083 #endif |
1083 } | 1084 } |
1084 | 1085 |
1085 void InitializeExtensionSyncService() { | 1086 void InitializeExtensionSyncService() { |
1086 extension_sync_service_.reset(new ExtensionSyncService( | 1087 extension_sync_service_.reset(new ExtensionSyncService( |
1087 profile(), ExtensionPrefs::Get(browser_context()), service())); | 1088 profile(), ExtensionPrefs::Get(browser_context()), service())); |
1088 } | 1089 } |
1089 | 1090 |
| 1091 void InitializeEmptyExtensionServiceWithTestingPrefs() { |
| 1092 ExtensionServiceTestBase::ExtensionServiceInitParams params = |
| 1093 CreateDefaultInitParams(); |
| 1094 params.pref_file = base::FilePath(); |
| 1095 InitializeExtensionService(params); |
| 1096 } |
| 1097 |
1090 extensions::ManagementPolicy* GetManagementPolicy() { | 1098 extensions::ManagementPolicy* GetManagementPolicy() { |
1091 return ExtensionSystem::Get(browser_context())->management_policy(); | 1099 return ExtensionSystem::Get(browser_context())->management_policy(); |
1092 } | 1100 } |
1093 | 1101 |
1094 ExtensionSyncService* extension_sync_service() { | 1102 ExtensionSyncService* extension_sync_service() { |
1095 return extension_sync_service_.get(); | 1103 return extension_sync_service_.get(); |
1096 } | 1104 } |
1097 | 1105 |
1098 protected: | 1106 protected: |
1099 scoped_ptr<ExtensionSyncService> extension_sync_service_; | 1107 scoped_ptr<ExtensionSyncService> extension_sync_service_; |
(...skipping 2167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3267 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 3275 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
3268 } | 3276 } |
3269 #endif // defined(ENABLE_BLACKLIST_TESTS) | 3277 #endif // defined(ENABLE_BLACKLIST_TESTS) |
3270 | 3278 |
3271 #if defined(ENABLE_BLACKLIST_TESTS) | 3279 #if defined(ENABLE_BLACKLIST_TESTS) |
3272 // Unload blacklisted extension on policy change. | 3280 // Unload blacklisted extension on policy change. |
3273 TEST_F(ExtensionServiceTest, UnloadBlacklistedExtensionPolicy) { | 3281 TEST_F(ExtensionServiceTest, UnloadBlacklistedExtensionPolicy) { |
3274 extensions::TestBlacklist test_blacklist; | 3282 extensions::TestBlacklist test_blacklist; |
3275 | 3283 |
3276 // A profile with no extensions installed. | 3284 // A profile with no extensions installed. |
3277 InitializeEmptyExtensionService(); | 3285 InitializeEmptyExtensionServiceWithTestingPrefs(); |
3278 test_blacklist.Attach(service()->blacklist_); | 3286 test_blacklist.Attach(service()->blacklist_); |
3279 | 3287 |
3280 base::FilePath path = data_dir().AppendASCII("good.crx"); | 3288 base::FilePath path = data_dir().AppendASCII("good.crx"); |
3281 | 3289 |
3282 const Extension* good = InstallCRX(path, INSTALL_NEW); | 3290 const Extension* good = InstallCRX(path, INSTALL_NEW); |
3283 EXPECT_EQ(good_crx, good->id()); | 3291 EXPECT_EQ(good_crx, good->id()); |
3284 UpdateExtension(good_crx, path, FAILED_SILENTLY); | 3292 UpdateExtension(good_crx, path, FAILED_SILENTLY); |
3285 EXPECT_EQ(1u, registry()->enabled_extensions().size()); | 3293 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
3286 | 3294 |
3287 base::ListValue whitelist; | 3295 base::ListValue whitelist; |
3288 PrefService* prefs = ExtensionPrefs::Get(profile())->pref_service(); | |
3289 whitelist.Append(new base::StringValue(good_crx)); | 3296 whitelist.Append(new base::StringValue(good_crx)); |
3290 prefs->Set(extensions::pref_names::kInstallAllowList, whitelist); | 3297 profile_->GetTestingPrefService()->SetManagedPref( |
| 3298 extensions::pref_names::kInstallAllowList, whitelist.DeepCopy()); |
3291 | 3299 |
3292 test_blacklist.SetBlacklistState( | 3300 test_blacklist.SetBlacklistState( |
3293 good_crx, extensions::BLACKLISTED_MALWARE, true); | 3301 good_crx, extensions::BLACKLISTED_MALWARE, true); |
3294 base::RunLoop().RunUntilIdle(); | 3302 base::RunLoop().RunUntilIdle(); |
3295 | 3303 |
3296 // The good_crx is blacklisted and the whitelist doesn't negate it. | 3304 // The good_crx is blacklisted and the whitelist doesn't negate it. |
3297 ASSERT_TRUE(ValidateBooleanPref(good_crx, "blacklist", true)); | 3305 ASSERT_TRUE(ValidateBooleanPref(good_crx, "blacklist", true)); |
3298 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 3306 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
3299 } | 3307 } |
3300 #endif // defined(ENABLE_BLACKLIST_TESTS) | 3308 #endif // defined(ENABLE_BLACKLIST_TESTS) |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3568 | 3576 |
3569 EXPECT_EQ(StringSet(good0), registry()->enabled_extensions().GetIDs()); | 3577 EXPECT_EQ(StringSet(good0), registry()->enabled_extensions().GetIDs()); |
3570 EXPECT_EQ(StringSet(good1, good2), | 3578 EXPECT_EQ(StringSet(good1, good2), |
3571 registry()->blacklisted_extensions().GetIDs()); | 3579 registry()->blacklisted_extensions().GetIDs()); |
3572 } | 3580 } |
3573 | 3581 |
3574 #endif // defined(ENABLE_BLACKLIST_TESTS) | 3582 #endif // defined(ENABLE_BLACKLIST_TESTS) |
3575 | 3583 |
3576 // Will not install extension blacklisted by policy. | 3584 // Will not install extension blacklisted by policy. |
3577 TEST_F(ExtensionServiceTest, BlacklistedByPolicyWillNotInstall) { | 3585 TEST_F(ExtensionServiceTest, BlacklistedByPolicyWillNotInstall) { |
3578 InitializeEmptyExtensionService(); | 3586 InitializeEmptyExtensionServiceWithTestingPrefs(); |
3579 | 3587 |
3580 // Blacklist everything. | 3588 // Blacklist everything. |
3581 { | 3589 { |
3582 ListPrefUpdate update(profile()->GetPrefs(), | 3590 ListPrefUpdate update(profile()->GetPrefs(), |
3583 extensions::pref_names::kInstallDenyList); | 3591 extensions::pref_names::kInstallDenyList); |
3584 base::ListValue* blacklist = update.Get(); | 3592 base::ListValue* blacklist = update.Get(); |
3585 blacklist->Append(new base::StringValue("*")); | 3593 blacklist->Append(new base::StringValue("*")); |
3586 } | 3594 } |
3587 | 3595 |
3588 // Blacklist prevents us from installing good_crx. | 3596 // Blacklist prevents us from installing good_crx. |
3589 base::FilePath path = data_dir().AppendASCII("good.crx"); | 3597 base::FilePath path = data_dir().AppendASCII("good.crx"); |
3590 InstallCRX(path, INSTALL_FAILED); | 3598 InstallCRX(path, INSTALL_FAILED); |
3591 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 3599 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
3592 | 3600 |
3593 // Now whitelist this particular extension. | 3601 // Now whitelist this particular extension. |
3594 { | 3602 { |
3595 ListPrefUpdate update(profile()->GetPrefs(), | 3603 base::ListValue whitelist; |
3596 extensions::pref_names::kInstallAllowList); | 3604 whitelist.Append(new base::StringValue(good_crx)); |
3597 base::ListValue* whitelist = update.Get(); | 3605 profile_->GetTestingPrefService()->SetManagedPref( |
3598 whitelist->Append(new base::StringValue(good_crx)); | 3606 extensions::pref_names::kInstallAllowList, whitelist.DeepCopy()); |
3599 } | 3607 } |
3600 | 3608 |
3601 // Ensure we can now install good_crx. | 3609 // Ensure we can now install good_crx. |
3602 InstallCRX(path, INSTALL_NEW); | 3610 InstallCRX(path, INSTALL_NEW); |
3603 EXPECT_EQ(1u, registry()->enabled_extensions().size()); | 3611 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
3604 } | 3612 } |
3605 | 3613 |
3606 // Extension blacklisted by policy get unloaded after installing. | 3614 // Extension blacklisted by policy get unloaded after installing. |
3607 TEST_F(ExtensionServiceTest, BlacklistedByPolicyRemovedIfRunning) { | 3615 TEST_F(ExtensionServiceTest, BlacklistedByPolicyRemovedIfRunning) { |
3608 InitializeEmptyExtensionService(); | 3616 InitializeEmptyExtensionService(); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3667 base::ListValue* blacklist = update.Get(); | 3675 base::ListValue* blacklist = update.Get(); |
3668 blacklist->Append(new base::StringValue(good0)); | 3676 blacklist->Append(new base::StringValue(good0)); |
3669 } | 3677 } |
3670 base::RunLoop().RunUntilIdle(); | 3678 base::RunLoop().RunUntilIdle(); |
3671 ASSERT_EQ(1u, registry()->enabled_extensions().size()); | 3679 ASSERT_EQ(1u, registry()->enabled_extensions().size()); |
3672 EXPECT_TRUE(service()->GetExtensionById(good0, false)); | 3680 EXPECT_TRUE(service()->GetExtensionById(good0, false)); |
3673 } | 3681 } |
3674 | 3682 |
3675 // Tests that policy-installed extensions are not blacklisted by policy. | 3683 // Tests that policy-installed extensions are not blacklisted by policy. |
3676 TEST_F(ExtensionServiceTest, PolicyInstalledExtensionsWhitelisted) { | 3684 TEST_F(ExtensionServiceTest, PolicyInstalledExtensionsWhitelisted) { |
3677 InitializeEmptyExtensionService(); | 3685 InitializeEmptyExtensionServiceWithTestingPrefs(); |
3678 | 3686 |
3679 { | 3687 { |
3680 // Blacklist everything. | 3688 // Blacklist everything. |
3681 ListPrefUpdate blacklist_update(profile()->GetPrefs(), | 3689 ListPrefUpdate blacklist_update(profile()->GetPrefs(), |
3682 extensions::pref_names::kInstallDenyList); | 3690 extensions::pref_names::kInstallDenyList); |
3683 base::ListValue* blacklist = blacklist_update.Get(); | 3691 base::ListValue* blacklist = blacklist_update.Get(); |
3684 blacklist->AppendString("*"); | 3692 blacklist->AppendString("*"); |
| 3693 } |
3685 | 3694 |
| 3695 { |
3686 // Mark good.crx for force-installation. | 3696 // Mark good.crx for force-installation. |
3687 DictionaryPrefUpdate forcelist_update( | 3697 base::DictionaryValue forcelist; |
3688 profile()->GetPrefs(), extensions::pref_names::kInstallForceList); | |
3689 extensions::ExternalPolicyLoader::AddExtension( | 3698 extensions::ExternalPolicyLoader::AddExtension( |
3690 forcelist_update.Get(), good_crx, "http://example.com/update_url"); | 3699 &forcelist, good_crx, "http://example.com/update_url"); |
| 3700 profile_->GetTestingPrefService()->SetManagedPref( |
| 3701 extensions::pref_names::kInstallForceList, forcelist.DeepCopy()); |
3691 } | 3702 } |
3692 | 3703 |
3693 // Have policy force-install an extension. | 3704 // Have policy force-install an extension. |
3694 MockExtensionProvider* provider = | 3705 MockExtensionProvider* provider = |
3695 new MockExtensionProvider(service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); | 3706 new MockExtensionProvider(service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); |
3696 AddMockExternalProvider(provider); | 3707 AddMockExternalProvider(provider); |
3697 provider->UpdateOrAddExtension( | 3708 provider->UpdateOrAddExtension( |
3698 good_crx, "1.0.0.0", data_dir().AppendASCII("good.crx")); | 3709 good_crx, "1.0.0.0", data_dir().AppendASCII("good.crx")); |
3699 | 3710 |
3700 // Reloading extensions should find our externally registered extension | 3711 // Reloading extensions should find our externally registered extension |
(...skipping 3452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7153 | 7164 |
7154 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, | 7165 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, |
7155 content::Source<Profile>(profile()), | 7166 content::Source<Profile>(profile()), |
7156 content::NotificationService::NoDetails()); | 7167 content::NotificationService::NoDetails()); |
7157 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); | 7168 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); |
7158 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 7169 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
7159 EXPECT_EQ(0u, registry()->disabled_extensions().size()); | 7170 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
7160 EXPECT_EQ(0u, registry()->terminated_extensions().size()); | 7171 EXPECT_EQ(0u, registry()->terminated_extensions().size()); |
7161 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); | 7172 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); |
7162 } | 7173 } |
OLD | NEW |