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_ui.h" | 50 #include "chrome/browser/extensions/external_install_error.h" |
| 51 #include "chrome/browser/extensions/external_install_manager.h" |
51 #include "chrome/browser/extensions/external_policy_loader.h" | 52 #include "chrome/browser/extensions/external_policy_loader.h" |
52 #include "chrome/browser/extensions/external_pref_loader.h" | 53 #include "chrome/browser/extensions/external_pref_loader.h" |
53 #include "chrome/browser/extensions/external_provider_impl.h" | 54 #include "chrome/browser/extensions/external_provider_impl.h" |
54 #include "chrome/browser/extensions/fake_safe_browsing_database_manager.h" | 55 #include "chrome/browser/extensions/fake_safe_browsing_database_manager.h" |
55 #include "chrome/browser/extensions/install_observer.h" | 56 #include "chrome/browser/extensions/install_observer.h" |
56 #include "chrome/browser/extensions/install_tracker.h" | 57 #include "chrome/browser/extensions/install_tracker.h" |
57 #include "chrome/browser/extensions/install_tracker_factory.h" | 58 #include "chrome/browser/extensions/install_tracker_factory.h" |
58 #include "chrome/browser/extensions/installed_loader.h" | 59 #include "chrome/browser/extensions/installed_loader.h" |
59 #include "chrome/browser/extensions/pack_extension_job.h" | 60 #include "chrome/browser/extensions/pack_extension_job.h" |
60 #include "chrome/browser/extensions/pending_extension_info.h" | 61 #include "chrome/browser/extensions/pending_extension_info.h" |
(...skipping 6675 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6736 FeatureSwitch::prompt_for_external_extensions(), true); | 6737 FeatureSwitch::prompt_for_external_extensions(), true); |
6737 | 6738 |
6738 InitializeEmptyExtensionService(); | 6739 InitializeEmptyExtensionService(); |
6739 MockExtensionProvider* provider = | 6740 MockExtensionProvider* provider = |
6740 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6741 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
6741 AddMockExternalProvider(provider); | 6742 AddMockExternalProvider(provider); |
6742 | 6743 |
6743 service_->UpdateExternalExtensionAlert(); | 6744 service_->UpdateExternalExtensionAlert(); |
6744 // Should return false, meaning there aren't any extensions that the user | 6745 // Should return false, meaning there aren't any extensions that the user |
6745 // needs to know about. | 6746 // needs to know about. |
6746 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); | 6747 EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError()); |
6747 | 6748 |
6748 // This is a normal extension, installed normally. | 6749 // This is a normal extension, installed normally. |
6749 // This should NOT trigger an alert. | 6750 // This should NOT trigger an alert. |
6750 set_extensions_enabled(true); | 6751 set_extensions_enabled(true); |
6751 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 6752 base::FilePath path = data_dir_.AppendASCII("good.crx"); |
6752 InstallCRX(path, INSTALL_NEW); | 6753 InstallCRX(path, INSTALL_NEW); |
6753 | 6754 |
6754 service_->CheckForExternalUpdates(); | 6755 service_->CheckForExternalUpdates(); |
6755 base::RunLoop().RunUntilIdle(); | 6756 base::RunLoop().RunUntilIdle(); |
6756 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); | 6757 EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError()); |
6757 | 6758 |
6758 // A hosted app, installed externally. | 6759 // A hosted app, installed externally. |
6759 // This should NOT trigger an alert. | 6760 // This should NOT trigger an alert. |
6760 provider->UpdateOrAddExtension(hosted_app, "1.0.0.0", | 6761 provider->UpdateOrAddExtension(hosted_app, "1.0.0.0", |
6761 data_dir_.AppendASCII("hosted_app.crx")); | 6762 data_dir_.AppendASCII("hosted_app.crx")); |
6762 | 6763 |
6763 content::WindowedNotificationObserver observer( | 6764 content::WindowedNotificationObserver observer( |
6764 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6765 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
6765 content::NotificationService::AllSources()); | 6766 content::NotificationService::AllSources()); |
6766 service_->CheckForExternalUpdates(); | 6767 service_->CheckForExternalUpdates(); |
6767 observer.Wait(); | 6768 observer.Wait(); |
6768 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); | 6769 EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError()); |
6769 | 6770 |
6770 // Another normal extension, but installed externally. | 6771 // Another normal extension, but installed externally. |
6771 // This SHOULD trigger an alert. | 6772 // This SHOULD trigger an alert. |
6772 provider->UpdateOrAddExtension(page_action, "1.0.0.0", | 6773 provider->UpdateOrAddExtension(page_action, "1.0.0.0", |
6773 data_dir_.AppendASCII("page_action.crx")); | 6774 data_dir_.AppendASCII("page_action.crx")); |
6774 | 6775 |
6775 content::WindowedNotificationObserver observer2( | 6776 content::WindowedNotificationObserver observer2( |
6776 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6777 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
6777 content::NotificationService::AllSources()); | 6778 content::NotificationService::AllSources()); |
6778 service_->CheckForExternalUpdates(); | 6779 service_->CheckForExternalUpdates(); |
6779 observer2.Wait(); | 6780 observer2.Wait(); |
6780 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); | 6781 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); |
6781 } | 6782 } |
6782 | 6783 |
6783 // Test that external extensions are initially disabled, and that enabling | 6784 // Test that external extensions are initially disabled, and that enabling |
6784 // them clears the prompt. | 6785 // them clears the prompt. |
6785 TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) { | 6786 TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) { |
6786 FeatureSwitch::ScopedOverride prompt( | 6787 FeatureSwitch::ScopedOverride prompt( |
6787 FeatureSwitch::prompt_for_external_extensions(), true); | 6788 FeatureSwitch::prompt_for_external_extensions(), true); |
6788 | 6789 |
6789 InitializeEmptyExtensionService(); | 6790 InitializeEmptyExtensionService(); |
6790 MockExtensionProvider* provider = | 6791 MockExtensionProvider* provider = |
6791 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6792 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
6792 AddMockExternalProvider(provider); | 6793 AddMockExternalProvider(provider); |
6793 | 6794 |
6794 provider->UpdateOrAddExtension(page_action, "1.0.0.0", | 6795 provider->UpdateOrAddExtension(page_action, "1.0.0.0", |
6795 data_dir_.AppendASCII("page_action.crx")); | 6796 data_dir_.AppendASCII("page_action.crx")); |
6796 | 6797 |
6797 content::WindowedNotificationObserver observer( | 6798 content::WindowedNotificationObserver observer( |
6798 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6799 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
6799 content::NotificationService::AllSources()); | 6800 content::NotificationService::AllSources()); |
6800 service_->CheckForExternalUpdates(); | 6801 service_->CheckForExternalUpdates(); |
6801 observer.Wait(); | 6802 observer.Wait(); |
6802 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); | 6803 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); |
6803 EXPECT_FALSE(service_->IsExtensionEnabled(page_action)); | 6804 EXPECT_FALSE(service_->IsExtensionEnabled(page_action)); |
6804 | 6805 |
6805 const Extension* extension = | 6806 const Extension* extension = |
6806 registry_->disabled_extensions().GetByID(page_action); | 6807 registry_->disabled_extensions().GetByID(page_action); |
6807 EXPECT_TRUE(extension); | 6808 EXPECT_TRUE(extension); |
6808 EXPECT_EQ(page_action, extension->id()); | 6809 EXPECT_EQ(page_action, extension->id()); |
6809 | 6810 |
6810 service_->EnableExtension(page_action); | 6811 service_->EnableExtension(page_action); |
6811 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); | 6812 EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError()); |
6812 EXPECT_TRUE(service_->IsExtensionEnabled(page_action)); | 6813 EXPECT_TRUE(service_->IsExtensionEnabled(page_action)); |
6813 } | 6814 } |
6814 | 6815 |
6815 // Test that installing multiple external extensions works. | 6816 // Test that installing multiple external extensions works. |
6816 // Flaky on windows; http://crbug.com/295757 . | 6817 // Flaky on windows; http://crbug.com/295757 . |
6817 #if defined(OS_WIN) | 6818 #if defined(OS_WIN) |
6818 #define MAYBE_ExternalInstallMultiple DISABLED_ExternalInstallMultiple | 6819 #define MAYBE_ExternalInstallMultiple DISABLED_ExternalInstallMultiple |
6819 #else | 6820 #else |
6820 #define MAYBE_ExternalInstallMultiple ExternalInstallMultiple | 6821 #define MAYBE_ExternalInstallMultiple ExternalInstallMultiple |
6821 #endif | 6822 #endif |
(...skipping 12 matching lines...) Expand all Loading... |
6834 data_dir_.AppendASCII("good.crx")); | 6835 data_dir_.AppendASCII("good.crx")); |
6835 provider->UpdateOrAddExtension(theme_crx, "2.0", | 6836 provider->UpdateOrAddExtension(theme_crx, "2.0", |
6836 data_dir_.AppendASCII("theme.crx")); | 6837 data_dir_.AppendASCII("theme.crx")); |
6837 | 6838 |
6838 int count = 3; | 6839 int count = 3; |
6839 content::WindowedNotificationObserver observer( | 6840 content::WindowedNotificationObserver observer( |
6840 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6841 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
6841 base::Bind(&WaitForCountNotificationsCallback, &count)); | 6842 base::Bind(&WaitForCountNotificationsCallback, &count)); |
6842 service_->CheckForExternalUpdates(); | 6843 service_->CheckForExternalUpdates(); |
6843 observer.Wait(); | 6844 observer.Wait(); |
6844 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); | 6845 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); |
6845 EXPECT_FALSE(service_->IsExtensionEnabled(page_action)); | 6846 EXPECT_FALSE(service_->IsExtensionEnabled(page_action)); |
6846 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx)); | 6847 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx)); |
6847 EXPECT_FALSE(service_->IsExtensionEnabled(theme_crx)); | 6848 EXPECT_FALSE(service_->IsExtensionEnabled(theme_crx)); |
6848 | 6849 |
6849 service_->EnableExtension(page_action); | 6850 service_->EnableExtension(page_action); |
6850 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); | 6851 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); |
6851 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); | 6852 EXPECT_FALSE( |
| 6853 service_->external_install_manager()->HasExternalInstallBubble()); |
| 6854 |
6852 service_->EnableExtension(theme_crx); | 6855 service_->EnableExtension(theme_crx); |
6853 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); | 6856 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); |
6854 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); | 6857 EXPECT_FALSE( |
| 6858 service_->external_install_manager()->HasExternalInstallBubble()); |
| 6859 |
6855 service_->EnableExtension(good_crx); | 6860 service_->EnableExtension(good_crx); |
6856 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); | 6861 EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError()); |
6857 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); | 6862 EXPECT_FALSE( |
| 6863 service_->external_install_manager()->HasExternalInstallBubble()); |
6858 } | 6864 } |
6859 | 6865 |
6860 // Test that there is a bubble for external extensions that update | 6866 // Test that there is a bubble for external extensions that update |
6861 // from the webstore if the profile is not new. | 6867 // from the webstore if the profile is not new. |
6862 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreOldProfile) { | 6868 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreOldProfile) { |
6863 FeatureSwitch::ScopedOverride prompt( | 6869 FeatureSwitch::ScopedOverride prompt( |
6864 FeatureSwitch::prompt_for_external_extensions(), true); | 6870 FeatureSwitch::prompt_for_external_extensions(), true); |
6865 | 6871 |
6866 // This sets up the ExtensionPrefs used by our ExtensionService to be | 6872 // This sets up the ExtensionPrefs used by our ExtensionService to be |
6867 // post-first run. | 6873 // post-first run. |
6868 ExtensionServiceInitParams params = CreateDefaultInitParams(); | 6874 ExtensionServiceInitParams params = CreateDefaultInitParams(); |
6869 params.is_first_run = false; | 6875 params.is_first_run = false; |
6870 InitializeExtensionService(params); | 6876 InitializeExtensionService(params); |
6871 | 6877 |
6872 base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx"); | 6878 base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx"); |
6873 PackCRX(data_dir_.AppendASCII("update_from_webstore"), | 6879 PackCRX(data_dir_.AppendASCII("update_from_webstore"), |
6874 data_dir_.AppendASCII("update_from_webstore.pem"), | 6880 data_dir_.AppendASCII("update_from_webstore.pem"), |
6875 crx_path); | 6881 crx_path); |
6876 | 6882 |
6877 MockExtensionProvider* provider = | 6883 MockExtensionProvider* provider = |
6878 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6884 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
6879 AddMockExternalProvider(provider); | 6885 AddMockExternalProvider(provider); |
6880 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6886 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
6881 | 6887 |
6882 content::WindowedNotificationObserver observer( | 6888 content::WindowedNotificationObserver observer( |
6883 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6889 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
6884 content::NotificationService::AllSources()); | 6890 content::NotificationService::AllSources()); |
6885 service_->CheckForExternalUpdates(); | 6891 service_->CheckForExternalUpdates(); |
6886 observer.Wait(); | 6892 observer.Wait(); |
6887 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); | 6893 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); |
6888 EXPECT_TRUE(extensions::HasExternalInstallBubble(service_)); | 6894 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallBubble()); |
6889 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); | 6895 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); |
6890 } | 6896 } |
6891 | 6897 |
6892 // Test that there is no bubble for external extensions if the profile is new. | 6898 // Test that there is no bubble for external extensions if the profile is new. |
6893 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreNewProfile) { | 6899 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreNewProfile) { |
6894 FeatureSwitch::ScopedOverride prompt( | 6900 FeatureSwitch::ScopedOverride prompt( |
6895 FeatureSwitch::prompt_for_external_extensions(), true); | 6901 FeatureSwitch::prompt_for_external_extensions(), true); |
6896 | 6902 |
6897 InitializeEmptyExtensionService(); | 6903 InitializeEmptyExtensionService(); |
6898 | 6904 |
6899 base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx"); | 6905 base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx"); |
6900 PackCRX(data_dir_.AppendASCII("update_from_webstore"), | 6906 PackCRX(data_dir_.AppendASCII("update_from_webstore"), |
6901 data_dir_.AppendASCII("update_from_webstore.pem"), | 6907 data_dir_.AppendASCII("update_from_webstore.pem"), |
6902 crx_path); | 6908 crx_path); |
6903 | 6909 |
6904 MockExtensionProvider* provider = | 6910 MockExtensionProvider* provider = |
6905 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6911 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
6906 AddMockExternalProvider(provider); | 6912 AddMockExternalProvider(provider); |
6907 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6913 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
6908 | 6914 |
6909 content::WindowedNotificationObserver observer( | 6915 content::WindowedNotificationObserver observer( |
6910 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6916 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
6911 content::NotificationService::AllSources()); | 6917 content::NotificationService::AllSources()); |
6912 service_->CheckForExternalUpdates(); | 6918 service_->CheckForExternalUpdates(); |
6913 observer.Wait(); | 6919 observer.Wait(); |
6914 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); | 6920 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); |
6915 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); | 6921 EXPECT_FALSE( |
| 6922 service_->external_install_manager()->HasExternalInstallBubble()); |
6916 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); | 6923 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); |
6917 } | 6924 } |
6918 | 6925 |
| 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 |
6919 TEST_F(ExtensionServiceTest, InstallBlacklistedExtension) { | 7011 TEST_F(ExtensionServiceTest, InstallBlacklistedExtension) { |
6920 InitializeEmptyExtensionService(); | 7012 InitializeEmptyExtensionService(); |
6921 | 7013 |
6922 scoped_refptr<Extension> extension = extensions::ExtensionBuilder() | 7014 scoped_refptr<Extension> extension = extensions::ExtensionBuilder() |
6923 .SetManifest(extensions::DictionaryBuilder() | 7015 .SetManifest(extensions::DictionaryBuilder() |
6924 .Set("name", "extension") | 7016 .Set("name", "extension") |
6925 .Set("version", "1.0") | 7017 .Set("version", "1.0") |
6926 .Set("manifest_version", 2).Build()) | 7018 .Set("manifest_version", 2).Build()) |
6927 .Build(); | 7019 .Build(); |
6928 ASSERT_TRUE(extension.get()); | 7020 ASSERT_TRUE(extension.get()); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7033 | 7125 |
7034 service_->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, | 7126 service_->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, |
7035 content::Source<Profile>(profile_.get()), | 7127 content::Source<Profile>(profile_.get()), |
7036 content::NotificationService::NoDetails()); | 7128 content::NotificationService::NoDetails()); |
7037 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); | 7129 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); |
7038 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 7130 EXPECT_EQ(0u, registry_->enabled_extensions().size()); |
7039 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 7131 EXPECT_EQ(0u, registry_->disabled_extensions().size()); |
7040 EXPECT_EQ(0u, registry_->terminated_extensions().size()); | 7132 EXPECT_EQ(0u, registry_->terminated_extensions().size()); |
7041 EXPECT_EQ(0u, registry_->blacklisted_extensions().size()); | 7133 EXPECT_EQ(0u, registry_->blacklisted_extensions().size()); |
7042 } | 7134 } |
OLD | NEW |