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 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 using extensions::ExtensionCreator; | 153 using extensions::ExtensionCreator; |
154 using extensions::ExtensionPrefs; | 154 using extensions::ExtensionPrefs; |
155 using extensions::ExtensionRegistry; | 155 using extensions::ExtensionRegistry; |
156 using extensions::ExtensionResource; | 156 using extensions::ExtensionResource; |
157 using extensions::ExtensionSystem; | 157 using extensions::ExtensionSystem; |
158 using extensions::FakeSafeBrowsingDatabaseManager; | 158 using extensions::FakeSafeBrowsingDatabaseManager; |
159 using extensions::FeatureSwitch; | 159 using extensions::FeatureSwitch; |
160 using extensions::Manifest; | 160 using extensions::Manifest; |
161 using extensions::PermissionSet; | 161 using extensions::PermissionSet; |
162 using extensions::TestExtensionSystem; | 162 using extensions::TestExtensionSystem; |
| 163 using extensions::UninstalledExtensionInfo; |
163 using extensions::UnloadedExtensionInfo; | 164 using extensions::UnloadedExtensionInfo; |
164 using extensions::URLPatternSet; | 165 using extensions::URLPatternSet; |
165 | 166 |
166 namespace keys = extensions::manifest_keys; | 167 namespace keys = extensions::manifest_keys; |
167 | 168 |
168 namespace { | 169 namespace { |
169 | 170 |
170 // Extension ids used during testing. | 171 // Extension ids used during testing. |
171 const char good0[] = "behllobkkfkfnphdnhnkndlbkcpglgmj"; | 172 const char good0[] = "behllobkkfkfnphdnhnkndlbkcpglgmj"; |
172 const char good1[] = "hpiknbiabeeppbpihjehijgoemciehgk"; | 173 const char good1[] = "hpiknbiabeeppbpihjehijgoemciehgk"; |
(...skipping 678 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
851 // Verify that the extension is installed. | 852 // Verify that the extension is installed. |
852 base::FilePath extension_path = extensions_install_dir().AppendASCII(id); | 853 base::FilePath extension_path = extensions_install_dir().AppendASCII(id); |
853 EXPECT_TRUE(base::PathExists(extension_path)); | 854 EXPECT_TRUE(base::PathExists(extension_path)); |
854 size_t pref_key_count = GetPrefKeyCount(); | 855 size_t pref_key_count = GetPrefKeyCount(); |
855 EXPECT_GT(pref_key_count, 0u); | 856 EXPECT_GT(pref_key_count, 0u); |
856 ValidateIntegerPref(id, "state", Extension::ENABLED); | 857 ValidateIntegerPref(id, "state", Extension::ENABLED); |
857 | 858 |
858 // Uninstall it. | 859 // Uninstall it. |
859 if (use_helper) { | 860 if (use_helper) { |
860 EXPECT_TRUE(ExtensionService::UninstallExtensionHelper( | 861 EXPECT_TRUE(ExtensionService::UninstallExtensionHelper( |
861 service(), id, ExtensionService::UNINSTALL_REASON_FOR_TESTING)); | 862 service(), id, UninstalledExtensionInfo::REASON_FOR_TESTING)); |
862 } else { | 863 } else { |
863 EXPECT_TRUE(service()->UninstallExtension( | 864 EXPECT_TRUE(service()->UninstallExtension( |
864 id, ExtensionService::UNINSTALL_REASON_FOR_TESTING, NULL)); | 865 id, UninstalledExtensionInfo::REASON_FOR_TESTING, NULL)); |
865 } | 866 } |
866 --expected_extensions_count_; | 867 --expected_extensions_count_; |
867 | 868 |
868 // We should get an unload notification. | 869 // We should get an unload notification. |
869 EXPECT_FALSE(unloaded_id_.empty()); | 870 EXPECT_FALSE(unloaded_id_.empty()); |
870 EXPECT_EQ(id, unloaded_id_); | 871 EXPECT_EQ(id, unloaded_id_); |
871 | 872 |
872 // Verify uninstalled state. | 873 // Verify uninstalled state. |
873 size_t new_pref_key_count = GetPrefKeyCount(); | 874 size_t new_pref_key_count = GetPrefKeyCount(); |
874 if (new_pref_key_count == pref_key_count) { | 875 if (new_pref_key_count == pref_key_count) { |
(...skipping 2846 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3721 | 3722 |
3722 // Ensure we can load it with no management policy in place. | 3723 // Ensure we can load it with no management policy in place. |
3723 GetManagementPolicy()->UnregisterAllProviders(); | 3724 GetManagementPolicy()->UnregisterAllProviders(); |
3724 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 3725 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
3725 extensions::InstalledLoader(service()).Load(extension_info, false); | 3726 extensions::InstalledLoader(service()).Load(extension_info, false); |
3726 EXPECT_EQ(1u, registry()->enabled_extensions().size()); | 3727 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
3727 | 3728 |
3728 const Extension* extension = | 3729 const Extension* extension = |
3729 (registry()->enabled_extensions().begin())->get(); | 3730 (registry()->enabled_extensions().begin())->get(); |
3730 EXPECT_TRUE(service()->UninstallExtension( | 3731 EXPECT_TRUE(service()->UninstallExtension( |
3731 extension->id(), ExtensionService::UNINSTALL_REASON_FOR_TESTING, NULL)); | 3732 extension->id(), UninstalledExtensionInfo::REASON_FOR_TESTING, NULL)); |
3732 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 3733 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
3733 | 3734 |
3734 // Ensure we cannot load it if management policy prohibits installation. | 3735 // Ensure we cannot load it if management policy prohibits installation. |
3735 extensions::TestManagementPolicyProvider provider_( | 3736 extensions::TestManagementPolicyProvider provider_( |
3736 extensions::TestManagementPolicyProvider::PROHIBIT_LOAD); | 3737 extensions::TestManagementPolicyProvider::PROHIBIT_LOAD); |
3737 GetManagementPolicy()->RegisterProvider(&provider_); | 3738 GetManagementPolicy()->RegisterProvider(&provider_); |
3738 | 3739 |
3739 extensions::InstalledLoader(service()).Load(extension_info, false); | 3740 extensions::InstalledLoader(service()).Load(extension_info, false); |
3740 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 3741 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
3741 } | 3742 } |
(...skipping 27 matching lines...) Expand all Loading... |
3769 EXPECT_EQ(1u, registry()->enabled_extensions().size()); | 3770 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
3770 EXPECT_EQ(0u, registry()->disabled_extensions().size()); | 3771 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
3771 | 3772 |
3772 GetManagementPolicy()->UnregisterAllProviders(); | 3773 GetManagementPolicy()->UnregisterAllProviders(); |
3773 extensions::TestManagementPolicyProvider provider( | 3774 extensions::TestManagementPolicyProvider provider( |
3774 extensions::TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS); | 3775 extensions::TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS); |
3775 GetManagementPolicy()->RegisterProvider(&provider); | 3776 GetManagementPolicy()->RegisterProvider(&provider); |
3776 | 3777 |
3777 // Attempt to uninstall it. | 3778 // Attempt to uninstall it. |
3778 EXPECT_FALSE(service()->UninstallExtension( | 3779 EXPECT_FALSE(service()->UninstallExtension( |
3779 good_crx, ExtensionService::UNINSTALL_REASON_FOR_TESTING, NULL)); | 3780 good_crx, UninstalledExtensionInfo::REASON_FOR_TESTING, NULL)); |
3780 | 3781 |
3781 EXPECT_EQ(1u, registry()->enabled_extensions().size()); | 3782 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
3782 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); | 3783 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); |
3783 } | 3784 } |
3784 | 3785 |
3785 // Tests that previously installed extensions that are now prohibited from | 3786 // Tests that previously installed extensions that are now prohibited from |
3786 // being installed are removed. | 3787 // being installed are removed. |
3787 TEST_F(ExtensionServiceTest, ManagementPolicyUnloadsAllProhibited) { | 3788 TEST_F(ExtensionServiceTest, ManagementPolicyUnloadsAllProhibited) { |
3788 InitializeEmptyExtensionService(); | 3789 InitializeEmptyExtensionService(); |
3789 | 3790 |
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4314 IndexedDBContext* idb_context = BrowserContext::GetDefaultStoragePartition( | 4315 IndexedDBContext* idb_context = BrowserContext::GetDefaultStoragePartition( |
4315 profile())->GetIndexedDBContext(); | 4316 profile())->GetIndexedDBContext(); |
4316 idb_context->SetTaskRunnerForTesting( | 4317 idb_context->SetTaskRunnerForTesting( |
4317 base::MessageLoop::current()->message_loop_proxy().get()); | 4318 base::MessageLoop::current()->message_loop_proxy().get()); |
4318 base::FilePath idb_path = idb_context->GetFilePathForTesting(origin_id); | 4319 base::FilePath idb_path = idb_context->GetFilePathForTesting(origin_id); |
4319 EXPECT_TRUE(base::CreateDirectory(idb_path)); | 4320 EXPECT_TRUE(base::CreateDirectory(idb_path)); |
4320 EXPECT_TRUE(base::DirectoryExists(idb_path)); | 4321 EXPECT_TRUE(base::DirectoryExists(idb_path)); |
4321 | 4322 |
4322 // Uninstall the extension. | 4323 // Uninstall the extension. |
4323 service()->UninstallExtension( | 4324 service()->UninstallExtension( |
4324 good_crx, ExtensionService::UNINSTALL_REASON_FOR_TESTING, NULL); | 4325 good_crx, UninstalledExtensionInfo::REASON_FOR_TESTING, NULL); |
4325 base::RunLoop().RunUntilIdle(); | 4326 base::RunLoop().RunUntilIdle(); |
4326 | 4327 |
4327 // Check that the cookie is gone. | 4328 // Check that the cookie is gone. |
4328 cookie_monster->GetAllCookiesForURLAsync( | 4329 cookie_monster->GetAllCookiesForURLAsync( |
4329 ext_url, | 4330 ext_url, |
4330 base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, | 4331 base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, |
4331 base::Unretained(&callback))); | 4332 base::Unretained(&callback))); |
4332 base::RunLoop().RunUntilIdle(); | 4333 base::RunLoop().RunUntilIdle(); |
4333 EXPECT_EQ(0U, callback.list_.size()); | 4334 EXPECT_EQ(0U, callback.list_.size()); |
4334 | 4335 |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4507 extensions::UnpackedInstaller::Create(service())->Load(no_manifest); | 4508 extensions::UnpackedInstaller::Create(service())->Load(no_manifest); |
4508 base::RunLoop().RunUntilIdle(); | 4509 base::RunLoop().RunUntilIdle(); |
4509 EXPECT_EQ(1u, GetErrors().size()); | 4510 EXPECT_EQ(1u, GetErrors().size()); |
4510 ASSERT_EQ(1u, loaded_.size()); | 4511 ASSERT_EQ(1u, loaded_.size()); |
4511 EXPECT_EQ(1u, registry()->enabled_extensions().size()); | 4512 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
4512 | 4513 |
4513 // Test uninstall. | 4514 // Test uninstall. |
4514 std::string id = loaded_[0]->id(); | 4515 std::string id = loaded_[0]->id(); |
4515 EXPECT_FALSE(unloaded_id_.length()); | 4516 EXPECT_FALSE(unloaded_id_.length()); |
4516 service()->UninstallExtension( | 4517 service()->UninstallExtension( |
4517 id, ExtensionService::UNINSTALL_REASON_FOR_TESTING, NULL); | 4518 id, UninstalledExtensionInfo::REASON_FOR_TESTING, NULL); |
4518 base::RunLoop().RunUntilIdle(); | 4519 base::RunLoop().RunUntilIdle(); |
4519 EXPECT_EQ(id, unloaded_id_); | 4520 EXPECT_EQ(id, unloaded_id_); |
4520 ASSERT_EQ(0u, loaded_.size()); | 4521 ASSERT_EQ(0u, loaded_.size()); |
4521 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 4522 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
4522 } | 4523 } |
4523 | 4524 |
4524 // Tests that we generate IDs when they are not specified in the manifest for | 4525 // Tests that we generate IDs when they are not specified in the manifest for |
4525 // --load-extension. | 4526 // --load-extension. |
4526 TEST_F(ExtensionServiceTest, GenerateID) { | 4527 TEST_F(ExtensionServiceTest, GenerateID) { |
4527 InitializeEmptyExtensionService(); | 4528 InitializeEmptyExtensionService(); |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4620 ValidatePrefKeyCount(1); | 4621 ValidatePrefKeyCount(1); |
4621 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 4622 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
4622 ValidateIntegerPref(good_crx, "location", location); | 4623 ValidateIntegerPref(good_crx, "location", location); |
4623 | 4624 |
4624 // Uninstall the extension and reload. Nothing should happen because the | 4625 // Uninstall the extension and reload. Nothing should happen because the |
4625 // preference should prevent us from reinstalling. | 4626 // preference should prevent us from reinstalling. |
4626 std::string id = loaded_[0]->id(); | 4627 std::string id = loaded_[0]->id(); |
4627 bool no_uninstall = | 4628 bool no_uninstall = |
4628 GetManagementPolicy()->MustRemainEnabled(loaded_[0].get(), NULL); | 4629 GetManagementPolicy()->MustRemainEnabled(loaded_[0].get(), NULL); |
4629 service()->UninstallExtension( | 4630 service()->UninstallExtension( |
4630 id, ExtensionService::UNINSTALL_REASON_FOR_TESTING, NULL); | 4631 id, UninstalledExtensionInfo::REASON_FOR_TESTING, NULL); |
4631 base::RunLoop().RunUntilIdle(); | 4632 base::RunLoop().RunUntilIdle(); |
4632 | 4633 |
4633 base::FilePath install_path = extensions_install_dir().AppendASCII(id); | 4634 base::FilePath install_path = extensions_install_dir().AppendASCII(id); |
4634 if (no_uninstall) { | 4635 if (no_uninstall) { |
4635 // Policy controlled extensions should not have been touched by uninstall. | 4636 // Policy controlled extensions should not have been touched by uninstall. |
4636 ASSERT_TRUE(base::PathExists(install_path)); | 4637 ASSERT_TRUE(base::PathExists(install_path)); |
4637 } else { | 4638 } else { |
4638 // The extension should also be gone from the install directory. | 4639 // The extension should also be gone from the install directory. |
4639 ASSERT_FALSE(base::PathExists(install_path)); | 4640 ASSERT_FALSE(base::PathExists(install_path)); |
4640 loaded_.clear(); | 4641 loaded_.clear(); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4685 provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path); | 4686 provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path); |
4686 service()->CheckForExternalUpdates(); | 4687 service()->CheckForExternalUpdates(); |
4687 observer.Wait(); | 4688 observer.Wait(); |
4688 | 4689 |
4689 ASSERT_EQ(1u, loaded_.size()); | 4690 ASSERT_EQ(1u, loaded_.size()); |
4690 ASSERT_EQ(0u, GetErrors().size()); | 4691 ASSERT_EQ(0u, GetErrors().size()); |
4691 | 4692 |
4692 // User uninstalls. | 4693 // User uninstalls. |
4693 loaded_.clear(); | 4694 loaded_.clear(); |
4694 service()->UninstallExtension( | 4695 service()->UninstallExtension( |
4695 id, ExtensionService::UNINSTALL_REASON_FOR_TESTING, NULL); | 4696 id, UninstalledExtensionInfo::REASON_FOR_TESTING, NULL); |
4696 base::RunLoop().RunUntilIdle(); | 4697 base::RunLoop().RunUntilIdle(); |
4697 ASSERT_EQ(0u, loaded_.size()); | 4698 ASSERT_EQ(0u, loaded_.size()); |
4698 | 4699 |
4699 // Then remove the extension from the extension provider. | 4700 // Then remove the extension from the extension provider. |
4700 provider->RemoveExtension(good_crx); | 4701 provider->RemoveExtension(good_crx); |
4701 | 4702 |
4702 // Should still be at 0. | 4703 // Should still be at 0. |
4703 loaded_.clear(); | 4704 loaded_.clear(); |
4704 extensions::InstalledLoader(service()).LoadAllExtensions(); | 4705 extensions::InstalledLoader(service()).LoadAllExtensions(); |
4705 base::RunLoop().RunUntilIdle(); | 4706 base::RunLoop().RunUntilIdle(); |
(...skipping 2240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6946 | 6947 |
6947 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, | 6948 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, |
6948 content::Source<Profile>(profile()), | 6949 content::Source<Profile>(profile()), |
6949 content::NotificationService::NoDetails()); | 6950 content::NotificationService::NoDetails()); |
6950 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); | 6951 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); |
6951 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 6952 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
6952 EXPECT_EQ(0u, registry()->disabled_extensions().size()); | 6953 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
6953 EXPECT_EQ(0u, registry()->terminated_extensions().size()); | 6954 EXPECT_EQ(0u, registry()->terminated_extensions().size()); |
6954 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); | 6955 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); |
6955 } | 6956 } |
OLD | NEW |