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 2866 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2877 } // namespace | 2877 } // namespace |
2878 | 2878 |
2879 // Test adding a pending extension. | 2879 // Test adding a pending extension. |
2880 TEST_F(ExtensionServiceTest, AddPendingExtensionFromSync) { | 2880 TEST_F(ExtensionServiceTest, AddPendingExtensionFromSync) { |
2881 InitializeEmptyExtensionService(); | 2881 InitializeEmptyExtensionService(); |
2882 | 2882 |
2883 const std::string kFakeId(all_zero); | 2883 const std::string kFakeId(all_zero); |
2884 const GURL kFakeUpdateURL("http:://fake.update/url"); | 2884 const GURL kFakeUpdateURL("http:://fake.update/url"); |
2885 const bool kFakeInstallSilently(true); | 2885 const bool kFakeInstallSilently(true); |
2886 const bool kFakeRemoteInstall(false); | 2886 const bool kFakeRemoteInstall(false); |
| 2887 const bool kFakeInstalledByCustodian(false); |
2887 | 2888 |
2888 EXPECT_TRUE( | 2889 EXPECT_TRUE( |
2889 service()->pending_extension_manager()->AddFromSync(kFakeId, | 2890 service()->pending_extension_manager()->AddFromSync( |
2890 kFakeUpdateURL, | 2891 kFakeId, |
2891 &IsExtension, | 2892 kFakeUpdateURL, |
2892 kFakeInstallSilently, | 2893 &IsExtension, |
2893 kFakeRemoteInstall)); | 2894 kFakeInstallSilently, |
| 2895 kFakeRemoteInstall, |
| 2896 kFakeInstalledByCustodian)); |
2894 | 2897 |
2895 const extensions::PendingExtensionInfo* pending_extension_info; | 2898 const extensions::PendingExtensionInfo* pending_extension_info; |
2896 ASSERT_TRUE((pending_extension_info = | 2899 ASSERT_TRUE((pending_extension_info = |
2897 service()->pending_extension_manager()->GetById(kFakeId))); | 2900 service()->pending_extension_manager()->GetById(kFakeId))); |
2898 EXPECT_EQ(kFakeUpdateURL, pending_extension_info->update_url()); | 2901 EXPECT_EQ(kFakeUpdateURL, pending_extension_info->update_url()); |
2899 EXPECT_EQ(&IsExtension, pending_extension_info->should_allow_install_); | 2902 EXPECT_EQ(&IsExtension, pending_extension_info->should_allow_install_); |
2900 EXPECT_EQ(kFakeInstallSilently, pending_extension_info->install_silently()); | 2903 EXPECT_EQ(kFakeInstallSilently, pending_extension_info->install_silently()); |
2901 // Use | 2904 // Use |
2902 // EXPECT_TRUE(kFakeRemoteInstall == pending_extension_info->remote_install()) | 2905 // EXPECT_TRUE(kFakeRemoteInstall == pending_extension_info->remote_install()) |
2903 // instead of | 2906 // instead of |
2904 // EXPECT_EQ(kFakeRemoteInstall, pending_extension_info->remote_install()) | 2907 // EXPECT_EQ(kFakeRemoteInstall, pending_extension_info->remote_install()) |
2905 // as gcc 4.7 issues the following warning on EXPECT_EQ(false, x), which is | 2908 // as gcc 4.7 issues the following warning on EXPECT_EQ(false, x), which is |
2906 // turned into an error with -Werror=conversion-null: | 2909 // turned into an error with -Werror=conversion-null: |
2907 // converting 'false' to pointer type for argument 1 of | 2910 // converting 'false' to pointer type for argument 1 of |
2908 // 'char testing::internal::IsNullLiteralHelper(testing::internal::Secret*)' | 2911 // 'char testing::internal::IsNullLiteralHelper(testing::internal::Secret*)' |
2909 // https://code.google.com/p/googletest/issues/detail?id=458 | 2912 // https://code.google.com/p/googletest/issues/detail?id=458 |
2910 EXPECT_TRUE(kFakeRemoteInstall == pending_extension_info->remote_install()); | 2913 EXPECT_TRUE(kFakeRemoteInstall == pending_extension_info->remote_install()); |
2911 } | 2914 } |
2912 | 2915 |
2913 namespace { | 2916 namespace { |
2914 const char kGoodId[] = "ldnnhddmnhbkjipkidpdiheffobcpfmf"; | 2917 const char kGoodId[] = "ldnnhddmnhbkjipkidpdiheffobcpfmf"; |
2915 const char kGoodUpdateURL[] = "http://good.update/url"; | 2918 const char kGoodUpdateURL[] = "http://good.update/url"; |
2916 const bool kGoodIsFromSync = true; | 2919 const bool kGoodIsFromSync = true; |
2917 const bool kGoodInstallSilently = true; | 2920 const bool kGoodInstallSilently = true; |
2918 const bool kGoodRemoteInstall = false; | 2921 const bool kGoodRemoteInstall = false; |
| 2922 const bool kGoodInstalledByCustodian = false; |
2919 } // namespace | 2923 } // namespace |
2920 | 2924 |
2921 // Test updating a pending extension. | 2925 // Test updating a pending extension. |
2922 TEST_F(ExtensionServiceTest, UpdatePendingExtension) { | 2926 TEST_F(ExtensionServiceTest, UpdatePendingExtension) { |
2923 InitializeEmptyExtensionService(); | 2927 InitializeEmptyExtensionService(); |
2924 EXPECT_TRUE( | 2928 EXPECT_TRUE( |
2925 service()->pending_extension_manager()->AddFromSync(kGoodId, | 2929 service()->pending_extension_manager()->AddFromSync( |
2926 GURL(kGoodUpdateURL), | 2930 kGoodId, |
2927 &IsExtension, | 2931 GURL(kGoodUpdateURL), |
2928 kGoodInstallSilently, | 2932 &IsExtension, |
2929 kGoodRemoteInstall)); | 2933 kGoodInstallSilently, |
| 2934 kGoodRemoteInstall, |
| 2935 kGoodInstalledByCustodian)); |
2930 EXPECT_TRUE(service()->pending_extension_manager()->IsIdPending(kGoodId)); | 2936 EXPECT_TRUE(service()->pending_extension_manager()->IsIdPending(kGoodId)); |
2931 | 2937 |
2932 base::FilePath path = data_dir().AppendASCII("good.crx"); | 2938 base::FilePath path = data_dir().AppendASCII("good.crx"); |
2933 UpdateExtension(kGoodId, path, ENABLED); | 2939 UpdateExtension(kGoodId, path, ENABLED); |
2934 | 2940 |
2935 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(kGoodId)); | 2941 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(kGoodId)); |
2936 | 2942 |
2937 const Extension* extension = service()->GetExtensionById(kGoodId, true); | 2943 const Extension* extension = service()->GetExtensionById(kGoodId, true); |
2938 ASSERT_TRUE(extension); | 2944 ASSERT_TRUE(extension); |
2939 } | 2945 } |
2940 | 2946 |
2941 namespace { | 2947 namespace { |
2942 | 2948 |
2943 bool IsTheme(const Extension* extension) { | 2949 bool IsTheme(const Extension* extension) { |
2944 return extension->is_theme(); | 2950 return extension->is_theme(); |
2945 } | 2951 } |
2946 | 2952 |
2947 } // namespace | 2953 } // namespace |
2948 | 2954 |
2949 // Test updating a pending theme. | 2955 // Test updating a pending theme. |
2950 // Disabled due to ASAN failure. http://crbug.com/108320 | 2956 // Disabled due to ASAN failure. http://crbug.com/108320 |
2951 TEST_F(ExtensionServiceTest, DISABLED_UpdatePendingTheme) { | 2957 TEST_F(ExtensionServiceTest, DISABLED_UpdatePendingTheme) { |
2952 InitializeEmptyExtensionService(); | 2958 InitializeEmptyExtensionService(); |
2953 EXPECT_TRUE(service()->pending_extension_manager()->AddFromSync( | 2959 EXPECT_TRUE(service()->pending_extension_manager()->AddFromSync( |
2954 theme_crx, GURL(), &IsTheme, false, false)); | 2960 theme_crx, GURL(), &IsTheme, false, false, false)); |
2955 EXPECT_TRUE(service()->pending_extension_manager()->IsIdPending(theme_crx)); | 2961 EXPECT_TRUE(service()->pending_extension_manager()->IsIdPending(theme_crx)); |
2956 | 2962 |
2957 base::FilePath path = data_dir().AppendASCII("theme.crx"); | 2963 base::FilePath path = data_dir().AppendASCII("theme.crx"); |
2958 UpdateExtension(theme_crx, path, ENABLED); | 2964 UpdateExtension(theme_crx, path, ENABLED); |
2959 | 2965 |
2960 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(theme_crx)); | 2966 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(theme_crx)); |
2961 | 2967 |
2962 const Extension* extension = service()->GetExtensionById(theme_crx, true); | 2968 const Extension* extension = service()->GetExtensionById(theme_crx, true); |
2963 ASSERT_TRUE(extension); | 2969 ASSERT_TRUE(extension); |
2964 | 2970 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3004 } | 3010 } |
3005 | 3011 |
3006 // Test updating a pending CRX as if the source is an external extension | 3012 // Test updating a pending CRX as if the source is an external extension |
3007 // with an update URL. The external update should overwrite a sync update, | 3013 // with an update URL. The external update should overwrite a sync update, |
3008 // but a sync update should not overwrite a non-sync update. | 3014 // but a sync update should not overwrite a non-sync update. |
3009 TEST_F(ExtensionServiceTest, UpdatePendingExternalCrxWinsOverSync) { | 3015 TEST_F(ExtensionServiceTest, UpdatePendingExternalCrxWinsOverSync) { |
3010 InitializeEmptyExtensionService(); | 3016 InitializeEmptyExtensionService(); |
3011 | 3017 |
3012 // Add a crx to be installed from the update mechanism. | 3018 // Add a crx to be installed from the update mechanism. |
3013 EXPECT_TRUE( | 3019 EXPECT_TRUE( |
3014 service()->pending_extension_manager()->AddFromSync(kGoodId, | 3020 service()->pending_extension_manager()->AddFromSync( |
3015 GURL(kGoodUpdateURL), | 3021 kGoodId, |
3016 &IsExtension, | 3022 GURL(kGoodUpdateURL), |
3017 kGoodInstallSilently, | 3023 &IsExtension, |
3018 kGoodRemoteInstall)); | 3024 kGoodInstallSilently, |
| 3025 kGoodRemoteInstall, |
| 3026 kGoodInstalledByCustodian)); |
3019 | 3027 |
3020 // Check that there is a pending crx, with is_from_sync set to true. | 3028 // Check that there is a pending crx, with is_from_sync set to true. |
3021 const extensions::PendingExtensionInfo* pending_extension_info; | 3029 const extensions::PendingExtensionInfo* pending_extension_info; |
3022 ASSERT_TRUE((pending_extension_info = | 3030 ASSERT_TRUE((pending_extension_info = |
3023 service()->pending_extension_manager()->GetById(kGoodId))); | 3031 service()->pending_extension_manager()->GetById(kGoodId))); |
3024 EXPECT_TRUE(pending_extension_info->is_from_sync()); | 3032 EXPECT_TRUE(pending_extension_info->is_from_sync()); |
3025 | 3033 |
3026 // Add a crx to be updated, with the same ID, from a non-sync source. | 3034 // Add a crx to be updated, with the same ID, from a non-sync source. |
3027 EXPECT_TRUE(service()->pending_extension_manager()->AddFromExternalUpdateUrl( | 3035 EXPECT_TRUE(service()->pending_extension_manager()->AddFromExternalUpdateUrl( |
3028 kGoodId, | 3036 kGoodId, |
3029 std::string(), | 3037 std::string(), |
3030 GURL(kGoodUpdateURL), | 3038 GURL(kGoodUpdateURL), |
3031 Manifest::EXTERNAL_PREF_DOWNLOAD, | 3039 Manifest::EXTERNAL_PREF_DOWNLOAD, |
3032 Extension::NO_FLAGS, | 3040 Extension::NO_FLAGS, |
3033 false)); | 3041 false)); |
3034 | 3042 |
3035 // Check that there is a pending crx, with is_from_sync set to false. | 3043 // Check that there is a pending crx, with is_from_sync set to false. |
3036 ASSERT_TRUE((pending_extension_info = | 3044 ASSERT_TRUE((pending_extension_info = |
3037 service()->pending_extension_manager()->GetById(kGoodId))); | 3045 service()->pending_extension_manager()->GetById(kGoodId))); |
3038 EXPECT_FALSE(pending_extension_info->is_from_sync()); | 3046 EXPECT_FALSE(pending_extension_info->is_from_sync()); |
3039 EXPECT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD, | 3047 EXPECT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD, |
3040 pending_extension_info->install_source()); | 3048 pending_extension_info->install_source()); |
3041 | 3049 |
3042 // Add a crx to be installed from the update mechanism. | 3050 // Add a crx to be installed from the update mechanism. |
3043 EXPECT_FALSE( | 3051 EXPECT_FALSE( |
3044 service()->pending_extension_manager()->AddFromSync(kGoodId, | 3052 service()->pending_extension_manager()->AddFromSync( |
3045 GURL(kGoodUpdateURL), | 3053 kGoodId, |
3046 &IsExtension, | 3054 GURL(kGoodUpdateURL), |
3047 kGoodInstallSilently, | 3055 &IsExtension, |
3048 kGoodRemoteInstall)); | 3056 kGoodInstallSilently, |
| 3057 kGoodRemoteInstall, |
| 3058 kGoodInstalledByCustodian)); |
3049 | 3059 |
3050 // Check that the external, non-sync update was not overridden. | 3060 // Check that the external, non-sync update was not overridden. |
3051 ASSERT_TRUE((pending_extension_info = | 3061 ASSERT_TRUE((pending_extension_info = |
3052 service()->pending_extension_manager()->GetById(kGoodId))); | 3062 service()->pending_extension_manager()->GetById(kGoodId))); |
3053 EXPECT_FALSE(pending_extension_info->is_from_sync()); | 3063 EXPECT_FALSE(pending_extension_info->is_from_sync()); |
3054 EXPECT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD, | 3064 EXPECT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD, |
3055 pending_extension_info->install_source()); | 3065 pending_extension_info->install_source()); |
3056 } | 3066 } |
3057 | 3067 |
3058 // Updating a theme should fail if the updater is explicitly told that | 3068 // Updating a theme should fail if the updater is explicitly told that |
3059 // the CRX is not a theme. | 3069 // the CRX is not a theme. |
3060 TEST_F(ExtensionServiceTest, UpdatePendingCrxThemeMismatch) { | 3070 TEST_F(ExtensionServiceTest, UpdatePendingCrxThemeMismatch) { |
3061 InitializeEmptyExtensionService(); | 3071 InitializeEmptyExtensionService(); |
3062 EXPECT_TRUE(service()->pending_extension_manager()->AddFromSync( | 3072 EXPECT_TRUE(service()->pending_extension_manager()->AddFromSync( |
3063 theme_crx, GURL(), &IsExtension, true, false)); | 3073 theme_crx, GURL(), &IsExtension, true, false, false)); |
3064 | 3074 |
3065 EXPECT_TRUE(service()->pending_extension_manager()->IsIdPending(theme_crx)); | 3075 EXPECT_TRUE(service()->pending_extension_manager()->IsIdPending(theme_crx)); |
3066 | 3076 |
3067 base::FilePath path = data_dir().AppendASCII("theme.crx"); | 3077 base::FilePath path = data_dir().AppendASCII("theme.crx"); |
3068 UpdateExtension(theme_crx, path, FAILED_SILENTLY); | 3078 UpdateExtension(theme_crx, path, FAILED_SILENTLY); |
3069 | 3079 |
3070 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(theme_crx)); | 3080 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(theme_crx)); |
3071 | 3081 |
3072 const Extension* extension = service()->GetExtensionById(theme_crx, true); | 3082 const Extension* extension = service()->GetExtensionById(theme_crx, true); |
3073 ASSERT_FALSE(extension); | 3083 ASSERT_FALSE(extension); |
3074 } | 3084 } |
3075 | 3085 |
3076 // TODO(akalin): Test updating a pending extension non-silently once | 3086 // TODO(akalin): Test updating a pending extension non-silently once |
3077 // we can mock out ExtensionInstallUI and inject our version into | 3087 // we can mock out ExtensionInstallUI and inject our version into |
3078 // UpdateExtension(). | 3088 // UpdateExtension(). |
3079 | 3089 |
3080 // Test updating a pending extension which fails the should-install test. | 3090 // Test updating a pending extension which fails the should-install test. |
3081 TEST_F(ExtensionServiceTest, UpdatePendingExtensionFailedShouldInstallTest) { | 3091 TEST_F(ExtensionServiceTest, UpdatePendingExtensionFailedShouldInstallTest) { |
3082 InitializeEmptyExtensionService(); | 3092 InitializeEmptyExtensionService(); |
3083 // Add pending extension with a flipped is_theme. | 3093 // Add pending extension with a flipped is_theme. |
3084 EXPECT_TRUE( | 3094 EXPECT_TRUE( |
3085 service()->pending_extension_manager()->AddFromSync(kGoodId, | 3095 service()->pending_extension_manager()->AddFromSync( |
3086 GURL(kGoodUpdateURL), | 3096 kGoodId, |
3087 &IsTheme, | 3097 GURL(kGoodUpdateURL), |
3088 kGoodInstallSilently, | 3098 &IsTheme, |
3089 kGoodRemoteInstall)); | 3099 kGoodInstallSilently, |
| 3100 kGoodRemoteInstall, |
| 3101 kGoodInstalledByCustodian)); |
3090 EXPECT_TRUE(service()->pending_extension_manager()->IsIdPending(kGoodId)); | 3102 EXPECT_TRUE(service()->pending_extension_manager()->IsIdPending(kGoodId)); |
3091 | 3103 |
3092 base::FilePath path = data_dir().AppendASCII("good.crx"); | 3104 base::FilePath path = data_dir().AppendASCII("good.crx"); |
3093 UpdateExtension(kGoodId, path, UPDATED); | 3105 UpdateExtension(kGoodId, path, UPDATED); |
3094 | 3106 |
3095 // TODO(akalin): Figure out how to check that the extensions | 3107 // TODO(akalin): Figure out how to check that the extensions |
3096 // directory is cleaned up properly in OnExtensionInstalled(). | 3108 // directory is cleaned up properly in OnExtensionInstalled(). |
3097 | 3109 |
3098 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(kGoodId)); | 3110 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(kGoodId)); |
3099 } | 3111 } |
(...skipping 3367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6467 false); | 6479 false); |
6468 } | 6480 } |
6469 | 6481 |
6470 // Fake a request from sync to install an extension. | 6482 // Fake a request from sync to install an extension. |
6471 bool AddPendingSyncInstall() { | 6483 bool AddPendingSyncInstall() { |
6472 return service()->pending_extension_manager()->AddFromSync( | 6484 return service()->pending_extension_manager()->AddFromSync( |
6473 crx_id_, | 6485 crx_id_, |
6474 GURL(kGoodUpdateURL), | 6486 GURL(kGoodUpdateURL), |
6475 &IsExtension, | 6487 &IsExtension, |
6476 kGoodInstallSilently, | 6488 kGoodInstallSilently, |
6477 kGoodRemoteInstall); | 6489 kGoodRemoteInstall, |
| 6490 kGoodInstalledByCustodian); |
6478 } | 6491 } |
6479 | 6492 |
6480 // Fake a policy install. | 6493 // Fake a policy install. |
6481 bool AddPendingPolicyInstall() { | 6494 bool AddPendingPolicyInstall() { |
6482 // Get path to the CRX with id |kGoodId|. | 6495 // Get path to the CRX with id |kGoodId|. |
6483 return service()->OnExternalExtensionUpdateUrlFound( | 6496 return service()->OnExternalExtensionUpdateUrlFound( |
6484 crx_id_, | 6497 crx_id_, |
6485 std::string(), | 6498 std::string(), |
6486 GURL(), | 6499 GURL(), |
6487 Manifest::EXTERNAL_POLICY_DOWNLOAD, | 6500 Manifest::EXTERNAL_POLICY_DOWNLOAD, |
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6946 | 6959 |
6947 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, | 6960 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, |
6948 content::Source<Profile>(profile()), | 6961 content::Source<Profile>(profile()), |
6949 content::NotificationService::NoDetails()); | 6962 content::NotificationService::NoDetails()); |
6950 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); | 6963 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); |
6951 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 6964 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
6952 EXPECT_EQ(0u, registry()->disabled_extensions().size()); | 6965 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
6953 EXPECT_EQ(0u, registry()->terminated_extensions().size()); | 6966 EXPECT_EQ(0u, registry()->terminated_extensions().size()); |
6954 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); | 6967 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); |
6955 } | 6968 } |
OLD | NEW |