| 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 844 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 855 size_t pref_key_count = GetPrefKeyCount(); | 855 size_t pref_key_count = GetPrefKeyCount(); |
| 856 EXPECT_GT(pref_key_count, 0u); | 856 EXPECT_GT(pref_key_count, 0u); |
| 857 ValidateIntegerPref(id, "state", Extension::ENABLED); | 857 ValidateIntegerPref(id, "state", Extension::ENABLED); |
| 858 | 858 |
| 859 // Uninstall it. | 859 // Uninstall it. |
| 860 if (use_helper) { | 860 if (use_helper) { |
| 861 EXPECT_TRUE(ExtensionService::UninstallExtensionHelper( | 861 EXPECT_TRUE(ExtensionService::UninstallExtensionHelper( |
| 862 service(), id, extensions::UNINSTALL_REASON_FOR_TESTING)); | 862 service(), id, extensions::UNINSTALL_REASON_FOR_TESTING)); |
| 863 } else { | 863 } else { |
| 864 EXPECT_TRUE(service()->UninstallExtension( | 864 EXPECT_TRUE(service()->UninstallExtension( |
| 865 id, extensions::UNINSTALL_REASON_FOR_TESTING, NULL)); | 865 id, |
| 866 extensions::UNINSTALL_REASON_FOR_TESTING, |
| 867 base::Bind(&base::DoNothing), |
| 868 NULL)); |
| 866 } | 869 } |
| 867 --expected_extensions_count_; | 870 --expected_extensions_count_; |
| 868 | 871 |
| 869 // We should get an unload notification. | 872 // We should get an unload notification. |
| 870 EXPECT_FALSE(unloaded_id_.empty()); | 873 EXPECT_FALSE(unloaded_id_.empty()); |
| 871 EXPECT_EQ(id, unloaded_id_); | 874 EXPECT_EQ(id, unloaded_id_); |
| 872 | 875 |
| 873 // Verify uninstalled state. | 876 // Verify uninstalled state. |
| 874 size_t new_pref_key_count = GetPrefKeyCount(); | 877 size_t new_pref_key_count = GetPrefKeyCount(); |
| 875 if (new_pref_key_count == pref_key_count) { | 878 if (new_pref_key_count == pref_key_count) { |
| (...skipping 2856 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3732 &manifest, std::string(), path, Manifest::UNPACKED); | 3735 &manifest, std::string(), path, Manifest::UNPACKED); |
| 3733 | 3736 |
| 3734 // Ensure we can load it with no management policy in place. | 3737 // Ensure we can load it with no management policy in place. |
| 3735 GetManagementPolicy()->UnregisterAllProviders(); | 3738 GetManagementPolicy()->UnregisterAllProviders(); |
| 3736 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 3739 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
| 3737 extensions::InstalledLoader(service()).Load(extension_info, false); | 3740 extensions::InstalledLoader(service()).Load(extension_info, false); |
| 3738 EXPECT_EQ(1u, registry()->enabled_extensions().size()); | 3741 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
| 3739 | 3742 |
| 3740 const Extension* extension = | 3743 const Extension* extension = |
| 3741 (registry()->enabled_extensions().begin())->get(); | 3744 (registry()->enabled_extensions().begin())->get(); |
| 3742 EXPECT_TRUE(service()->UninstallExtension( | 3745 EXPECT_TRUE( |
| 3743 extension->id(), extensions::UNINSTALL_REASON_FOR_TESTING, NULL)); | 3746 service()->UninstallExtension(extension->id(), |
| 3747 extensions::UNINSTALL_REASON_FOR_TESTING, |
| 3748 base::Bind(&base::DoNothing), |
| 3749 NULL)); |
| 3744 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 3750 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
| 3745 | 3751 |
| 3746 // Ensure we cannot load it if management policy prohibits installation. | 3752 // Ensure we cannot load it if management policy prohibits installation. |
| 3747 extensions::TestManagementPolicyProvider provider_( | 3753 extensions::TestManagementPolicyProvider provider_( |
| 3748 extensions::TestManagementPolicyProvider::PROHIBIT_LOAD); | 3754 extensions::TestManagementPolicyProvider::PROHIBIT_LOAD); |
| 3749 GetManagementPolicy()->RegisterProvider(&provider_); | 3755 GetManagementPolicy()->RegisterProvider(&provider_); |
| 3750 | 3756 |
| 3751 extensions::InstalledLoader(service()).Load(extension_info, false); | 3757 extensions::InstalledLoader(service()).Load(extension_info, false); |
| 3752 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 3758 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
| 3753 } | 3759 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 3780 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); | 3786 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
| 3781 EXPECT_EQ(1u, registry()->enabled_extensions().size()); | 3787 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
| 3782 EXPECT_EQ(0u, registry()->disabled_extensions().size()); | 3788 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
| 3783 | 3789 |
| 3784 GetManagementPolicy()->UnregisterAllProviders(); | 3790 GetManagementPolicy()->UnregisterAllProviders(); |
| 3785 extensions::TestManagementPolicyProvider provider( | 3791 extensions::TestManagementPolicyProvider provider( |
| 3786 extensions::TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS); | 3792 extensions::TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS); |
| 3787 GetManagementPolicy()->RegisterProvider(&provider); | 3793 GetManagementPolicy()->RegisterProvider(&provider); |
| 3788 | 3794 |
| 3789 // Attempt to uninstall it. | 3795 // Attempt to uninstall it. |
| 3790 EXPECT_FALSE(service()->UninstallExtension( | 3796 EXPECT_FALSE( |
| 3791 good_crx, extensions::UNINSTALL_REASON_FOR_TESTING, NULL)); | 3797 service()->UninstallExtension(good_crx, |
| 3798 extensions::UNINSTALL_REASON_FOR_TESTING, |
| 3799 base::Bind(&base::DoNothing), |
| 3800 NULL)); |
| 3792 | 3801 |
| 3793 EXPECT_EQ(1u, registry()->enabled_extensions().size()); | 3802 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
| 3794 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); | 3803 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); |
| 3795 } | 3804 } |
| 3796 | 3805 |
| 3797 // Tests that previously installed extensions that are now prohibited from | 3806 // Tests that previously installed extensions that are now prohibited from |
| 3798 // being installed are removed. | 3807 // being installed are removed. |
| 3799 TEST_F(ExtensionServiceTest, ManagementPolicyUnloadsAllProhibited) { | 3808 TEST_F(ExtensionServiceTest, ManagementPolicyUnloadsAllProhibited) { |
| 3800 InitializeEmptyExtensionService(); | 3809 InitializeEmptyExtensionService(); |
| 3801 | 3810 |
| (...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4255 base::MessageLoop::current()->PostTask(FROM_HERE, | 4264 base::MessageLoop::current()->PostTask(FROM_HERE, |
| 4256 base::Bind(&base::MessageLoop::Quit, weak_factory_.GetWeakPtr())); | 4265 base::Bind(&base::MessageLoop::Quit, weak_factory_.GetWeakPtr())); |
| 4257 list_ = list; | 4266 list_ = list; |
| 4258 } | 4267 } |
| 4259 net::CookieList list_; | 4268 net::CookieList list_; |
| 4260 bool result_; | 4269 bool result_; |
| 4261 base::WeakPtrFactory<base::MessageLoop> weak_factory_; | 4270 base::WeakPtrFactory<base::MessageLoop> weak_factory_; |
| 4262 }; | 4271 }; |
| 4263 | 4272 |
| 4264 // Verifies extension state is removed upon uninstall. | 4273 // Verifies extension state is removed upon uninstall. |
| 4265 #if defined(OS_CHROMEOS) | 4274 TEST_F(ExtensionServiceTest, ClearExtensionData) { |
| 4266 // http://crbug.com/396504 | |
| 4267 #define MAYBE_ClearExtensionData DISABLED_ClearExtensionData | |
| 4268 #else | |
| 4269 #define MAYBE_ClearExtensionData ClearExtensionData | |
| 4270 #endif | |
| 4271 TEST_F(ExtensionServiceTest, MAYBE_ClearExtensionData) { | |
| 4272 InitializeEmptyExtensionService(); | 4275 InitializeEmptyExtensionService(); |
| 4273 ExtensionCookieCallback callback; | 4276 ExtensionCookieCallback callback; |
| 4274 | 4277 |
| 4275 // Load a test extension. | 4278 // Load a test extension. |
| 4276 base::FilePath path = data_dir(); | 4279 base::FilePath path = data_dir(); |
| 4277 path = path.AppendASCII("good.crx"); | 4280 path = path.AppendASCII("good.crx"); |
| 4278 const Extension* extension = InstallCRX(path, INSTALL_NEW); | 4281 const Extension* extension = InstallCRX(path, INSTALL_NEW); |
| 4279 ASSERT_TRUE(extension); | 4282 ASSERT_TRUE(extension); |
| 4280 GURL ext_url(extension->url()); | 4283 GURL ext_url(extension->url()); |
| 4281 std::string origin_id = webkit_database::GetIdentifierFromOrigin(ext_url); | 4284 std::string origin_id = webkit_database::GetIdentifierFromOrigin(ext_url); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4331 // creating the directory on the disk. | 4334 // creating the directory on the disk. |
| 4332 IndexedDBContext* idb_context = BrowserContext::GetDefaultStoragePartition( | 4335 IndexedDBContext* idb_context = BrowserContext::GetDefaultStoragePartition( |
| 4333 profile())->GetIndexedDBContext(); | 4336 profile())->GetIndexedDBContext(); |
| 4334 idb_context->SetTaskRunnerForTesting( | 4337 idb_context->SetTaskRunnerForTesting( |
| 4335 base::MessageLoop::current()->message_loop_proxy().get()); | 4338 base::MessageLoop::current()->message_loop_proxy().get()); |
| 4336 base::FilePath idb_path = idb_context->GetFilePathForTesting(origin_id); | 4339 base::FilePath idb_path = idb_context->GetFilePathForTesting(origin_id); |
| 4337 EXPECT_TRUE(base::CreateDirectory(idb_path)); | 4340 EXPECT_TRUE(base::CreateDirectory(idb_path)); |
| 4338 EXPECT_TRUE(base::DirectoryExists(idb_path)); | 4341 EXPECT_TRUE(base::DirectoryExists(idb_path)); |
| 4339 | 4342 |
| 4340 // Uninstall the extension. | 4343 // Uninstall the extension. |
| 4341 service()->UninstallExtension( | 4344 base::RunLoop run_loop; |
| 4342 good_crx, extensions::UNINSTALL_REASON_FOR_TESTING, NULL); | 4345 ASSERT_TRUE( |
| 4343 base::RunLoop().RunUntilIdle(); | 4346 service()->UninstallExtension(good_crx, |
| 4347 extensions::UNINSTALL_REASON_FOR_TESTING, |
| 4348 run_loop.QuitClosure(), |
| 4349 NULL)); |
| 4350 // The data deletion happens on the IO thread. |
| 4351 run_loop.Run(); |
| 4344 | 4352 |
| 4345 // Check that the cookie is gone. | 4353 // Check that the cookie is gone. |
| 4346 cookie_monster->GetAllCookiesForURLAsync( | 4354 cookie_monster->GetAllCookiesForURLAsync( |
| 4347 ext_url, | 4355 ext_url, |
| 4348 base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, | 4356 base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, |
| 4349 base::Unretained(&callback))); | 4357 base::Unretained(&callback))); |
| 4350 base::RunLoop().RunUntilIdle(); | 4358 base::RunLoop().RunUntilIdle(); |
| 4351 EXPECT_EQ(0U, callback.list_.size()); | 4359 EXPECT_EQ(0U, callback.list_.size()); |
| 4352 | 4360 |
| 4353 // The database should have vanished as well. | 4361 // The database should have vanished as well. |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4524 .AppendASCII("1"); | 4532 .AppendASCII("1"); |
| 4525 extensions::UnpackedInstaller::Create(service())->Load(no_manifest); | 4533 extensions::UnpackedInstaller::Create(service())->Load(no_manifest); |
| 4526 base::RunLoop().RunUntilIdle(); | 4534 base::RunLoop().RunUntilIdle(); |
| 4527 EXPECT_EQ(1u, GetErrors().size()); | 4535 EXPECT_EQ(1u, GetErrors().size()); |
| 4528 ASSERT_EQ(1u, loaded_.size()); | 4536 ASSERT_EQ(1u, loaded_.size()); |
| 4529 EXPECT_EQ(1u, registry()->enabled_extensions().size()); | 4537 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
| 4530 | 4538 |
| 4531 // Test uninstall. | 4539 // Test uninstall. |
| 4532 std::string id = loaded_[0]->id(); | 4540 std::string id = loaded_[0]->id(); |
| 4533 EXPECT_FALSE(unloaded_id_.length()); | 4541 EXPECT_FALSE(unloaded_id_.length()); |
| 4534 service()->UninstallExtension( | 4542 service()->UninstallExtension(id, |
| 4535 id, extensions::UNINSTALL_REASON_FOR_TESTING, NULL); | 4543 extensions::UNINSTALL_REASON_FOR_TESTING, |
| 4544 base::Bind(&base::DoNothing), |
| 4545 NULL); |
| 4536 base::RunLoop().RunUntilIdle(); | 4546 base::RunLoop().RunUntilIdle(); |
| 4537 EXPECT_EQ(id, unloaded_id_); | 4547 EXPECT_EQ(id, unloaded_id_); |
| 4538 ASSERT_EQ(0u, loaded_.size()); | 4548 ASSERT_EQ(0u, loaded_.size()); |
| 4539 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 4549 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
| 4540 } | 4550 } |
| 4541 | 4551 |
| 4542 // Tests that we generate IDs when they are not specified in the manifest for | 4552 // Tests that we generate IDs when they are not specified in the manifest for |
| 4543 // --load-extension. | 4553 // --load-extension. |
| 4544 TEST_F(ExtensionServiceTest, GenerateID) { | 4554 TEST_F(ExtensionServiceTest, GenerateID) { |
| 4545 InitializeEmptyExtensionService(); | 4555 InitializeEmptyExtensionService(); |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4637 ASSERT_EQ("1.0.0.1", loaded_[0]->version()->GetString()); | 4647 ASSERT_EQ("1.0.0.1", loaded_[0]->version()->GetString()); |
| 4638 ValidatePrefKeyCount(1); | 4648 ValidatePrefKeyCount(1); |
| 4639 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 4649 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
| 4640 ValidateIntegerPref(good_crx, "location", location); | 4650 ValidateIntegerPref(good_crx, "location", location); |
| 4641 | 4651 |
| 4642 // Uninstall the extension and reload. Nothing should happen because the | 4652 // Uninstall the extension and reload. Nothing should happen because the |
| 4643 // preference should prevent us from reinstalling. | 4653 // preference should prevent us from reinstalling. |
| 4644 std::string id = loaded_[0]->id(); | 4654 std::string id = loaded_[0]->id(); |
| 4645 bool no_uninstall = | 4655 bool no_uninstall = |
| 4646 GetManagementPolicy()->MustRemainEnabled(loaded_[0].get(), NULL); | 4656 GetManagementPolicy()->MustRemainEnabled(loaded_[0].get(), NULL); |
| 4647 service()->UninstallExtension( | 4657 service()->UninstallExtension(id, |
| 4648 id, extensions::UNINSTALL_REASON_FOR_TESTING, NULL); | 4658 extensions::UNINSTALL_REASON_FOR_TESTING, |
| 4659 base::Bind(&base::DoNothing), |
| 4660 NULL); |
| 4649 base::RunLoop().RunUntilIdle(); | 4661 base::RunLoop().RunUntilIdle(); |
| 4650 | 4662 |
| 4651 base::FilePath install_path = extensions_install_dir().AppendASCII(id); | 4663 base::FilePath install_path = extensions_install_dir().AppendASCII(id); |
| 4652 if (no_uninstall) { | 4664 if (no_uninstall) { |
| 4653 // Policy controlled extensions should not have been touched by uninstall. | 4665 // Policy controlled extensions should not have been touched by uninstall. |
| 4654 ASSERT_TRUE(base::PathExists(install_path)); | 4666 ASSERT_TRUE(base::PathExists(install_path)); |
| 4655 } else { | 4667 } else { |
| 4656 // The extension should also be gone from the install directory. | 4668 // The extension should also be gone from the install directory. |
| 4657 ASSERT_FALSE(base::PathExists(install_path)); | 4669 ASSERT_FALSE(base::PathExists(install_path)); |
| 4658 loaded_.clear(); | 4670 loaded_.clear(); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4702 content::NotificationService::AllSources()); | 4714 content::NotificationService::AllSources()); |
| 4703 provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path); | 4715 provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path); |
| 4704 service()->CheckForExternalUpdates(); | 4716 service()->CheckForExternalUpdates(); |
| 4705 observer.Wait(); | 4717 observer.Wait(); |
| 4706 | 4718 |
| 4707 ASSERT_EQ(1u, loaded_.size()); | 4719 ASSERT_EQ(1u, loaded_.size()); |
| 4708 ASSERT_EQ(0u, GetErrors().size()); | 4720 ASSERT_EQ(0u, GetErrors().size()); |
| 4709 | 4721 |
| 4710 // User uninstalls. | 4722 // User uninstalls. |
| 4711 loaded_.clear(); | 4723 loaded_.clear(); |
| 4712 service()->UninstallExtension( | 4724 service()->UninstallExtension(id, |
| 4713 id, extensions::UNINSTALL_REASON_FOR_TESTING, NULL); | 4725 extensions::UNINSTALL_REASON_FOR_TESTING, |
| 4726 base::Bind(&base::DoNothing), |
| 4727 NULL); |
| 4714 base::RunLoop().RunUntilIdle(); | 4728 base::RunLoop().RunUntilIdle(); |
| 4715 ASSERT_EQ(0u, loaded_.size()); | 4729 ASSERT_EQ(0u, loaded_.size()); |
| 4716 | 4730 |
| 4717 // Then remove the extension from the extension provider. | 4731 // Then remove the extension from the extension provider. |
| 4718 provider->RemoveExtension(good_crx); | 4732 provider->RemoveExtension(good_crx); |
| 4719 | 4733 |
| 4720 // Should still be at 0. | 4734 // Should still be at 0. |
| 4721 loaded_.clear(); | 4735 loaded_.clear(); |
| 4722 extensions::InstalledLoader(service()).LoadAllExtensions(); | 4736 extensions::InstalledLoader(service()).LoadAllExtensions(); |
| 4723 base::RunLoop().RunUntilIdle(); | 4737 base::RunLoop().RunUntilIdle(); |
| (...skipping 2298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7022 | 7036 |
| 7023 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, | 7037 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, |
| 7024 content::Source<Profile>(profile()), | 7038 content::Source<Profile>(profile()), |
| 7025 content::NotificationService::NoDetails()); | 7039 content::NotificationService::NoDetails()); |
| 7026 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); | 7040 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); |
| 7027 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 7041 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
| 7028 EXPECT_EQ(0u, registry()->disabled_extensions().size()); | 7042 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
| 7029 EXPECT_EQ(0u, registry()->terminated_extensions().size()); | 7043 EXPECT_EQ(0u, registry()->terminated_extensions().size()); |
| 7030 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); | 7044 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); |
| 7031 } | 7045 } |
| OLD | NEW |