| 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 | 
|---|