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

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

Issue 18119009: Make utility process run in-process when running in single-process mode. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: undo unnecessary changes Created 7 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 | 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 "chrome/browser/extensions/extension_service_unittest.h" 5 #include "chrome/browser/extensions/extension_service_unittest.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 #include "chrome/common/pref_names.h" 75 #include "chrome/common/pref_names.h"
76 #include "chrome/common/url_constants.h" 76 #include "chrome/common/url_constants.h"
77 #include "chrome/test/base/testing_profile.h" 77 #include "chrome/test/base/testing_profile.h"
78 #include "components/user_prefs/pref_registry_syncable.h" 78 #include "components/user_prefs/pref_registry_syncable.h"
79 #include "content/public/browser/dom_storage_context.h" 79 #include "content/public/browser/dom_storage_context.h"
80 #include "content/public/browser/gpu_data_manager.h" 80 #include "content/public/browser/gpu_data_manager.h"
81 #include "content/public/browser/indexed_db_context.h" 81 #include "content/public/browser/indexed_db_context.h"
82 #include "content/public/browser/notification_registrar.h" 82 #include "content/public/browser/notification_registrar.h"
83 #include "content/public/browser/notification_service.h" 83 #include "content/public/browser/notification_service.h"
84 #include "content/public/browser/plugin_service.h" 84 #include "content/public/browser/plugin_service.h"
85 #include "content/public/browser/render_process_host.h"
85 #include "content/public/browser/storage_partition.h" 86 #include "content/public/browser/storage_partition.h"
86 #include "content/public/common/content_constants.h" 87 #include "content/public/common/content_constants.h"
87 #include "content/public/test/test_browser_thread.h" 88 #include "content/public/test/test_browser_thread.h"
89 #include "content/public/test/test_utils.h"
88 #include "extensions/common/constants.h" 90 #include "extensions/common/constants.h"
89 #include "extensions/common/extension_resource.h" 91 #include "extensions/common/extension_resource.h"
90 #include "extensions/common/url_pattern.h" 92 #include "extensions/common/url_pattern.h"
91 #include "gpu/config/gpu_info.h" 93 #include "gpu/config/gpu_info.h"
92 #include "grit/browser_resources.h" 94 #include "grit/browser_resources.h"
93 #include "net/cookies/canonical_cookie.h" 95 #include "net/cookies/canonical_cookie.h"
94 #include "net/cookies/cookie_monster.h" 96 #include "net/cookies/cookie_monster.h"
95 #include "net/cookies/cookie_options.h" 97 #include "net/cookies/cookie_options.h"
96 #include "net/url_request/url_request_context.h" 98 #include "net/url_request/url_request_context.h"
97 #include "net/url_request/url_request_context_getter.h" 99 #include "net/url_request/url_request_context_getter.h"
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 int schemes = URLPattern::SCHEME_ALL; 190 int schemes = URLPattern::SCHEME_ALL;
189 extent->AddPattern(URLPattern(schemes, pattern)); 191 extent->AddPattern(URLPattern(schemes, pattern));
190 } 192 }
191 193
192 base::FilePath GetTemporaryFile() { 194 base::FilePath GetTemporaryFile() {
193 base::FilePath temp_file; 195 base::FilePath temp_file;
194 CHECK(file_util::CreateTemporaryFile(&temp_file)); 196 CHECK(file_util::CreateTemporaryFile(&temp_file));
195 return temp_file; 197 return temp_file;
196 } 198 }
197 199
200
201 bool WaitForCountNotificationsCallback(int *count) {
202 return --(*count) == 0;
203 }
204
198 } // namespace 205 } // namespace
199 206
200 class MockExtensionProvider : public extensions::ExternalProviderInterface { 207 class MockExtensionProvider : public extensions::ExternalProviderInterface {
201 public: 208 public:
202 MockExtensionProvider( 209 MockExtensionProvider(
203 VisitorInterface* visitor, 210 VisitorInterface* visitor,
204 Manifest::Location location) 211 Manifest::Location location)
205 : location_(location), visitor_(visitor), visit_count_(0) { 212 : location_(location), visitor_(visitor), visit_count_(0) {
206 } 213 }
207 214
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 profile->CreateRequestContext(); 577 profile->CreateRequestContext();
571 } 578 }
572 579
573 // static 580 // static
574 void ExtensionServiceTestBase::SetUpTestCase() { 581 void ExtensionServiceTestBase::SetUpTestCase() {
575 ExtensionErrorReporter::Init(false); // no noisy errors 582 ExtensionErrorReporter::Init(false); // no noisy errors
576 } 583 }
577 584
578 void ExtensionServiceTestBase::SetUp() { 585 void ExtensionServiceTestBase::SetUp() {
579 ExtensionErrorReporter::GetInstance()->ClearErrors(); 586 ExtensionErrorReporter::GetInstance()->ClearErrors();
587 content::RenderProcessHost::SetRunRendererInProcess(true);
588 }
589
590 void ExtensionServiceTestBase::TearDown() {
591 content::RenderProcessHost::SetRunRendererInProcess(false);
580 } 592 }
581 593
582 class ExtensionServiceTest 594 class ExtensionServiceTest
583 : public ExtensionServiceTestBase, public content::NotificationObserver { 595 : public ExtensionServiceTestBase, public content::NotificationObserver {
584 public: 596 public:
585 ExtensionServiceTest() 597 ExtensionServiceTest()
586 : installed_(NULL), 598 : installed_(NULL),
587 was_update_(false), 599 was_update_(false),
588 override_external_install_prompt_( 600 override_external_install_prompt_(
589 FeatureSwitch::prompt_for_external_extensions(), false) { 601 FeatureSwitch::prompt_for_external_extensions(), false) {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 } 691 }
680 692
681 void StartCRXInstall(const base::FilePath& crx_path, int creation_flags) { 693 void StartCRXInstall(const base::FilePath& crx_path, int creation_flags) {
682 ASSERT_TRUE(file_util::PathExists(crx_path)) 694 ASSERT_TRUE(file_util::PathExists(crx_path))
683 << "Path does not exist: "<< crx_path.value().c_str(); 695 << "Path does not exist: "<< crx_path.value().c_str();
684 scoped_refptr<CrxInstaller> installer(CrxInstaller::Create(service_, NULL)); 696 scoped_refptr<CrxInstaller> installer(CrxInstaller::Create(service_, NULL));
685 installer->set_creation_flags(creation_flags); 697 installer->set_creation_flags(creation_flags);
686 if (!(creation_flags & Extension::WAS_INSTALLED_BY_DEFAULT)) { 698 if (!(creation_flags & Extension::WAS_INSTALLED_BY_DEFAULT)) {
687 installer->set_allow_silent_install(true); 699 installer->set_allow_silent_install(true);
688 } 700 }
701
702 content::WindowedNotificationObserver windowed_observer(
703 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
704 content::Source<extensions::CrxInstaller>(installer));
705
689 installer->InstallCrx(crx_path); 706 installer->InstallCrx(crx_path);
690 } 707 }
691 708
692 enum InstallState { 709 enum InstallState {
693 INSTALL_FAILED, 710 INSTALL_FAILED,
694 INSTALL_UPDATED, 711 INSTALL_UPDATED,
695 INSTALL_NEW, 712 INSTALL_NEW,
696 INSTALL_WITHOUT_LOAD, 713 INSTALL_WITHOUT_LOAD,
697 }; 714 };
698 715
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
779 796
780 // Wait for a CrxInstaller to finish. Used by InstallCRX. Set the 797 // Wait for a CrxInstaller to finish. Used by InstallCRX. Set the
781 // |install_state| to INSTALL_FAILED if the installation is expected to fail. 798 // |install_state| to INSTALL_FAILED if the installation is expected to fail.
782 // If |install_state| is INSTALL_UPDATED, and |expected_old_name| is 799 // If |install_state| is INSTALL_UPDATED, and |expected_old_name| is
783 // non-empty, expects that the existing extension's title was 800 // non-empty, expects that the existing extension's title was
784 // |expected_old_name|. 801 // |expected_old_name|.
785 // Returns an Extension pointer if the install succeeded, NULL otherwise. 802 // Returns an Extension pointer if the install succeeded, NULL otherwise.
786 const Extension* WaitForCrxInstall(const base::FilePath& path, 803 const Extension* WaitForCrxInstall(const base::FilePath& path,
787 InstallState install_state, 804 InstallState install_state,
788 const std::string& expected_old_name) { 805 const std::string& expected_old_name) {
789 loop_.RunUntilIdle(); 806 content::WindowedNotificationObserver(
807 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
808 content::NotificationService::AllSources()).Wait();
809
790 std::vector<string16> errors = GetErrors(); 810 std::vector<string16> errors = GetErrors();
791 const Extension* extension = NULL; 811 const Extension* extension = NULL;
792 if (install_state != INSTALL_FAILED) { 812 if (install_state != INSTALL_FAILED) {
793 if (install_state == INSTALL_NEW) 813 if (install_state == INSTALL_NEW)
794 ++expected_extensions_count_; 814 ++expected_extensions_count_;
795 815
796 EXPECT_TRUE(installed_) << path.value(); 816 EXPECT_TRUE(installed_) << path.value();
797 // If and only if INSTALL_UPDATED, it should have the is_update flag. 817 // If and only if INSTALL_UPDATED, it should have the is_update flag.
798 EXPECT_EQ(install_state == INSTALL_UPDATED, was_update_) 818 EXPECT_EQ(install_state == INSTALL_UPDATED, was_update_)
799 << path.value(); 819 << path.value();
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
865 base::FilePath path = temp_dir_.path(); 885 base::FilePath path = temp_dir_.path();
866 path = path.Append(in_path.BaseName()); 886 path = path.Append(in_path.BaseName());
867 ASSERT_TRUE(file_util::CopyFile(in_path, path)); 887 ASSERT_TRUE(file_util::CopyFile(in_path, path));
868 888
869 int previous_enabled_extension_count = 889 int previous_enabled_extension_count =
870 service_->extensions()->size(); 890 service_->extensions()->size();
871 int previous_installed_extension_count = 891 int previous_installed_extension_count =
872 previous_enabled_extension_count + 892 previous_enabled_extension_count +
873 service_->disabled_extensions()->size(); 893 service_->disabled_extensions()->size();
874 894
875 service_->UpdateExtension(id, path, GURL(), NULL); 895 extensions::CrxInstaller* installer = NULL;
876 loop_.RunUntilIdle(); 896 service_->UpdateExtension(id, path, GURL(), &installer);
897
898 if (installer) {
899 content::WindowedNotificationObserver(
900 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
901 content::Source<extensions::CrxInstaller>(installer)).Wait();
902 } else {
903 loop_.RunUntilIdle();
904 }
877 905
878 std::vector<string16> errors = GetErrors(); 906 std::vector<string16> errors = GetErrors();
879 int error_count = errors.size(); 907 int error_count = errors.size();
880 int enabled_extension_count = 908 int enabled_extension_count =
881 service_->extensions()->size(); 909 service_->extensions()->size();
882 int installed_extension_count = 910 int installed_extension_count =
883 enabled_extension_count + service_->disabled_extensions()->size(); 911 enabled_extension_count + service_->disabled_extensions()->size();
884 912
885 int expected_error_count = (expected_state == FAILED) ? 1 : 0; 913 int expected_error_count = (expected_state == FAILED) ? 1 : 0;
886 EXPECT_EQ(expected_error_count, error_count) << path.value(); 914 EXPECT_EQ(expected_error_count, error_count) << path.value();
(...skipping 690 matching lines...) Expand 10 before | Expand all | Expand 10 after
1577 TEST_F(ExtensionServiceTest, InstallingExternalExtensionWithFlags) { 1605 TEST_F(ExtensionServiceTest, InstallingExternalExtensionWithFlags) {
1578 const char kPrefFromBookmark[] = "from_bookmark"; 1606 const char kPrefFromBookmark[] = "from_bookmark";
1579 1607
1580 InitializeEmptyExtensionService(); 1608 InitializeEmptyExtensionService();
1581 1609
1582 base::FilePath path = data_dir_.AppendASCII("good.crx"); 1610 base::FilePath path = data_dir_.AppendASCII("good.crx");
1583 set_extensions_enabled(true); 1611 set_extensions_enabled(true);
1584 1612
1585 // Register and install an external extension. 1613 // Register and install an external extension.
1586 Version version("1.0.0.0"); 1614 Version version("1.0.0.0");
1587 service_->OnExternalExtensionFileFound( 1615 if (service_->OnExternalExtensionFileFound(
1588 good_crx, 1616 good_crx,
1589 &version, 1617 &version,
1590 path, 1618 path,
1591 Manifest::EXTERNAL_PREF, 1619 Manifest::EXTERNAL_PREF,
1592 Extension::FROM_BOOKMARK, 1620 Extension::FROM_BOOKMARK,
1593 false /* mark_acknowledged */); 1621 false /* mark_acknowledged */)) {
1594 loop_.RunUntilIdle(); 1622 content::WindowedNotificationObserver(
1623 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
1624 content::NotificationService::AllSources()).Wait();
1625 }
1595 1626
1596 const Extension* extension = service_->GetExtensionById(good_crx, false); 1627 const Extension* extension = service_->GetExtensionById(good_crx, false);
1597 ASSERT_TRUE(extension); 1628 ASSERT_TRUE(extension);
1598 ASSERT_TRUE(extension->from_bookmark()); 1629 ASSERT_TRUE(extension->from_bookmark());
1599 ValidateBooleanPref(good_crx, kPrefFromBookmark, true); 1630 ValidateBooleanPref(good_crx, kPrefFromBookmark, true);
1600 1631
1601 // Upgrade to version 2.0, the flag should be preserved. 1632 // Upgrade to version 2.0, the flag should be preserved.
1602 path = data_dir_.AppendASCII("good2.crx"); 1633 path = data_dir_.AppendASCII("good2.crx");
1603 UpdateExtension(good_crx, path, ENABLED); 1634 UpdateExtension(good_crx, path, ENABLED);
1604 ValidateBooleanPref(good_crx, kPrefFromBookmark, true); 1635 ValidateBooleanPref(good_crx, kPrefFromBookmark, true);
1605 extension = service_->GetExtensionById(good_crx, false); 1636 extension = service_->GetExtensionById(good_crx, false);
1606 ASSERT_TRUE(extension); 1637 ASSERT_TRUE(extension);
1607 ASSERT_TRUE(extension->from_bookmark()); 1638 ASSERT_TRUE(extension->from_bookmark());
1608 } 1639 }
1609 1640
1610 // Test the handling of Extension::EXTERNAL_EXTENSION_UNINSTALLED 1641 // Test the handling of Extension::EXTERNAL_EXTENSION_UNINSTALLED
1611 TEST_F(ExtensionServiceTest, UninstallingExternalExtensions) { 1642 TEST_F(ExtensionServiceTest, UninstallingExternalExtensions) {
1612 InitializeEmptyExtensionService(); 1643 InitializeEmptyExtensionService();
1613 1644
1614 base::FilePath path = data_dir_.AppendASCII("good.crx"); 1645 base::FilePath path = data_dir_.AppendASCII("good.crx");
1615 set_extensions_enabled(true); 1646 set_extensions_enabled(true);
1616 1647
1617 Version version("1.0.0.0"); 1648 Version version("1.0.0.0");
1618 // Install an external extension. 1649 // Install an external extension.
1619 service_->OnExternalExtensionFileFound(good_crx, &version, 1650 if (service_->OnExternalExtensionFileFound(good_crx, &version,
1620 path, Manifest::EXTERNAL_PREF, 1651 path, Manifest::EXTERNAL_PREF,
1621 Extension::NO_FLAGS, false); 1652 Extension::NO_FLAGS, false)) {
1622 loop_.RunUntilIdle(); 1653 content::WindowedNotificationObserver(
1654 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
1655 content::NotificationService::AllSources()).Wait();
1656 }
1657
1623 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); 1658 ASSERT_TRUE(service_->GetExtensionById(good_crx, false));
1624 1659
1625 // Uninstall it and check that its killbit gets set. 1660 // Uninstall it and check that its killbit gets set.
1626 UninstallExtension(good_crx, false); 1661 UninstallExtension(good_crx, false);
1627 ValidateIntegerPref(good_crx, "location", 1662 ValidateIntegerPref(good_crx, "location",
1628 Extension::EXTERNAL_EXTENSION_UNINSTALLED); 1663 Extension::EXTERNAL_EXTENSION_UNINSTALLED);
1629 1664
1630 // Try to re-install it externally. This should fail because of the killbit. 1665 // Try to re-install it externally. This should fail because of the killbit.
1631 service_->OnExternalExtensionFileFound(good_crx, &version, 1666 service_->OnExternalExtensionFileFound(good_crx, &version,
1632 path, Manifest::EXTERNAL_PREF, 1667 path, Manifest::EXTERNAL_PREF,
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1695 const std::string wrong_id = all_zero; 1730 const std::string wrong_id = all_zero;
1696 const std::string correct_id = good_crx; 1731 const std::string correct_id = good_crx;
1697 ASSERT_NE(correct_id, wrong_id); 1732 ASSERT_NE(correct_id, wrong_id);
1698 1733
1699 // Install an external extension with an ID from the external 1734 // Install an external extension with an ID from the external
1700 // source that is not equal to the ID in the extension manifest. 1735 // source that is not equal to the ID in the extension manifest.
1701 service_->OnExternalExtensionFileFound( 1736 service_->OnExternalExtensionFileFound(
1702 wrong_id, &version, path, Manifest::EXTERNAL_PREF, 1737 wrong_id, &version, path, Manifest::EXTERNAL_PREF,
1703 Extension::NO_FLAGS, false); 1738 Extension::NO_FLAGS, false);
1704 1739
1705 loop_.RunUntilIdle(); 1740 content::WindowedNotificationObserver(
1741 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
1742 content::NotificationService::AllSources()).Wait();
1706 ASSERT_FALSE(service_->GetExtensionById(good_crx, false)); 1743 ASSERT_FALSE(service_->GetExtensionById(good_crx, false));
1707 1744
1708 // Try again with the right ID. Expect success. 1745 // Try again with the right ID. Expect success.
1709 service_->OnExternalExtensionFileFound( 1746 if (service_->OnExternalExtensionFileFound(
1710 correct_id, &version, path, Manifest::EXTERNAL_PREF, 1747 correct_id, &version, path, Manifest::EXTERNAL_PREF,
1711 Extension::NO_FLAGS, false); 1748 Extension::NO_FLAGS, false)) {
1712 loop_.RunUntilIdle(); 1749 content::WindowedNotificationObserver(
1750 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
1751 content::NotificationService::AllSources()).Wait();
1752 }
1713 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); 1753 ASSERT_TRUE(service_->GetExtensionById(good_crx, false));
1714 } 1754 }
1715 1755
1716 // Test that external extensions with incorrect versions are not installed. 1756 // Test that external extensions with incorrect versions are not installed.
1717 TEST_F(ExtensionServiceTest, FailOnWrongVersion) { 1757 TEST_F(ExtensionServiceTest, FailOnWrongVersion) {
1718 InitializeEmptyExtensionService(); 1758 InitializeEmptyExtensionService();
1719 base::FilePath path = data_dir_.AppendASCII("good.crx"); 1759 base::FilePath path = data_dir_.AppendASCII("good.crx");
1720 set_extensions_enabled(true); 1760 set_extensions_enabled(true);
1721 1761
1722 // Install an external extension with a version from the external 1762 // Install an external extension with a version from the external
1723 // source that is not equal to the version in the extension manifest. 1763 // source that is not equal to the version in the extension manifest.
1724 Version wrong_version("1.2.3.4"); 1764 Version wrong_version("1.2.3.4");
1725 service_->OnExternalExtensionFileFound( 1765 service_->OnExternalExtensionFileFound(
1726 good_crx, &wrong_version, path, Manifest::EXTERNAL_PREF, 1766 good_crx, &wrong_version, path, Manifest::EXTERNAL_PREF,
1727 Extension::NO_FLAGS, false); 1767 Extension::NO_FLAGS, false);
1728 1768
1729 loop_.RunUntilIdle(); 1769 content::WindowedNotificationObserver(
1770 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
1771 content::NotificationService::AllSources()).Wait();
1730 ASSERT_FALSE(service_->GetExtensionById(good_crx, false)); 1772 ASSERT_FALSE(service_->GetExtensionById(good_crx, false));
1731 1773
1732 // Try again with the right version. Expect success. 1774 // Try again with the right version. Expect success.
1733 service_->pending_extension_manager()->Remove(good_crx); 1775 service_->pending_extension_manager()->Remove(good_crx);
1734 Version correct_version("1.0.0.0"); 1776 Version correct_version("1.0.0.0");
1735 service_->OnExternalExtensionFileFound( 1777 if (service_->OnExternalExtensionFileFound(
1736 good_crx, &correct_version, path, Manifest::EXTERNAL_PREF, 1778 good_crx, &correct_version, path, Manifest::EXTERNAL_PREF,
1737 Extension::NO_FLAGS, false); 1779 Extension::NO_FLAGS, false)) {
1738 loop_.RunUntilIdle(); 1780 content::WindowedNotificationObserver(
1781 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
1782 content::NotificationService::AllSources()).Wait();
1783 }
1739 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); 1784 ASSERT_TRUE(service_->GetExtensionById(good_crx, false));
1740 } 1785 }
1741 1786
1742 // Install a user script (they get converted automatically to an extension) 1787 // Install a user script (they get converted automatically to an extension)
1743 TEST_F(ExtensionServiceTest, InstallUserScript) { 1788 TEST_F(ExtensionServiceTest, InstallUserScript) {
1744 // The details of script conversion are tested elsewhere, this just tests 1789 // The details of script conversion are tested elsewhere, this just tests
1745 // integration with ExtensionService. 1790 // integration with ExtensionService.
1746 InitializeEmptyExtensionService(); 1791 InitializeEmptyExtensionService();
1747 1792
1748 base::FilePath path = data_dir_ 1793 base::FilePath path = data_dir_
(...skipping 1654 matching lines...) Expand 10 before | Expand all | Expand 10 after
3403 MockExtensionProvider* provider = 3448 MockExtensionProvider* provider =
3404 new MockExtensionProvider(service_, 3449 new MockExtensionProvider(service_,
3405 Manifest::EXTERNAL_POLICY_DOWNLOAD); 3450 Manifest::EXTERNAL_POLICY_DOWNLOAD);
3406 AddMockExternalProvider(provider); 3451 AddMockExternalProvider(provider);
3407 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", 3452 provider->UpdateOrAddExtension(good_crx, "1.0.0.0",
3408 data_dir_.AppendASCII("good.crx")); 3453 data_dir_.AppendASCII("good.crx"));
3409 3454
3410 // Reloading extensions should find our externally registered extension 3455 // Reloading extensions should find our externally registered extension
3411 // and install it. 3456 // and install it.
3412 service_->CheckForExternalUpdates(); 3457 service_->CheckForExternalUpdates();
3413 loop_.RunUntilIdle(); 3458 content::WindowedNotificationObserver(
3459 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
3460 content::NotificationService::AllSources()).Wait();
3414 3461
3415 // Extension should be installed despite blacklist. 3462 // Extension should be installed despite blacklist.
3416 ASSERT_EQ(1u, service_->extensions()->size()); 3463 ASSERT_EQ(1u, service_->extensions()->size());
3417 EXPECT_TRUE(service_->GetExtensionById(good_crx, false)); 3464 EXPECT_TRUE(service_->GetExtensionById(good_crx, false));
3418 3465
3419 // Blacklist update should not uninstall the extension. 3466 // Blacklist update should not uninstall the extension.
3420 { 3467 {
3421 ListPrefUpdate update(profile_->GetPrefs(), 3468 ListPrefUpdate update(profile_->GetPrefs(),
3422 prefs::kExtensionInstallDenyList); 3469 prefs::kExtensionInstallDenyList);
3423 ListValue* blacklist = update.Get(); 3470 ListValue* blacklist = update.Get();
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
3581 MockExtensionProvider* provider = 3628 MockExtensionProvider* provider =
3582 new MockExtensionProvider(service_, 3629 new MockExtensionProvider(service_,
3583 Manifest::EXTERNAL_POLICY_DOWNLOAD); 3630 Manifest::EXTERNAL_POLICY_DOWNLOAD);
3584 AddMockExternalProvider(provider); 3631 AddMockExternalProvider(provider);
3585 provider->UpdateOrAddExtension(page_action, "1.0.0.0", 3632 provider->UpdateOrAddExtension(page_action, "1.0.0.0",
3586 data_dir_.AppendASCII("page_action.crx")); 3633 data_dir_.AppendASCII("page_action.crx"));
3587 } 3634 }
3588 3635
3589 // Providers are set up. Let them run. 3636 // Providers are set up. Let them run.
3590 service_->CheckForExternalUpdates(); 3637 service_->CheckForExternalUpdates();
3591 loop_.RunUntilIdle(); 3638
3639 int count = 2;
3640 content::WindowedNotificationObserver(
3641 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
3642 base::Bind(&WaitForCountNotificationsCallback, &count)).Wait();
3592 3643
3593 ASSERT_EQ(2u, service_->extensions()->size()); 3644 ASSERT_EQ(2u, service_->extensions()->size());
3594 EXPECT_TRUE(service_->GetExtensionById(good_crx, false)); 3645 EXPECT_TRUE(service_->GetExtensionById(good_crx, false));
3595 EXPECT_TRUE(service_->GetExtensionById(page_action, false)); 3646 EXPECT_TRUE(service_->GetExtensionById(page_action, false));
3596 ExtensionPrefs* prefs = service_->extension_prefs(); 3647 ExtensionPrefs* prefs = service_->extension_prefs();
3597 ASSERT_TRUE(!prefs->IsExternalExtensionAcknowledged(good_crx)); 3648 ASSERT_TRUE(!prefs->IsExternalExtensionAcknowledged(good_crx));
3598 ASSERT_TRUE(prefs->IsExternalExtensionAcknowledged(page_action)); 3649 ASSERT_TRUE(prefs->IsExternalExtensionAcknowledged(page_action));
3599 } 3650 }
3600 3651
3601 #if !defined(OS_CHROMEOS) 3652 #if !defined(OS_CHROMEOS)
(...skipping 19 matching lines...) Expand all
3621 new extensions::ExternalTestingLoader(json_data, data_dir_), 3672 new extensions::ExternalTestingLoader(json_data, data_dir_),
3622 Manifest::INTERNAL, 3673 Manifest::INTERNAL,
3623 Manifest::INVALID_LOCATION, 3674 Manifest::INVALID_LOCATION,
3624 Extension::FROM_WEBSTORE | Extension::WAS_INSTALLED_BY_DEFAULT); 3675 Extension::FROM_WEBSTORE | Extension::WAS_INSTALLED_BY_DEFAULT);
3625 3676
3626 AddMockExternalProvider(provider); 3677 AddMockExternalProvider(provider);
3627 } 3678 }
3628 3679
3629 ASSERT_EQ(0u, service_->extensions()->size()); 3680 ASSERT_EQ(0u, service_->extensions()->size());
3630 service_->CheckForExternalUpdates(); 3681 service_->CheckForExternalUpdates();
3631 loop_.RunUntilIdle(); 3682 content::WindowedNotificationObserver(
3683 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
3684 content::NotificationService::AllSources()).Wait();
3632 3685
3633 ASSERT_EQ(1u, service_->extensions()->size()); 3686 ASSERT_EQ(1u, service_->extensions()->size());
3634 EXPECT_TRUE(service_->GetExtensionById(good_crx, false)); 3687 EXPECT_TRUE(service_->GetExtensionById(good_crx, false));
3635 const Extension* extension = service_->GetExtensionById(good_crx, false); 3688 const Extension* extension = service_->GetExtensionById(good_crx, false);
3636 EXPECT_TRUE(extension->from_webstore()); 3689 EXPECT_TRUE(extension->from_webstore());
3637 EXPECT_TRUE(extension->was_installed_by_default()); 3690 EXPECT_TRUE(extension->was_installed_by_default());
3638
3639 } 3691 }
3640 #endif 3692 #endif
3641 3693
3642 // Tests disabling extensions 3694 // Tests disabling extensions
3643 TEST_F(ExtensionServiceTest, DisableExtension) { 3695 TEST_F(ExtensionServiceTest, DisableExtension) {
3644 InitializeEmptyExtensionService(); 3696 InitializeEmptyExtensionService();
3645 3697
3646 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); 3698 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW);
3647 EXPECT_FALSE(service_->extensions()->is_empty()); 3699 EXPECT_FALSE(service_->extensions()->is_empty());
3648 EXPECT_TRUE(service_->GetExtensionById(good_crx, true)); 3700 EXPECT_TRUE(service_->GetExtensionById(good_crx, true));
(...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after
4246 4298
4247 // Register a test extension externally using the mock registry provider. 4299 // Register a test extension externally using the mock registry provider.
4248 base::FilePath source_path = data_dir_.AppendASCII("good.crx"); 4300 base::FilePath source_path = data_dir_.AppendASCII("good.crx");
4249 4301
4250 // Add the extension. 4302 // Add the extension.
4251 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", source_path); 4303 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", source_path);
4252 4304
4253 // Reloading extensions should find our externally registered extension 4305 // Reloading extensions should find our externally registered extension
4254 // and install it. 4306 // and install it.
4255 service_->CheckForExternalUpdates(); 4307 service_->CheckForExternalUpdates();
4256 loop_.RunUntilIdle(); 4308 content::WindowedNotificationObserver(
4309 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
4310 content::NotificationService::AllSources()).Wait();
4257 4311
4258 ASSERT_EQ(0u, GetErrors().size()); 4312 ASSERT_EQ(0u, GetErrors().size());
4259 ASSERT_EQ(1u, loaded_.size()); 4313 ASSERT_EQ(1u, loaded_.size());
4260 ASSERT_EQ(location, loaded_[0]->location()); 4314 ASSERT_EQ(location, loaded_[0]->location());
4261 ASSERT_EQ("1.0.0.0", loaded_[0]->version()->GetString()); 4315 ASSERT_EQ("1.0.0.0", loaded_[0]->version()->GetString());
4262 ValidatePrefKeyCount(1); 4316 ValidatePrefKeyCount(1);
4263 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); 4317 ValidateIntegerPref(good_crx, "state", Extension::ENABLED);
4264 ValidateIntegerPref(good_crx, "location", location); 4318 ValidateIntegerPref(good_crx, "location", location);
4265 4319
4266 // Reload extensions without changing anything. The extension should be 4320 // Reload extensions without changing anything. The extension should be
4267 // loaded again. 4321 // loaded again.
4268 loaded_.clear(); 4322 loaded_.clear();
4269 service_->ReloadExtensions(); 4323 service_->ReloadExtensions();
4270 loop_.RunUntilIdle(); 4324 loop_.RunUntilIdle();
4271 ASSERT_EQ(0u, GetErrors().size()); 4325 ASSERT_EQ(0u, GetErrors().size());
4272 ASSERT_EQ(1u, loaded_.size()); 4326 ASSERT_EQ(1u, loaded_.size());
4273 ValidatePrefKeyCount(1); 4327 ValidatePrefKeyCount(1);
4274 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); 4328 ValidateIntegerPref(good_crx, "state", Extension::ENABLED);
4275 ValidateIntegerPref(good_crx, "location", location); 4329 ValidateIntegerPref(good_crx, "location", location);
4276 4330
4277 // Now update the extension with a new version. We should get upgraded. 4331 // Now update the extension with a new version. We should get upgraded.
4278 source_path = source_path.DirName().AppendASCII("good2.crx"); 4332 source_path = source_path.DirName().AppendASCII("good2.crx");
4279 provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path); 4333 provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path);
4280 4334
4281 loaded_.clear(); 4335 loaded_.clear();
4282 service_->CheckForExternalUpdates(); 4336 service_->CheckForExternalUpdates();
4283 loop_.RunUntilIdle(); 4337 content::WindowedNotificationObserver(
4338 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
4339 content::NotificationService::AllSources()).Wait();
4284 ASSERT_EQ(0u, GetErrors().size()); 4340 ASSERT_EQ(0u, GetErrors().size());
4285 ASSERT_EQ(1u, loaded_.size()); 4341 ASSERT_EQ(1u, loaded_.size());
4286 ASSERT_EQ("1.0.0.1", loaded_[0]->version()->GetString()); 4342 ASSERT_EQ("1.0.0.1", loaded_[0]->version()->GetString());
4287 ValidatePrefKeyCount(1); 4343 ValidatePrefKeyCount(1);
4288 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); 4344 ValidateIntegerPref(good_crx, "state", Extension::ENABLED);
4289 ValidateIntegerPref(good_crx, "location", location); 4345 ValidateIntegerPref(good_crx, "location", location);
4290 4346
4291 // Uninstall the extension and reload. Nothing should happen because the 4347 // Uninstall the extension and reload. Nothing should happen because the
4292 // preference should prevent us from reinstalling. 4348 // preference should prevent us from reinstalling.
4293 std::string id = loaded_[0]->id(); 4349 std::string id = loaded_[0]->id();
(...skipping 16 matching lines...) Expand all
4310 ValidatePrefKeyCount(1); 4366 ValidatePrefKeyCount(1);
4311 ValidateIntegerPref(good_crx, "state", 4367 ValidateIntegerPref(good_crx, "state",
4312 Extension::EXTERNAL_EXTENSION_UNINSTALLED); 4368 Extension::EXTERNAL_EXTENSION_UNINSTALLED);
4313 ValidateIntegerPref(good_crx, "location", location); 4369 ValidateIntegerPref(good_crx, "location", location);
4314 4370
4315 // Now clear the preference and reinstall. 4371 // Now clear the preference and reinstall.
4316 SetPrefInteg(good_crx, "state", Extension::ENABLED); 4372 SetPrefInteg(good_crx, "state", Extension::ENABLED);
4317 4373
4318 loaded_.clear(); 4374 loaded_.clear();
4319 service_->CheckForExternalUpdates(); 4375 service_->CheckForExternalUpdates();
4320 loop_.RunUntilIdle(); 4376 content::WindowedNotificationObserver(
4377 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
4378 content::NotificationService::AllSources()).Wait();
4321 ASSERT_EQ(1u, loaded_.size()); 4379 ASSERT_EQ(1u, loaded_.size());
4322 } 4380 }
4323 ValidatePrefKeyCount(1); 4381 ValidatePrefKeyCount(1);
4324 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); 4382 ValidateIntegerPref(good_crx, "state", Extension::ENABLED);
4325 ValidateIntegerPref(good_crx, "location", location); 4383 ValidateIntegerPref(good_crx, "location", location);
4326 4384
4327 if (management_policy_->MustRemainEnabled(loaded_[0].get(), NULL)) { 4385 if (management_policy_->MustRemainEnabled(loaded_[0].get(), NULL)) {
4328 EXPECT_EQ(2, provider->visit_count()); 4386 EXPECT_EQ(2, provider->visit_count());
4329 } else { 4387 } else {
4330 // Now test an externally triggered uninstall (deleting the registry key or 4388 // Now test an externally triggered uninstall (deleting the registry key or
4331 // the pref entry). 4389 // the pref entry).
4332 provider->RemoveExtension(good_crx); 4390 provider->RemoveExtension(good_crx);
4333 4391
4334 loaded_.clear(); 4392 loaded_.clear();
4335 service_->OnExternalProviderReady(provider); 4393 service_->OnExternalProviderReady(provider);
4336 loop_.RunUntilIdle(); 4394 loop_.RunUntilIdle();
4337 ASSERT_EQ(0u, loaded_.size()); 4395 ASSERT_EQ(0u, loaded_.size());
4338 ValidatePrefKeyCount(0); 4396 ValidatePrefKeyCount(0);
4339 4397
4340 // The extension should also be gone from the install directory. 4398 // The extension should also be gone from the install directory.
4341 ASSERT_FALSE(file_util::PathExists(install_path)); 4399 ASSERT_FALSE(file_util::PathExists(install_path));
4342 4400
4343 // Now test the case where user uninstalls and then the extension is removed 4401 // Now test the case where user uninstalls and then the extension is removed
4344 // from the external provider. 4402 // from the external provider.
4345 provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path); 4403 provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path);
4346 service_->CheckForExternalUpdates(); 4404 service_->CheckForExternalUpdates();
4347 loop_.RunUntilIdle(); 4405 content::WindowedNotificationObserver(
4406 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
4407 content::NotificationService::AllSources()).Wait();
4348 4408
4349 ASSERT_EQ(1u, loaded_.size()); 4409 ASSERT_EQ(1u, loaded_.size());
4350 ASSERT_EQ(0u, GetErrors().size()); 4410 ASSERT_EQ(0u, GetErrors().size());
4351 4411
4352 // User uninstalls. 4412 // User uninstalls.
4353 loaded_.clear(); 4413 loaded_.clear();
4354 service_->UninstallExtension(id, false, NULL); 4414 service_->UninstallExtension(id, false, NULL);
4355 loop_.RunUntilIdle(); 4415 loop_.RunUntilIdle();
4356 ASSERT_EQ(0u, loaded_.size()); 4416 ASSERT_EQ(0u, loaded_.size());
4357 4417
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
4488 4548
4489 // Register a test extension externally using the mock registry provider. 4549 // Register a test extension externally using the mock registry provider.
4490 base::FilePath source_path = data_dir_.AppendASCII("good.crx"); 4550 base::FilePath source_path = data_dir_.AppendASCII("good.crx");
4491 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", source_path); 4551 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", source_path);
4492 4552
4493 // Two checks for external updates should find the extension, and install it 4553 // Two checks for external updates should find the extension, and install it
4494 // once. 4554 // once.
4495 provider->set_visit_count(0); 4555 provider->set_visit_count(0);
4496 service_->CheckForExternalUpdates(); 4556 service_->CheckForExternalUpdates();
4497 service_->CheckForExternalUpdates(); 4557 service_->CheckForExternalUpdates();
4498 loop_.RunUntilIdle(); 4558 content::WindowedNotificationObserver(
4559 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
4560 content::NotificationService::AllSources()).Wait();
4499 EXPECT_EQ(2, provider->visit_count()); 4561 EXPECT_EQ(2, provider->visit_count());
4500 ASSERT_EQ(0u, GetErrors().size()); 4562 ASSERT_EQ(0u, GetErrors().size());
4501 ASSERT_EQ(1u, loaded_.size()); 4563 ASSERT_EQ(1u, loaded_.size());
4502 ASSERT_EQ(Manifest::EXTERNAL_PREF, loaded_[0]->location()); 4564 ASSERT_EQ(Manifest::EXTERNAL_PREF, loaded_[0]->location());
4503 ASSERT_EQ("1.0.0.0", loaded_[0]->version()->GetString()); 4565 ASSERT_EQ("1.0.0.0", loaded_[0]->version()->GetString());
4504 ValidatePrefKeyCount(1); 4566 ValidatePrefKeyCount(1);
4505 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); 4567 ValidateIntegerPref(good_crx, "state", Extension::ENABLED);
4506 ValidateIntegerPref(good_crx, "location", Manifest::EXTERNAL_PREF); 4568 ValidateIntegerPref(good_crx, "location", Manifest::EXTERNAL_PREF);
4507 4569
4508 provider->RemoveExtension(good_crx); 4570 provider->RemoveExtension(good_crx);
(...skipping 1372 matching lines...) Expand 10 before | Expand all | Expand 10 after
5881 EXPECT_TRUE(AddPendingSyncInstall()); 5943 EXPECT_TRUE(AddPendingSyncInstall());
5882 ASSERT_EQ(Manifest::INTERNAL, GetPendingLocation()); 5944 ASSERT_EQ(Manifest::INTERNAL, GetPendingLocation());
5883 EXPECT_TRUE(GetPendingIsFromSync()); 5945 EXPECT_TRUE(GetPendingIsFromSync());
5884 ASSERT_FALSE(IsCrxInstalled()); 5946 ASSERT_FALSE(IsCrxInstalled());
5885 5947
5886 // Install pending as external prefs json would. 5948 // Install pending as external prefs json would.
5887 AddPendingExternalPrefFileInstall(); 5949 AddPendingExternalPrefFileInstall();
5888 ASSERT_EQ(Manifest::EXTERNAL_PREF, GetPendingLocation()); 5950 ASSERT_EQ(Manifest::EXTERNAL_PREF, GetPendingLocation());
5889 ASSERT_FALSE(IsCrxInstalled()); 5951 ASSERT_FALSE(IsCrxInstalled());
5890 5952
5891 // Another request from sync should be ignorred. 5953 // Another request from sync should be ignored.
5892 EXPECT_FALSE(AddPendingSyncInstall()); 5954 EXPECT_FALSE(AddPendingSyncInstall());
5893 ASSERT_EQ(Manifest::EXTERNAL_PREF, GetPendingLocation()); 5955 ASSERT_EQ(Manifest::EXTERNAL_PREF, GetPendingLocation());
5894 ASSERT_FALSE(IsCrxInstalled()); 5956 ASSERT_FALSE(IsCrxInstalled());
5895 5957
5896 WaitForCrxInstall(crx_path_, INSTALL_NEW); 5958 WaitForCrxInstall(crx_path_, INSTALL_NEW);
5897 ASSERT_TRUE(IsCrxInstalled()); 5959 ASSERT_TRUE(IsCrxInstalled());
5898 } 5960 }
5899 5961
5900 // Test that an install of an external CRX from an update overrides 5962 // Test that an install of an external CRX from an update overrides
5901 // an install of the same extension from sync. 5963 // an install of the same extension from sync.
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
5968 service_->CheckForExternalUpdates(); 6030 service_->CheckForExternalUpdates();
5969 loop_.RunUntilIdle(); 6031 loop_.RunUntilIdle();
5970 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); 6032 EXPECT_FALSE(extensions::HasExternalInstallError(service_));
5971 6033
5972 // A hosted app, installed externally. 6034 // A hosted app, installed externally.
5973 // This should NOT trigger an alert. 6035 // This should NOT trigger an alert.
5974 provider->UpdateOrAddExtension(hosted_app, "1.0.0.0", 6036 provider->UpdateOrAddExtension(hosted_app, "1.0.0.0",
5975 data_dir_.AppendASCII("hosted_app.crx")); 6037 data_dir_.AppendASCII("hosted_app.crx"));
5976 6038
5977 service_->CheckForExternalUpdates(); 6039 service_->CheckForExternalUpdates();
5978 loop_.RunUntilIdle(); 6040 content::WindowedNotificationObserver(
6041 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
6042 content::NotificationService::AllSources()).Wait();
5979 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); 6043 EXPECT_FALSE(extensions::HasExternalInstallError(service_));
5980 6044
5981 // Another normal extension, but installed externally. 6045 // Another normal extension, but installed externally.
5982 // This SHOULD trigger an alert. 6046 // This SHOULD trigger an alert.
5983 provider->UpdateOrAddExtension(page_action, "1.0.0.0", 6047 provider->UpdateOrAddExtension(page_action, "1.0.0.0",
5984 data_dir_.AppendASCII("page_action.crx")); 6048 data_dir_.AppendASCII("page_action.crx"));
5985 6049
5986 service_->CheckForExternalUpdates(); 6050 service_->CheckForExternalUpdates();
5987 loop_.RunUntilIdle(); 6051 content::WindowedNotificationObserver(
6052 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
6053 content::NotificationService::AllSources()).Wait();
5988 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); 6054 EXPECT_TRUE(extensions::HasExternalInstallError(service_));
5989 } 6055 }
5990 6056
5991 // Test that external extensions are initially disabled, and that enabling 6057 // Test that external extensions are initially disabled, and that enabling
5992 // them clears the prompt. 6058 // them clears the prompt.
5993 TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) { 6059 TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) {
5994 FeatureSwitch::ScopedOverride prompt( 6060 FeatureSwitch::ScopedOverride prompt(
5995 FeatureSwitch::prompt_for_external_extensions(), true); 6061 FeatureSwitch::prompt_for_external_extensions(), true);
5996 6062
5997 InitializeEmptyExtensionService(); 6063 InitializeEmptyExtensionService();
5998 MockExtensionProvider* provider = 6064 MockExtensionProvider* provider =
5999 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); 6065 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF);
6000 AddMockExternalProvider(provider); 6066 AddMockExternalProvider(provider);
6001 6067
6002 provider->UpdateOrAddExtension(page_action, "1.0.0.0", 6068 provider->UpdateOrAddExtension(page_action, "1.0.0.0",
6003 data_dir_.AppendASCII("page_action.crx")); 6069 data_dir_.AppendASCII("page_action.crx"));
6004 6070
6005 service_->CheckForExternalUpdates(); 6071 service_->CheckForExternalUpdates();
6006 loop_.RunUntilIdle(); 6072 content::WindowedNotificationObserver(
6073 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
6074 content::NotificationService::AllSources()).Wait();
6007 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); 6075 EXPECT_TRUE(extensions::HasExternalInstallError(service_));
6008 EXPECT_FALSE(service_->IsExtensionEnabled(page_action)); 6076 EXPECT_FALSE(service_->IsExtensionEnabled(page_action));
6009 6077
6010 const Extension* extension = 6078 const Extension* extension =
6011 service_->disabled_extensions()->GetByID(page_action); 6079 service_->disabled_extensions()->GetByID(page_action);
6012 EXPECT_TRUE(extension); 6080 EXPECT_TRUE(extension);
6013 EXPECT_EQ(page_action, extension->id()); 6081 EXPECT_EQ(page_action, extension->id());
6014 6082
6015 service_->EnableExtension(page_action); 6083 service_->EnableExtension(page_action);
6016 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); 6084 EXPECT_FALSE(extensions::HasExternalInstallError(service_));
(...skipping 11 matching lines...) Expand all
6028 AddMockExternalProvider(provider); 6096 AddMockExternalProvider(provider);
6029 6097
6030 provider->UpdateOrAddExtension(page_action, "1.0.0.0", 6098 provider->UpdateOrAddExtension(page_action, "1.0.0.0",
6031 data_dir_.AppendASCII("page_action.crx")); 6099 data_dir_.AppendASCII("page_action.crx"));
6032 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", 6100 provider->UpdateOrAddExtension(good_crx, "1.0.0.0",
6033 data_dir_.AppendASCII("good.crx")); 6101 data_dir_.AppendASCII("good.crx"));
6034 provider->UpdateOrAddExtension(theme_crx, "2.0", 6102 provider->UpdateOrAddExtension(theme_crx, "2.0",
6035 data_dir_.AppendASCII("theme.crx")); 6103 data_dir_.AppendASCII("theme.crx"));
6036 6104
6037 service_->CheckForExternalUpdates(); 6105 service_->CheckForExternalUpdates();
6038 loop_.RunUntilIdle(); 6106 int count = 3;
6107 content::WindowedNotificationObserver(
6108 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
6109 base::Bind(&WaitForCountNotificationsCallback, &count)).Wait();
6039 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); 6110 EXPECT_TRUE(extensions::HasExternalInstallError(service_));
6040 EXPECT_FALSE(service_->IsExtensionEnabled(page_action)); 6111 EXPECT_FALSE(service_->IsExtensionEnabled(page_action));
6041 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx)); 6112 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx));
6042 EXPECT_FALSE(service_->IsExtensionEnabled(theme_crx)); 6113 EXPECT_FALSE(service_->IsExtensionEnabled(theme_crx));
6043 6114
6044 service_->EnableExtension(page_action); 6115 service_->EnableExtension(page_action);
6045 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); 6116 EXPECT_TRUE(extensions::HasExternalInstallError(service_));
6046 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); 6117 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_));
6047 service_->EnableExtension(theme_crx); 6118 service_->EnableExtension(theme_crx);
6048 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); 6119 EXPECT_TRUE(extensions::HasExternalInstallError(service_));
(...skipping 17 matching lines...) Expand all
6066 PackCRX(data_dir_.AppendASCII("update_from_webstore"), 6137 PackCRX(data_dir_.AppendASCII("update_from_webstore"),
6067 data_dir_.AppendASCII("update_from_webstore.pem"), 6138 data_dir_.AppendASCII("update_from_webstore.pem"),
6068 crx_path); 6139 crx_path);
6069 6140
6070 MockExtensionProvider* provider = 6141 MockExtensionProvider* provider =
6071 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); 6142 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF);
6072 AddMockExternalProvider(provider); 6143 AddMockExternalProvider(provider);
6073 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); 6144 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path);
6074 6145
6075 service_->CheckForExternalUpdates(); 6146 service_->CheckForExternalUpdates();
6076 loop_.RunUntilIdle(); 6147 content::WindowedNotificationObserver(
6148 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
6149 content::NotificationService::AllSources()).Wait();
6077 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); 6150 EXPECT_TRUE(extensions::HasExternalInstallError(service_));
6078 EXPECT_TRUE(extensions::HasExternalInstallBubble(service_)); 6151 EXPECT_TRUE(extensions::HasExternalInstallBubble(service_));
6079 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); 6152 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore));
6080 } 6153 }
6081 6154
6082 // Test that there is no bubble for external extensions if the profile is new. 6155 // Test that there is no bubble for external extensions if the profile is new.
6083 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreNewProfile) { 6156 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreNewProfile) {
6084 FeatureSwitch::ScopedOverride prompt( 6157 FeatureSwitch::ScopedOverride prompt(
6085 FeatureSwitch::prompt_for_external_extensions(), true); 6158 FeatureSwitch::prompt_for_external_extensions(), true);
6086 6159
6087 InitializeEmptyExtensionService(); 6160 InitializeEmptyExtensionService();
6088 6161
6089 base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx"); 6162 base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx");
6090 PackCRX(data_dir_.AppendASCII("update_from_webstore"), 6163 PackCRX(data_dir_.AppendASCII("update_from_webstore"),
6091 data_dir_.AppendASCII("update_from_webstore.pem"), 6164 data_dir_.AppendASCII("update_from_webstore.pem"),
6092 crx_path); 6165 crx_path);
6093 6166
6094 MockExtensionProvider* provider = 6167 MockExtensionProvider* provider =
6095 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); 6168 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF);
6096 AddMockExternalProvider(provider); 6169 AddMockExternalProvider(provider);
6097 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); 6170 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path);
6098 6171
6099 service_->CheckForExternalUpdates(); 6172 service_->CheckForExternalUpdates();
6100 loop_.RunUntilIdle(); 6173 content::WindowedNotificationObserver(
6174 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
6175 content::NotificationService::AllSources()).Wait();
6101 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); 6176 EXPECT_TRUE(extensions::HasExternalInstallError(service_));
6102 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); 6177 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_));
6103 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); 6178 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore));
6104 } 6179 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698