| 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 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 using extensions::AppSorting; | 157 using extensions::AppSorting; |
| 158 using extensions::Blacklist; | 158 using extensions::Blacklist; |
| 159 using extensions::CrxInstaller; | 159 using extensions::CrxInstaller; |
| 160 using extensions::Extension; | 160 using extensions::Extension; |
| 161 using extensions::ExtensionCreator; | 161 using extensions::ExtensionCreator; |
| 162 using extensions::ExtensionPrefs; | 162 using extensions::ExtensionPrefs; |
| 163 using extensions::ExtensionRegistry; | 163 using extensions::ExtensionRegistry; |
| 164 using extensions::ExtensionResource; | 164 using extensions::ExtensionResource; |
| 165 using extensions::ExtensionSystem; | 165 using extensions::ExtensionSystem; |
| 166 using extensions::FakeSafeBrowsingDatabaseManager; | 166 using extensions::FakeSafeBrowsingDatabaseManager; |
| 167 using extensions::FeatureSwitch; | |
| 168 using extensions::Manifest; | 167 using extensions::Manifest; |
| 169 using extensions::PermissionSet; | 168 using extensions::PermissionSet; |
| 170 using extensions::TestExtensionSystem; | 169 using extensions::TestExtensionSystem; |
| 171 using extensions::UnloadedExtensionInfo; | 170 using extensions::UnloadedExtensionInfo; |
| 172 using extensions::URLPatternSet; | 171 using extensions::URLPatternSet; |
| 173 | 172 |
| 174 namespace keys = extensions::manifest_keys; | 173 namespace keys = extensions::manifest_keys; |
| 175 | 174 |
| 176 namespace { | 175 namespace { |
| 177 | 176 |
| (...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 465 DISALLOW_COPY_AND_ASSIGN(MockProviderVisitor); | 464 DISALLOW_COPY_AND_ASSIGN(MockProviderVisitor); |
| 466 }; | 465 }; |
| 467 | 466 |
| 468 class ExtensionServiceTest : public extensions::ExtensionServiceTestBase, | 467 class ExtensionServiceTest : public extensions::ExtensionServiceTestBase, |
| 469 public content::NotificationObserver { | 468 public content::NotificationObserver { |
| 470 public: | 469 public: |
| 471 ExtensionServiceTest() | 470 ExtensionServiceTest() |
| 472 : unloaded_reason_(UnloadedExtensionInfo::REASON_UNDEFINED), | 471 : unloaded_reason_(UnloadedExtensionInfo::REASON_UNDEFINED), |
| 473 installed_(NULL), | 472 installed_(NULL), |
| 474 was_update_(false), | 473 was_update_(false), |
| 475 override_external_install_prompt_( | |
| 476 FeatureSwitch::prompt_for_external_extensions(), | |
| 477 false), | |
| 478 expected_extensions_count_(0) { | 474 expected_extensions_count_(0) { |
| 479 registrar_.Add(this, | 475 registrar_.Add(this, |
| 480 extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, | 476 extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, |
| 481 content::NotificationService::AllSources()); | 477 content::NotificationService::AllSources()); |
| 482 registrar_.Add(this, | 478 registrar_.Add(this, |
| 483 extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, | 479 extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, |
| 484 content::NotificationService::AllSources()); | 480 content::NotificationService::AllSources()); |
| 485 registrar_.Add( | 481 registrar_.Add( |
| 486 this, | 482 this, |
| 487 extensions::NOTIFICATION_EXTENSION_WILL_BE_INSTALLED_DEPRECATED, | 483 extensions::NOTIFICATION_EXTENSION_WILL_BE_INSTALLED_DEPRECATED, |
| (...skipping 621 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1109 protected: | 1105 protected: |
| 1110 typedef extensions::ExtensionManagementPrefUpdater<TestingPrefServiceSyncable> | 1106 typedef extensions::ExtensionManagementPrefUpdater<TestingPrefServiceSyncable> |
| 1111 ManagementPrefUpdater; | 1107 ManagementPrefUpdater; |
| 1112 scoped_ptr<ExtensionSyncService> extension_sync_service_; | 1108 scoped_ptr<ExtensionSyncService> extension_sync_service_; |
| 1113 extensions::ExtensionList loaded_; | 1109 extensions::ExtensionList loaded_; |
| 1114 std::string unloaded_id_; | 1110 std::string unloaded_id_; |
| 1115 UnloadedExtensionInfo::Reason unloaded_reason_; | 1111 UnloadedExtensionInfo::Reason unloaded_reason_; |
| 1116 const Extension* installed_; | 1112 const Extension* installed_; |
| 1117 bool was_update_; | 1113 bool was_update_; |
| 1118 std::string old_name_; | 1114 std::string old_name_; |
| 1119 FeatureSwitch::ScopedOverride override_external_install_prompt_; | |
| 1120 | 1115 |
| 1121 private: | 1116 private: |
| 1122 // Create a CrxInstaller and install the CRX file. | 1117 // Create a CrxInstaller and install the CRX file. |
| 1123 // Instead of calling this method yourself, use InstallCRX(), which does extra | 1118 // Instead of calling this method yourself, use InstallCRX(), which does extra |
| 1124 // error checking. | 1119 // error checking. |
| 1125 void InstallCRXInternal(const base::FilePath& crx_path) { | 1120 void InstallCRXInternal(const base::FilePath& crx_path) { |
| 1126 InstallCRXInternal(crx_path, Extension::NO_FLAGS); | 1121 InstallCRXInternal(crx_path, Extension::NO_FLAGS); |
| 1127 } | 1122 } |
| 1128 | 1123 |
| 1129 void InstallCRXInternal(const base::FilePath& crx_path, int creation_flags) { | 1124 void InstallCRXInternal(const base::FilePath& crx_path, int creation_flags) { |
| (...skipping 5662 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6792 VerifyCrxInstall(crx_path_, INSTALL_NEW); | 6787 VerifyCrxInstall(crx_path_, INSTALL_NEW); |
| 6793 ASSERT_TRUE(IsCrxInstalled()); | 6788 ASSERT_TRUE(IsCrxInstalled()); |
| 6794 | 6789 |
| 6795 // Now that the extension is installed, sync request should fail | 6790 // Now that the extension is installed, sync request should fail |
| 6796 // because the extension is already installed. | 6791 // because the extension is already installed. |
| 6797 ASSERT_FALSE(AddPendingSyncInstall()); | 6792 ASSERT_FALSE(AddPendingSyncInstall()); |
| 6798 } | 6793 } |
| 6799 | 6794 |
| 6800 // Test that installing an external extension displays a GlobalError. | 6795 // Test that installing an external extension displays a GlobalError. |
| 6801 TEST_F(ExtensionServiceTest, ExternalInstallGlobalError) { | 6796 TEST_F(ExtensionServiceTest, ExternalInstallGlobalError) { |
| 6802 FeatureSwitch::ScopedOverride prompt( | |
| 6803 FeatureSwitch::prompt_for_external_extensions(), true); | |
| 6804 | 6797 |
| 6805 InitializeEmptyExtensionService(); | 6798 InitializeEmptyExtensionService(); |
| 6806 MockExtensionProvider* provider = | 6799 MockExtensionProvider* provider = |
| 6807 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 6800 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); |
| 6808 AddMockExternalProvider(provider); | 6801 AddMockExternalProvider(provider); |
| 6809 | 6802 |
| 6810 service()->external_install_manager()->UpdateExternalExtensionAlert(); | 6803 service()->external_install_manager()->UpdateExternalExtensionAlert(); |
| 6811 // Should return false, meaning there aren't any extensions that the user | 6804 // Should return false, meaning there aren't any extensions that the user |
| 6812 // needs to know about. | 6805 // needs to know about. |
| 6813 EXPECT_FALSE( | 6806 EXPECT_FALSE( |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6846 extensions::NOTIFICATION_CRX_INSTALLER_DONE, | 6839 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6847 content::NotificationService::AllSources()); | 6840 content::NotificationService::AllSources()); |
| 6848 service()->CheckForExternalUpdates(); | 6841 service()->CheckForExternalUpdates(); |
| 6849 observer2.Wait(); | 6842 observer2.Wait(); |
| 6850 EXPECT_TRUE(service()->external_install_manager()->HasExternalInstallError()); | 6843 EXPECT_TRUE(service()->external_install_manager()->HasExternalInstallError()); |
| 6851 } | 6844 } |
| 6852 | 6845 |
| 6853 // Test that external extensions are initially disabled, and that enabling | 6846 // Test that external extensions are initially disabled, and that enabling |
| 6854 // them clears the prompt. | 6847 // them clears the prompt. |
| 6855 TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) { | 6848 TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) { |
| 6856 FeatureSwitch::ScopedOverride prompt( | |
| 6857 FeatureSwitch::prompt_for_external_extensions(), true); | |
| 6858 | 6849 |
| 6859 InitializeEmptyExtensionService(); | 6850 InitializeEmptyExtensionService(); |
| 6860 MockExtensionProvider* provider = | 6851 MockExtensionProvider* provider = |
| 6861 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 6852 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); |
| 6862 AddMockExternalProvider(provider); | 6853 AddMockExternalProvider(provider); |
| 6863 | 6854 |
| 6864 provider->UpdateOrAddExtension( | 6855 provider->UpdateOrAddExtension( |
| 6865 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); | 6856 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); |
| 6866 | 6857 |
| 6867 content::WindowedNotificationObserver observer( | 6858 content::WindowedNotificationObserver observer( |
| (...skipping 16 matching lines...) Expand all Loading... |
| 6884 } | 6875 } |
| 6885 | 6876 |
| 6886 // Test that installing multiple external extensions works. | 6877 // Test that installing multiple external extensions works. |
| 6887 // Flaky on windows; http://crbug.com/295757 . | 6878 // Flaky on windows; http://crbug.com/295757 . |
| 6888 #if defined(OS_WIN) | 6879 #if defined(OS_WIN) |
| 6889 #define MAYBE_ExternalInstallMultiple DISABLED_ExternalInstallMultiple | 6880 #define MAYBE_ExternalInstallMultiple DISABLED_ExternalInstallMultiple |
| 6890 #else | 6881 #else |
| 6891 #define MAYBE_ExternalInstallMultiple ExternalInstallMultiple | 6882 #define MAYBE_ExternalInstallMultiple ExternalInstallMultiple |
| 6892 #endif | 6883 #endif |
| 6893 TEST_F(ExtensionServiceTest, MAYBE_ExternalInstallMultiple) { | 6884 TEST_F(ExtensionServiceTest, MAYBE_ExternalInstallMultiple) { |
| 6894 FeatureSwitch::ScopedOverride prompt( | |
| 6895 FeatureSwitch::prompt_for_external_extensions(), true); | |
| 6896 | 6885 |
| 6897 InitializeEmptyExtensionService(); | 6886 InitializeEmptyExtensionService(); |
| 6898 MockExtensionProvider* provider = | 6887 MockExtensionProvider* provider = |
| 6899 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 6888 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); |
| 6900 AddMockExternalProvider(provider); | 6889 AddMockExternalProvider(provider); |
| 6901 | 6890 |
| 6902 provider->UpdateOrAddExtension( | 6891 provider->UpdateOrAddExtension( |
| 6903 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); | 6892 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); |
| 6904 provider->UpdateOrAddExtension( | 6893 provider->UpdateOrAddExtension( |
| 6905 good_crx, "1.0.0.0", data_dir().AppendASCII("good.crx")); | 6894 good_crx, "1.0.0.0", data_dir().AppendASCII("good.crx")); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 6933 EXPECT_FALSE( | 6922 EXPECT_FALSE( |
| 6934 service()->external_install_manager()->HasExternalInstallError()); | 6923 service()->external_install_manager()->HasExternalInstallError()); |
| 6935 EXPECT_FALSE(service() | 6924 EXPECT_FALSE(service() |
| 6936 ->external_install_manager() | 6925 ->external_install_manager() |
| 6937 ->HasExternalInstallBubbleForTesting()); | 6926 ->HasExternalInstallBubbleForTesting()); |
| 6938 } | 6927 } |
| 6939 | 6928 |
| 6940 // Test that there is a bubble for external extensions that update | 6929 // Test that there is a bubble for external extensions that update |
| 6941 // from the webstore if the profile is not new. | 6930 // from the webstore if the profile is not new. |
| 6942 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreOldProfile) { | 6931 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreOldProfile) { |
| 6943 FeatureSwitch::ScopedOverride prompt( | |
| 6944 FeatureSwitch::prompt_for_external_extensions(), true); | |
| 6945 | 6932 |
| 6946 // This sets up the ExtensionPrefs used by our ExtensionService to be | 6933 // This sets up the ExtensionPrefs used by our ExtensionService to be |
| 6947 // post-first run. | 6934 // post-first run. |
| 6948 ExtensionServiceInitParams params = CreateDefaultInitParams(); | 6935 ExtensionServiceInitParams params = CreateDefaultInitParams(); |
| 6949 params.is_first_run = false; | 6936 params.is_first_run = false; |
| 6950 InitializeExtensionService(params); | 6937 InitializeExtensionService(params); |
| 6951 | 6938 |
| 6952 base::FilePath crx_path = temp_dir().path().AppendASCII("webstore.crx"); | 6939 base::FilePath crx_path = temp_dir().path().AppendASCII("webstore.crx"); |
| 6953 PackCRX(data_dir().AppendASCII("update_from_webstore"), | 6940 PackCRX(data_dir().AppendASCII("update_from_webstore"), |
| 6954 data_dir().AppendASCII("update_from_webstore.pem"), | 6941 data_dir().AppendASCII("update_from_webstore.pem"), |
| (...skipping 11 matching lines...) Expand all Loading... |
| 6966 observer.Wait(); | 6953 observer.Wait(); |
| 6967 EXPECT_TRUE(service()->external_install_manager()->HasExternalInstallError()); | 6954 EXPECT_TRUE(service()->external_install_manager()->HasExternalInstallError()); |
| 6968 EXPECT_TRUE(service() | 6955 EXPECT_TRUE(service() |
| 6969 ->external_install_manager() | 6956 ->external_install_manager() |
| 6970 ->HasExternalInstallBubbleForTesting()); | 6957 ->HasExternalInstallBubbleForTesting()); |
| 6971 EXPECT_FALSE(service()->IsExtensionEnabled(updates_from_webstore)); | 6958 EXPECT_FALSE(service()->IsExtensionEnabled(updates_from_webstore)); |
| 6972 } | 6959 } |
| 6973 | 6960 |
| 6974 // Test that there is no bubble for external extensions if the profile is new. | 6961 // Test that there is no bubble for external extensions if the profile is new. |
| 6975 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreNewProfile) { | 6962 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreNewProfile) { |
| 6976 FeatureSwitch::ScopedOverride prompt( | |
| 6977 FeatureSwitch::prompt_for_external_extensions(), true); | |
| 6978 | 6963 |
| 6979 InitializeEmptyExtensionService(); | 6964 InitializeEmptyExtensionService(); |
| 6980 | 6965 |
| 6981 base::FilePath crx_path = temp_dir().path().AppendASCII("webstore.crx"); | 6966 base::FilePath crx_path = temp_dir().path().AppendASCII("webstore.crx"); |
| 6982 PackCRX(data_dir().AppendASCII("update_from_webstore"), | 6967 PackCRX(data_dir().AppendASCII("update_from_webstore"), |
| 6983 data_dir().AppendASCII("update_from_webstore.pem"), | 6968 data_dir().AppendASCII("update_from_webstore.pem"), |
| 6984 crx_path); | 6969 crx_path); |
| 6985 | 6970 |
| 6986 MockExtensionProvider* provider = | 6971 MockExtensionProvider* provider = |
| 6987 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 6972 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); |
| 6988 AddMockExternalProvider(provider); | 6973 AddMockExternalProvider(provider); |
| 6989 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6974 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
| 6990 | 6975 |
| 6991 content::WindowedNotificationObserver observer( | 6976 content::WindowedNotificationObserver observer( |
| 6992 extensions::NOTIFICATION_CRX_INSTALLER_DONE, | 6977 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6993 content::NotificationService::AllSources()); | 6978 content::NotificationService::AllSources()); |
| 6994 service()->CheckForExternalUpdates(); | 6979 service()->CheckForExternalUpdates(); |
| 6995 observer.Wait(); | 6980 observer.Wait(); |
| 6996 EXPECT_TRUE(service()->external_install_manager()->HasExternalInstallError()); | 6981 EXPECT_TRUE(service()->external_install_manager()->HasExternalInstallError()); |
| 6997 EXPECT_FALSE(service() | 6982 EXPECT_FALSE(service() |
| 6998 ->external_install_manager() | 6983 ->external_install_manager() |
| 6999 ->HasExternalInstallBubbleForTesting()); | 6984 ->HasExternalInstallBubbleForTesting()); |
| 7000 EXPECT_FALSE(service()->IsExtensionEnabled(updates_from_webstore)); | 6985 EXPECT_FALSE(service()->IsExtensionEnabled(updates_from_webstore)); |
| 7001 } | 6986 } |
| 7002 | 6987 |
| 7003 // Test that clicking to remove the extension on an external install warning | 6988 // Test that clicking to remove the extension on an external install warning |
| 7004 // uninstalls the extension. | 6989 // uninstalls the extension. |
| 7005 TEST_F(ExtensionServiceTest, ExternalInstallClickToRemove) { | 6990 TEST_F(ExtensionServiceTest, ExternalInstallClickToRemove) { |
| 7006 FeatureSwitch::ScopedOverride prompt( | |
| 7007 FeatureSwitch::prompt_for_external_extensions(), true); | |
| 7008 | 6991 |
| 7009 ExtensionServiceInitParams params = CreateDefaultInitParams(); | 6992 ExtensionServiceInitParams params = CreateDefaultInitParams(); |
| 7010 params.is_first_run = false; | 6993 params.is_first_run = false; |
| 7011 InitializeExtensionService(params); | 6994 InitializeExtensionService(params); |
| 7012 | 6995 |
| 7013 base::FilePath crx_path = temp_dir().path().AppendASCII("webstore.crx"); | 6996 base::FilePath crx_path = temp_dir().path().AppendASCII("webstore.crx"); |
| 7014 PackCRX(data_dir().AppendASCII("update_from_webstore"), | 6997 PackCRX(data_dir().AppendASCII("update_from_webstore"), |
| 7015 data_dir().AppendASCII("update_from_webstore.pem"), | 6998 data_dir().AppendASCII("update_from_webstore.pem"), |
| 7016 crx_path); | 6999 crx_path); |
| 7017 | 7000 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 7038 // The Extension should be uninstalled. | 7021 // The Extension should be uninstalled. |
| 7039 EXPECT_FALSE(registry()->GetExtensionById(updates_from_webstore, | 7022 EXPECT_FALSE(registry()->GetExtensionById(updates_from_webstore, |
| 7040 ExtensionRegistry::EVERYTHING)); | 7023 ExtensionRegistry::EVERYTHING)); |
| 7041 // The error should be removed. | 7024 // The error should be removed. |
| 7042 EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError()); | 7025 EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError()); |
| 7043 } | 7026 } |
| 7044 | 7027 |
| 7045 // Test that clicking to keep the extension on an external install warning | 7028 // Test that clicking to keep the extension on an external install warning |
| 7046 // re-enables the extension. | 7029 // re-enables the extension. |
| 7047 TEST_F(ExtensionServiceTest, ExternalInstallClickToKeep) { | 7030 TEST_F(ExtensionServiceTest, ExternalInstallClickToKeep) { |
| 7048 FeatureSwitch::ScopedOverride prompt( | |
| 7049 FeatureSwitch::prompt_for_external_extensions(), true); | |
| 7050 | 7031 |
| 7051 ExtensionServiceInitParams params = CreateDefaultInitParams(); | 7032 ExtensionServiceInitParams params = CreateDefaultInitParams(); |
| 7052 params.is_first_run = false; | 7033 params.is_first_run = false; |
| 7053 InitializeExtensionService(params); | 7034 InitializeExtensionService(params); |
| 7054 | 7035 |
| 7055 base::FilePath crx_path = temp_dir().path().AppendASCII("webstore.crx"); | 7036 base::FilePath crx_path = temp_dir().path().AppendASCII("webstore.crx"); |
| 7056 PackCRX(data_dir().AppendASCII("update_from_webstore"), | 7037 PackCRX(data_dir().AppendASCII("update_from_webstore"), |
| 7057 data_dir().AppendASCII("update_from_webstore.pem"), | 7038 data_dir().AppendASCII("update_from_webstore.pem"), |
| 7058 crx_path); | 7039 crx_path); |
| 7059 | 7040 |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7138 | 7119 |
| 7139 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, | 7120 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, |
| 7140 content::Source<Profile>(profile()), | 7121 content::Source<Profile>(profile()), |
| 7141 content::NotificationService::NoDetails()); | 7122 content::NotificationService::NoDetails()); |
| 7142 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); | 7123 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); |
| 7143 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 7124 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
| 7144 EXPECT_EQ(0u, registry()->disabled_extensions().size()); | 7125 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
| 7145 EXPECT_EQ(0u, registry()->terminated_extensions().size()); | 7126 EXPECT_EQ(0u, registry()->terminated_extensions().size()); |
| 7146 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); | 7127 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); |
| 7147 } | 7128 } |
| OLD | NEW |