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

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

Issue 398083002: Add "UninstallReason" parameter to ExtensionRegistryObserver::OnExtensionUninstalled. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 5 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 <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
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
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
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
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
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698