| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <algorithm> | 5 #include <algorithm> |
| 6 #include <set> | 6 #include <set> |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/at_exit.h" | 9 #include "base/at_exit.h" |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 463 public: | 463 public: |
| 464 ExtensionServiceTest() | 464 ExtensionServiceTest() |
| 465 : unloaded_reason_(UnloadedExtensionInfo::REASON_UNDEFINED), | 465 : unloaded_reason_(UnloadedExtensionInfo::REASON_UNDEFINED), |
| 466 installed_(NULL), | 466 installed_(NULL), |
| 467 was_update_(false), | 467 was_update_(false), |
| 468 override_external_install_prompt_( | 468 override_external_install_prompt_( |
| 469 FeatureSwitch::prompt_for_external_extensions(), | 469 FeatureSwitch::prompt_for_external_extensions(), |
| 470 false), | 470 false), |
| 471 expected_extensions_count_(0) { | 471 expected_extensions_count_(0) { |
| 472 registrar_.Add(this, | 472 registrar_.Add(this, |
| 473 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, | 473 extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, |
| 474 content::NotificationService::AllSources()); | |
| 475 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, | |
| 476 content::NotificationService::AllSources()); | 474 content::NotificationService::AllSources()); |
| 477 registrar_.Add(this, | 475 registrar_.Add(this, |
| 478 chrome::NOTIFICATION_EXTENSION_WILL_BE_INSTALLED_DEPRECATED, | 476 extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, |
| 479 content::NotificationService::AllSources()); | 477 content::NotificationService::AllSources()); |
| 478 registrar_.Add( |
| 479 this, |
| 480 extensions::NOTIFICATION_EXTENSION_WILL_BE_INSTALLED_DEPRECATED, |
| 481 content::NotificationService::AllSources()); |
| 480 } | 482 } |
| 481 | 483 |
| 482 virtual void Observe(int type, | 484 virtual void Observe(int type, |
| 483 const content::NotificationSource& source, | 485 const content::NotificationSource& source, |
| 484 const content::NotificationDetails& details) OVERRIDE { | 486 const content::NotificationDetails& details) OVERRIDE { |
| 485 switch (type) { | 487 switch (type) { |
| 486 case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: { | 488 case extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: { |
| 487 const Extension* extension = | 489 const Extension* extension = |
| 488 content::Details<const Extension>(details).ptr(); | 490 content::Details<const Extension>(details).ptr(); |
| 489 loaded_.push_back(make_scoped_refptr(extension)); | 491 loaded_.push_back(make_scoped_refptr(extension)); |
| 490 // The tests rely on the errors being in a certain order, which can vary | 492 // The tests rely on the errors being in a certain order, which can vary |
| 491 // depending on how filesystem iteration works. | 493 // depending on how filesystem iteration works. |
| 492 std::stable_sort(loaded_.begin(), loaded_.end(), ExtensionsOrder()); | 494 std::stable_sort(loaded_.begin(), loaded_.end(), ExtensionsOrder()); |
| 493 break; | 495 break; |
| 494 } | 496 } |
| 495 | 497 |
| 496 case chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: { | 498 case extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: { |
| 497 UnloadedExtensionInfo* unloaded_info = | 499 UnloadedExtensionInfo* unloaded_info = |
| 498 content::Details<UnloadedExtensionInfo>(details).ptr(); | 500 content::Details<UnloadedExtensionInfo>(details).ptr(); |
| 499 const Extension* e = unloaded_info->extension; | 501 const Extension* e = unloaded_info->extension; |
| 500 unloaded_id_ = e->id(); | 502 unloaded_id_ = e->id(); |
| 501 unloaded_reason_ = unloaded_info->reason; | 503 unloaded_reason_ = unloaded_info->reason; |
| 502 extensions::ExtensionList::iterator i = | 504 extensions::ExtensionList::iterator i = |
| 503 std::find(loaded_.begin(), loaded_.end(), e); | 505 std::find(loaded_.begin(), loaded_.end(), e); |
| 504 // TODO(erikkay) fix so this can be an assert. Right now the tests | 506 // TODO(erikkay) fix so this can be an assert. Right now the tests |
| 505 // are manually calling clear() on loaded_, so this isn't doable. | 507 // are manually calling clear() on loaded_, so this isn't doable. |
| 506 if (i == loaded_.end()) | 508 if (i == loaded_.end()) |
| 507 return; | 509 return; |
| 508 loaded_.erase(i); | 510 loaded_.erase(i); |
| 509 break; | 511 break; |
| 510 } | 512 } |
| 511 case chrome::NOTIFICATION_EXTENSION_WILL_BE_INSTALLED_DEPRECATED: { | 513 case extensions::NOTIFICATION_EXTENSION_WILL_BE_INSTALLED_DEPRECATED: { |
| 512 const extensions::InstalledExtensionInfo* installed_info = | 514 const extensions::InstalledExtensionInfo* installed_info = |
| 513 content::Details<const extensions::InstalledExtensionInfo>(details) | 515 content::Details<const extensions::InstalledExtensionInfo>(details) |
| 514 .ptr(); | 516 .ptr(); |
| 515 installed_ = installed_info->extension; | 517 installed_ = installed_info->extension; |
| 516 was_update_ = installed_info->is_update; | 518 was_update_ = installed_info->is_update; |
| 517 old_name_ = installed_info->old_name; | 519 old_name_ = installed_info->old_name; |
| 518 break; | 520 break; |
| 519 } | 521 } |
| 520 | 522 |
| 521 default: | 523 default: |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 658 Manifest::Location install_location, | 660 Manifest::Location install_location, |
| 659 InstallState install_state) { | 661 InstallState install_state) { |
| 660 EXPECT_TRUE(base::PathExists(crx_path)) | 662 EXPECT_TRUE(base::PathExists(crx_path)) |
| 661 << "Path does not exist: "<< crx_path.value().c_str(); | 663 << "Path does not exist: "<< crx_path.value().c_str(); |
| 662 // no client (silent install) | 664 // no client (silent install) |
| 663 scoped_refptr<CrxInstaller> installer( | 665 scoped_refptr<CrxInstaller> installer( |
| 664 CrxInstaller::CreateSilent(service())); | 666 CrxInstaller::CreateSilent(service())); |
| 665 installer->set_install_source(install_location); | 667 installer->set_install_source(install_location); |
| 666 | 668 |
| 667 content::WindowedNotificationObserver observer( | 669 content::WindowedNotificationObserver observer( |
| 668 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 670 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 669 content::NotificationService::AllSources()); | 671 content::NotificationService::AllSources()); |
| 670 installer->InstallCrx(crx_path); | 672 installer->InstallCrx(crx_path); |
| 671 observer.Wait(); | 673 observer.Wait(); |
| 672 | 674 |
| 673 return VerifyCrxInstall(crx_path, install_state); | 675 return VerifyCrxInstall(crx_path, install_state); |
| 674 } | 676 } |
| 675 | 677 |
| 676 // Verifies the result of a CRX installation. Used by InstallCRX. Set the | 678 // Verifies the result of a CRX installation. Used by InstallCRX. Set the |
| 677 // |install_state| to INSTALL_FAILED if the installation is expected to fail. | 679 // |install_state| to INSTALL_FAILED if the installation is expected to fail. |
| 678 // Returns an Extension pointer if the install succeeded, NULL otherwise. | 680 // Returns an Extension pointer if the install succeeded, NULL otherwise. |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 784 ASSERT_TRUE(base::CopyFile(in_path, path)); | 786 ASSERT_TRUE(base::CopyFile(in_path, path)); |
| 785 | 787 |
| 786 int previous_enabled_extension_count = | 788 int previous_enabled_extension_count = |
| 787 registry()->enabled_extensions().size(); | 789 registry()->enabled_extensions().size(); |
| 788 int previous_installed_extension_count = | 790 int previous_installed_extension_count = |
| 789 previous_enabled_extension_count + | 791 previous_enabled_extension_count + |
| 790 registry()->disabled_extensions().size(); | 792 registry()->disabled_extensions().size(); |
| 791 | 793 |
| 792 extensions::CrxInstaller* installer = NULL; | 794 extensions::CrxInstaller* installer = NULL; |
| 793 content::WindowedNotificationObserver observer( | 795 content::WindowedNotificationObserver observer( |
| 794 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 796 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 795 base::Bind(&IsCrxInstallerDone, &installer)); | 797 base::Bind(&IsCrxInstallerDone, &installer)); |
| 796 service()->UpdateExtension(id, path, true, &installer); | 798 service()->UpdateExtension(id, path, true, &installer); |
| 797 | 799 |
| 798 if (installer) | 800 if (installer) |
| 799 observer.Wait(); | 801 observer.Wait(); |
| 800 else | 802 else |
| 801 base::RunLoop().RunUntilIdle(); | 803 base::RunLoop().RunUntilIdle(); |
| 802 | 804 |
| 803 std::vector<base::string16> errors = GetErrors(); | 805 std::vector<base::string16> errors = GetErrors(); |
| 804 int error_count = errors.size(); | 806 int error_count = errors.size(); |
| (...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1098 void InstallCRXInternal(const base::FilePath& crx_path, int creation_flags) { | 1100 void InstallCRXInternal(const base::FilePath& crx_path, int creation_flags) { |
| 1099 ASSERT_TRUE(base::PathExists(crx_path)) | 1101 ASSERT_TRUE(base::PathExists(crx_path)) |
| 1100 << "Path does not exist: "<< crx_path.value().c_str(); | 1102 << "Path does not exist: "<< crx_path.value().c_str(); |
| 1101 scoped_refptr<CrxInstaller> installer( | 1103 scoped_refptr<CrxInstaller> installer( |
| 1102 CrxInstaller::CreateSilent(service())); | 1104 CrxInstaller::CreateSilent(service())); |
| 1103 installer->set_creation_flags(creation_flags); | 1105 installer->set_creation_flags(creation_flags); |
| 1104 if (!(creation_flags & Extension::WAS_INSTALLED_BY_DEFAULT)) | 1106 if (!(creation_flags & Extension::WAS_INSTALLED_BY_DEFAULT)) |
| 1105 installer->set_allow_silent_install(true); | 1107 installer->set_allow_silent_install(true); |
| 1106 | 1108 |
| 1107 content::WindowedNotificationObserver observer( | 1109 content::WindowedNotificationObserver observer( |
| 1108 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 1110 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 1109 content::Source<extensions::CrxInstaller>(installer)); | 1111 content::Source<extensions::CrxInstaller>(installer)); |
| 1110 | 1112 |
| 1111 installer->InstallCrx(crx_path); | 1113 installer->InstallCrx(crx_path); |
| 1112 | 1114 |
| 1113 observer.Wait(); | 1115 observer.Wait(); |
| 1114 } | 1116 } |
| 1115 | 1117 |
| 1116 size_t expected_extensions_count_; | 1118 size_t expected_extensions_count_; |
| 1117 content::NotificationRegistrar registrar_; | 1119 content::NotificationRegistrar registrar_; |
| 1118 }; | 1120 }; |
| (...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1480 const char kPrefFromBookmark[] = "from_bookmark"; | 1482 const char kPrefFromBookmark[] = "from_bookmark"; |
| 1481 | 1483 |
| 1482 InitializeEmptyExtensionService(); | 1484 InitializeEmptyExtensionService(); |
| 1483 | 1485 |
| 1484 base::FilePath path = data_dir().AppendASCII("good.crx"); | 1486 base::FilePath path = data_dir().AppendASCII("good.crx"); |
| 1485 service()->set_extensions_enabled(true); | 1487 service()->set_extensions_enabled(true); |
| 1486 | 1488 |
| 1487 // Register and install an external extension. | 1489 // Register and install an external extension. |
| 1488 Version version("1.0.0.0"); | 1490 Version version("1.0.0.0"); |
| 1489 content::WindowedNotificationObserver observer( | 1491 content::WindowedNotificationObserver observer( |
| 1490 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 1492 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 1491 content::NotificationService::AllSources()); | 1493 content::NotificationService::AllSources()); |
| 1492 if (service()->OnExternalExtensionFileFound(good_crx, | 1494 if (service()->OnExternalExtensionFileFound(good_crx, |
| 1493 &version, | 1495 &version, |
| 1494 path, | 1496 path, |
| 1495 Manifest::EXTERNAL_PREF, | 1497 Manifest::EXTERNAL_PREF, |
| 1496 Extension::FROM_BOOKMARK, | 1498 Extension::FROM_BOOKMARK, |
| 1497 false /* mark_acknowledged */)) { | 1499 false /* mark_acknowledged */)) { |
| 1498 observer.Wait(); | 1500 observer.Wait(); |
| 1499 } | 1501 } |
| 1500 | 1502 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1515 // Test the handling of Extension::EXTERNAL_EXTENSION_UNINSTALLED | 1517 // Test the handling of Extension::EXTERNAL_EXTENSION_UNINSTALLED |
| 1516 TEST_F(ExtensionServiceTest, UninstallingExternalExtensions) { | 1518 TEST_F(ExtensionServiceTest, UninstallingExternalExtensions) { |
| 1517 InitializeEmptyExtensionService(); | 1519 InitializeEmptyExtensionService(); |
| 1518 | 1520 |
| 1519 base::FilePath path = data_dir().AppendASCII("good.crx"); | 1521 base::FilePath path = data_dir().AppendASCII("good.crx"); |
| 1520 service()->set_extensions_enabled(true); | 1522 service()->set_extensions_enabled(true); |
| 1521 | 1523 |
| 1522 // Install an external extension. | 1524 // Install an external extension. |
| 1523 Version version("1.0.0.0"); | 1525 Version version("1.0.0.0"); |
| 1524 content::WindowedNotificationObserver observer( | 1526 content::WindowedNotificationObserver observer( |
| 1525 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 1527 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 1526 content::NotificationService::AllSources()); | 1528 content::NotificationService::AllSources()); |
| 1527 if (service()->OnExternalExtensionFileFound(good_crx, | 1529 if (service()->OnExternalExtensionFileFound(good_crx, |
| 1528 &version, | 1530 &version, |
| 1529 path, | 1531 path, |
| 1530 Manifest::EXTERNAL_PREF, | 1532 Manifest::EXTERNAL_PREF, |
| 1531 Extension::NO_FLAGS, | 1533 Extension::NO_FLAGS, |
| 1532 false)) { | 1534 false)) { |
| 1533 observer.Wait(); | 1535 observer.Wait(); |
| 1534 } | 1536 } |
| 1535 | 1537 |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1613 | 1615 |
| 1614 Version version("1.0.0.0"); | 1616 Version version("1.0.0.0"); |
| 1615 | 1617 |
| 1616 const std::string wrong_id = all_zero; | 1618 const std::string wrong_id = all_zero; |
| 1617 const std::string correct_id = good_crx; | 1619 const std::string correct_id = good_crx; |
| 1618 ASSERT_NE(correct_id, wrong_id); | 1620 ASSERT_NE(correct_id, wrong_id); |
| 1619 | 1621 |
| 1620 // Install an external extension with an ID from the external | 1622 // Install an external extension with an ID from the external |
| 1621 // source that is not equal to the ID in the extension manifest. | 1623 // source that is not equal to the ID in the extension manifest. |
| 1622 content::WindowedNotificationObserver observer( | 1624 content::WindowedNotificationObserver observer( |
| 1623 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 1625 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 1624 content::NotificationService::AllSources()); | 1626 content::NotificationService::AllSources()); |
| 1625 service()->OnExternalExtensionFileFound(wrong_id, | 1627 service()->OnExternalExtensionFileFound(wrong_id, |
| 1626 &version, | 1628 &version, |
| 1627 path, | 1629 path, |
| 1628 Manifest::EXTERNAL_PREF, | 1630 Manifest::EXTERNAL_PREF, |
| 1629 Extension::NO_FLAGS, | 1631 Extension::NO_FLAGS, |
| 1630 false); | 1632 false); |
| 1631 | 1633 |
| 1632 observer.Wait(); | 1634 observer.Wait(); |
| 1633 ASSERT_FALSE(service()->GetExtensionById(good_crx, false)); | 1635 ASSERT_FALSE(service()->GetExtensionById(good_crx, false)); |
| 1634 | 1636 |
| 1635 // Try again with the right ID. Expect success. | 1637 // Try again with the right ID. Expect success. |
| 1636 content::WindowedNotificationObserver observer2( | 1638 content::WindowedNotificationObserver observer2( |
| 1637 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 1639 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 1638 content::NotificationService::AllSources()); | 1640 content::NotificationService::AllSources()); |
| 1639 if (service()->OnExternalExtensionFileFound(correct_id, | 1641 if (service()->OnExternalExtensionFileFound(correct_id, |
| 1640 &version, | 1642 &version, |
| 1641 path, | 1643 path, |
| 1642 Manifest::EXTERNAL_PREF, | 1644 Manifest::EXTERNAL_PREF, |
| 1643 Extension::NO_FLAGS, | 1645 Extension::NO_FLAGS, |
| 1644 false)) { | 1646 false)) { |
| 1645 observer2.Wait(); | 1647 observer2.Wait(); |
| 1646 } | 1648 } |
| 1647 ASSERT_TRUE(service()->GetExtensionById(good_crx, false)); | 1649 ASSERT_TRUE(service()->GetExtensionById(good_crx, false)); |
| 1648 } | 1650 } |
| 1649 | 1651 |
| 1650 // Test that external extensions with incorrect versions are not installed. | 1652 // Test that external extensions with incorrect versions are not installed. |
| 1651 TEST_F(ExtensionServiceTest, FailOnWrongVersion) { | 1653 TEST_F(ExtensionServiceTest, FailOnWrongVersion) { |
| 1652 InitializeEmptyExtensionService(); | 1654 InitializeEmptyExtensionService(); |
| 1653 base::FilePath path = data_dir().AppendASCII("good.crx"); | 1655 base::FilePath path = data_dir().AppendASCII("good.crx"); |
| 1654 service()->set_extensions_enabled(true); | 1656 service()->set_extensions_enabled(true); |
| 1655 | 1657 |
| 1656 // Install an external extension with a version from the external | 1658 // Install an external extension with a version from the external |
| 1657 // source that is not equal to the version in the extension manifest. | 1659 // source that is not equal to the version in the extension manifest. |
| 1658 Version wrong_version("1.2.3.4"); | 1660 Version wrong_version("1.2.3.4"); |
| 1659 content::WindowedNotificationObserver observer( | 1661 content::WindowedNotificationObserver observer( |
| 1660 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 1662 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 1661 content::NotificationService::AllSources()); | 1663 content::NotificationService::AllSources()); |
| 1662 service()->OnExternalExtensionFileFound(good_crx, | 1664 service()->OnExternalExtensionFileFound(good_crx, |
| 1663 &wrong_version, | 1665 &wrong_version, |
| 1664 path, | 1666 path, |
| 1665 Manifest::EXTERNAL_PREF, | 1667 Manifest::EXTERNAL_PREF, |
| 1666 Extension::NO_FLAGS, | 1668 Extension::NO_FLAGS, |
| 1667 false); | 1669 false); |
| 1668 | 1670 |
| 1669 observer.Wait(); | 1671 observer.Wait(); |
| 1670 ASSERT_FALSE(service()->GetExtensionById(good_crx, false)); | 1672 ASSERT_FALSE(service()->GetExtensionById(good_crx, false)); |
| 1671 | 1673 |
| 1672 // Try again with the right version. Expect success. | 1674 // Try again with the right version. Expect success. |
| 1673 service()->pending_extension_manager()->Remove(good_crx); | 1675 service()->pending_extension_manager()->Remove(good_crx); |
| 1674 Version correct_version("1.0.0.0"); | 1676 Version correct_version("1.0.0.0"); |
| 1675 content::WindowedNotificationObserver observer2( | 1677 content::WindowedNotificationObserver observer2( |
| 1676 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 1678 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 1677 content::NotificationService::AllSources()); | 1679 content::NotificationService::AllSources()); |
| 1678 if (service()->OnExternalExtensionFileFound(good_crx, | 1680 if (service()->OnExternalExtensionFileFound(good_crx, |
| 1679 &correct_version, | 1681 &correct_version, |
| 1680 path, | 1682 path, |
| 1681 Manifest::EXTERNAL_PREF, | 1683 Manifest::EXTERNAL_PREF, |
| 1682 Extension::NO_FLAGS, | 1684 Extension::NO_FLAGS, |
| 1683 false)) { | 1685 false)) { |
| 1684 observer2.Wait(); | 1686 observer2.Wait(); |
| 1685 } | 1687 } |
| 1686 ASSERT_TRUE(service()->GetExtensionById(good_crx, false)); | 1688 ASSERT_TRUE(service()->GetExtensionById(good_crx, false)); |
| (...skipping 1988 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3675 // Have policy force-install an extension. | 3677 // Have policy force-install an extension. |
| 3676 MockExtensionProvider* provider = | 3678 MockExtensionProvider* provider = |
| 3677 new MockExtensionProvider(service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); | 3679 new MockExtensionProvider(service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); |
| 3678 AddMockExternalProvider(provider); | 3680 AddMockExternalProvider(provider); |
| 3679 provider->UpdateOrAddExtension( | 3681 provider->UpdateOrAddExtension( |
| 3680 good_crx, "1.0.0.0", data_dir().AppendASCII("good.crx")); | 3682 good_crx, "1.0.0.0", data_dir().AppendASCII("good.crx")); |
| 3681 | 3683 |
| 3682 // Reloading extensions should find our externally registered extension | 3684 // Reloading extensions should find our externally registered extension |
| 3683 // and install it. | 3685 // and install it. |
| 3684 content::WindowedNotificationObserver observer( | 3686 content::WindowedNotificationObserver observer( |
| 3685 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 3687 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 3686 content::NotificationService::AllSources()); | 3688 content::NotificationService::AllSources()); |
| 3687 service()->CheckForExternalUpdates(); | 3689 service()->CheckForExternalUpdates(); |
| 3688 observer.Wait(); | 3690 observer.Wait(); |
| 3689 | 3691 |
| 3690 // Extension should be installed despite blacklist. | 3692 // Extension should be installed despite blacklist. |
| 3691 ASSERT_EQ(1u, registry()->enabled_extensions().size()); | 3693 ASSERT_EQ(1u, registry()->enabled_extensions().size()); |
| 3692 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); | 3694 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); |
| 3693 | 3695 |
| 3694 // Blacklist update should not uninstall the extension. | 3696 // Blacklist update should not uninstall the extension. |
| 3695 { | 3697 { |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3871 MockExtensionProvider* provider = new MockExtensionProvider( | 3873 MockExtensionProvider* provider = new MockExtensionProvider( |
| 3872 service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); | 3874 service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); |
| 3873 AddMockExternalProvider(provider); | 3875 AddMockExternalProvider(provider); |
| 3874 provider->UpdateOrAddExtension( | 3876 provider->UpdateOrAddExtension( |
| 3875 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); | 3877 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); |
| 3876 } | 3878 } |
| 3877 | 3879 |
| 3878 // Providers are set up. Let them run. | 3880 // Providers are set up. Let them run. |
| 3879 int count = 2; | 3881 int count = 2; |
| 3880 content::WindowedNotificationObserver observer( | 3882 content::WindowedNotificationObserver observer( |
| 3881 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 3883 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 3882 base::Bind(&WaitForCountNotificationsCallback, &count)); | 3884 base::Bind(&WaitForCountNotificationsCallback, &count)); |
| 3883 service()->CheckForExternalUpdates(); | 3885 service()->CheckForExternalUpdates(); |
| 3884 | 3886 |
| 3885 observer.Wait(); | 3887 observer.Wait(); |
| 3886 | 3888 |
| 3887 ASSERT_EQ(2u, registry()->enabled_extensions().size()); | 3889 ASSERT_EQ(2u, registry()->enabled_extensions().size()); |
| 3888 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); | 3890 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); |
| 3889 EXPECT_TRUE(service()->GetExtensionById(page_action, false)); | 3891 EXPECT_TRUE(service()->GetExtensionById(page_action, false)); |
| 3890 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); | 3892 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); |
| 3891 ASSERT_TRUE(!prefs->IsExternalExtensionAcknowledged(good_crx)); | 3893 ASSERT_TRUE(!prefs->IsExternalExtensionAcknowledged(good_crx)); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 3913 new extensions::ExternalTestingLoader(json_data, data_dir()), | 3915 new extensions::ExternalTestingLoader(json_data, data_dir()), |
| 3914 Manifest::INTERNAL, | 3916 Manifest::INTERNAL, |
| 3915 Manifest::INVALID_LOCATION, | 3917 Manifest::INVALID_LOCATION, |
| 3916 Extension::FROM_WEBSTORE | Extension::WAS_INSTALLED_BY_DEFAULT); | 3918 Extension::FROM_WEBSTORE | Extension::WAS_INSTALLED_BY_DEFAULT); |
| 3917 | 3919 |
| 3918 AddMockExternalProvider(provider); | 3920 AddMockExternalProvider(provider); |
| 3919 } | 3921 } |
| 3920 | 3922 |
| 3921 ASSERT_EQ(0u, registry()->enabled_extensions().size()); | 3923 ASSERT_EQ(0u, registry()->enabled_extensions().size()); |
| 3922 content::WindowedNotificationObserver observer( | 3924 content::WindowedNotificationObserver observer( |
| 3923 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 3925 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 3924 content::NotificationService::AllSources()); | 3926 content::NotificationService::AllSources()); |
| 3925 service()->CheckForExternalUpdates(); | 3927 service()->CheckForExternalUpdates(); |
| 3926 observer.Wait(); | 3928 observer.Wait(); |
| 3927 | 3929 |
| 3928 ASSERT_EQ(1u, registry()->enabled_extensions().size()); | 3930 ASSERT_EQ(1u, registry()->enabled_extensions().size()); |
| 3929 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); | 3931 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); |
| 3930 const Extension* extension = service()->GetExtensionById(good_crx, false); | 3932 const Extension* extension = service()->GetExtensionById(good_crx, false); |
| 3931 EXPECT_TRUE(extension->from_webstore()); | 3933 EXPECT_TRUE(extension->from_webstore()); |
| 3932 EXPECT_TRUE(extension->was_installed_by_default()); | 3934 EXPECT_TRUE(extension->was_installed_by_default()); |
| 3933 } | 3935 } |
| (...skipping 667 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4601 | 4603 |
| 4602 // Register a test extension externally using the mock registry provider. | 4604 // Register a test extension externally using the mock registry provider. |
| 4603 base::FilePath source_path = data_dir().AppendASCII("good.crx"); | 4605 base::FilePath source_path = data_dir().AppendASCII("good.crx"); |
| 4604 | 4606 |
| 4605 // Add the extension. | 4607 // Add the extension. |
| 4606 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", source_path); | 4608 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", source_path); |
| 4607 | 4609 |
| 4608 // Reloading extensions should find our externally registered extension | 4610 // Reloading extensions should find our externally registered extension |
| 4609 // and install it. | 4611 // and install it. |
| 4610 content::WindowedNotificationObserver observer( | 4612 content::WindowedNotificationObserver observer( |
| 4611 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 4613 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 4612 content::NotificationService::AllSources()); | 4614 content::NotificationService::AllSources()); |
| 4613 service()->CheckForExternalUpdates(); | 4615 service()->CheckForExternalUpdates(); |
| 4614 observer.Wait(); | 4616 observer.Wait(); |
| 4615 | 4617 |
| 4616 ASSERT_EQ(0u, GetErrors().size()); | 4618 ASSERT_EQ(0u, GetErrors().size()); |
| 4617 ASSERT_EQ(1u, loaded_.size()); | 4619 ASSERT_EQ(1u, loaded_.size()); |
| 4618 ASSERT_EQ(location, loaded_[0]->location()); | 4620 ASSERT_EQ(location, loaded_[0]->location()); |
| 4619 ASSERT_EQ("1.0.0.0", loaded_[0]->version()->GetString()); | 4621 ASSERT_EQ("1.0.0.0", loaded_[0]->version()->GetString()); |
| 4620 ValidatePrefKeyCount(1); | 4622 ValidatePrefKeyCount(1); |
| 4621 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 4623 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
| 4622 ValidateIntegerPref(good_crx, "location", location); | 4624 ValidateIntegerPref(good_crx, "location", location); |
| 4623 | 4625 |
| 4624 // Reload extensions without changing anything. The extension should be | 4626 // Reload extensions without changing anything. The extension should be |
| 4625 // loaded again. | 4627 // loaded again. |
| 4626 loaded_.clear(); | 4628 loaded_.clear(); |
| 4627 service()->ReloadExtensionsForTest(); | 4629 service()->ReloadExtensionsForTest(); |
| 4628 base::RunLoop().RunUntilIdle(); | 4630 base::RunLoop().RunUntilIdle(); |
| 4629 ASSERT_EQ(0u, GetErrors().size()); | 4631 ASSERT_EQ(0u, GetErrors().size()); |
| 4630 ASSERT_EQ(1u, loaded_.size()); | 4632 ASSERT_EQ(1u, loaded_.size()); |
| 4631 ValidatePrefKeyCount(1); | 4633 ValidatePrefKeyCount(1); |
| 4632 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 4634 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
| 4633 ValidateIntegerPref(good_crx, "location", location); | 4635 ValidateIntegerPref(good_crx, "location", location); |
| 4634 | 4636 |
| 4635 // Now update the extension with a new version. We should get upgraded. | 4637 // Now update the extension with a new version. We should get upgraded. |
| 4636 source_path = source_path.DirName().AppendASCII("good2.crx"); | 4638 source_path = source_path.DirName().AppendASCII("good2.crx"); |
| 4637 provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path); | 4639 provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path); |
| 4638 | 4640 |
| 4639 loaded_.clear(); | 4641 loaded_.clear(); |
| 4640 content::WindowedNotificationObserver observer_2( | 4642 content::WindowedNotificationObserver observer_2( |
| 4641 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 4643 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 4642 content::NotificationService::AllSources()); | 4644 content::NotificationService::AllSources()); |
| 4643 service()->CheckForExternalUpdates(); | 4645 service()->CheckForExternalUpdates(); |
| 4644 observer_2.Wait(); | 4646 observer_2.Wait(); |
| 4645 ASSERT_EQ(0u, GetErrors().size()); | 4647 ASSERT_EQ(0u, GetErrors().size()); |
| 4646 ASSERT_EQ(1u, loaded_.size()); | 4648 ASSERT_EQ(1u, loaded_.size()); |
| 4647 ASSERT_EQ("1.0.0.1", loaded_[0]->version()->GetString()); | 4649 ASSERT_EQ("1.0.0.1", loaded_[0]->version()->GetString()); |
| 4648 ValidatePrefKeyCount(1); | 4650 ValidatePrefKeyCount(1); |
| 4649 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 4651 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
| 4650 ValidateIntegerPref(good_crx, "location", location); | 4652 ValidateIntegerPref(good_crx, "location", location); |
| 4651 | 4653 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 4674 ValidatePrefKeyCount(1); | 4676 ValidatePrefKeyCount(1); |
| 4675 ValidateIntegerPref(good_crx, "state", | 4677 ValidateIntegerPref(good_crx, "state", |
| 4676 Extension::EXTERNAL_EXTENSION_UNINSTALLED); | 4678 Extension::EXTERNAL_EXTENSION_UNINSTALLED); |
| 4677 ValidateIntegerPref(good_crx, "location", location); | 4679 ValidateIntegerPref(good_crx, "location", location); |
| 4678 | 4680 |
| 4679 // Now clear the preference and reinstall. | 4681 // Now clear the preference and reinstall. |
| 4680 SetPrefInteg(good_crx, "state", Extension::ENABLED); | 4682 SetPrefInteg(good_crx, "state", Extension::ENABLED); |
| 4681 | 4683 |
| 4682 loaded_.clear(); | 4684 loaded_.clear(); |
| 4683 content::WindowedNotificationObserver observer( | 4685 content::WindowedNotificationObserver observer( |
| 4684 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 4686 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 4685 content::NotificationService::AllSources()); | 4687 content::NotificationService::AllSources()); |
| 4686 service()->CheckForExternalUpdates(); | 4688 service()->CheckForExternalUpdates(); |
| 4687 observer.Wait(); | 4689 observer.Wait(); |
| 4688 ASSERT_EQ(1u, loaded_.size()); | 4690 ASSERT_EQ(1u, loaded_.size()); |
| 4689 } | 4691 } |
| 4690 ValidatePrefKeyCount(1); | 4692 ValidatePrefKeyCount(1); |
| 4691 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 4693 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
| 4692 ValidateIntegerPref(good_crx, "location", location); | 4694 ValidateIntegerPref(good_crx, "location", location); |
| 4693 | 4695 |
| 4694 if (GetManagementPolicy()->MustRemainEnabled(loaded_[0].get(), NULL)) { | 4696 if (GetManagementPolicy()->MustRemainEnabled(loaded_[0].get(), NULL)) { |
| 4695 EXPECT_EQ(2, provider->visit_count()); | 4697 EXPECT_EQ(2, provider->visit_count()); |
| 4696 } else { | 4698 } else { |
| 4697 // Now test an externally triggered uninstall (deleting the registry key or | 4699 // Now test an externally triggered uninstall (deleting the registry key or |
| 4698 // the pref entry). | 4700 // the pref entry). |
| 4699 provider->RemoveExtension(good_crx); | 4701 provider->RemoveExtension(good_crx); |
| 4700 | 4702 |
| 4701 loaded_.clear(); | 4703 loaded_.clear(); |
| 4702 service()->OnExternalProviderReady(provider); | 4704 service()->OnExternalProviderReady(provider); |
| 4703 base::RunLoop().RunUntilIdle(); | 4705 base::RunLoop().RunUntilIdle(); |
| 4704 ASSERT_EQ(0u, loaded_.size()); | 4706 ASSERT_EQ(0u, loaded_.size()); |
| 4705 ValidatePrefKeyCount(0); | 4707 ValidatePrefKeyCount(0); |
| 4706 | 4708 |
| 4707 // The extension should also be gone from the install directory. | 4709 // The extension should also be gone from the install directory. |
| 4708 ASSERT_FALSE(base::PathExists(install_path)); | 4710 ASSERT_FALSE(base::PathExists(install_path)); |
| 4709 | 4711 |
| 4710 // Now test the case where user uninstalls and then the extension is removed | 4712 // Now test the case where user uninstalls and then the extension is removed |
| 4711 // from the external provider. | 4713 // from the external provider. |
| 4712 content::WindowedNotificationObserver observer( | 4714 content::WindowedNotificationObserver observer( |
| 4713 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 4715 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 4714 content::NotificationService::AllSources()); | 4716 content::NotificationService::AllSources()); |
| 4715 provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path); | 4717 provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path); |
| 4716 service()->CheckForExternalUpdates(); | 4718 service()->CheckForExternalUpdates(); |
| 4717 observer.Wait(); | 4719 observer.Wait(); |
| 4718 | 4720 |
| 4719 ASSERT_EQ(1u, loaded_.size()); | 4721 ASSERT_EQ(1u, loaded_.size()); |
| 4720 ASSERT_EQ(0u, GetErrors().size()); | 4722 ASSERT_EQ(0u, GetErrors().size()); |
| 4721 | 4723 |
| 4722 // User uninstalls. | 4724 // User uninstalls. |
| 4723 loaded_.clear(); | 4725 loaded_.clear(); |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4856 EXPECT_EQ(0u, GetErrors().size()); | 4858 EXPECT_EQ(0u, GetErrors().size()); |
| 4857 EXPECT_EQ(0u, loaded_.size()); | 4859 EXPECT_EQ(0u, loaded_.size()); |
| 4858 | 4860 |
| 4859 // Register a test extension externally using the mock registry provider. | 4861 // Register a test extension externally using the mock registry provider. |
| 4860 base::FilePath source_path = data_dir().AppendASCII("good.crx"); | 4862 base::FilePath source_path = data_dir().AppendASCII("good.crx"); |
| 4861 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", source_path); | 4863 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", source_path); |
| 4862 | 4864 |
| 4863 // Two checks for external updates should find the extension, and install it | 4865 // Two checks for external updates should find the extension, and install it |
| 4864 // once. | 4866 // once. |
| 4865 content::WindowedNotificationObserver observer( | 4867 content::WindowedNotificationObserver observer( |
| 4866 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 4868 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 4867 content::NotificationService::AllSources()); | 4869 content::NotificationService::AllSources()); |
| 4868 provider->set_visit_count(0); | 4870 provider->set_visit_count(0); |
| 4869 service()->CheckForExternalUpdates(); | 4871 service()->CheckForExternalUpdates(); |
| 4870 service()->CheckForExternalUpdates(); | 4872 service()->CheckForExternalUpdates(); |
| 4871 observer.Wait(); | 4873 observer.Wait(); |
| 4872 EXPECT_EQ(2, provider->visit_count()); | 4874 EXPECT_EQ(2, provider->visit_count()); |
| 4873 ASSERT_EQ(0u, GetErrors().size()); | 4875 ASSERT_EQ(0u, GetErrors().size()); |
| 4874 ASSERT_EQ(1u, loaded_.size()); | 4876 ASSERT_EQ(1u, loaded_.size()); |
| 4875 ASSERT_EQ(Manifest::EXTERNAL_PREF, loaded_[0]->location()); | 4877 ASSERT_EQ(Manifest::EXTERNAL_PREF, loaded_[0]->location()); |
| 4876 ASSERT_EQ("1.0.0.0", loaded_[0]->version()->GetString()); | 4878 ASSERT_EQ("1.0.0.0", loaded_[0]->version()->GetString()); |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5104 EXPECT_EQ("My name is simple.", loaded_[0]->name()); | 5106 EXPECT_EQ("My name is simple.", loaded_[0]->name()); |
| 5105 | 5107 |
| 5106 // These are untouched by re-localization. | 5108 // These are untouched by re-localization. |
| 5107 EXPECT_EQ("My name is simple.", loaded_[1]->name()); | 5109 EXPECT_EQ("My name is simple.", loaded_[1]->name()); |
| 5108 EXPECT_EQ("no l10n", loaded_[2]->name()); | 5110 EXPECT_EQ("no l10n", loaded_[2]->name()); |
| 5109 } | 5111 } |
| 5110 | 5112 |
| 5111 class ExtensionsReadyRecorder : public content::NotificationObserver { | 5113 class ExtensionsReadyRecorder : public content::NotificationObserver { |
| 5112 public: | 5114 public: |
| 5113 ExtensionsReadyRecorder() : ready_(false) { | 5115 ExtensionsReadyRecorder() : ready_(false) { |
| 5114 registrar_.Add(this, chrome::NOTIFICATION_EXTENSIONS_READY, | 5116 registrar_.Add(this, |
| 5117 extensions::NOTIFICATION_EXTENSIONS_READY_DEPRECATED, |
| 5115 content::NotificationService::AllSources()); | 5118 content::NotificationService::AllSources()); |
| 5116 } | 5119 } |
| 5117 | 5120 |
| 5118 void set_ready(bool value) { ready_ = value; } | 5121 void set_ready(bool value) { ready_ = value; } |
| 5119 bool ready() { return ready_; } | 5122 bool ready() { return ready_; } |
| 5120 | 5123 |
| 5121 private: | 5124 private: |
| 5122 virtual void Observe(int type, | 5125 virtual void Observe(int type, |
| 5123 const content::NotificationSource& source, | 5126 const content::NotificationSource& source, |
| 5124 const content::NotificationDetails& details) OVERRIDE { | 5127 const content::NotificationDetails& details) OVERRIDE { |
| 5125 switch (type) { | 5128 switch (type) { |
| 5126 case chrome::NOTIFICATION_EXTENSIONS_READY: | 5129 case extensions::NOTIFICATION_EXTENSIONS_READY_DEPRECATED: |
| 5127 ready_ = true; | 5130 ready_ = true; |
| 5128 break; | 5131 break; |
| 5129 default: | 5132 default: |
| 5130 NOTREACHED(); | 5133 NOTREACHED(); |
| 5131 } | 5134 } |
| 5132 } | 5135 } |
| 5133 | 5136 |
| 5134 content::NotificationRegistrar registrar_; | 5137 content::NotificationRegistrar registrar_; |
| 5135 bool ready_; | 5138 bool ready_; |
| 5136 }; | 5139 }; |
| (...skipping 1109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6246 Manifest::GetHigherPriorityLocation(Manifest::EXTERNAL_PREF, | 6249 Manifest::GetHigherPriorityLocation(Manifest::EXTERNAL_PREF, |
| 6247 Manifest::INTERNAL)); | 6250 Manifest::INTERNAL)); |
| 6248 | 6251 |
| 6249 extensions::PendingExtensionManager* pending = | 6252 extensions::PendingExtensionManager* pending = |
| 6250 service()->pending_extension_manager(); | 6253 service()->pending_extension_manager(); |
| 6251 EXPECT_FALSE(pending->IsIdPending(kGoodId)); | 6254 EXPECT_FALSE(pending->IsIdPending(kGoodId)); |
| 6252 | 6255 |
| 6253 { | 6256 { |
| 6254 // Simulate an external source adding the extension as INTERNAL. | 6257 // Simulate an external source adding the extension as INTERNAL. |
| 6255 content::WindowedNotificationObserver observer( | 6258 content::WindowedNotificationObserver observer( |
| 6256 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6259 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6257 content::NotificationService::AllSources()); | 6260 content::NotificationService::AllSources()); |
| 6258 EXPECT_TRUE(service()->OnExternalExtensionFileFound(kGoodId, | 6261 EXPECT_TRUE(service()->OnExternalExtensionFileFound(kGoodId, |
| 6259 &older_version, | 6262 &older_version, |
| 6260 kInvalidPathToCrx, | 6263 kInvalidPathToCrx, |
| 6261 Manifest::INTERNAL, | 6264 Manifest::INTERNAL, |
| 6262 kCreationFlags, | 6265 kCreationFlags, |
| 6263 kDontMarkAcknowledged)); | 6266 kDontMarkAcknowledged)); |
| 6264 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 6267 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
| 6265 observer.Wait(); | 6268 observer.Wait(); |
| 6266 VerifyCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); | 6269 VerifyCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); |
| 6267 } | 6270 } |
| 6268 | 6271 |
| 6269 { | 6272 { |
| 6270 // Simulate an external source adding the extension as EXTERNAL_PREF. | 6273 // Simulate an external source adding the extension as EXTERNAL_PREF. |
| 6271 content::WindowedNotificationObserver observer( | 6274 content::WindowedNotificationObserver observer( |
| 6272 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6275 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6273 content::NotificationService::AllSources()); | 6276 content::NotificationService::AllSources()); |
| 6274 EXPECT_TRUE(service()->OnExternalExtensionFileFound(kGoodId, | 6277 EXPECT_TRUE(service()->OnExternalExtensionFileFound(kGoodId, |
| 6275 &older_version, | 6278 &older_version, |
| 6276 kInvalidPathToCrx, | 6279 kInvalidPathToCrx, |
| 6277 Manifest::EXTERNAL_PREF, | 6280 Manifest::EXTERNAL_PREF, |
| 6278 kCreationFlags, | 6281 kCreationFlags, |
| 6279 kDontMarkAcknowledged)); | 6282 kDontMarkAcknowledged)); |
| 6280 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 6283 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
| 6281 observer.Wait(); | 6284 observer.Wait(); |
| 6282 VerifyCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); | 6285 VerifyCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 6298 &older_version, | 6301 &older_version, |
| 6299 kInvalidPathToCrx, | 6302 kInvalidPathToCrx, |
| 6300 Manifest::INTERNAL, | 6303 Manifest::INTERNAL, |
| 6301 kCreationFlags, | 6304 kCreationFlags, |
| 6302 kDontMarkAcknowledged)); | 6305 kDontMarkAcknowledged)); |
| 6303 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 6306 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
| 6304 | 6307 |
| 6305 { | 6308 { |
| 6306 // Now the registry adds the extension. | 6309 // Now the registry adds the extension. |
| 6307 content::WindowedNotificationObserver observer( | 6310 content::WindowedNotificationObserver observer( |
| 6308 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6311 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6309 content::NotificationService::AllSources()); | 6312 content::NotificationService::AllSources()); |
| 6310 EXPECT_TRUE( | 6313 EXPECT_TRUE( |
| 6311 service()->OnExternalExtensionFileFound(kGoodId, | 6314 service()->OnExternalExtensionFileFound(kGoodId, |
| 6312 &older_version, | 6315 &older_version, |
| 6313 kInvalidPathToCrx, | 6316 kInvalidPathToCrx, |
| 6314 Manifest::EXTERNAL_REGISTRY, | 6317 Manifest::EXTERNAL_REGISTRY, |
| 6315 kCreationFlags, | 6318 kCreationFlags, |
| 6316 kDontMarkAcknowledged)); | 6319 kDontMarkAcknowledged)); |
| 6317 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 6320 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
| 6318 observer.Wait(); | 6321 observer.Wait(); |
| (...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6615 // Test that a pending request for installation of an external CRX from | 6618 // Test that a pending request for installation of an external CRX from |
| 6616 // an update URL overrides a pending request to install the same extension | 6619 // an update URL overrides a pending request to install the same extension |
| 6617 // from sync. | 6620 // from sync. |
| 6618 TEST_F(ExtensionSourcePriorityTest, PendingExternalFileOverSync) { | 6621 TEST_F(ExtensionSourcePriorityTest, PendingExternalFileOverSync) { |
| 6619 InitializeEmptyExtensionService(); | 6622 InitializeEmptyExtensionService(); |
| 6620 | 6623 |
| 6621 ASSERT_FALSE(IsCrxInstalled()); | 6624 ASSERT_FALSE(IsCrxInstalled()); |
| 6622 | 6625 |
| 6623 // Install pending extension from sync. | 6626 // Install pending extension from sync. |
| 6624 content::WindowedNotificationObserver observer( | 6627 content::WindowedNotificationObserver observer( |
| 6625 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6628 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6626 content::NotificationService::AllSources()); | 6629 content::NotificationService::AllSources()); |
| 6627 EXPECT_TRUE(AddPendingSyncInstall()); | 6630 EXPECT_TRUE(AddPendingSyncInstall()); |
| 6628 ASSERT_EQ(Manifest::INTERNAL, GetPendingLocation()); | 6631 ASSERT_EQ(Manifest::INTERNAL, GetPendingLocation()); |
| 6629 EXPECT_TRUE(GetPendingIsFromSync()); | 6632 EXPECT_TRUE(GetPendingIsFromSync()); |
| 6630 ASSERT_FALSE(IsCrxInstalled()); | 6633 ASSERT_FALSE(IsCrxInstalled()); |
| 6631 | 6634 |
| 6632 // Install pending as external prefs json would. | 6635 // Install pending as external prefs json would. |
| 6633 AddPendingExternalPrefFileInstall(); | 6636 AddPendingExternalPrefFileInstall(); |
| 6634 ASSERT_EQ(Manifest::EXTERNAL_PREF, GetPendingLocation()); | 6637 ASSERT_EQ(Manifest::EXTERNAL_PREF, GetPendingLocation()); |
| 6635 ASSERT_FALSE(IsCrxInstalled()); | 6638 ASSERT_FALSE(IsCrxInstalled()); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6674 | 6677 |
| 6675 // External prefs starts an install. | 6678 // External prefs starts an install. |
| 6676 AddPendingExternalPrefFileInstall(); | 6679 AddPendingExternalPrefFileInstall(); |
| 6677 | 6680 |
| 6678 // Crx installer was made, but has not yet run. | 6681 // Crx installer was made, but has not yet run. |
| 6679 ASSERT_FALSE(IsCrxInstalled()); | 6682 ASSERT_FALSE(IsCrxInstalled()); |
| 6680 | 6683 |
| 6681 // Before the CRX installer runs, Sync requests that the same extension | 6684 // Before the CRX installer runs, Sync requests that the same extension |
| 6682 // be installed. Should fail, because an external source is pending. | 6685 // be installed. Should fail, because an external source is pending. |
| 6683 content::WindowedNotificationObserver observer( | 6686 content::WindowedNotificationObserver observer( |
| 6684 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6687 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6685 content::NotificationService::AllSources()); | 6688 content::NotificationService::AllSources()); |
| 6686 ASSERT_FALSE(AddPendingSyncInstall()); | 6689 ASSERT_FALSE(AddPendingSyncInstall()); |
| 6687 | 6690 |
| 6688 // Wait for the external source to install. | 6691 // Wait for the external source to install. |
| 6689 observer.Wait(); | 6692 observer.Wait(); |
| 6690 VerifyCrxInstall(crx_path_, INSTALL_NEW); | 6693 VerifyCrxInstall(crx_path_, INSTALL_NEW); |
| 6691 ASSERT_TRUE(IsCrxInstalled()); | 6694 ASSERT_TRUE(IsCrxInstalled()); |
| 6692 | 6695 |
| 6693 // Now that the extension is installed, sync request should fail | 6696 // Now that the extension is installed, sync request should fail |
| 6694 // because the extension is already installed. | 6697 // because the extension is already installed. |
| (...skipping 26 matching lines...) Expand all Loading... |
| 6721 base::RunLoop().RunUntilIdle(); | 6724 base::RunLoop().RunUntilIdle(); |
| 6722 EXPECT_FALSE( | 6725 EXPECT_FALSE( |
| 6723 service()->external_install_manager()->HasExternalInstallError()); | 6726 service()->external_install_manager()->HasExternalInstallError()); |
| 6724 | 6727 |
| 6725 // A hosted app, installed externally. | 6728 // A hosted app, installed externally. |
| 6726 // This should NOT trigger an alert. | 6729 // This should NOT trigger an alert. |
| 6727 provider->UpdateOrAddExtension( | 6730 provider->UpdateOrAddExtension( |
| 6728 hosted_app, "1.0.0.0", data_dir().AppendASCII("hosted_app.crx")); | 6731 hosted_app, "1.0.0.0", data_dir().AppendASCII("hosted_app.crx")); |
| 6729 | 6732 |
| 6730 content::WindowedNotificationObserver observer( | 6733 content::WindowedNotificationObserver observer( |
| 6731 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6734 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6732 content::NotificationService::AllSources()); | 6735 content::NotificationService::AllSources()); |
| 6733 service()->CheckForExternalUpdates(); | 6736 service()->CheckForExternalUpdates(); |
| 6734 observer.Wait(); | 6737 observer.Wait(); |
| 6735 EXPECT_FALSE( | 6738 EXPECT_FALSE( |
| 6736 service()->external_install_manager()->HasExternalInstallError()); | 6739 service()->external_install_manager()->HasExternalInstallError()); |
| 6737 | 6740 |
| 6738 // Another normal extension, but installed externally. | 6741 // Another normal extension, but installed externally. |
| 6739 // This SHOULD trigger an alert. | 6742 // This SHOULD trigger an alert. |
| 6740 provider->UpdateOrAddExtension( | 6743 provider->UpdateOrAddExtension( |
| 6741 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); | 6744 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); |
| 6742 | 6745 |
| 6743 content::WindowedNotificationObserver observer2( | 6746 content::WindowedNotificationObserver observer2( |
| 6744 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6747 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6745 content::NotificationService::AllSources()); | 6748 content::NotificationService::AllSources()); |
| 6746 service()->CheckForExternalUpdates(); | 6749 service()->CheckForExternalUpdates(); |
| 6747 observer2.Wait(); | 6750 observer2.Wait(); |
| 6748 EXPECT_TRUE(service()->external_install_manager()->HasExternalInstallError()); | 6751 EXPECT_TRUE(service()->external_install_manager()->HasExternalInstallError()); |
| 6749 } | 6752 } |
| 6750 | 6753 |
| 6751 // Test that external extensions are initially disabled, and that enabling | 6754 // Test that external extensions are initially disabled, and that enabling |
| 6752 // them clears the prompt. | 6755 // them clears the prompt. |
| 6753 TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) { | 6756 TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) { |
| 6754 FeatureSwitch::ScopedOverride prompt( | 6757 FeatureSwitch::ScopedOverride prompt( |
| 6755 FeatureSwitch::prompt_for_external_extensions(), true); | 6758 FeatureSwitch::prompt_for_external_extensions(), true); |
| 6756 | 6759 |
| 6757 InitializeEmptyExtensionService(); | 6760 InitializeEmptyExtensionService(); |
| 6758 MockExtensionProvider* provider = | 6761 MockExtensionProvider* provider = |
| 6759 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 6762 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); |
| 6760 AddMockExternalProvider(provider); | 6763 AddMockExternalProvider(provider); |
| 6761 | 6764 |
| 6762 provider->UpdateOrAddExtension( | 6765 provider->UpdateOrAddExtension( |
| 6763 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); | 6766 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); |
| 6764 | 6767 |
| 6765 content::WindowedNotificationObserver observer( | 6768 content::WindowedNotificationObserver observer( |
| 6766 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6769 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6767 content::NotificationService::AllSources()); | 6770 content::NotificationService::AllSources()); |
| 6768 service()->CheckForExternalUpdates(); | 6771 service()->CheckForExternalUpdates(); |
| 6769 observer.Wait(); | 6772 observer.Wait(); |
| 6770 EXPECT_TRUE(service()->external_install_manager()->HasExternalInstallError()); | 6773 EXPECT_TRUE(service()->external_install_manager()->HasExternalInstallError()); |
| 6771 EXPECT_FALSE(service()->IsExtensionEnabled(page_action)); | 6774 EXPECT_FALSE(service()->IsExtensionEnabled(page_action)); |
| 6772 | 6775 |
| 6773 const Extension* extension = | 6776 const Extension* extension = |
| 6774 registry()->disabled_extensions().GetByID(page_action); | 6777 registry()->disabled_extensions().GetByID(page_action); |
| 6775 EXPECT_TRUE(extension); | 6778 EXPECT_TRUE(extension); |
| 6776 EXPECT_EQ(page_action, extension->id()); | 6779 EXPECT_EQ(page_action, extension->id()); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 6799 | 6802 |
| 6800 provider->UpdateOrAddExtension( | 6803 provider->UpdateOrAddExtension( |
| 6801 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); | 6804 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); |
| 6802 provider->UpdateOrAddExtension( | 6805 provider->UpdateOrAddExtension( |
| 6803 good_crx, "1.0.0.0", data_dir().AppendASCII("good.crx")); | 6806 good_crx, "1.0.0.0", data_dir().AppendASCII("good.crx")); |
| 6804 provider->UpdateOrAddExtension( | 6807 provider->UpdateOrAddExtension( |
| 6805 theme_crx, "2.0", data_dir().AppendASCII("theme.crx")); | 6808 theme_crx, "2.0", data_dir().AppendASCII("theme.crx")); |
| 6806 | 6809 |
| 6807 int count = 3; | 6810 int count = 3; |
| 6808 content::WindowedNotificationObserver observer( | 6811 content::WindowedNotificationObserver observer( |
| 6809 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6812 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6810 base::Bind(&WaitForCountNotificationsCallback, &count)); | 6813 base::Bind(&WaitForCountNotificationsCallback, &count)); |
| 6811 service()->CheckForExternalUpdates(); | 6814 service()->CheckForExternalUpdates(); |
| 6812 observer.Wait(); | 6815 observer.Wait(); |
| 6813 EXPECT_TRUE(service()->external_install_manager()->HasExternalInstallError()); | 6816 EXPECT_TRUE(service()->external_install_manager()->HasExternalInstallError()); |
| 6814 EXPECT_FALSE(service()->IsExtensionEnabled(page_action)); | 6817 EXPECT_FALSE(service()->IsExtensionEnabled(page_action)); |
| 6815 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); | 6818 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); |
| 6816 EXPECT_FALSE(service()->IsExtensionEnabled(theme_crx)); | 6819 EXPECT_FALSE(service()->IsExtensionEnabled(theme_crx)); |
| 6817 | 6820 |
| 6818 service()->EnableExtension(page_action); | 6821 service()->EnableExtension(page_action); |
| 6819 EXPECT_TRUE(service()->external_install_manager()->HasExternalInstallError()); | 6822 EXPECT_TRUE(service()->external_install_manager()->HasExternalInstallError()); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6851 PackCRX(data_dir().AppendASCII("update_from_webstore"), | 6854 PackCRX(data_dir().AppendASCII("update_from_webstore"), |
| 6852 data_dir().AppendASCII("update_from_webstore.pem"), | 6855 data_dir().AppendASCII("update_from_webstore.pem"), |
| 6853 crx_path); | 6856 crx_path); |
| 6854 | 6857 |
| 6855 MockExtensionProvider* provider = | 6858 MockExtensionProvider* provider = |
| 6856 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 6859 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); |
| 6857 AddMockExternalProvider(provider); | 6860 AddMockExternalProvider(provider); |
| 6858 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6861 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
| 6859 | 6862 |
| 6860 content::WindowedNotificationObserver observer( | 6863 content::WindowedNotificationObserver observer( |
| 6861 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6864 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6862 content::NotificationService::AllSources()); | 6865 content::NotificationService::AllSources()); |
| 6863 service()->CheckForExternalUpdates(); | 6866 service()->CheckForExternalUpdates(); |
| 6864 observer.Wait(); | 6867 observer.Wait(); |
| 6865 EXPECT_TRUE(service()->external_install_manager()->HasExternalInstallError()); | 6868 EXPECT_TRUE(service()->external_install_manager()->HasExternalInstallError()); |
| 6866 EXPECT_TRUE(service() | 6869 EXPECT_TRUE(service() |
| 6867 ->external_install_manager() | 6870 ->external_install_manager() |
| 6868 ->HasExternalInstallBubbleForTesting()); | 6871 ->HasExternalInstallBubbleForTesting()); |
| 6869 EXPECT_FALSE(service()->IsExtensionEnabled(updates_from_webstore)); | 6872 EXPECT_FALSE(service()->IsExtensionEnabled(updates_from_webstore)); |
| 6870 } | 6873 } |
| 6871 | 6874 |
| 6872 // Test that there is no bubble for external extensions if the profile is new. | 6875 // Test that there is no bubble for external extensions if the profile is new. |
| 6873 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreNewProfile) { | 6876 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreNewProfile) { |
| 6874 FeatureSwitch::ScopedOverride prompt( | 6877 FeatureSwitch::ScopedOverride prompt( |
| 6875 FeatureSwitch::prompt_for_external_extensions(), true); | 6878 FeatureSwitch::prompt_for_external_extensions(), true); |
| 6876 | 6879 |
| 6877 InitializeEmptyExtensionService(); | 6880 InitializeEmptyExtensionService(); |
| 6878 | 6881 |
| 6879 base::FilePath crx_path = temp_dir().path().AppendASCII("webstore.crx"); | 6882 base::FilePath crx_path = temp_dir().path().AppendASCII("webstore.crx"); |
| 6880 PackCRX(data_dir().AppendASCII("update_from_webstore"), | 6883 PackCRX(data_dir().AppendASCII("update_from_webstore"), |
| 6881 data_dir().AppendASCII("update_from_webstore.pem"), | 6884 data_dir().AppendASCII("update_from_webstore.pem"), |
| 6882 crx_path); | 6885 crx_path); |
| 6883 | 6886 |
| 6884 MockExtensionProvider* provider = | 6887 MockExtensionProvider* provider = |
| 6885 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 6888 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); |
| 6886 AddMockExternalProvider(provider); | 6889 AddMockExternalProvider(provider); |
| 6887 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6890 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
| 6888 | 6891 |
| 6889 content::WindowedNotificationObserver observer( | 6892 content::WindowedNotificationObserver observer( |
| 6890 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6893 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6891 content::NotificationService::AllSources()); | 6894 content::NotificationService::AllSources()); |
| 6892 service()->CheckForExternalUpdates(); | 6895 service()->CheckForExternalUpdates(); |
| 6893 observer.Wait(); | 6896 observer.Wait(); |
| 6894 EXPECT_TRUE(service()->external_install_manager()->HasExternalInstallError()); | 6897 EXPECT_TRUE(service()->external_install_manager()->HasExternalInstallError()); |
| 6895 EXPECT_FALSE(service() | 6898 EXPECT_FALSE(service() |
| 6896 ->external_install_manager() | 6899 ->external_install_manager() |
| 6897 ->HasExternalInstallBubbleForTesting()); | 6900 ->HasExternalInstallBubbleForTesting()); |
| 6898 EXPECT_FALSE(service()->IsExtensionEnabled(updates_from_webstore)); | 6901 EXPECT_FALSE(service()->IsExtensionEnabled(updates_from_webstore)); |
| 6899 } | 6902 } |
| 6900 | 6903 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 6912 PackCRX(data_dir().AppendASCII("update_from_webstore"), | 6915 PackCRX(data_dir().AppendASCII("update_from_webstore"), |
| 6913 data_dir().AppendASCII("update_from_webstore.pem"), | 6916 data_dir().AppendASCII("update_from_webstore.pem"), |
| 6914 crx_path); | 6917 crx_path); |
| 6915 | 6918 |
| 6916 MockExtensionProvider* provider = | 6919 MockExtensionProvider* provider = |
| 6917 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6920 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
| 6918 AddMockExternalProvider(provider); | 6921 AddMockExternalProvider(provider); |
| 6919 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6922 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
| 6920 | 6923 |
| 6921 content::WindowedNotificationObserver observer( | 6924 content::WindowedNotificationObserver observer( |
| 6922 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6925 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6923 content::NotificationService::AllSources()); | 6926 content::NotificationService::AllSources()); |
| 6924 service_->CheckForExternalUpdates(); | 6927 service_->CheckForExternalUpdates(); |
| 6925 observer.Wait(); | 6928 observer.Wait(); |
| 6926 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); | 6929 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); |
| 6927 | 6930 |
| 6928 // We check both enabled and disabled, since these are "eventually exclusive" | 6931 // We check both enabled and disabled, since these are "eventually exclusive" |
| 6929 // sets. | 6932 // sets. |
| 6930 EXPECT_TRUE(registry()->disabled_extensions().GetByID(updates_from_webstore)); | 6933 EXPECT_TRUE(registry()->disabled_extensions().GetByID(updates_from_webstore)); |
| 6931 EXPECT_FALSE(registry()->enabled_extensions().GetByID(updates_from_webstore)); | 6934 EXPECT_FALSE(registry()->enabled_extensions().GetByID(updates_from_webstore)); |
| 6932 | 6935 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 6954 PackCRX(data_dir().AppendASCII("update_from_webstore"), | 6957 PackCRX(data_dir().AppendASCII("update_from_webstore"), |
| 6955 data_dir().AppendASCII("update_from_webstore.pem"), | 6958 data_dir().AppendASCII("update_from_webstore.pem"), |
| 6956 crx_path); | 6959 crx_path); |
| 6957 | 6960 |
| 6958 MockExtensionProvider* provider = | 6961 MockExtensionProvider* provider = |
| 6959 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6962 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
| 6960 AddMockExternalProvider(provider); | 6963 AddMockExternalProvider(provider); |
| 6961 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6964 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
| 6962 | 6965 |
| 6963 content::WindowedNotificationObserver observer( | 6966 content::WindowedNotificationObserver observer( |
| 6964 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6967 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6965 content::NotificationService::AllSources()); | 6968 content::NotificationService::AllSources()); |
| 6966 service_->CheckForExternalUpdates(); | 6969 service_->CheckForExternalUpdates(); |
| 6967 observer.Wait(); | 6970 observer.Wait(); |
| 6968 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); | 6971 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); |
| 6969 | 6972 |
| 6970 // We check both enabled and disabled, since these are "eventually exclusive" | 6973 // We check both enabled and disabled, since these are "eventually exclusive" |
| 6971 // sets. | 6974 // sets. |
| 6972 EXPECT_TRUE(registry()->disabled_extensions().GetByID(updates_from_webstore)); | 6975 EXPECT_TRUE(registry()->disabled_extensions().GetByID(updates_from_webstore)); |
| 6973 EXPECT_FALSE(registry()->enabled_extensions().GetByID(updates_from_webstore)); | 6976 EXPECT_FALSE(registry()->enabled_extensions().GetByID(updates_from_webstore)); |
| 6974 | 6977 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 7005 // loaded and it should be blacklisted in prefs. | 7008 // loaded and it should be blacklisted in prefs. |
| 7006 service()->OnExtensionInstalled( | 7009 service()->OnExtensionInstalled( |
| 7007 extension.get(), | 7010 extension.get(), |
| 7008 syncer::StringOrdinal(), | 7011 syncer::StringOrdinal(), |
| 7009 (extensions::kInstallFlagIsBlacklistedForMalware | | 7012 (extensions::kInstallFlagIsBlacklistedForMalware | |
| 7010 extensions::kInstallFlagInstallImmediately)); | 7013 extensions::kInstallFlagInstallImmediately)); |
| 7011 base::RunLoop().RunUntilIdle(); | 7014 base::RunLoop().RunUntilIdle(); |
| 7012 | 7015 |
| 7013 // Extension was installed but not loaded. | 7016 // Extension was installed but not loaded. |
| 7014 EXPECT_TRUE(notifications.CheckNotifications( | 7017 EXPECT_TRUE(notifications.CheckNotifications( |
| 7015 chrome::NOTIFICATION_EXTENSION_WILL_BE_INSTALLED_DEPRECATED)); | 7018 extensions::NOTIFICATION_EXTENSION_WILL_BE_INSTALLED_DEPRECATED)); |
| 7016 EXPECT_TRUE(service()->GetInstalledExtension(id)); | 7019 EXPECT_TRUE(service()->GetInstalledExtension(id)); |
| 7017 | 7020 |
| 7018 EXPECT_FALSE(registry()->enabled_extensions().Contains(id)); | 7021 EXPECT_FALSE(registry()->enabled_extensions().Contains(id)); |
| 7019 EXPECT_TRUE(registry()->blacklisted_extensions().Contains(id)); | 7022 EXPECT_TRUE(registry()->blacklisted_extensions().Contains(id)); |
| 7020 | 7023 |
| 7021 EXPECT_TRUE(ExtensionPrefs::Get(profile())->IsExtensionBlacklisted(id)); | 7024 EXPECT_TRUE(ExtensionPrefs::Get(profile())->IsExtensionBlacklisted(id)); |
| 7022 EXPECT_TRUE( | 7025 EXPECT_TRUE( |
| 7023 ExtensionPrefs::Get(profile())->IsBlacklistedExtensionAcknowledged(id)); | 7026 ExtensionPrefs::Get(profile())->IsBlacklistedExtensionAcknowledged(id)); |
| 7024 } | 7027 } |
| 7025 | 7028 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 7036 | 7039 |
| 7037 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, | 7040 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, |
| 7038 content::Source<Profile>(profile()), | 7041 content::Source<Profile>(profile()), |
| 7039 content::NotificationService::NoDetails()); | 7042 content::NotificationService::NoDetails()); |
| 7040 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); | 7043 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); |
| 7041 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 7044 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
| 7042 EXPECT_EQ(0u, registry()->disabled_extensions().size()); | 7045 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
| 7043 EXPECT_EQ(0u, registry()->terminated_extensions().size()); | 7046 EXPECT_EQ(0u, registry()->terminated_extensions().size()); |
| 7044 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); | 7047 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); |
| 7045 } | 7048 } |
| OLD | NEW |