Chromium Code Reviews| 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <set> | 6 #include <set> |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/at_exit.h" | 9 #include "base/at_exit.h" |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 48 #include "chrome/browser/extensions/external_install_error.h" | 48 #include "chrome/browser/extensions/external_install_error.h" |
| 49 #include "chrome/browser/extensions/external_install_manager.h" | 49 #include "chrome/browser/extensions/external_install_manager.h" |
| 50 #include "chrome/browser/extensions/external_policy_loader.h" | 50 #include "chrome/browser/extensions/external_policy_loader.h" |
| 51 #include "chrome/browser/extensions/external_pref_loader.h" | 51 #include "chrome/browser/extensions/external_pref_loader.h" |
| 52 #include "chrome/browser/extensions/external_provider_impl.h" | 52 #include "chrome/browser/extensions/external_provider_impl.h" |
| 53 #include "chrome/browser/extensions/fake_safe_browsing_database_manager.h" | 53 #include "chrome/browser/extensions/fake_safe_browsing_database_manager.h" |
| 54 #include "chrome/browser/extensions/installed_loader.h" | 54 #include "chrome/browser/extensions/installed_loader.h" |
| 55 #include "chrome/browser/extensions/pack_extension_job.h" | 55 #include "chrome/browser/extensions/pack_extension_job.h" |
| 56 #include "chrome/browser/extensions/pending_extension_info.h" | 56 #include "chrome/browser/extensions/pending_extension_info.h" |
| 57 #include "chrome/browser/extensions/pending_extension_manager.h" | 57 #include "chrome/browser/extensions/pending_extension_manager.h" |
| 58 #include "chrome/browser/extensions/permissions_updater.h" | |
| 58 #include "chrome/browser/extensions/test_blacklist.h" | 59 #include "chrome/browser/extensions/test_blacklist.h" |
| 59 #include "chrome/browser/extensions/test_extension_system.h" | 60 #include "chrome/browser/extensions/test_extension_system.h" |
| 60 #include "chrome/browser/extensions/unpacked_installer.h" | 61 #include "chrome/browser/extensions/unpacked_installer.h" |
| 61 #include "chrome/browser/extensions/updater/extension_updater.h" | 62 #include "chrome/browser/extensions/updater/extension_updater.h" |
| 62 #include "chrome/browser/prefs/pref_service_syncable.h" | 63 #include "chrome/browser/prefs/pref_service_syncable.h" |
| 63 #include "chrome/browser/sync/profile_sync_service.h" | 64 #include "chrome/browser/sync/profile_sync_service.h" |
| 64 #include "chrome/browser/sync/profile_sync_service_factory.h" | 65 #include "chrome/browser/sync/profile_sync_service_factory.h" |
| 65 #include "chrome/common/chrome_constants.h" | 66 #include "chrome/common/chrome_constants.h" |
| 66 #include "chrome/common/chrome_switches.h" | 67 #include "chrome/common/chrome_switches.h" |
| 67 #include "chrome/common/extensions/api/plugins/plugins_handler.h" | 68 #include "chrome/common/extensions/api/plugins/plugins_handler.h" |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 93 #include "extensions/browser/test_management_policy.h" | 94 #include "extensions/browser/test_management_policy.h" |
| 94 #include "extensions/browser/uninstall_reason.h" | 95 #include "extensions/browser/uninstall_reason.h" |
| 95 #include "extensions/common/constants.h" | 96 #include "extensions/common/constants.h" |
| 96 #include "extensions/common/extension.h" | 97 #include "extensions/common/extension.h" |
| 97 #include "extensions/common/extension_builder.h" | 98 #include "extensions/common/extension_builder.h" |
| 98 #include "extensions/common/extension_l10n_util.h" | 99 #include "extensions/common/extension_l10n_util.h" |
| 99 #include "extensions/common/extension_resource.h" | 100 #include "extensions/common/extension_resource.h" |
| 100 #include "extensions/common/feature_switch.h" | 101 #include "extensions/common/feature_switch.h" |
| 101 #include "extensions/common/manifest_constants.h" | 102 #include "extensions/common/manifest_constants.h" |
| 102 #include "extensions/common/manifest_handlers/background_info.h" | 103 #include "extensions/common/manifest_handlers/background_info.h" |
| 104 #include "extensions/common/manifest_handlers/permissions_parser.h" | |
| 103 #include "extensions/common/permissions/permission_set.h" | 105 #include "extensions/common/permissions/permission_set.h" |
| 104 #include "extensions/common/permissions/permissions_data.h" | 106 #include "extensions/common/permissions/permissions_data.h" |
| 105 #include "extensions/common/switches.h" | 107 #include "extensions/common/switches.h" |
| 106 #include "extensions/common/url_pattern.h" | 108 #include "extensions/common/url_pattern.h" |
| 107 #include "extensions/common/value_builder.h" | 109 #include "extensions/common/value_builder.h" |
| 108 #include "gpu/config/gpu_info.h" | 110 #include "gpu/config/gpu_info.h" |
| 109 #include "grit/browser_resources.h" | 111 #include "grit/browser_resources.h" |
| 110 #include "net/cookies/canonical_cookie.h" | 112 #include "net/cookies/canonical_cookie.h" |
| 111 #include "net/cookies/cookie_monster.h" | 113 #include "net/cookies/cookie_monster.h" |
| 112 #include "net/cookies/cookie_options.h" | 114 #include "net/cookies/cookie_options.h" |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 182 const char all_zero[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; | 184 const char all_zero[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; |
| 183 const char good2048[] = "nmgjhmhbleinmjpbdhgajfjkbijcmgbh"; | 185 const char good2048[] = "nmgjhmhbleinmjpbdhgajfjkbijcmgbh"; |
| 184 const char good_crx[] = "ldnnhddmnhbkjipkidpdiheffobcpfmf"; | 186 const char good_crx[] = "ldnnhddmnhbkjipkidpdiheffobcpfmf"; |
| 185 const char hosted_app[] = "kbmnembihfiondgfjekmnmcbddelicoi"; | 187 const char hosted_app[] = "kbmnembihfiondgfjekmnmcbddelicoi"; |
| 186 const char page_action[] = "obcimlgaoabeegjmmpldobjndiealpln"; | 188 const char page_action[] = "obcimlgaoabeegjmmpldobjndiealpln"; |
| 187 const char theme_crx[] = "iamefpfkojoapidjnbafmgkgncegbkad"; | 189 const char theme_crx[] = "iamefpfkojoapidjnbafmgkgncegbkad"; |
| 188 const char theme2_crx[] = "pjpgmfcmabopnnfonnhmdjglfpjjfkbf"; | 190 const char theme2_crx[] = "pjpgmfcmabopnnfonnhmdjglfpjjfkbf"; |
| 189 const char permissions_crx[] = "eagpmdpfmaekmmcejjbmjoecnejeiiin"; | 191 const char permissions_crx[] = "eagpmdpfmaekmmcejjbmjoecnejeiiin"; |
| 190 const char unpacked[] = "cbcdidchbppangcjoddlpdjlenngjldk"; | 192 const char unpacked[] = "cbcdidchbppangcjoddlpdjlenngjldk"; |
| 191 const char updates_from_webstore[] = "akjooamlhcgeopfifcmlggaebeocgokj"; | 193 const char updates_from_webstore[] = "akjooamlhcgeopfifcmlggaebeocgokj"; |
| 194 const char permissions_blocklist[] = "noffkehfcaggllbcojjbopcmlhcnhcdn"; | |
| 192 | 195 |
| 193 struct ExtensionsOrder { | 196 struct ExtensionsOrder { |
| 194 bool operator()(const scoped_refptr<const Extension>& a, | 197 bool operator()(const scoped_refptr<const Extension>& a, |
| 195 const scoped_refptr<const Extension>& b) { | 198 const scoped_refptr<const Extension>& b) { |
| 196 return a->name() < b->name(); | 199 return a->name() < b->name(); |
| 197 } | 200 } |
| 198 }; | 201 }; |
| 199 | 202 |
| 200 static std::vector<base::string16> GetErrors() { | 203 static std::vector<base::string16> GetErrors() { |
| 201 const std::vector<base::string16>* errors = | 204 const std::vector<base::string16>* errors = |
| (...skipping 563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 765 " \"id\": 1,\n" | 768 " \"id\": 1,\n" |
| 766 " \"features\": [\"webgl\"]\n" | 769 " \"features\": [\"webgl\"]\n" |
| 767 " }\n" | 770 " }\n" |
| 768 " ]\n" | 771 " ]\n" |
| 769 "}"; | 772 "}"; |
| 770 gpu::GPUInfo gpu_info; | 773 gpu::GPUInfo gpu_info; |
| 771 content::GpuDataManager::GetInstance()->InitializeForTesting( | 774 content::GpuDataManager::GetInstance()->InitializeForTesting( |
| 772 json_blacklist, gpu_info); | 775 json_blacklist, gpu_info); |
| 773 } | 776 } |
| 774 | 777 |
| 778 // Grants all optional permissions stated in manifest to active permission | |
| 779 // set for extension |id|. | |
| 780 void GrantAllOptionalPermissions(std::string id) { | |
|
Joao da Silva
2014/10/15 14:39:26
const std::string&
binjin
2014/10/16 18:13:58
Done.
| |
| 781 const Extension* extension = service()->GetInstalledExtension(id); | |
| 782 scoped_refptr<const PermissionSet> all_optional_permissions = | |
| 783 extensions::PermissionsParser::GetOptionalPermissions(extension); | |
| 784 extensions::PermissionsUpdater perms_updater(profile()); | |
| 785 perms_updater.AddPermissions(extension, all_optional_permissions.get()); | |
| 786 } | |
| 787 | |
| 775 // Helper method to set up a WindowedNotificationObserver to wait for a | 788 // Helper method to set up a WindowedNotificationObserver to wait for a |
| 776 // specific CrxInstaller to finish if we don't know the value of the | 789 // specific CrxInstaller to finish if we don't know the value of the |
| 777 // |installer| yet. | 790 // |installer| yet. |
| 778 static bool IsCrxInstallerDone(extensions::CrxInstaller** installer, | 791 static bool IsCrxInstallerDone(extensions::CrxInstaller** installer, |
| 779 const content::NotificationSource& source, | 792 const content::NotificationSource& source, |
| 780 const content::NotificationDetails& details) { | 793 const content::NotificationDetails& details) { |
| 781 return content::Source<extensions::CrxInstaller>(source).ptr() == | 794 return content::Source<extensions::CrxInstaller>(source).ptr() == |
| 782 *installer; | 795 *installer; |
| 783 } | 796 } |
| 784 | 797 |
| (...skipping 3059 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3844 extensions::TestManagementPolicyProvider provider( | 3857 extensions::TestManagementPolicyProvider provider( |
| 3845 extensions::TestManagementPolicyProvider::MUST_REMAIN_ENABLED); | 3858 extensions::TestManagementPolicyProvider::MUST_REMAIN_ENABLED); |
| 3846 GetManagementPolicy()->RegisterProvider(&provider); | 3859 GetManagementPolicy()->RegisterProvider(&provider); |
| 3847 | 3860 |
| 3848 // Reinstall the extension. | 3861 // Reinstall the extension. |
| 3849 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_UPDATED); | 3862 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_UPDATED); |
| 3850 EXPECT_EQ(1u, registry()->enabled_extensions().size()); | 3863 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
| 3851 EXPECT_EQ(0u, registry()->disabled_extensions().size()); | 3864 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
| 3852 } | 3865 } |
| 3853 | 3866 |
| 3867 // Tests that extensions with conflicting required permissions by enterprise | |
| 3868 // policy cannot be installed. | |
| 3869 TEST_F(ExtensionServiceTest, PolicyBlockedPermissionNewExtensionInstall) { | |
| 3870 InitializeEmptyExtensionServiceWithTestingPrefs(); | |
| 3871 base::FilePath path = data_dir().AppendASCII("permissions_blocklist"); | |
| 3872 | |
| 3873 { | |
| 3874 // Update policy to block one of the required permissions of target. | |
| 3875 ManagementPrefUpdater pref(profile_->GetTestingPrefService()); | |
| 3876 pref.AddBlockedPermission("*", "tabs"); | |
| 3877 } | |
| 3878 | |
| 3879 // The extension should be failed to install. | |
| 3880 PackAndInstallCRX(path, INSTALL_FAILED); | |
| 3881 | |
| 3882 { | |
| 3883 // Update policy to block one of the optional permissions instead. | |
| 3884 ManagementPrefUpdater pref(profile_->GetTestingPrefService()); | |
| 3885 pref.ClearBlockedPermissions("*"); | |
| 3886 pref.AddBlockedPermission("*", "history"); | |
| 3887 } | |
| 3888 | |
| 3889 // The extension should failed to install. | |
|
Joao da Silva
2014/10/15 14:39:26
Should succeed?
binjin
2014/10/16 18:13:58
Done.
| |
| 3890 PackAndInstallCRX(path, INSTALL_NEW); | |
| 3891 } | |
| 3892 | |
| 3893 // Tests that extension supposed to be force installed but with conflicting | |
| 3894 // required permissions cannot be installed. | |
| 3895 TEST_F(ExtensionServiceTest, PolicyBlockedPermissionConflictsWithForceInstall) { | |
| 3896 InitializeEmptyExtensionServiceWithTestingPrefs(); | |
| 3897 | |
| 3898 // Pack the crx file. | |
| 3899 base::FilePath path = data_dir().AppendASCII("permissions_blocklist"); | |
| 3900 base::FilePath pem_path = data_dir().AppendASCII("permissions_blocklist.pem"); | |
| 3901 base::ScopedTempDir temp_dir; | |
| 3902 EXPECT_TRUE(temp_dir.CreateUniqueTempDir()); | |
| 3903 base::FilePath crx_path = temp_dir.path().AppendASCII("temp.crx"); | |
| 3904 | |
| 3905 PackCRX(path, pem_path, crx_path); | |
|
Joao da Silva
2014/10/15 14:39:26
Assign this to a "const Extension* extension" and
binjin
2014/10/16 18:13:58
PackCRX() only create an crx_file and returns noth
| |
| 3906 | |
| 3907 { | |
| 3908 // Block one of the required permissions. | |
| 3909 ManagementPrefUpdater pref(profile_->GetTestingPrefService()); | |
| 3910 pref.AddBlockedPermission("*", "tabs"); | |
| 3911 } | |
| 3912 | |
| 3913 // Use MockExtensionProvider to simulate force installing extension. | |
| 3914 MockExtensionProvider* provider = | |
| 3915 new MockExtensionProvider(service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); | |
| 3916 AddMockExternalProvider(provider); | |
| 3917 provider->UpdateOrAddExtension(permissions_blocklist, "1.0", crx_path); | |
| 3918 | |
| 3919 { | |
| 3920 // Attempts to force install this extension. | |
| 3921 content::WindowedNotificationObserver observer( | |
| 3922 extensions::NOTIFICATION_CRX_INSTALLER_DONE, | |
| 3923 content::NotificationService::AllSources()); | |
| 3924 service()->CheckForExternalUpdates(); | |
| 3925 observer.Wait(); | |
| 3926 } | |
| 3927 | |
| 3928 // The extension should not be installed. | |
| 3929 ASSERT_FALSE(service()->GetInstalledExtension(permissions_blocklist)); | |
| 3930 | |
| 3931 // Remove this extension from pending extension manager as we would like to | |
| 3932 // give another attempt later. | |
| 3933 service()->pending_extension_manager()->Remove(permissions_blocklist); | |
| 3934 | |
| 3935 { | |
| 3936 // Clears the permission block list. | |
| 3937 ManagementPrefUpdater pref(profile_->GetTestingPrefService()); | |
| 3938 pref.ClearBlockedPermissions("*"); | |
| 3939 } | |
| 3940 | |
| 3941 { | |
| 3942 // Attempts to force install this extension again. | |
| 3943 content::WindowedNotificationObserver observer( | |
| 3944 extensions::NOTIFICATION_CRX_INSTALLER_DONE, | |
| 3945 content::NotificationService::AllSources()); | |
| 3946 service()->CheckForExternalUpdates(); | |
| 3947 observer.Wait(); | |
| 3948 } | |
| 3949 | |
| 3950 const Extension* installed = | |
| 3951 service()->GetInstalledExtension(permissions_blocklist); | |
| 3952 ASSERT_TRUE(installed); | |
| 3953 EXPECT_EQ(installed->location(), Manifest::EXTERNAL_POLICY_DOWNLOAD); | |
| 3954 } | |
| 3955 | |
| 3956 // Tests that newer versions of an extension with conflicting required | |
| 3957 // permissions by enterprise policy cannot be updated to. | |
| 3958 TEST_F(ExtensionServiceTest, PolicyBlockedPermissionExtensionUpdate) { | |
| 3959 InitializeEmptyExtensionServiceWithTestingPrefs(); | |
| 3960 | |
| 3961 base::FilePath path = data_dir().AppendASCII("permissions_blocklist"); | |
| 3962 base::FilePath path2 = data_dir().AppendASCII("permissions_blocklist2"); | |
| 3963 base::FilePath pem_path = data_dir().AppendASCII("permissions_blocklist.pem"); | |
| 3964 | |
| 3965 // Install 'permissions_blocklist'. | |
| 3966 const Extension* installed = PackAndInstallCRX(path, pem_path, INSTALL_NEW); | |
| 3967 EXPECT_EQ(installed->id(), permissions_blocklist); | |
| 3968 | |
| 3969 { | |
| 3970 // Block one of the required permissions of 'permissions_blocklist2'. | |
| 3971 ManagementPrefUpdater pref(profile_->GetTestingPrefService()); | |
| 3972 pref.AddBlockedPermission("*", "downloads"); | |
| 3973 } | |
| 3974 | |
| 3975 // Install 'permissions_blocklist' again, should be updated. | |
| 3976 const Extension* updated = PackAndInstallCRX(path, pem_path, INSTALL_UPDATED); | |
| 3977 EXPECT_EQ(updated->id(), permissions_blocklist); | |
| 3978 | |
| 3979 std::string old_version = updated->VersionString(); | |
| 3980 | |
| 3981 // Attempts to update to 'permissions_blocklist2' should fail. | |
| 3982 PackAndInstallCRX(path2, pem_path, INSTALL_FAILED); | |
| 3983 | |
| 3984 // Verify that the old version is still enabled. | |
| 3985 updated = service()->GetExtensionById(permissions_blocklist, false); | |
| 3986 ASSERT_TRUE(updated); | |
| 3987 EXPECT_EQ(old_version, updated->VersionString()); | |
| 3988 } | |
| 3989 | |
| 3990 // Tests that policy update with additional permissions blocked revoke | |
| 3991 // conflicting granted optional permissions and unload extensions with | |
| 3992 // conflicting required permissions, including the force installed ones. | |
| 3993 TEST_F(ExtensionServiceTest, PolicyBlockedPermissionPolicyUpdate) { | |
| 3994 InitializeEmptyExtensionServiceWithTestingPrefs(); | |
| 3995 | |
| 3996 base::FilePath path = data_dir().AppendASCII("permissions_blocklist"); | |
| 3997 base::FilePath path2 = data_dir().AppendASCII("permissions_blocklist2"); | |
| 3998 base::FilePath pem_path = data_dir().AppendASCII("permissions_blocklist.pem"); | |
| 3999 | |
| 4000 // Pack the crx file. | |
| 4001 base::ScopedTempDir temp_dir; | |
| 4002 EXPECT_TRUE(temp_dir.CreateUniqueTempDir()); | |
| 4003 base::FilePath crx_path = temp_dir.path().AppendASCII("temp.crx"); | |
| 4004 | |
| 4005 PackCRX(path2, pem_path, crx_path); | |
|
Joao da Silva
2014/10/15 14:39:26
Check the ID of the returned Extension*
binjin
2014/10/16 18:13:58
Same as above.
| |
| 4006 | |
| 4007 // Install two arbitary extensions with specified manifest. | |
| 4008 std::string ext1 = PackAndInstallCRX(path, INSTALL_NEW)->id(); | |
| 4009 std::string ext2 = PackAndInstallCRX(path2, INSTALL_NEW)->id(); | |
| 4010 ASSERT_NE(ext1, permissions_blocklist); | |
| 4011 ASSERT_NE(ext2, permissions_blocklist); | |
| 4012 ASSERT_NE(ext1, ext2); | |
| 4013 | |
| 4014 // Force install another extension with known id and same manifest as 'ext2'. | |
| 4015 std::string ext2_forced = permissions_blocklist; | |
| 4016 MockExtensionProvider* provider = | |
| 4017 new MockExtensionProvider(service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); | |
| 4018 AddMockExternalProvider(provider); | |
| 4019 provider->UpdateOrAddExtension(ext2_forced, "2.0", crx_path); | |
| 4020 | |
| 4021 content::WindowedNotificationObserver observer( | |
| 4022 extensions::NOTIFICATION_CRX_INSTALLER_DONE, | |
| 4023 content::NotificationService::AllSources()); | |
| 4024 service()->CheckForExternalUpdates(); | |
| 4025 observer.Wait(); | |
| 4026 | |
| 4027 extensions::ExtensionRegistry* registry = | |
| 4028 extensions::ExtensionRegistry::Get(profile()); | |
| 4029 | |
| 4030 // Verify all three extensions are installed and enabled. | |
| 4031 ASSERT_TRUE(registry->enabled_extensions().GetByID(ext1)); | |
| 4032 ASSERT_TRUE(registry->enabled_extensions().GetByID(ext2)); | |
| 4033 ASSERT_TRUE(registry->enabled_extensions().GetByID(ext2_forced)); | |
| 4034 | |
| 4035 // Grant all optional permissions to each extension. | |
| 4036 GrantAllOptionalPermissions(ext1); | |
| 4037 GrantAllOptionalPermissions(ext2); | |
| 4038 GrantAllOptionalPermissions(ext2_forced); | |
| 4039 | |
| 4040 EXPECT_TRUE(ExtensionPrefs::Get(profile()) | |
| 4041 ->GetActivePermissions(ext1) | |
| 4042 ->HasAPIPermission(extensions::APIPermission::kDownloads)); | |
| 4043 | |
| 4044 // Set policy to block 'downloads' permission. | |
| 4045 { | |
| 4046 ManagementPrefUpdater pref(profile_->GetTestingPrefService()); | |
| 4047 pref.AddBlockedPermission("*", "downloads"); | |
| 4048 } | |
| 4049 | |
| 4050 base::RunLoop().RunUntilIdle(); | |
| 4051 | |
| 4052 // 'ext1' should still be enabled, but with 'downloads' permission revoked. | |
| 4053 EXPECT_TRUE(registry->enabled_extensions().GetByID(ext1)); | |
| 4054 EXPECT_FALSE(ExtensionPrefs::Get(profile()) | |
| 4055 ->GetActivePermissions(ext1) | |
| 4056 ->HasAPIPermission(extensions::APIPermission::kDownloads)); | |
| 4057 | |
| 4058 // 'ext2' should be disabled because one of its required permissions is | |
| 4059 // blocked. | |
| 4060 EXPECT_FALSE(registry->enabled_extensions().GetByID(ext2)); | |
| 4061 | |
| 4062 // 'ext2_forced' should be handled the same as 'ext2' | |
| 4063 EXPECT_FALSE(registry->enabled_extensions().GetByID(ext2_forced)); | |
| 4064 } | |
| 4065 | |
| 3854 // Flaky on windows; http://crbug.com/309833 | 4066 // Flaky on windows; http://crbug.com/309833 |
| 3855 #if defined(OS_WIN) | 4067 #if defined(OS_WIN) |
| 3856 #define MAYBE_ExternalExtensionAutoAcknowledgement DISABLED_ExternalExtensionAut oAcknowledgement | 4068 #define MAYBE_ExternalExtensionAutoAcknowledgement DISABLED_ExternalExtensionAut oAcknowledgement |
| 3857 #else | 4069 #else |
| 3858 #define MAYBE_ExternalExtensionAutoAcknowledgement ExternalExtensionAutoAcknowle dgement | 4070 #define MAYBE_ExternalExtensionAutoAcknowledgement ExternalExtensionAutoAcknowle dgement |
| 3859 #endif | 4071 #endif |
| 3860 TEST_F(ExtensionServiceTest, MAYBE_ExternalExtensionAutoAcknowledgement) { | 4072 TEST_F(ExtensionServiceTest, MAYBE_ExternalExtensionAutoAcknowledgement) { |
| 3861 InitializeEmptyExtensionService(); | 4073 InitializeEmptyExtensionService(); |
| 3862 service()->set_extensions_enabled(true); | 4074 service()->set_extensions_enabled(true); |
| 3863 | 4075 |
| (...skipping 3274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7138 | 7350 |
| 7139 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, | 7351 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, |
| 7140 content::Source<Profile>(profile()), | 7352 content::Source<Profile>(profile()), |
| 7141 content::NotificationService::NoDetails()); | 7353 content::NotificationService::NoDetails()); |
| 7142 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); | 7354 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); |
| 7143 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 7355 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
| 7144 EXPECT_EQ(0u, registry()->disabled_extensions().size()); | 7356 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
| 7145 EXPECT_EQ(0u, registry()->terminated_extensions().size()); | 7357 EXPECT_EQ(0u, registry()->terminated_extensions().size()); |
| 7146 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); | 7358 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); |
| 7147 } | 7359 } |
| OLD | NEW |