| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <memory> | 5 #include <memory> |
| 6 #include <string> | 6 #include <string> |
| 7 | 7 |
| 8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 9 #include "chrome/browser/net/prediction_options.h" | 9 #include "chrome/browser/net/prediction_options.h" |
| 10 #include "chrome/browser/predictors/resource_prefetch_common.h" | 10 #include "chrome/browser/predictors/resource_prefetch_common.h" |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 namespace predictors { | 42 namespace predictors { |
| 43 | 43 |
| 44 class ResourcePrefetchCommonTest : public testing::Test { | 44 class ResourcePrefetchCommonTest : public testing::Test { |
| 45 public: | 45 public: |
| 46 ResourcePrefetchCommonTest(); | 46 ResourcePrefetchCommonTest(); |
| 47 | 47 |
| 48 void SetPreference(NetworkPredictionOptions value) { | 48 void SetPreference(NetworkPredictionOptions value) { |
| 49 profile_->GetPrefs()->SetInteger(prefs::kNetworkPredictionOptions, value); | 49 profile_->GetPrefs()->SetInteger(prefs::kNetworkPredictionOptions, value); |
| 50 } | 50 } |
| 51 | 51 |
| 52 void TestIsPrefetchEnabledForOrigin( | 52 void TestIsPrefetchEnabledForOrigin(const LoadingPredictorConfig& config, |
| 53 const ResourcePrefetchPredictorConfig& config, | 53 HintOrigin origin) { |
| 54 PrefetchOrigin origin) { | |
| 55 EXPECT_TRUE(config.IsLearningEnabled()); | 54 EXPECT_TRUE(config.IsLearningEnabled()); |
| 56 EXPECT_TRUE(config.IsPrefetchingEnabledForOrigin(profile_.get(), origin)); | 55 EXPECT_TRUE(config.IsPrefetchingEnabledForOrigin(profile_.get(), origin)); |
| 57 } | 56 } |
| 58 | 57 |
| 59 void TestIsPrefetchLearning(const ResourcePrefetchPredictorConfig& config) { | 58 void TestIsPrefetchLearning(const LoadingPredictorConfig& config) { |
| 60 EXPECT_TRUE(config.IsLearningEnabled()); | 59 EXPECT_TRUE(config.IsLearningEnabled()); |
| 61 EXPECT_FALSE(config.IsPrefetchingEnabledForOrigin( | 60 EXPECT_FALSE(config.IsPrefetchingEnabledForOrigin(profile_.get(), |
| 62 profile_.get(), PrefetchOrigin::EXTERNAL)); | 61 HintOrigin::EXTERNAL)); |
| 63 EXPECT_FALSE(config.IsPrefetchingEnabledForOrigin( | 62 EXPECT_FALSE(config.IsPrefetchingEnabledForOrigin(profile_.get(), |
| 64 profile_.get(), PrefetchOrigin::NAVIGATION)); | 63 HintOrigin::NAVIGATION)); |
| 65 EXPECT_GT(config.min_resource_hits_to_trigger_prefetch, 1U); | 64 EXPECT_GT(config.min_resource_hits_to_trigger_prefetch, 1U); |
| 66 } | 65 } |
| 67 | 66 |
| 68 void TestIsDefaultExtraConfig(const ResourcePrefetchPredictorConfig& config) { | 67 void TestIsDefaultExtraConfig(const LoadingPredictorConfig& config) { |
| 69 EXPECT_FALSE(config.IsLowConfidenceForTest()); | 68 EXPECT_FALSE(config.IsLowConfidenceForTest()); |
| 70 EXPECT_FALSE(config.IsHighConfidenceForTest()); | 69 EXPECT_FALSE(config.IsHighConfidenceForTest()); |
| 71 EXPECT_FALSE(config.IsMoreResourcesEnabledForTest()); | 70 EXPECT_FALSE(config.IsMoreResourcesEnabledForTest()); |
| 72 EXPECT_FALSE(config.IsSmallDBEnabledForTest()); | 71 EXPECT_FALSE(config.IsSmallDBEnabledForTest()); |
| 73 EXPECT_FALSE(config.is_url_learning_enabled); | 72 EXPECT_FALSE(config.is_url_learning_enabled); |
| 74 EXPECT_FALSE(config.is_manifests_enabled); | 73 EXPECT_FALSE(config.is_manifests_enabled); |
| 75 EXPECT_FALSE(config.is_origin_learning_enabled); | 74 EXPECT_FALSE(config.is_origin_learning_enabled); |
| 76 EXPECT_GT(config.min_resource_hits_to_trigger_prefetch, 1U); | 75 EXPECT_GT(config.min_resource_hits_to_trigger_prefetch, 1U); |
| 77 } | 76 } |
| 78 | 77 |
| 79 protected: | 78 protected: |
| 80 content::TestBrowserThreadBundle test_browser_thread_bundle_; | 79 content::TestBrowserThreadBundle test_browser_thread_bundle_; |
| 81 std::unique_ptr<TestingProfile> profile_; | 80 std::unique_ptr<TestingProfile> profile_; |
| 82 }; | 81 }; |
| 83 | 82 |
| 84 ResourcePrefetchCommonTest::ResourcePrefetchCommonTest() | 83 ResourcePrefetchCommonTest::ResourcePrefetchCommonTest() |
| 85 : profile_(new TestingProfile()) {} | 84 : profile_(new TestingProfile()) {} |
| 86 | 85 |
| 87 TEST_F(ResourcePrefetchCommonTest, IsDisabledByDefault) { | 86 TEST_F(ResourcePrefetchCommonTest, IsDisabledByDefault) { |
| 88 ResourcePrefetchPredictorConfig config; | 87 LoadingPredictorConfig config; |
| 89 EXPECT_FALSE( | 88 EXPECT_FALSE( |
| 90 IsSpeculativeResourcePrefetchingEnabled(profile_.get(), &config)); | 89 IsSpeculativeResourcePrefetchingEnabled(profile_.get(), &config)); |
| 91 | 90 |
| 92 EXPECT_FALSE(config.IsLearningEnabled()); | 91 EXPECT_FALSE(config.IsLearningEnabled()); |
| 93 EXPECT_FALSE(config.IsPrefetchingEnabledForOrigin(profile_.get(), | 92 EXPECT_FALSE(config.IsPrefetchingEnabledForOrigin(profile_.get(), |
| 94 PrefetchOrigin::EXTERNAL)); | 93 HintOrigin::EXTERNAL)); |
| 95 EXPECT_FALSE(config.IsPrefetchingEnabledForOrigin( | 94 EXPECT_FALSE(config.IsPrefetchingEnabledForOrigin(profile_.get(), |
| 96 profile_.get(), PrefetchOrigin::NAVIGATION)); | 95 HintOrigin::NAVIGATION)); |
| 97 | 96 |
| 98 TestIsDefaultExtraConfig(config); | 97 TestIsDefaultExtraConfig(config); |
| 99 } | 98 } |
| 100 | 99 |
| 101 TEST_F(ResourcePrefetchCommonTest, EnableLearning) { | 100 TEST_F(ResourcePrefetchCommonTest, EnableLearning) { |
| 102 variations::testing::VariationParamsManager params_manager( | 101 variations::testing::VariationParamsManager params_manager( |
| 103 "dummy-trial", {{kModeParamName, kLearningMode}}, | 102 "dummy-trial", {{kModeParamName, kLearningMode}}, |
| 104 {kSpeculativeResourcePrefetchingFeatureName}); | 103 {kSpeculativeResourcePrefetchingFeatureName}); |
| 105 | 104 |
| 106 ResourcePrefetchPredictorConfig config; | 105 LoadingPredictorConfig config; |
| 107 EXPECT_TRUE(IsSpeculativeResourcePrefetchingEnabled(profile_.get(), &config)); | 106 EXPECT_TRUE(IsSpeculativeResourcePrefetchingEnabled(profile_.get(), &config)); |
| 108 TestIsPrefetchLearning(config); | 107 TestIsPrefetchLearning(config); |
| 109 TestIsDefaultExtraConfig(config); | 108 TestIsDefaultExtraConfig(config); |
| 110 } | 109 } |
| 111 | 110 |
| 112 TEST_F(ResourcePrefetchCommonTest, EnablePrefetch) { | 111 TEST_F(ResourcePrefetchCommonTest, EnablePrefetch) { |
| 113 variations::testing::VariationParamsManager params_manager( | 112 variations::testing::VariationParamsManager params_manager( |
| 114 "dummy-trial", {{kModeParamName, kPrefetchingMode}}, | 113 "dummy-trial", {{kModeParamName, kPrefetchingMode}}, |
| 115 {kSpeculativeResourcePrefetchingFeatureName}); | 114 {kSpeculativeResourcePrefetchingFeatureName}); |
| 116 | 115 |
| 117 ResourcePrefetchPredictorConfig config; | 116 LoadingPredictorConfig config; |
| 118 EXPECT_TRUE(IsSpeculativeResourcePrefetchingEnabled(profile_.get(), &config)); | 117 EXPECT_TRUE(IsSpeculativeResourcePrefetchingEnabled(profile_.get(), &config)); |
| 119 TestIsPrefetchEnabledForOrigin(config, PrefetchOrigin::EXTERNAL); | 118 TestIsPrefetchEnabledForOrigin(config, HintOrigin::EXTERNAL); |
| 120 TestIsPrefetchEnabledForOrigin(config, PrefetchOrigin::NAVIGATION); | 119 TestIsPrefetchEnabledForOrigin(config, HintOrigin::NAVIGATION); |
| 121 TestIsDefaultExtraConfig(config); | 120 TestIsDefaultExtraConfig(config); |
| 122 } | 121 } |
| 123 | 122 |
| 124 TEST_F(ResourcePrefetchCommonTest, EnablePrefetchExternalOnly) { | 123 TEST_F(ResourcePrefetchCommonTest, EnablePrefetchExternalOnly) { |
| 125 variations::testing::VariationParamsManager params_manager( | 124 variations::testing::VariationParamsManager params_manager( |
| 126 "dummy-trial", {{kModeParamName, kExternalPrefetchingMode}}, | 125 "dummy-trial", {{kModeParamName, kExternalPrefetchingMode}}, |
| 127 {kSpeculativeResourcePrefetchingFeatureName}); | 126 {kSpeculativeResourcePrefetchingFeatureName}); |
| 128 | 127 |
| 129 ResourcePrefetchPredictorConfig config; | 128 LoadingPredictorConfig config; |
| 130 EXPECT_TRUE(IsSpeculativeResourcePrefetchingEnabled(profile_.get(), &config)); | 129 EXPECT_TRUE(IsSpeculativeResourcePrefetchingEnabled(profile_.get(), &config)); |
| 131 TestIsPrefetchEnabledForOrigin(config, PrefetchOrigin::EXTERNAL); | 130 TestIsPrefetchEnabledForOrigin(config, HintOrigin::EXTERNAL); |
| 132 EXPECT_FALSE(config.IsPrefetchingEnabledForOrigin( | 131 EXPECT_FALSE(config.IsPrefetchingEnabledForOrigin(profile_.get(), |
| 133 profile_.get(), PrefetchOrigin::NAVIGATION)); | 132 HintOrigin::NAVIGATION)); |
| 134 TestIsDefaultExtraConfig(config); | 133 TestIsDefaultExtraConfig(config); |
| 135 } | 134 } |
| 136 | 135 |
| 137 TEST_F(ResourcePrefetchCommonTest, EnableUrlLearning) { | 136 TEST_F(ResourcePrefetchCommonTest, EnableUrlLearning) { |
| 138 variations::testing::VariationParamsManager params_manager( | 137 variations::testing::VariationParamsManager params_manager( |
| 139 "dummy-trial", | 138 "dummy-trial", |
| 140 {{kModeParamName, kLearningMode}, {kEnableUrlLearningParamName, "true"}}, | 139 {{kModeParamName, kLearningMode}, {kEnableUrlLearningParamName, "true"}}, |
| 141 {kSpeculativeResourcePrefetchingFeatureName}); | 140 {kSpeculativeResourcePrefetchingFeatureName}); |
| 142 | 141 |
| 143 ResourcePrefetchPredictorConfig config; | 142 LoadingPredictorConfig config; |
| 144 EXPECT_TRUE(IsSpeculativeResourcePrefetchingEnabled(profile_.get(), &config)); | 143 EXPECT_TRUE(IsSpeculativeResourcePrefetchingEnabled(profile_.get(), &config)); |
| 145 TestIsPrefetchLearning(config); | 144 TestIsPrefetchLearning(config); |
| 146 EXPECT_TRUE(config.is_url_learning_enabled); | 145 EXPECT_TRUE(config.is_url_learning_enabled); |
| 147 } | 146 } |
| 148 | 147 |
| 149 TEST_F(ResourcePrefetchCommonTest, EnableManifests) { | 148 TEST_F(ResourcePrefetchCommonTest, EnableManifests) { |
| 150 variations::testing::VariationParamsManager params_manager( | 149 variations::testing::VariationParamsManager params_manager( |
| 151 "dummy-trial", | 150 "dummy-trial", |
| 152 {{kModeParamName, kLearningMode}, {kEnableManifestsParamName, "true"}}, | 151 {{kModeParamName, kLearningMode}, {kEnableManifestsParamName, "true"}}, |
| 153 {kSpeculativeResourcePrefetchingFeatureName}); | 152 {kSpeculativeResourcePrefetchingFeatureName}); |
| 154 | 153 |
| 155 ResourcePrefetchPredictorConfig config; | 154 LoadingPredictorConfig config; |
| 156 EXPECT_TRUE(IsSpeculativeResourcePrefetchingEnabled(profile_.get(), &config)); | 155 EXPECT_TRUE(IsSpeculativeResourcePrefetchingEnabled(profile_.get(), &config)); |
| 157 TestIsPrefetchLearning(config); | 156 TestIsPrefetchLearning(config); |
| 158 EXPECT_TRUE(config.is_manifests_enabled); | 157 EXPECT_TRUE(config.is_manifests_enabled); |
| 159 } | 158 } |
| 160 | 159 |
| 161 TEST_F(ResourcePrefetchCommonTest, EnableOriginLearning) { | 160 TEST_F(ResourcePrefetchCommonTest, EnableOriginLearning) { |
| 162 variations::testing::VariationParamsManager params_manager( | 161 variations::testing::VariationParamsManager params_manager( |
| 163 "dummy-trial", | 162 "dummy-trial", |
| 164 {{kModeParamName, kLearningMode}, | 163 {{kModeParamName, kLearningMode}, |
| 165 {kEnableOriginLearningParamName, "true"}}, | 164 {kEnableOriginLearningParamName, "true"}}, |
| 166 {kSpeculativeResourcePrefetchingFeatureName}); | 165 {kSpeculativeResourcePrefetchingFeatureName}); |
| 167 | 166 |
| 168 ResourcePrefetchPredictorConfig config; | 167 LoadingPredictorConfig config; |
| 169 EXPECT_TRUE(IsSpeculativeResourcePrefetchingEnabled(profile_.get(), &config)); | 168 EXPECT_TRUE(IsSpeculativeResourcePrefetchingEnabled(profile_.get(), &config)); |
| 170 TestIsPrefetchLearning(config); | 169 TestIsPrefetchLearning(config); |
| 171 EXPECT_TRUE(config.is_origin_learning_enabled); | 170 EXPECT_TRUE(config.is_origin_learning_enabled); |
| 172 } | 171 } |
| 173 | 172 |
| 174 // Verifies whether prefetching is disabled according to the network type. But | 173 // Verifies whether prefetching is disabled according to the network type. But |
| 175 // learning should not be disabled by network. | 174 // learning should not be disabled by network. |
| 176 TEST_F(ResourcePrefetchCommonTest, RespectsNetworkSettings) { | 175 TEST_F(ResourcePrefetchCommonTest, RespectsNetworkSettings) { |
| 177 variations::testing::VariationParamsManager params_manager( | 176 variations::testing::VariationParamsManager params_manager( |
| 178 "dummy-trial", {{kModeParamName, kPrefetchingMode}}, | 177 "dummy-trial", {{kModeParamName, kPrefetchingMode}}, |
| 179 {kSpeculativeResourcePrefetchingFeatureName}); | 178 {kSpeculativeResourcePrefetchingFeatureName}); |
| 180 | 179 |
| 181 ResourcePrefetchPredictorConfig config; | 180 LoadingPredictorConfig config; |
| 182 EXPECT_TRUE(IsSpeculativeResourcePrefetchingEnabled(profile_.get(), &config)); | 181 EXPECT_TRUE(IsSpeculativeResourcePrefetchingEnabled(profile_.get(), &config)); |
| 183 TestIsPrefetchEnabledForOrigin(config, PrefetchOrigin::EXTERNAL); | 182 TestIsPrefetchEnabledForOrigin(config, HintOrigin::EXTERNAL); |
| 184 TestIsDefaultExtraConfig(config); | 183 TestIsDefaultExtraConfig(config); |
| 185 | 184 |
| 186 // Set preference to WIFI_ONLY: prefetch when not on cellular. | 185 // Set preference to WIFI_ONLY: prefetch when not on cellular. |
| 187 SetPreference(NetworkPredictionOptions::NETWORK_PREDICTION_WIFI_ONLY); | 186 SetPreference(NetworkPredictionOptions::NETWORK_PREDICTION_WIFI_ONLY); |
| 188 { | 187 { |
| 189 std::unique_ptr<NetworkChangeNotifier> mock( | 188 std::unique_ptr<NetworkChangeNotifier> mock( |
| 190 new MockNetworkChangeNotifierWIFI); | 189 new MockNetworkChangeNotifierWIFI); |
| 191 TestIsPrefetchEnabledForOrigin(config, PrefetchOrigin::EXTERNAL); | 190 TestIsPrefetchEnabledForOrigin(config, HintOrigin::EXTERNAL); |
| 192 } | 191 } |
| 193 { | 192 { |
| 194 std::unique_ptr<NetworkChangeNotifier> mock( | 193 std::unique_ptr<NetworkChangeNotifier> mock( |
| 195 new MockNetworkChangeNotifier4G); | 194 new MockNetworkChangeNotifier4G); |
| 196 TestIsPrefetchLearning(config); | 195 TestIsPrefetchLearning(config); |
| 197 } | 196 } |
| 198 | 197 |
| 199 // Set preference to NEVER: never prefetch. | 198 // Set preference to NEVER: never prefetch. |
| 200 SetPreference(NetworkPredictionOptions::NETWORK_PREDICTION_NEVER); | 199 SetPreference(NetworkPredictionOptions::NETWORK_PREDICTION_NEVER); |
| 201 { | 200 { |
| 202 std::unique_ptr<NetworkChangeNotifier> mock( | 201 std::unique_ptr<NetworkChangeNotifier> mock( |
| 203 new MockNetworkChangeNotifierWIFI); | 202 new MockNetworkChangeNotifierWIFI); |
| 204 TestIsPrefetchLearning(config); | 203 TestIsPrefetchLearning(config); |
| 205 } | 204 } |
| 206 { | 205 { |
| 207 std::unique_ptr<NetworkChangeNotifier> mock( | 206 std::unique_ptr<NetworkChangeNotifier> mock( |
| 208 new MockNetworkChangeNotifier4G); | 207 new MockNetworkChangeNotifier4G); |
| 209 TestIsPrefetchLearning(config); | 208 TestIsPrefetchLearning(config); |
| 210 } | 209 } |
| 211 } | 210 } |
| 212 | 211 |
| 213 } // namespace predictors | 212 } // namespace predictors |
| OLD | NEW |