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

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

Issue 309483012: Revert 273982 "Refactor external_install_ui" (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: 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_manager.h" 50 #include "chrome/browser/extensions/external_install_ui.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(service_->external_install_manager()->HasExternalInstallError()); 6746 EXPECT_FALSE(extensions::HasExternalInstallError(service_));
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(service_->external_install_manager()->HasExternalInstallError()); 6756 EXPECT_FALSE(extensions::HasExternalInstallError(service_));
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(service_->external_install_manager()->HasExternalInstallError()); 6768 EXPECT_FALSE(extensions::HasExternalInstallError(service_));
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(service_->external_install_manager()->HasExternalInstallError()); 6780 EXPECT_TRUE(extensions::HasExternalInstallError(service_));
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(service_->external_install_manager()->HasExternalInstallError()); 6802 EXPECT_TRUE(extensions::HasExternalInstallError(service_));
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(service_->external_install_manager()->HasExternalInstallError()); 6811 EXPECT_FALSE(extensions::HasExternalInstallError(service_));
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(service_->external_install_manager()->HasExternalInstallError()); 6844 EXPECT_TRUE(extensions::HasExternalInstallError(service_));
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(service_->external_install_manager()->HasExternalInstallError()); 6850 EXPECT_TRUE(extensions::HasExternalInstallError(service_));
6851 EXPECT_FALSE( 6851 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_));
6852 service_->external_install_manager()->HasExternalInstallBubble());
6853
6854 service_->EnableExtension(theme_crx); 6852 service_->EnableExtension(theme_crx);
6855 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); 6853 EXPECT_TRUE(extensions::HasExternalInstallError(service_));
6856 EXPECT_FALSE( 6854 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_));
6857 service_->external_install_manager()->HasExternalInstallBubble());
6858
6859 service_->EnableExtension(good_crx); 6855 service_->EnableExtension(good_crx);
6860 EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError()); 6856 EXPECT_FALSE(extensions::HasExternalInstallError(service_));
6861 EXPECT_FALSE( 6857 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_));
6862 service_->external_install_manager()->HasExternalInstallBubble());
6863 } 6858 }
6864 6859
6865 // Test that there is a bubble for external extensions that update 6860 // Test that there is a bubble for external extensions that update
6866 // from the webstore if the profile is not new. 6861 // from the webstore if the profile is not new.
6867 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreOldProfile) { 6862 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreOldProfile) {
6868 FeatureSwitch::ScopedOverride prompt( 6863 FeatureSwitch::ScopedOverride prompt(
6869 FeatureSwitch::prompt_for_external_extensions(), true); 6864 FeatureSwitch::prompt_for_external_extensions(), true);
6870 6865
6871 // This sets up the ExtensionPrefs used by our ExtensionService to be 6866 // This sets up the ExtensionPrefs used by our ExtensionService to be
6872 // post-first run. 6867 // post-first run.
6873 ExtensionServiceInitParams params = CreateDefaultInitParams(); 6868 ExtensionServiceInitParams params = CreateDefaultInitParams();
6874 params.is_first_run = false; 6869 params.is_first_run = false;
6875 InitializeExtensionService(params); 6870 InitializeExtensionService(params);
6876 6871
6877 base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx"); 6872 base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx");
6878 PackCRX(data_dir_.AppendASCII("update_from_webstore"), 6873 PackCRX(data_dir_.AppendASCII("update_from_webstore"),
6879 data_dir_.AppendASCII("update_from_webstore.pem"), 6874 data_dir_.AppendASCII("update_from_webstore.pem"),
6880 crx_path); 6875 crx_path);
6881 6876
6882 MockExtensionProvider* provider = 6877 MockExtensionProvider* provider =
6883 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); 6878 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF);
6884 AddMockExternalProvider(provider); 6879 AddMockExternalProvider(provider);
6885 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); 6880 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path);
6886 6881
6887 content::WindowedNotificationObserver observer( 6882 content::WindowedNotificationObserver observer(
6888 chrome::NOTIFICATION_CRX_INSTALLER_DONE, 6883 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
6889 content::NotificationService::AllSources()); 6884 content::NotificationService::AllSources());
6890 service_->CheckForExternalUpdates(); 6885 service_->CheckForExternalUpdates();
6891 observer.Wait(); 6886 observer.Wait();
6892 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); 6887 EXPECT_TRUE(extensions::HasExternalInstallError(service_));
6893 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallBubble()); 6888 EXPECT_TRUE(extensions::HasExternalInstallBubble(service_));
6894 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); 6889 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore));
6895 } 6890 }
6896 6891
6897 // 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.
6898 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreNewProfile) { 6893 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreNewProfile) {
6899 FeatureSwitch::ScopedOverride prompt( 6894 FeatureSwitch::ScopedOverride prompt(
6900 FeatureSwitch::prompt_for_external_extensions(), true); 6895 FeatureSwitch::prompt_for_external_extensions(), true);
6901 6896
6902 InitializeEmptyExtensionService(); 6897 InitializeEmptyExtensionService();
6903 6898
6904 base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx"); 6899 base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx");
6905 PackCRX(data_dir_.AppendASCII("update_from_webstore"), 6900 PackCRX(data_dir_.AppendASCII("update_from_webstore"),
6906 data_dir_.AppendASCII("update_from_webstore.pem"), 6901 data_dir_.AppendASCII("update_from_webstore.pem"),
6907 crx_path); 6902 crx_path);
6908 6903
6909 MockExtensionProvider* provider = 6904 MockExtensionProvider* provider =
6910 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); 6905 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF);
6911 AddMockExternalProvider(provider); 6906 AddMockExternalProvider(provider);
6912 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); 6907 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path);
6913 6908
6914 content::WindowedNotificationObserver observer( 6909 content::WindowedNotificationObserver observer(
6915 chrome::NOTIFICATION_CRX_INSTALLER_DONE, 6910 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
6916 content::NotificationService::AllSources()); 6911 content::NotificationService::AllSources());
6917 service_->CheckForExternalUpdates(); 6912 service_->CheckForExternalUpdates();
6918 observer.Wait(); 6913 observer.Wait();
6919 EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError()); 6914 EXPECT_TRUE(extensions::HasExternalInstallError(service_));
6920 EXPECT_FALSE( 6915 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_));
6921 service_->external_install_manager()->HasExternalInstallBubble());
6922 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); 6916 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore));
6923 } 6917 }
6924 6918
6925 TEST_F(ExtensionServiceTest, InstallBlacklistedExtension) { 6919 TEST_F(ExtensionServiceTest, InstallBlacklistedExtension) {
6926 InitializeEmptyExtensionService(); 6920 InitializeEmptyExtensionService();
6927 6921
6928 scoped_refptr<Extension> extension = extensions::ExtensionBuilder() 6922 scoped_refptr<Extension> extension = extensions::ExtensionBuilder()
6929 .SetManifest(extensions::DictionaryBuilder() 6923 .SetManifest(extensions::DictionaryBuilder()
6930 .Set("name", "extension") 6924 .Set("name", "extension")
6931 .Set("version", "1.0") 6925 .Set("version", "1.0")
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
7039 7033
7040 service_->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, 7034 service_->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED,
7041 content::Source<Profile>(profile_.get()), 7035 content::Source<Profile>(profile_.get()),
7042 content::NotificationService::NoDetails()); 7036 content::NotificationService::NoDetails());
7043 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); 7037 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_);
7044 EXPECT_EQ(0u, registry_->enabled_extensions().size()); 7038 EXPECT_EQ(0u, registry_->enabled_extensions().size());
7045 EXPECT_EQ(0u, registry_->disabled_extensions().size()); 7039 EXPECT_EQ(0u, registry_->disabled_extensions().size());
7046 EXPECT_EQ(0u, registry_->terminated_extensions().size()); 7040 EXPECT_EQ(0u, registry_->terminated_extensions().size());
7047 EXPECT_EQ(0u, registry_->blacklisted_extensions().size()); 7041 EXPECT_EQ(0u, registry_->blacklisted_extensions().size());
7048 } 7042 }
OLDNEW
« no previous file with comments | « trunk/src/chrome/browser/extensions/extension_service.cc ('k') | trunk/src/chrome/browser/extensions/external_install_error.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698