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

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: Fix header file. 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 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 #include "content/public/browser/storage_partition.h" 82 #include "content/public/browser/storage_partition.h"
83 #include "content/public/common/content_constants.h" 83 #include "content/public/common/content_constants.h"
84 #include "content/public/test/test_utils.h" 84 #include "content/public/test/test_utils.h"
85 #include "extensions/browser/extension_registry.h" 85 #include "extensions/browser/extension_registry.h"
86 #include "extensions/browser/extension_system.h" 86 #include "extensions/browser/extension_system.h"
87 #include "extensions/browser/external_provider_interface.h" 87 #include "extensions/browser/external_provider_interface.h"
88 #include "extensions/browser/install_flag.h" 88 #include "extensions/browser/install_flag.h"
89 #include "extensions/browser/management_policy.h" 89 #include "extensions/browser/management_policy.h"
90 #include "extensions/browser/pref_names.h" 90 #include "extensions/browser/pref_names.h"
91 #include "extensions/browser/test_management_policy.h" 91 #include "extensions/browser/test_management_policy.h"
92 #include "extensions/browser/uninstall_reason.h"
92 #include "extensions/common/constants.h" 93 #include "extensions/common/constants.h"
93 #include "extensions/common/extension.h" 94 #include "extensions/common/extension.h"
94 #include "extensions/common/extension_builder.h" 95 #include "extensions/common/extension_builder.h"
95 #include "extensions/common/extension_l10n_util.h" 96 #include "extensions/common/extension_l10n_util.h"
96 #include "extensions/common/extension_resource.h" 97 #include "extensions/common/extension_resource.h"
97 #include "extensions/common/feature_switch.h" 98 #include "extensions/common/feature_switch.h"
98 #include "extensions/common/manifest_constants.h" 99 #include "extensions/common/manifest_constants.h"
99 #include "extensions/common/manifest_handlers/background_info.h" 100 #include "extensions/common/manifest_handlers/background_info.h"
100 #include "extensions/common/permissions/permission_set.h" 101 #include "extensions/common/permissions/permission_set.h"
101 #include "extensions/common/permissions/permissions_data.h" 102 #include "extensions/common/permissions/permissions_data.h"
(...skipping 749 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, extensions::UNINSTALL_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, extensions::UNINSTALL_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 553 matching lines...) Expand 10 before | Expand all | Expand 10 after
1428 : public extensions::ExtensionRegistryObserver { 1429 : public extensions::ExtensionRegistryObserver {
1429 virtual void OnExtensionWillBeInstalled( 1430 virtual void OnExtensionWillBeInstalled(
1430 content::BrowserContext* browser_context, 1431 content::BrowserContext* browser_context,
1431 const Extension* extension, 1432 const Extension* extension,
1432 bool is_update, 1433 bool is_update,
1433 bool from_ephemeral, 1434 bool from_ephemeral,
1434 const std::string& old_name) OVERRIDE { 1435 const std::string& old_name) OVERRIDE {
1435 last_extension_installed = extension->id(); 1436 last_extension_installed = extension->id();
1436 } 1437 }
1437 1438
1438 virtual void OnExtensionUninstalled(content::BrowserContext* browser_context, 1439 virtual void OnExtensionUninstalled(
1439 const Extension* extension) OVERRIDE { 1440 content::BrowserContext* browser_context,
1441 const Extension* extension,
1442 extensions::UninstallReason reason) OVERRIDE {
1440 last_extension_uninstalled = extension->id(); 1443 last_extension_uninstalled = extension->id();
1441 } 1444 }
1442 1445
1443 std::string last_extension_installed; 1446 std::string last_extension_installed;
1444 std::string last_extension_uninstalled; 1447 std::string last_extension_uninstalled;
1445 }; 1448 };
1446 1449
1447 // Test that correct notifications are sent to ExtensionRegistryObserver on 1450 // Test that correct notifications are sent to ExtensionRegistryObserver on
1448 // extension install and uninstall. 1451 // extension install and uninstall.
1449 TEST_F(ExtensionServiceTest, InstallObserverNotified) { 1452 TEST_F(ExtensionServiceTest, InstallObserverNotified) {
(...skipping 2283 matching lines...) Expand 10 before | Expand all | Expand 10 after
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(service()->UninstallExtension(
3743 extension->id(), ExtensionService::UNINSTALL_REASON_FOR_TESTING, NULL)); 3746 extension->id(), extensions::UNINSTALL_REASON_FOR_TESTING, NULL));
3744 EXPECT_EQ(0u, registry()->enabled_extensions().size()); 3747 EXPECT_EQ(0u, registry()->enabled_extensions().size());
3745 3748
3746 // Ensure we cannot load it if management policy prohibits installation. 3749 // Ensure we cannot load it if management policy prohibits installation.
3747 extensions::TestManagementPolicyProvider provider_( 3750 extensions::TestManagementPolicyProvider provider_(
3748 extensions::TestManagementPolicyProvider::PROHIBIT_LOAD); 3751 extensions::TestManagementPolicyProvider::PROHIBIT_LOAD);
3749 GetManagementPolicy()->RegisterProvider(&provider_); 3752 GetManagementPolicy()->RegisterProvider(&provider_);
3750 3753
3751 extensions::InstalledLoader(service()).Load(extension_info, false); 3754 extensions::InstalledLoader(service()).Load(extension_info, false);
3752 EXPECT_EQ(0u, registry()->enabled_extensions().size()); 3755 EXPECT_EQ(0u, registry()->enabled_extensions().size());
3753 } 3756 }
(...skipping 27 matching lines...) Expand all
3781 EXPECT_EQ(1u, registry()->enabled_extensions().size()); 3784 EXPECT_EQ(1u, registry()->enabled_extensions().size());
3782 EXPECT_EQ(0u, registry()->disabled_extensions().size()); 3785 EXPECT_EQ(0u, registry()->disabled_extensions().size());
3783 3786
3784 GetManagementPolicy()->UnregisterAllProviders(); 3787 GetManagementPolicy()->UnregisterAllProviders();
3785 extensions::TestManagementPolicyProvider provider( 3788 extensions::TestManagementPolicyProvider provider(
3786 extensions::TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS); 3789 extensions::TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS);
3787 GetManagementPolicy()->RegisterProvider(&provider); 3790 GetManagementPolicy()->RegisterProvider(&provider);
3788 3791
3789 // Attempt to uninstall it. 3792 // Attempt to uninstall it.
3790 EXPECT_FALSE(service()->UninstallExtension( 3793 EXPECT_FALSE(service()->UninstallExtension(
3791 good_crx, ExtensionService::UNINSTALL_REASON_FOR_TESTING, NULL)); 3794 good_crx, extensions::UNINSTALL_REASON_FOR_TESTING, NULL));
3792 3795
3793 EXPECT_EQ(1u, registry()->enabled_extensions().size()); 3796 EXPECT_EQ(1u, registry()->enabled_extensions().size());
3794 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); 3797 EXPECT_TRUE(service()->GetExtensionById(good_crx, false));
3795 } 3798 }
3796 3799
3797 // Tests that previously installed extensions that are now prohibited from 3800 // Tests that previously installed extensions that are now prohibited from
3798 // being installed are removed. 3801 // being installed are removed.
3799 TEST_F(ExtensionServiceTest, ManagementPolicyUnloadsAllProhibited) { 3802 TEST_F(ExtensionServiceTest, ManagementPolicyUnloadsAllProhibited) {
3800 InitializeEmptyExtensionService(); 3803 InitializeEmptyExtensionService();
3801 3804
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after
4326 IndexedDBContext* idb_context = BrowserContext::GetDefaultStoragePartition( 4329 IndexedDBContext* idb_context = BrowserContext::GetDefaultStoragePartition(
4327 profile())->GetIndexedDBContext(); 4330 profile())->GetIndexedDBContext();
4328 idb_context->SetTaskRunnerForTesting( 4331 idb_context->SetTaskRunnerForTesting(
4329 base::MessageLoop::current()->message_loop_proxy().get()); 4332 base::MessageLoop::current()->message_loop_proxy().get());
4330 base::FilePath idb_path = idb_context->GetFilePathForTesting(origin_id); 4333 base::FilePath idb_path = idb_context->GetFilePathForTesting(origin_id);
4331 EXPECT_TRUE(base::CreateDirectory(idb_path)); 4334 EXPECT_TRUE(base::CreateDirectory(idb_path));
4332 EXPECT_TRUE(base::DirectoryExists(idb_path)); 4335 EXPECT_TRUE(base::DirectoryExists(idb_path));
4333 4336
4334 // Uninstall the extension. 4337 // Uninstall the extension.
4335 service()->UninstallExtension( 4338 service()->UninstallExtension(
4336 good_crx, ExtensionService::UNINSTALL_REASON_FOR_TESTING, NULL); 4339 good_crx, extensions::UNINSTALL_REASON_FOR_TESTING, NULL);
4337 base::RunLoop().RunUntilIdle(); 4340 base::RunLoop().RunUntilIdle();
4338 4341
4339 // Check that the cookie is gone. 4342 // Check that the cookie is gone.
4340 cookie_monster->GetAllCookiesForURLAsync( 4343 cookie_monster->GetAllCookiesForURLAsync(
4341 ext_url, 4344 ext_url,
4342 base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, 4345 base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback,
4343 base::Unretained(&callback))); 4346 base::Unretained(&callback)));
4344 base::RunLoop().RunUntilIdle(); 4347 base::RunLoop().RunUntilIdle();
4345 EXPECT_EQ(0U, callback.list_.size()); 4348 EXPECT_EQ(0U, callback.list_.size());
4346 4349
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
4519 extensions::UnpackedInstaller::Create(service())->Load(no_manifest); 4522 extensions::UnpackedInstaller::Create(service())->Load(no_manifest);
4520 base::RunLoop().RunUntilIdle(); 4523 base::RunLoop().RunUntilIdle();
4521 EXPECT_EQ(1u, GetErrors().size()); 4524 EXPECT_EQ(1u, GetErrors().size());
4522 ASSERT_EQ(1u, loaded_.size()); 4525 ASSERT_EQ(1u, loaded_.size());
4523 EXPECT_EQ(1u, registry()->enabled_extensions().size()); 4526 EXPECT_EQ(1u, registry()->enabled_extensions().size());
4524 4527
4525 // Test uninstall. 4528 // Test uninstall.
4526 std::string id = loaded_[0]->id(); 4529 std::string id = loaded_[0]->id();
4527 EXPECT_FALSE(unloaded_id_.length()); 4530 EXPECT_FALSE(unloaded_id_.length());
4528 service()->UninstallExtension( 4531 service()->UninstallExtension(
4529 id, ExtensionService::UNINSTALL_REASON_FOR_TESTING, NULL); 4532 id, extensions::UNINSTALL_REASON_FOR_TESTING, NULL);
4530 base::RunLoop().RunUntilIdle(); 4533 base::RunLoop().RunUntilIdle();
4531 EXPECT_EQ(id, unloaded_id_); 4534 EXPECT_EQ(id, unloaded_id_);
4532 ASSERT_EQ(0u, loaded_.size()); 4535 ASSERT_EQ(0u, loaded_.size());
4533 EXPECT_EQ(0u, registry()->enabled_extensions().size()); 4536 EXPECT_EQ(0u, registry()->enabled_extensions().size());
4534 } 4537 }
4535 4538
4536 // Tests that we generate IDs when they are not specified in the manifest for 4539 // Tests that we generate IDs when they are not specified in the manifest for
4537 // --load-extension. 4540 // --load-extension.
4538 TEST_F(ExtensionServiceTest, GenerateID) { 4541 TEST_F(ExtensionServiceTest, GenerateID) {
4539 InitializeEmptyExtensionService(); 4542 InitializeEmptyExtensionService();
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
4632 ValidatePrefKeyCount(1); 4635 ValidatePrefKeyCount(1);
4633 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); 4636 ValidateIntegerPref(good_crx, "state", Extension::ENABLED);
4634 ValidateIntegerPref(good_crx, "location", location); 4637 ValidateIntegerPref(good_crx, "location", location);
4635 4638
4636 // Uninstall the extension and reload. Nothing should happen because the 4639 // Uninstall the extension and reload. Nothing should happen because the
4637 // preference should prevent us from reinstalling. 4640 // preference should prevent us from reinstalling.
4638 std::string id = loaded_[0]->id(); 4641 std::string id = loaded_[0]->id();
4639 bool no_uninstall = 4642 bool no_uninstall =
4640 GetManagementPolicy()->MustRemainEnabled(loaded_[0].get(), NULL); 4643 GetManagementPolicy()->MustRemainEnabled(loaded_[0].get(), NULL);
4641 service()->UninstallExtension( 4644 service()->UninstallExtension(
4642 id, ExtensionService::UNINSTALL_REASON_FOR_TESTING, NULL); 4645 id, extensions::UNINSTALL_REASON_FOR_TESTING, NULL);
4643 base::RunLoop().RunUntilIdle(); 4646 base::RunLoop().RunUntilIdle();
4644 4647
4645 base::FilePath install_path = extensions_install_dir().AppendASCII(id); 4648 base::FilePath install_path = extensions_install_dir().AppendASCII(id);
4646 if (no_uninstall) { 4649 if (no_uninstall) {
4647 // Policy controlled extensions should not have been touched by uninstall. 4650 // Policy controlled extensions should not have been touched by uninstall.
4648 ASSERT_TRUE(base::PathExists(install_path)); 4651 ASSERT_TRUE(base::PathExists(install_path));
4649 } else { 4652 } else {
4650 // The extension should also be gone from the install directory. 4653 // The extension should also be gone from the install directory.
4651 ASSERT_FALSE(base::PathExists(install_path)); 4654 ASSERT_FALSE(base::PathExists(install_path));
4652 loaded_.clear(); 4655 loaded_.clear();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
4697 provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path); 4700 provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path);
4698 service()->CheckForExternalUpdates(); 4701 service()->CheckForExternalUpdates();
4699 observer.Wait(); 4702 observer.Wait();
4700 4703
4701 ASSERT_EQ(1u, loaded_.size()); 4704 ASSERT_EQ(1u, loaded_.size());
4702 ASSERT_EQ(0u, GetErrors().size()); 4705 ASSERT_EQ(0u, GetErrors().size());
4703 4706
4704 // User uninstalls. 4707 // User uninstalls.
4705 loaded_.clear(); 4708 loaded_.clear();
4706 service()->UninstallExtension( 4709 service()->UninstallExtension(
4707 id, ExtensionService::UNINSTALL_REASON_FOR_TESTING, NULL); 4710 id, extensions::UNINSTALL_REASON_FOR_TESTING, NULL);
4708 base::RunLoop().RunUntilIdle(); 4711 base::RunLoop().RunUntilIdle();
4709 ASSERT_EQ(0u, loaded_.size()); 4712 ASSERT_EQ(0u, loaded_.size());
4710 4713
4711 // Then remove the extension from the extension provider. 4714 // Then remove the extension from the extension provider.
4712 provider->RemoveExtension(good_crx); 4715 provider->RemoveExtension(good_crx);
4713 4716
4714 // Should still be at 0. 4717 // Should still be at 0.
4715 loaded_.clear(); 4718 loaded_.clear();
4716 extensions::InstalledLoader(service()).LoadAllExtensions(); 4719 extensions::InstalledLoader(service()).LoadAllExtensions();
4717 base::RunLoop().RunUntilIdle(); 4720 base::RunLoop().RunUntilIdle();
(...skipping 2241 matching lines...) Expand 10 before | Expand all | Expand 10 after
6959 6962
6960 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, 6963 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED,
6961 content::Source<Profile>(profile()), 6964 content::Source<Profile>(profile()),
6962 content::NotificationService::NoDetails()); 6965 content::NotificationService::NoDetails());
6963 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); 6966 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_);
6964 EXPECT_EQ(0u, registry()->enabled_extensions().size()); 6967 EXPECT_EQ(0u, registry()->enabled_extensions().size());
6965 EXPECT_EQ(0u, registry()->disabled_extensions().size()); 6968 EXPECT_EQ(0u, registry()->disabled_extensions().size());
6966 EXPECT_EQ(0u, registry()->terminated_extensions().size()); 6969 EXPECT_EQ(0u, registry()->terminated_extensions().size());
6967 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); 6970 EXPECT_EQ(0u, registry()->blacklisted_extensions().size());
6968 } 6971 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_service.cc ('k') | chrome/browser/extensions/extension_storage_monitor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698