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

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

Issue 14238037: Made it possible to tell whether an extension is being installed or updated. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Added extra check. Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "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
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_service.cc ('k') | chrome/browser/extensions/state_store.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698