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 |