|  | // Copyright 2017 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef CHROME_BROWSER_PREDICTORS_LOADING_PREDICTOR_CONFIG_H_ | 
|  | #define CHROME_BROWSER_PREDICTORS_LOADING_PREDICTOR_CONFIG_H_ | 
|  |  | 
|  | #include <cstddef> | 
|  |  | 
|  | #include "base/feature_list.h" | 
|  |  | 
|  | class Profile; | 
|  |  | 
|  | namespace predictors { | 
|  |  | 
|  | BASE_DECLARE_FEATURE(kSpeculativePreconnectFeature); | 
|  |  | 
|  | // Returns whether the speculative preconnect feature is enabled. | 
|  | bool IsPreconnectFeatureEnabled(); | 
|  |  | 
|  | // Returns whether the Loading Predictor is enabled for the given |profile|. If | 
|  | // true, the predictor can observe page load events, build historical database | 
|  | // and perform allowed speculative actions based on this database. | 
|  | bool IsLoadingPredictorEnabled(Profile* profile); | 
|  |  | 
|  | // Returns whether the current |profile| settings allow to perform preresolve | 
|  | // and preconnect actions. This setting is controlled by the user, so the return | 
|  | // value shouldn't be cached. | 
|  | bool IsPreconnectAllowed(Profile* profile); | 
|  |  | 
|  | // Indicates what caused the page load hint. | 
|  | enum class HintOrigin { | 
|  | // Triggered at the start of each navigation. | 
|  | NAVIGATION, | 
|  |  | 
|  | // Used when a preconnect is triggered by an external Android app. | 
|  | EXTERNAL, | 
|  |  | 
|  | // Triggered by omnibox. | 
|  | OMNIBOX, | 
|  |  | 
|  | // Triggered by navigation predictor service. | 
|  | NAVIGATION_PREDICTOR, | 
|  |  | 
|  | // Used when a prerender initiated by Omnibox is unsuccessful, and instead a | 
|  | // preconnect is initiated. Preconnect triggered by | 
|  | // OMNIBOX_PRERENDER_FALLBACK may be handled differently than preconnects | 
|  | // triggered by OMNIBOX since the former are triggered at higher confidence. | 
|  | OMNIBOX_PRERENDER_FALLBACK, | 
|  |  | 
|  | // Triggered by optimization guide. | 
|  | OPTIMIZATION_GUIDE, | 
|  | }; | 
|  |  | 
|  | // Gets the string that can be used to record histograms for the hint origin. | 
|  | // | 
|  | // Keep in sync with LoadingPredictorHintOrigin in histograms.xml. Will DCHECK | 
|  | // if an origin is added that is not listed in histograms.xml. | 
|  | std::string GetStringNameForHintOrigin(HintOrigin hint_origin); | 
|  |  | 
|  | // Represents the config for the Loading predictor. | 
|  | struct LoadingPredictorConfig { | 
|  | // Initializes the config with default values. | 
|  | LoadingPredictorConfig(); | 
|  | LoadingPredictorConfig(const LoadingPredictorConfig& other); | 
|  | ~LoadingPredictorConfig(); | 
|  |  | 
|  | // If a navigation hasn't seen a load complete event in this much time, it | 
|  | // is considered abandoned. | 
|  | size_t max_navigation_lifetime_seconds; | 
|  |  | 
|  | // Size of LRU caches for the host data. | 
|  | size_t max_hosts_to_track; | 
|  |  | 
|  | // The maximum number of origins to store per entry. | 
|  | size_t max_origins_per_entry; | 
|  | // The number of consecutive misses after which we stop tracking a resource | 
|  | // URL. | 
|  | size_t max_consecutive_misses; | 
|  | // The number of consecutive misses after which we stop tracking a redirect | 
|  | // endpoint. | 
|  | size_t max_redirect_consecutive_misses; | 
|  |  | 
|  | // Delay between writing data to the predictors database memory cache and | 
|  | // flushing it to disk. | 
|  | size_t flush_data_to_disk_delay_seconds; | 
|  | }; | 
|  |  | 
|  | }  // namespace predictors | 
|  |  | 
|  | #endif  // CHROME_BROWSER_PREDICTORS_LOADING_PREDICTOR_CONFIG_H_ |