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

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

Issue 421193002: Fix ExtensionServiceTest.ClearExtensionData flakiness (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: use base::DoNothing for empty callbacks Created 6 years, 4 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 | Annotate | Revision Log
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 844 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_service.cc ('k') | chrome/browser/extensions/extension_storage_monitor.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698