| 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 "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 565 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 576 (new extensions::DefaultLocaleHandler)->Register(); | 576 (new extensions::DefaultLocaleHandler)->Register(); |
| 577 (new extensions::PluginsHandler)->Register(); | 577 (new extensions::PluginsHandler)->Register(); |
| 578 (new extensions::RequirementsHandler)->Register(); | 578 (new extensions::RequirementsHandler)->Register(); |
| 579 } | 579 } |
| 580 | 580 |
| 581 class ExtensionServiceTest | 581 class ExtensionServiceTest |
| 582 : public ExtensionServiceTestBase, public content::NotificationObserver { | 582 : public ExtensionServiceTestBase, public content::NotificationObserver { |
| 583 public: | 583 public: |
| 584 ExtensionServiceTest() | 584 ExtensionServiceTest() |
| 585 : installed_(NULL), | 585 : installed_(NULL), |
| 586 was_update_(false), |
| 586 override_external_install_prompt_( | 587 override_external_install_prompt_( |
| 587 FeatureSwitch::prompt_for_external_extensions(), false) { | 588 FeatureSwitch::prompt_for_external_extensions(), false) { |
| 588 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, | 589 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, |
| 589 content::NotificationService::AllSources()); | 590 content::NotificationService::AllSources()); |
| 590 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, | 591 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, |
| 591 content::NotificationService::AllSources()); | 592 content::NotificationService::AllSources()); |
| 592 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALLED, | 593 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALLED, |
| 593 content::NotificationService::AllSources()); | 594 content::NotificationService::AllSources()); |
| 594 } | 595 } |
| 595 | 596 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 614 unloaded_id_ = e->id(); | 615 unloaded_id_ = e->id(); |
| 615 extensions::ExtensionList::iterator i = | 616 extensions::ExtensionList::iterator i = |
| 616 std::find(loaded_.begin(), loaded_.end(), e); | 617 std::find(loaded_.begin(), loaded_.end(), e); |
| 617 // TODO(erikkay) fix so this can be an assert. Right now the tests | 618 // TODO(erikkay) fix so this can be an assert. Right now the tests |
| 618 // are manually calling clear() on loaded_, so this isn't doable. | 619 // are manually calling clear() on loaded_, so this isn't doable. |
| 619 if (i == loaded_.end()) | 620 if (i == loaded_.end()) |
| 620 return; | 621 return; |
| 621 loaded_.erase(i); | 622 loaded_.erase(i); |
| 622 break; | 623 break; |
| 623 } | 624 } |
| 624 case chrome::NOTIFICATION_EXTENSION_INSTALLED: | 625 case chrome::NOTIFICATION_EXTENSION_INSTALLED: { |
| 625 installed_ = content::Details<const Extension>(details).ptr(); | 626 const extensions::InstalledExtensionInfo* installed_info = |
| 627 content::Details<const extensions::InstalledExtensionInfo>(details) |
| 628 .ptr(); |
| 629 installed_ = installed_info->extension; |
| 630 was_update_ = installed_info->is_update; |
| 626 break; | 631 break; |
| 632 } |
| 627 | 633 |
| 628 default: | 634 default: |
| 629 DCHECK(false); | 635 DCHECK(false); |
| 630 } | 636 } |
| 631 } | 637 } |
| 632 | 638 |
| 633 void AddMockExternalProvider( | 639 void AddMockExternalProvider( |
| 634 extensions::ExternalProviderInterface* provider) { | 640 extensions::ExternalProviderInterface* provider) { |
| 635 service_->AddProviderForTesting(provider); | 641 service_->AddProviderForTesting(provider); |
| 636 } | 642 } |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 753 const Extension* WaitForCrxInstall(const base::FilePath& path, | 759 const Extension* WaitForCrxInstall(const base::FilePath& path, |
| 754 InstallState install_state) { | 760 InstallState install_state) { |
| 755 loop_.RunUntilIdle(); | 761 loop_.RunUntilIdle(); |
| 756 std::vector<string16> errors = GetErrors(); | 762 std::vector<string16> errors = GetErrors(); |
| 757 const Extension* extension = NULL; | 763 const Extension* extension = NULL; |
| 758 if (install_state != INSTALL_FAILED) { | 764 if (install_state != INSTALL_FAILED) { |
| 759 if (install_state == INSTALL_NEW) | 765 if (install_state == INSTALL_NEW) |
| 760 ++expected_extensions_count_; | 766 ++expected_extensions_count_; |
| 761 | 767 |
| 762 EXPECT_TRUE(installed_) << path.value(); | 768 EXPECT_TRUE(installed_) << path.value(); |
| 769 // If and only if INSTALL_UPDATED, it should have the is_update flag. |
| 770 EXPECT_EQ(install_state == INSTALL_UPDATED, was_update_) |
| 771 << path.value(); |
| 763 EXPECT_EQ(0u, errors.size()) << path.value(); | 772 EXPECT_EQ(0u, errors.size()) << path.value(); |
| 764 | 773 |
| 765 if (install_state == INSTALL_WITHOUT_LOAD) { | 774 if (install_state == INSTALL_WITHOUT_LOAD) { |
| 766 EXPECT_EQ(0u, loaded_.size()) << path.value(); | 775 EXPECT_EQ(0u, loaded_.size()) << path.value(); |
| 767 } else { | 776 } else { |
| 768 EXPECT_EQ(1u, loaded_.size()) << path.value(); | 777 EXPECT_EQ(1u, loaded_.size()) << path.value(); |
| 769 EXPECT_EQ(expected_extensions_count_, service_->extensions()->size()) << | 778 EXPECT_EQ(expected_extensions_count_, service_->extensions()->size()) << |
| 770 path.value(); | 779 path.value(); |
| 771 extension = loaded_[0]; | 780 extension = loaded_[0]; |
| 772 EXPECT_TRUE(service_->GetExtensionById(extension->id(), false)) << | 781 EXPECT_TRUE(service_->GetExtensionById(extension->id(), false)) << |
| 773 path.value(); | 782 path.value(); |
| 774 } | 783 } |
| 775 | 784 |
| 776 for (std::vector<string16>::iterator err = errors.begin(); | 785 for (std::vector<string16>::iterator err = errors.begin(); |
| 777 err != errors.end(); ++err) { | 786 err != errors.end(); ++err) { |
| 778 LOG(ERROR) << *err; | 787 LOG(ERROR) << *err; |
| 779 } | 788 } |
| 780 } else { | 789 } else { |
| 781 EXPECT_FALSE(installed_) << path.value(); | 790 EXPECT_FALSE(installed_) << path.value(); |
| 782 EXPECT_EQ(0u, loaded_.size()) << path.value(); | 791 EXPECT_EQ(0u, loaded_.size()) << path.value(); |
| 783 EXPECT_EQ(1u, errors.size()) << path.value(); | 792 EXPECT_EQ(1u, errors.size()) << path.value(); |
| 784 } | 793 } |
| 785 | 794 |
| 786 installed_ = NULL; | 795 installed_ = NULL; |
| 796 was_update_ = false; |
| 787 loaded_.clear(); | 797 loaded_.clear(); |
| 788 ExtensionErrorReporter::GetInstance()->ClearErrors(); | 798 ExtensionErrorReporter::GetInstance()->ClearErrors(); |
| 789 return extension; | 799 return extension; |
| 790 } | 800 } |
| 791 | 801 |
| 792 enum UpdateState { | 802 enum UpdateState { |
| 793 FAILED_SILENTLY, | 803 FAILED_SILENTLY, |
| 794 FAILED, | 804 FAILED, |
| 795 UPDATED, | 805 UPDATED, |
| 796 INSTALLED, | 806 INSTALLED, |
| (...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1076 void InitPluginService() { | 1086 void InitPluginService() { |
| 1077 #if defined(ENABLE_PLUGINS) | 1087 #if defined(ENABLE_PLUGINS) |
| 1078 PluginService::GetInstance()->Init(); | 1088 PluginService::GetInstance()->Init(); |
| 1079 #endif | 1089 #endif |
| 1080 } | 1090 } |
| 1081 | 1091 |
| 1082 protected: | 1092 protected: |
| 1083 extensions::ExtensionList loaded_; | 1093 extensions::ExtensionList loaded_; |
| 1084 std::string unloaded_id_; | 1094 std::string unloaded_id_; |
| 1085 const Extension* installed_; | 1095 const Extension* installed_; |
| 1096 bool was_update_; |
| 1086 FeatureSwitch::ScopedOverride override_external_install_prompt_; | 1097 FeatureSwitch::ScopedOverride override_external_install_prompt_; |
| 1087 | 1098 |
| 1088 private: | 1099 private: |
| 1089 content::NotificationRegistrar registrar_; | 1100 content::NotificationRegistrar registrar_; |
| 1090 }; | 1101 }; |
| 1091 | 1102 |
| 1092 // Receives notifications from a PackExtensionJob, indicating either that | 1103 // Receives notifications from a PackExtensionJob, indicating either that |
| 1093 // packing succeeded or that there was some error. | 1104 // packing succeeded or that there was some error. |
| 1094 class PackExtensionTestClient : public extensions::PackExtensionJob::Client { | 1105 class PackExtensionTestClient : public extensions::PackExtensionJob::Client { |
| 1095 public: | 1106 public: |
| (...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1638 ASSERT_TRUE(file_util::PathExists(path)); | 1649 ASSERT_TRUE(file_util::PathExists(path)); |
| 1639 scoped_refptr<CrxInstaller> installer(CrxInstaller::Create(service_, NULL)); | 1650 scoped_refptr<CrxInstaller> installer(CrxInstaller::Create(service_, NULL)); |
| 1640 installer->set_allow_silent_install(true); | 1651 installer->set_allow_silent_install(true); |
| 1641 installer->InstallUserScript( | 1652 installer->InstallUserScript( |
| 1642 path, | 1653 path, |
| 1643 GURL("http://www.aaronboodman.com/scripts/user_script_basic.user.js")); | 1654 GURL("http://www.aaronboodman.com/scripts/user_script_basic.user.js")); |
| 1644 | 1655 |
| 1645 loop_.RunUntilIdle(); | 1656 loop_.RunUntilIdle(); |
| 1646 std::vector<string16> errors = GetErrors(); | 1657 std::vector<string16> errors = GetErrors(); |
| 1647 EXPECT_TRUE(installed_) << "Nothing was installed."; | 1658 EXPECT_TRUE(installed_) << "Nothing was installed."; |
| 1659 EXPECT_FALSE(was_update_) << path.value(); |
| 1648 ASSERT_EQ(1u, loaded_.size()) << "Nothing was loaded."; | 1660 ASSERT_EQ(1u, loaded_.size()) << "Nothing was loaded."; |
| 1649 EXPECT_EQ(0u, errors.size()) << "There were errors: " | 1661 EXPECT_EQ(0u, errors.size()) << "There were errors: " |
| 1650 << JoinString(errors, ','); | 1662 << JoinString(errors, ','); |
| 1651 EXPECT_TRUE(service_->GetExtensionById(loaded_[0]->id(), false)) << | 1663 EXPECT_TRUE(service_->GetExtensionById(loaded_[0]->id(), false)) << |
| 1652 path.value(); | 1664 path.value(); |
| 1653 | 1665 |
| 1654 installed_ = NULL; | 1666 installed_ = NULL; |
| 1667 was_update_ = false; |
| 1655 loaded_.clear(); | 1668 loaded_.clear(); |
| 1656 ExtensionErrorReporter::GetInstance()->ClearErrors(); | 1669 ExtensionErrorReporter::GetInstance()->ClearErrors(); |
| 1657 } | 1670 } |
| 1658 | 1671 |
| 1659 // Extensions don't install during shutdown. | 1672 // Extensions don't install during shutdown. |
| 1660 TEST_F(ExtensionServiceTest, InstallExtensionDuringShutdown) { | 1673 TEST_F(ExtensionServiceTest, InstallExtensionDuringShutdown) { |
| 1661 InitializeEmptyExtensionService(); | 1674 InitializeEmptyExtensionService(); |
| 1662 | 1675 |
| 1663 // Simulate shutdown. | 1676 // Simulate shutdown. |
| 1664 service_->set_browser_terminating_for_test(true); | 1677 service_->set_browser_terminating_for_test(true); |
| (...skipping 4290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5955 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 5968 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
| 5956 AddMockExternalProvider(provider); | 5969 AddMockExternalProvider(provider); |
| 5957 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 5970 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
| 5958 | 5971 |
| 5959 service_->CheckForExternalUpdates(); | 5972 service_->CheckForExternalUpdates(); |
| 5960 loop_.RunUntilIdle(); | 5973 loop_.RunUntilIdle(); |
| 5961 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); | 5974 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); |
| 5962 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); | 5975 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); |
| 5963 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); | 5976 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); |
| 5964 } | 5977 } |
| OLD | NEW |