Index: chrome/browser/predictors/resource_prefetch_common.cc |
diff --git a/chrome/browser/predictors/resource_prefetch_common.cc b/chrome/browser/predictors/resource_prefetch_common.cc |
index ebdbea8eb151a93384a44098f631f5bcb40a6548..f6414d11c221306777f3552cca6f5b753d3abe56 100644 |
--- a/chrome/browser/predictors/resource_prefetch_common.cc |
+++ b/chrome/browser/predictors/resource_prefetch_common.cc |
@@ -9,6 +9,7 @@ |
#include "base/metrics/field_trial_params.h" |
#include "chrome/browser/net/prediction_options.h" |
+#include "chrome/browser/predictors/loading_predictor_config.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/sessions/session_tab_helper.h" |
#include "components/prefs/pref_service.h" |
@@ -31,7 +32,7 @@ const base::Feature kSpeculativeResourcePrefetchingFeature = |
base::Feature(kSpeculativeResourcePrefetchingFeatureName, |
base::FEATURE_DISABLED_BY_DEFAULT); |
-namespace { |
+namespace internal { |
bool IsPrefetchingEnabledInternal(Profile* profile, int mode, int mask) { |
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
@@ -47,13 +48,10 @@ bool IsPrefetchingEnabledInternal(Profile* profile, int mode, int mask) { |
return true; |
} |
-} // namespace |
- |
-bool IsSpeculativeResourcePrefetchingEnabled( |
- Profile* profile, |
- ResourcePrefetchPredictorConfig* config) { |
- DCHECK(config); |
+} // namespace internal |
+bool IsSpeculativeResourcePrefetchingEnabled(Profile* profile, |
+ LoadingPredictorConfig* config) { |
// Disabled for of-the-record. Policy choice, not a technical limitation. |
if (!profile || profile->IsOffTheRecord()) |
return false; |
@@ -61,41 +59,49 @@ bool IsSpeculativeResourcePrefetchingEnabled( |
if (!base::FeatureList::IsEnabled(kSpeculativeResourcePrefetchingFeature)) |
return false; |
- std::string enable_url_learning_value = |
- base::GetFieldTrialParamValueByFeature( |
- kSpeculativeResourcePrefetchingFeature, kEnableUrlLearningParamName); |
- if (enable_url_learning_value == "true") |
- config->is_url_learning_enabled = true; |
- |
- std::string enable_manifests_value = base::GetFieldTrialParamValueByFeature( |
- kSpeculativeResourcePrefetchingFeature, kEnableManifestsParamName); |
- if (enable_manifests_value == "true") |
- config->is_manifests_enabled = true; |
- |
- bool enable_origin_learning = base::GetFieldTrialParamValueByFeature( |
- kSpeculativeResourcePrefetchingFeature, |
- kEnableOriginLearningParamName) == "true"; |
- config->is_origin_learning_enabled = enable_origin_learning; |
- |
- // Ensure that a resource that was only seen once is never prefetched. This |
- // prevents the easy mistake of trying to prefetch an ephemeral url. |
- DCHECK_GT(config->min_resource_hits_to_trigger_prefetch, 1U); |
- if (config->min_resource_hits_to_trigger_prefetch < 2) |
- config->min_resource_hits_to_trigger_prefetch = 2; |
+ if (config) { |
+ std::string enable_url_learning_value = |
+ base::GetFieldTrialParamValueByFeature( |
+ kSpeculativeResourcePrefetchingFeature, |
+ kEnableUrlLearningParamName); |
+ if (enable_url_learning_value == "true") |
+ config->is_url_learning_enabled = true; |
+ |
+ std::string enable_manifests_value = base::GetFieldTrialParamValueByFeature( |
+ kSpeculativeResourcePrefetchingFeature, kEnableManifestsParamName); |
+ if (enable_manifests_value == "true") |
+ config->is_manifests_enabled = true; |
+ |
+ bool enable_origin_learning = base::GetFieldTrialParamValueByFeature( |
+ kSpeculativeResourcePrefetchingFeature, |
+ kEnableOriginLearningParamName) == "true"; |
+ config->is_origin_learning_enabled = enable_origin_learning; |
+ |
+ // Ensure that a resource that was only seen once is never prefetched. This |
+ // prevents the easy mistake of trying to prefetch an ephemeral url. |
+ DCHECK_GT(config->min_resource_hits_to_trigger_prefetch, 1U); |
+ if (config->min_resource_hits_to_trigger_prefetch < 2) |
+ config->min_resource_hits_to_trigger_prefetch = 2; |
+ } |
std::string mode_value = base::GetFieldTrialParamValueByFeature( |
kSpeculativeResourcePrefetchingFeature, kModeParamName); |
if (mode_value == kLearningMode) { |
- config->mode |= ResourcePrefetchPredictorConfig::LEARNING; |
+ if (config) |
+ config->mode |= LoadingPredictorConfig::LEARNING; |
return true; |
} else if (mode_value == kExternalPrefetchingMode) { |
- config->mode |= ResourcePrefetchPredictorConfig::LEARNING | |
- ResourcePrefetchPredictorConfig::PREFETCHING_FOR_EXTERNAL; |
+ if (config) { |
+ config->mode |= LoadingPredictorConfig::LEARNING | |
+ LoadingPredictorConfig::PREFETCHING_FOR_EXTERNAL; |
+ } |
return true; |
} else if (mode_value == kPrefetchingMode) { |
- config->mode |= ResourcePrefetchPredictorConfig::LEARNING | |
- ResourcePrefetchPredictorConfig::PREFETCHING_FOR_EXTERNAL | |
- ResourcePrefetchPredictorConfig::PREFETCHING_FOR_NAVIGATION; |
+ if (config) { |
+ config->mode |= LoadingPredictorConfig::LEARNING | |
+ LoadingPredictorConfig::PREFETCHING_FOR_EXTERNAL | |
+ LoadingPredictorConfig::PREFETCHING_FOR_NAVIGATION; |
+ } |
return true; |
} |
@@ -136,73 +142,4 @@ bool NavigationID::operator==(const NavigationID& rhs) const { |
return tab_id == rhs.tab_id && main_frame_url == rhs.main_frame_url; |
} |
-ResourcePrefetchPredictorConfig::ResourcePrefetchPredictorConfig() |
- : mode(0), |
- max_navigation_lifetime_seconds(60), |
- max_urls_to_track(500), |
- max_hosts_to_track(200), |
- min_url_visit_count(2), |
- max_resources_per_entry(50), |
- max_origins_per_entry(50), |
- max_consecutive_misses(3), |
- max_redirect_consecutive_misses(5), |
- min_resource_confidence_to_trigger_prefetch(0.7f), |
- min_resource_hits_to_trigger_prefetch(2), |
- max_prefetches_inflight_per_navigation(5), |
- max_prefetches_inflight_per_host_per_navigation(3), |
- is_url_learning_enabled(false), |
- is_manifests_enabled(false), |
- is_origin_learning_enabled(false) {} |
- |
-ResourcePrefetchPredictorConfig::ResourcePrefetchPredictorConfig( |
- const ResourcePrefetchPredictorConfig& other) = default; |
- |
-ResourcePrefetchPredictorConfig::~ResourcePrefetchPredictorConfig() { |
-} |
- |
-bool ResourcePrefetchPredictorConfig::IsLearningEnabled() const { |
- return (mode & LEARNING) > 0; |
-} |
- |
-bool ResourcePrefetchPredictorConfig::IsPrefetchingEnabledForSomeOrigin( |
- Profile* profile) const { |
- int mask = PREFETCHING_FOR_NAVIGATION | PREFETCHING_FOR_EXTERNAL; |
- return IsPrefetchingEnabledInternal(profile, mode, mask); |
-} |
- |
-bool ResourcePrefetchPredictorConfig::IsPrefetchingEnabledForOrigin( |
- Profile* profile, |
- PrefetchOrigin origin) const { |
- int mask = 0; |
- switch (origin) { |
- case PrefetchOrigin::NAVIGATION: |
- mask = PREFETCHING_FOR_NAVIGATION; |
- break; |
- case PrefetchOrigin::EXTERNAL: |
- mask = PREFETCHING_FOR_EXTERNAL; |
- break; |
- } |
- return IsPrefetchingEnabledInternal(profile, mode, mask); |
-} |
- |
-bool ResourcePrefetchPredictorConfig::IsLowConfidenceForTest() const { |
- return min_url_visit_count == 1 && |
- std::abs(min_resource_confidence_to_trigger_prefetch - 0.5f) < 1e-6 && |
- min_resource_hits_to_trigger_prefetch == 1; |
-} |
- |
-bool ResourcePrefetchPredictorConfig::IsHighConfidenceForTest() const { |
- return min_url_visit_count == 3 && |
- std::abs(min_resource_confidence_to_trigger_prefetch - 0.9f) < 1e-6 && |
- min_resource_hits_to_trigger_prefetch == 3; |
-} |
- |
-bool ResourcePrefetchPredictorConfig::IsMoreResourcesEnabledForTest() const { |
- return max_resources_per_entry == 100; |
-} |
- |
-bool ResourcePrefetchPredictorConfig::IsSmallDBEnabledForTest() const { |
- return max_urls_to_track == 200 && max_hosts_to_track == 100; |
-} |
- |
} // namespace predictors |