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 |