Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Side by Side Diff: chrome/browser/extensions/extension_service_unittest.cc

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

Powered by Google App Engine
This is Rietveld 408576698