| 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 29 matching lines...) Expand all Loading... |
| 40 #include "chrome/browser/extensions/extension_creator.h" | 40 #include "chrome/browser/extensions/extension_creator.h" |
| 41 #include "chrome/browser/extensions/extension_error_reporter.h" | 41 #include "chrome/browser/extensions/extension_error_reporter.h" |
| 42 #include "chrome/browser/extensions/extension_error_ui.h" | 42 #include "chrome/browser/extensions/extension_error_ui.h" |
| 43 #include "chrome/browser/extensions/extension_garbage_collector_factory.h" | 43 #include "chrome/browser/extensions/extension_garbage_collector_factory.h" |
| 44 #include "chrome/browser/extensions/extension_notification_observer.h" | 44 #include "chrome/browser/extensions/extension_notification_observer.h" |
| 45 #include "chrome/browser/extensions/extension_service.h" | 45 #include "chrome/browser/extensions/extension_service.h" |
| 46 #include "chrome/browser/extensions/extension_special_storage_policy.h" | 46 #include "chrome/browser/extensions/extension_special_storage_policy.h" |
| 47 #include "chrome/browser/extensions/extension_sync_data.h" | 47 #include "chrome/browser/extensions/extension_sync_data.h" |
| 48 #include "chrome/browser/extensions/extension_sync_service.h" | 48 #include "chrome/browser/extensions/extension_sync_service.h" |
| 49 #include "chrome/browser/extensions/extension_util.h" | 49 #include "chrome/browser/extensions/extension_util.h" |
| 50 #include "chrome/browser/extensions/external_install_error.h" | 50 #include "chrome/browser/extensions/external_install_ui.h" |
| 51 #include "chrome/browser/extensions/external_install_manager.h" | |
| 52 #include "chrome/browser/extensions/external_policy_loader.h" | 51 #include "chrome/browser/extensions/external_policy_loader.h" |
| 53 #include "chrome/browser/extensions/external_pref_loader.h" | 52 #include "chrome/browser/extensions/external_pref_loader.h" |
| 54 #include "chrome/browser/extensions/external_provider_impl.h" | 53 #include "chrome/browser/extensions/external_provider_impl.h" |
| 55 #include "chrome/browser/extensions/fake_safe_browsing_database_manager.h" | 54 #include "chrome/browser/extensions/fake_safe_browsing_database_manager.h" |
| 56 #include "chrome/browser/extensions/install_observer.h" | 55 #include "chrome/browser/extensions/install_observer.h" |
| 57 #include "chrome/browser/extensions/install_tracker.h" | 56 #include "chrome/browser/extensions/install_tracker.h" |
| 58 #include "chrome/browser/extensions/install_tracker_factory.h" | 57 #include "chrome/browser/extensions/install_tracker_factory.h" |
| 59 #include "chrome/browser/extensions/installed_loader.h" | 58 #include "chrome/browser/extensions/installed_loader.h" |
| 60 #include "chrome/browser/extensions/pack_extension_job.h" | 59 #include "chrome/browser/extensions/pack_extension_job.h" |
| 61 #include "chrome/browser/extensions/pending_extension_info.h" | 60 #include "chrome/browser/extensions/pending_extension_info.h" |
| (...skipping 6675 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6737 FeatureSwitch::prompt_for_external_extensions(), true); | 6736 FeatureSwitch::prompt_for_external_extensions(), true); |
| 6738 | 6737 |
| 6739 InitializeEmptyExtensionService(); | 6738 InitializeEmptyExtensionService(); |
| 6740 MockExtensionProvider* provider = | 6739 MockExtensionProvider* provider = |
| 6741 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6740 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
| 6742 AddMockExternalProvider(provider); | 6741 AddMockExternalProvider(provider); |
| 6743 | 6742 |
| 6744 service_->UpdateExternalExtensionAlert(); | 6743 service_->UpdateExternalExtensionAlert(); |
| 6745 // Should return false, meaning there aren't any extensions that the user | 6744 // Should return false, meaning there aren't any extensions that the user |
| 6746 // needs to know about. | 6745 // needs to know about. |
| 6747 EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError()); | 6746 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); |
| 6748 | 6747 |
| 6749 // This is a normal extension, installed normally. | 6748 // This is a normal extension, installed normally. |
| 6750 // This should NOT trigger an alert. | 6749 // This should NOT trigger an alert. |
| 6751 set_extensions_enabled(true); | 6750 set_extensions_enabled(true); |
| 6752 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 6751 base::FilePath path = data_dir_.AppendASCII("good.crx"); |
| 6753 InstallCRX(path, INSTALL_NEW); | 6752 InstallCRX(path, INSTALL_NEW); |
| 6754 | 6753 |
| 6755 service_->CheckForExternalUpdates(); | 6754 service_->CheckForExternalUpdates(); |
| 6756 base::RunLoop().RunUntilIdle(); | 6755 base::RunLoop().RunUntilIdle(); |
| 6757 EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError()); | 6756 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); |
| 6758 | 6757 |
| 6759 // A hosted app, installed externally. | 6758 // A hosted app, installed externally. |
| 6760 // This should NOT trigger an alert. | 6759 // This should NOT trigger an alert. |
| 6761 provider->UpdateOrAddExtension(hosted_app, "1.0.0.0", | 6760 provider->UpdateOrAddExtension(hosted_app, "1.0.0.0", |
| 6762 data_dir_.AppendASCII("hosted_app.crx")); | 6761 data_dir_.AppendASCII("hosted_app.crx")); |
| 6763 | 6762 |
| 6764 content::WindowedNotificationObserver observer( | 6763 content::WindowedNotificationObserver observer( |
| 6765 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6764 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6766 content::NotificationService::AllSources()); | 6765 content::NotificationService::AllSources()); |
| 6767 service_->CheckForExternalUpdates(); | 6766 service_->CheckForExternalUpdates(); |
| 6768 observer.Wait(); | 6767 observer.Wait(); |
| 6769 EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError()); | 6768 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); |
| 6770 | 6769 |
| 6771 // Another normal extension, but installed externally. | 6770 // Another normal extension, but installed externally. |
| 6772 // This SHOULD trigger an alert. | 6771 // This SHOULD trigger an alert. |
| 6773 provider->UpdateOrAddExtension(page_action, "1.0.0.0", | 6772 provider->UpdateOrAddExtension(page_action, "1.0.0.0", |
| 6774 data_dir_.AppendASCII("page_action.crx")); | 6773 data_dir_.AppendASCII("page_action.crx")); |
| 6775 | 6774 |
| 6776 content::WindowedNotificationObserver observer2( | 6775 content::WindowedNotificationObserver observer2( |
| 6777 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6776 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6778 content::NotificationService::AllSources()); | 6777 content::NotificationService::AllSources()); |
| 6779 service_->CheckForExternalUpdates(); | 6778 service_->CheckForExternalUpdates(); |
| 6780 observer2.Wait(); | 6779 observer2.Wait(); |
| 6781 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); | 6780 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); |
| 6782 } | 6781 } |
| 6783 | 6782 |
| 6784 // Test that external extensions are initially disabled, and that enabling | 6783 // Test that external extensions are initially disabled, and that enabling |
| 6785 // them clears the prompt. | 6784 // them clears the prompt. |
| 6786 TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) { | 6785 TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) { |
| 6787 FeatureSwitch::ScopedOverride prompt( | 6786 FeatureSwitch::ScopedOverride prompt( |
| 6788 FeatureSwitch::prompt_for_external_extensions(), true); | 6787 FeatureSwitch::prompt_for_external_extensions(), true); |
| 6789 | 6788 |
| 6790 InitializeEmptyExtensionService(); | 6789 InitializeEmptyExtensionService(); |
| 6791 MockExtensionProvider* provider = | 6790 MockExtensionProvider* provider = |
| 6792 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6791 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
| 6793 AddMockExternalProvider(provider); | 6792 AddMockExternalProvider(provider); |
| 6794 | 6793 |
| 6795 provider->UpdateOrAddExtension(page_action, "1.0.0.0", | 6794 provider->UpdateOrAddExtension(page_action, "1.0.0.0", |
| 6796 data_dir_.AppendASCII("page_action.crx")); | 6795 data_dir_.AppendASCII("page_action.crx")); |
| 6797 | 6796 |
| 6798 content::WindowedNotificationObserver observer( | 6797 content::WindowedNotificationObserver observer( |
| 6799 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6798 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6800 content::NotificationService::AllSources()); | 6799 content::NotificationService::AllSources()); |
| 6801 service_->CheckForExternalUpdates(); | 6800 service_->CheckForExternalUpdates(); |
| 6802 observer.Wait(); | 6801 observer.Wait(); |
| 6803 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); | 6802 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); |
| 6804 EXPECT_FALSE(service_->IsExtensionEnabled(page_action)); | 6803 EXPECT_FALSE(service_->IsExtensionEnabled(page_action)); |
| 6805 | 6804 |
| 6806 const Extension* extension = | 6805 const Extension* extension = |
| 6807 registry_->disabled_extensions().GetByID(page_action); | 6806 registry_->disabled_extensions().GetByID(page_action); |
| 6808 EXPECT_TRUE(extension); | 6807 EXPECT_TRUE(extension); |
| 6809 EXPECT_EQ(page_action, extension->id()); | 6808 EXPECT_EQ(page_action, extension->id()); |
| 6810 | 6809 |
| 6811 service_->EnableExtension(page_action); | 6810 service_->EnableExtension(page_action); |
| 6812 EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError()); | 6811 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); |
| 6813 EXPECT_TRUE(service_->IsExtensionEnabled(page_action)); | 6812 EXPECT_TRUE(service_->IsExtensionEnabled(page_action)); |
| 6814 } | 6813 } |
| 6815 | 6814 |
| 6816 // Test that installing multiple external extensions works. | 6815 // Test that installing multiple external extensions works. |
| 6817 // Flaky on windows; http://crbug.com/295757 . | 6816 // Flaky on windows; http://crbug.com/295757 . |
| 6818 #if defined(OS_WIN) | 6817 #if defined(OS_WIN) |
| 6819 #define MAYBE_ExternalInstallMultiple DISABLED_ExternalInstallMultiple | 6818 #define MAYBE_ExternalInstallMultiple DISABLED_ExternalInstallMultiple |
| 6820 #else | 6819 #else |
| 6821 #define MAYBE_ExternalInstallMultiple ExternalInstallMultiple | 6820 #define MAYBE_ExternalInstallMultiple ExternalInstallMultiple |
| 6822 #endif | 6821 #endif |
| (...skipping 12 matching lines...) Expand all Loading... |
| 6835 data_dir_.AppendASCII("good.crx")); | 6834 data_dir_.AppendASCII("good.crx")); |
| 6836 provider->UpdateOrAddExtension(theme_crx, "2.0", | 6835 provider->UpdateOrAddExtension(theme_crx, "2.0", |
| 6837 data_dir_.AppendASCII("theme.crx")); | 6836 data_dir_.AppendASCII("theme.crx")); |
| 6838 | 6837 |
| 6839 int count = 3; | 6838 int count = 3; |
| 6840 content::WindowedNotificationObserver observer( | 6839 content::WindowedNotificationObserver observer( |
| 6841 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6840 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6842 base::Bind(&WaitForCountNotificationsCallback, &count)); | 6841 base::Bind(&WaitForCountNotificationsCallback, &count)); |
| 6843 service_->CheckForExternalUpdates(); | 6842 service_->CheckForExternalUpdates(); |
| 6844 observer.Wait(); | 6843 observer.Wait(); |
| 6845 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); | 6844 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); |
| 6846 EXPECT_FALSE(service_->IsExtensionEnabled(page_action)); | 6845 EXPECT_FALSE(service_->IsExtensionEnabled(page_action)); |
| 6847 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx)); | 6846 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx)); |
| 6848 EXPECT_FALSE(service_->IsExtensionEnabled(theme_crx)); | 6847 EXPECT_FALSE(service_->IsExtensionEnabled(theme_crx)); |
| 6849 | 6848 |
| 6850 service_->EnableExtension(page_action); | 6849 service_->EnableExtension(page_action); |
| 6851 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); | 6850 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); |
| 6852 EXPECT_FALSE( | 6851 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); |
| 6853 service_->external_install_manager()->HasExternalInstallBubble()); | |
| 6854 | |
| 6855 service_->EnableExtension(theme_crx); | 6852 service_->EnableExtension(theme_crx); |
| 6856 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); | 6853 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); |
| 6857 EXPECT_FALSE( | 6854 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); |
| 6858 service_->external_install_manager()->HasExternalInstallBubble()); | |
| 6859 | |
| 6860 service_->EnableExtension(good_crx); | 6855 service_->EnableExtension(good_crx); |
| 6861 EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError()); | 6856 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); |
| 6862 EXPECT_FALSE( | 6857 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); |
| 6863 service_->external_install_manager()->HasExternalInstallBubble()); | |
| 6864 } | 6858 } |
| 6865 | 6859 |
| 6866 // Test that there is a bubble for external extensions that update | 6860 // Test that there is a bubble for external extensions that update |
| 6867 // from the webstore if the profile is not new. | 6861 // from the webstore if the profile is not new. |
| 6868 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreOldProfile) { | 6862 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreOldProfile) { |
| 6869 FeatureSwitch::ScopedOverride prompt( | 6863 FeatureSwitch::ScopedOverride prompt( |
| 6870 FeatureSwitch::prompt_for_external_extensions(), true); | 6864 FeatureSwitch::prompt_for_external_extensions(), true); |
| 6871 | 6865 |
| 6872 // This sets up the ExtensionPrefs used by our ExtensionService to be | 6866 // This sets up the ExtensionPrefs used by our ExtensionService to be |
| 6873 // post-first run. | 6867 // post-first run. |
| 6874 ExtensionServiceInitParams params = CreateDefaultInitParams(); | 6868 ExtensionServiceInitParams params = CreateDefaultInitParams(); |
| 6875 params.is_first_run = false; | 6869 params.is_first_run = false; |
| 6876 InitializeExtensionService(params); | 6870 InitializeExtensionService(params); |
| 6877 | 6871 |
| 6878 base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx"); | 6872 base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx"); |
| 6879 PackCRX(data_dir_.AppendASCII("update_from_webstore"), | 6873 PackCRX(data_dir_.AppendASCII("update_from_webstore"), |
| 6880 data_dir_.AppendASCII("update_from_webstore.pem"), | 6874 data_dir_.AppendASCII("update_from_webstore.pem"), |
| 6881 crx_path); | 6875 crx_path); |
| 6882 | 6876 |
| 6883 MockExtensionProvider* provider = | 6877 MockExtensionProvider* provider = |
| 6884 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6878 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
| 6885 AddMockExternalProvider(provider); | 6879 AddMockExternalProvider(provider); |
| 6886 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6880 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
| 6887 | 6881 |
| 6888 content::WindowedNotificationObserver observer( | 6882 content::WindowedNotificationObserver observer( |
| 6889 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6883 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6890 content::NotificationService::AllSources()); | 6884 content::NotificationService::AllSources()); |
| 6891 service_->CheckForExternalUpdates(); | 6885 service_->CheckForExternalUpdates(); |
| 6892 observer.Wait(); | 6886 observer.Wait(); |
| 6893 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); | 6887 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); |
| 6894 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallBubble()); | 6888 EXPECT_TRUE(extensions::HasExternalInstallBubble(service_)); |
| 6895 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); | 6889 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); |
| 6896 } | 6890 } |
| 6897 | 6891 |
| 6898 // Test that there is no bubble for external extensions if the profile is new. | 6892 // Test that there is no bubble for external extensions if the profile is new. |
| 6899 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreNewProfile) { | 6893 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreNewProfile) { |
| 6900 FeatureSwitch::ScopedOverride prompt( | 6894 FeatureSwitch::ScopedOverride prompt( |
| 6901 FeatureSwitch::prompt_for_external_extensions(), true); | 6895 FeatureSwitch::prompt_for_external_extensions(), true); |
| 6902 | 6896 |
| 6903 InitializeEmptyExtensionService(); | 6897 InitializeEmptyExtensionService(); |
| 6904 | 6898 |
| 6905 base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx"); | 6899 base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx"); |
| 6906 PackCRX(data_dir_.AppendASCII("update_from_webstore"), | 6900 PackCRX(data_dir_.AppendASCII("update_from_webstore"), |
| 6907 data_dir_.AppendASCII("update_from_webstore.pem"), | 6901 data_dir_.AppendASCII("update_from_webstore.pem"), |
| 6908 crx_path); | 6902 crx_path); |
| 6909 | 6903 |
| 6910 MockExtensionProvider* provider = | 6904 MockExtensionProvider* provider = |
| 6911 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6905 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
| 6912 AddMockExternalProvider(provider); | 6906 AddMockExternalProvider(provider); |
| 6913 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6907 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
| 6914 | 6908 |
| 6915 content::WindowedNotificationObserver observer( | 6909 content::WindowedNotificationObserver observer( |
| 6916 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6910 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
| 6917 content::NotificationService::AllSources()); | 6911 content::NotificationService::AllSources()); |
| 6918 service_->CheckForExternalUpdates(); | 6912 service_->CheckForExternalUpdates(); |
| 6919 observer.Wait(); | 6913 observer.Wait(); |
| 6920 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); | 6914 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); |
| 6921 EXPECT_FALSE( | 6915 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); |
| 6922 service_->external_install_manager()->HasExternalInstallBubble()); | |
| 6923 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); | 6916 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); |
| 6924 } | 6917 } |
| 6925 | 6918 |
| 6926 // Test that clicking to remove the extension on an external install warning | |
| 6927 // uninstalls the extension. | |
| 6928 TEST_F(ExtensionServiceTest, ExternalInstallClickToRemove) { | |
| 6929 FeatureSwitch::ScopedOverride prompt( | |
| 6930 FeatureSwitch::prompt_for_external_extensions(), true); | |
| 6931 | |
| 6932 ExtensionServiceInitParams params = CreateDefaultInitParams(); | |
| 6933 params.is_first_run = false; | |
| 6934 InitializeExtensionService(params); | |
| 6935 | |
| 6936 base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx"); | |
| 6937 PackCRX(data_dir_.AppendASCII("update_from_webstore"), | |
| 6938 data_dir_.AppendASCII("update_from_webstore.pem"), | |
| 6939 crx_path); | |
| 6940 | |
| 6941 MockExtensionProvider* provider = | |
| 6942 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | |
| 6943 AddMockExternalProvider(provider); | |
| 6944 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | |
| 6945 | |
| 6946 content::WindowedNotificationObserver observer( | |
| 6947 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | |
| 6948 content::NotificationService::AllSources()); | |
| 6949 service_->CheckForExternalUpdates(); | |
| 6950 observer.Wait(); | |
| 6951 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); | |
| 6952 | |
| 6953 // We check both enabled and disabled, since these are "eventually exclusive" | |
| 6954 // sets. | |
| 6955 EXPECT_TRUE(registry_->disabled_extensions().GetByID(updates_from_webstore)); | |
| 6956 EXPECT_FALSE(registry_->enabled_extensions().GetByID(updates_from_webstore)); | |
| 6957 | |
| 6958 // Click the negative response. | |
| 6959 service_->external_install_manager()->error_for_testing()->InstallUIAbort( | |
| 6960 true); | |
| 6961 // The Extension should be uninstalled. | |
| 6962 EXPECT_FALSE(registry_->GetExtensionById(updates_from_webstore, | |
| 6963 ExtensionRegistry::EVERYTHING)); | |
| 6964 // The error should be removed. | |
| 6965 EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError()); | |
| 6966 } | |
| 6967 | |
| 6968 // Test that clicking to keep the extension on an external install warning | |
| 6969 // re-enables the extension. | |
| 6970 TEST_F(ExtensionServiceTest, ExternalInstallClickToKeep) { | |
| 6971 FeatureSwitch::ScopedOverride prompt( | |
| 6972 FeatureSwitch::prompt_for_external_extensions(), true); | |
| 6973 | |
| 6974 ExtensionServiceInitParams params = CreateDefaultInitParams(); | |
| 6975 params.is_first_run = false; | |
| 6976 InitializeExtensionService(params); | |
| 6977 | |
| 6978 base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx"); | |
| 6979 PackCRX(data_dir_.AppendASCII("update_from_webstore"), | |
| 6980 data_dir_.AppendASCII("update_from_webstore.pem"), | |
| 6981 crx_path); | |
| 6982 | |
| 6983 MockExtensionProvider* provider = | |
| 6984 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | |
| 6985 AddMockExternalProvider(provider); | |
| 6986 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | |
| 6987 | |
| 6988 content::WindowedNotificationObserver observer( | |
| 6989 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | |
| 6990 content::NotificationService::AllSources()); | |
| 6991 service_->CheckForExternalUpdates(); | |
| 6992 observer.Wait(); | |
| 6993 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); | |
| 6994 | |
| 6995 // We check both enabled and disabled, since these are "eventually exclusive" | |
| 6996 // sets. | |
| 6997 EXPECT_TRUE(registry_->disabled_extensions().GetByID(updates_from_webstore)); | |
| 6998 EXPECT_FALSE(registry_->enabled_extensions().GetByID(updates_from_webstore)); | |
| 6999 | |
| 7000 // Accept the extension. | |
| 7001 service_->external_install_manager()->error_for_testing()->InstallUIProceed(); | |
| 7002 | |
| 7003 // It should be enabled again. | |
| 7004 EXPECT_TRUE(registry_->enabled_extensions().GetByID(updates_from_webstore)); | |
| 7005 EXPECT_FALSE(registry_->disabled_extensions().GetByID(updates_from_webstore)); | |
| 7006 | |
| 7007 // The error should be removed. | |
| 7008 EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError()); | |
| 7009 } | |
| 7010 | |
| 7011 TEST_F(ExtensionServiceTest, InstallBlacklistedExtension) { | 6919 TEST_F(ExtensionServiceTest, InstallBlacklistedExtension) { |
| 7012 InitializeEmptyExtensionService(); | 6920 InitializeEmptyExtensionService(); |
| 7013 | 6921 |
| 7014 scoped_refptr<Extension> extension = extensions::ExtensionBuilder() | 6922 scoped_refptr<Extension> extension = extensions::ExtensionBuilder() |
| 7015 .SetManifest(extensions::DictionaryBuilder() | 6923 .SetManifest(extensions::DictionaryBuilder() |
| 7016 .Set("name", "extension") | 6924 .Set("name", "extension") |
| 7017 .Set("version", "1.0") | 6925 .Set("version", "1.0") |
| 7018 .Set("manifest_version", 2).Build()) | 6926 .Set("manifest_version", 2).Build()) |
| 7019 .Build(); | 6927 .Build(); |
| 7020 ASSERT_TRUE(extension.get()); | 6928 ASSERT_TRUE(extension.get()); |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7125 | 7033 |
| 7126 service_->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, | 7034 service_->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, |
| 7127 content::Source<Profile>(profile_.get()), | 7035 content::Source<Profile>(profile_.get()), |
| 7128 content::NotificationService::NoDetails()); | 7036 content::NotificationService::NoDetails()); |
| 7129 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); | 7037 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); |
| 7130 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 7038 EXPECT_EQ(0u, registry_->enabled_extensions().size()); |
| 7131 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 7039 EXPECT_EQ(0u, registry_->disabled_extensions().size()); |
| 7132 EXPECT_EQ(0u, registry_->terminated_extensions().size()); | 7040 EXPECT_EQ(0u, registry_->terminated_extensions().size()); |
| 7133 EXPECT_EQ(0u, registry_->blacklisted_extensions().size()); | 7041 EXPECT_EQ(0u, registry_->blacklisted_extensions().size()); |
| 7134 } | 7042 } |
| OLD | NEW |