// Copyright 2022 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_PUBLIC_BROWSER_PRELOADING_H_ #define CONTENT_PUBLIC_BROWSER_PRELOADING_H_ #include <cstdint> #include <string_view> #include "content/common/content_export.h" namespace content { // If you change any of the following enums or static variables, please follow // the process in go/preloading-dashboard-updates to update the mapping // reflected in dashboard, or if you are not a Googler, please file an FYI bug // on https://crbug.new with component Internals>Preload. // Defines the different types of preloading speedup techniques. Preloading is a // holistic term to define all the speculative operations the browser does for // loading content before a page navigates to make navigation faster. // // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. // // LINT.IfChange enum class PreloadingType { … }; // LINT.ThenChange() // Defines various triggering mechanisms which triggers different preloading // operations mentioned in preloading.h. The integer portion is used for UKM // logging, and the string portion is used to dynamically compose UMA histogram // names. Embedders are allowed to define more predictors. class CONTENT_EXPORT PreloadingPredictor { … }; // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. // // Advance numbering by +1 when adding a new element. // // To add additional predictors in content-internals and embedders, wrap the // new `PreloadingPredictor` in the corresponding namespaces: // - `content_preloading_predictor` for content-internals; // - `chrome_preloading_predictor` for Chrome. // // See `content/browser/preloading/preloading.h` and // `chrome/browser/preloading/chrome_preloading.h` for examples. // // Please limit content-public `PreloadingPredictor` between 0 to 49 // (inclusive) as 50 and beyond are reserved for content-internal and embedders. // Both the value and the name should be unique across all the namespaces. // // The embedder `PreloadingPredictor` definitions should start at 100 (see // `chrome/browser/preloading/chrome_preloading.h` for example). // // LINT.IfChange namespace preloading_predictor { // No PreloadingTrigger is present. This may include the small percentage of // usages of browser triggers, link-rel, OptimizationGuideService e.t.c which // will be added later as a separate elements. static constexpr PreloadingPredictor kUnspecified(0, "Unspecified"); // Preloading is triggered by OnPointerDown event heuristics. static constexpr PreloadingPredictor kUrlPointerDownOnAnchor( 1, "UrlPointerDownOnAnchor"); // Preloading is triggered by OnPointerHover event heuristics. static constexpr PreloadingPredictor kUrlPointerHoverOnAnchor( 2, "UrlPointerHoverOnAnchor"); // Preloading was triggered by embedding a keyword for the rel attribute of // the <link> HTML element to hint to browsers that the user might need it for // next navigation. static constexpr PreloadingPredictor kLinkRel(3, "LinkRel"); // When overscroll that could trigger a back navigation starts. static constexpr PreloadingPredictor kBackGestureNavigation( 4, "BackGestureNavigation"); // Preloading heuristics ML model. static constexpr PreloadingPredictor kPreloadingHeuristicsMLModel( 5, "PreloadingHeuristicsMLModel"); } // namespace preloading_predictor // LINT.ThenChange() // Defines if a preloading operation is eligible for a given preloading // trigger. // // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. // // LINT.IfChange enum class PreloadingEligibility { … }; // LINT.ThenChange() // The outcome of the holdback check. This is not part of eligibility status to // clarify that this check needs to happen after we are done verifying the // eligibility of a preloading attempt. In general, eligibility checks can be // reordered, but the holdback check always needs to come after verifying that // the preloading attempt was eligible. // // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. // // LINT.IfChange enum class PreloadingHoldbackStatus { … }; // LINT.ThenChange() // Defines the post-triggering outcome once the preloading operation is // triggered. // // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. Please update // "PreloadingTriggeringOutcome" in `tools/metrics/histograms/enums.xml` when // new enums are added. // // LINT.IfChange enum class PreloadingTriggeringOutcome { … }; // LINT.ThenChange() // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. // // LINT.IfChange enum class PreloadingFailureReason { … }; // LINT.ThenChange() // Types of URL match: // Exact match: the URLs are matching exactly. // NoVarySearch match: No-Vary-Search header allows for inexact match by // ignoring some query parameters, or the order of query parameters present // in URLs. // Custom match: custom URL matching provided by a url matching predicate. enum class UrlMatchType { … }; } // namespace content #endif // CONTENT_PUBLIC_BROWSER_PRELOADING_H_