| // 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. |
| |
| syntax = "proto2"; |
| option optimize_for = LITE_RUNTIME; |
| option java_package = "org.chromium.components.optimization_guide.proto"; |
| option java_outer_classname = "HintsProto"; |
| |
| package optimization_guide.proto; |
| |
| import "components/optimization_guide/proto/common_types.proto"; |
| import "components/optimization_guide/proto/loading_predictor_metadata.proto"; |
| |
| // Information about the hint that the client already has for a host. |
| message MatchedHintInfo { |
| // Describes the granularity of the key field. |
| optional KeyRepresentation key_representation = 1; |
| // The key of the hint currently used for the host. |
| optional string key = 2; |
| // The version of the hint for this key already stored on the client. |
| optional int64 version = 3; |
| } |
| |
| message HostInfo { |
| // Host that the client is requesting information for. |
| optional string host = 1; |
| // Information about the hint that the client already has for the host. |
| optional MatchedHintInfo matched_hint = 2; |
| } |
| |
| // Information about a URL to request hints for. |
| message UrlInfo { |
| // The URL that the client is requesting information for. |
| optional string url = 1; |
| } |
| |
| // Information about the set of host hashes to retrieve hints for. |
| message HashedHostInfos { |
| // The partial host hash will be the first num_hash_bits least significant bit |
| // of the hashed host. |
| repeated uint32 partial_host_hashes = 1; |
| optional uint32 num_hash_bits = 2; |
| } |
| |
| // Request to return a set of hints that guide what optimizations to perform |
| // on those hosts. |
| message GetHintsRequest { |
| reserved 6; |
| |
| // Information about the set of hosts to retrieve hints for. |
| repeated HostInfo hosts = 1; |
| |
| // Information about the set of URLs to retrieve hints for. |
| repeated UrlInfo urls = 4; |
| |
| // Information about the set of host hashes to retrieve hints for. |
| optional HashedHostInfos hashed_hosts = 8; |
| |
| // The set of optimization types that the requesting client can support |
| // and perform. |
| // |
| // It is guaranteed that the response will only contain hints for |
| // optimizations present in this set. |
| repeated OptimizationType supported_optimizations = 2; |
| |
| // The set of key representations that the client can process. |
| // |
| // It is guaranteed that the response will only contain hints for key |
| // representations present in this set. If not specified, |
| // [HOST_SUFFIX, FULL_URL] will be used. |
| repeated KeyRepresentation supported_key_representations = 5; |
| |
| // Context in which this request is made. |
| optional RequestContext context = 3; |
| |
| // The locale to associate with this request. |
| // |
| // It is the IETF language tag, defined in BCP 47. The region subtag is not |
| // included when it adds no distinguishing information to the language tag |
| // (e.g. both "en-US" and "fr" are correct here). |
| optional string locale = 7; |
| |
| // Information about the request origin. |
| optional OriginInfo origin_info = 9; |
| } |
| |
| // Response to the GetHints request. |
| message GetHintsResponse { |
| // An ordered list containing hints for key/optimization combinations. |
| // |
| // It is guaranteed that there will only be a single hint per key and key |
| // representation combination. These hints are intended to apply to a full |
| // page. It is expected that the client will use the Hint record with the |
| // most specific key that matches the main frame URL. |
| repeated Hint hints = 1; |
| |
| // The maximum duration in which the hints, or lack of hints, provided in |
| // this response are valid. |
| optional Duration max_cache_duration = 2; |
| |
| // A set of hint keys to remove from the client cache. |
| // |
| // It is guaranteed that all entries in this list were provided by the client |
| // in the corresponding request's |hosts.matched_hint| fields. |
| // |
| // It is expected for the client to immediately stop using all hints contained |
| // in this field. Hints that are not present in |hints| or in this field |
| // should adhere to the client cache's existing expiration policy. |
| repeated MatchedHintInfo hints_to_remove = 3; |
| } |
| |
| // Must sync with enum OptimizationType in enums.xml for metric recording. |
| enum OptimizationType { |
| // Values for obsolete optimizations. |
| reserved 11, 12, 29; |
| |
| TYPE_UNSPECIFIED = 0; |
| // This optimization blocks JavaScript on the page. |
| NOSCRIPT = 1; |
| // This optimization applies a set of ResourceLoadingHint(s) to load the |
| // page. |
| RESOURCE_LOADING = 2; |
| // This optimization redirects the navigation through a lite page server. |
| LITE_PAGE_REDIRECT = 3; |
| // This optimization does validation of metadata fetch on navigation. |
| METADATA_FETCH_VALIDATION = 4; |
| // This optimization defers execution of parser-blocking script until after |
| // parsing completes. |
| DEFER_ALL_SCRIPT = 5; |
| // This optimization is used to provide aggregated performance information |
| // about the page and pages it links to. |
| PERFORMANCE_HINTS = 6; |
| // This optimization allows page loads going through the data reduction |
| // proxy to be transformed by the proxy. |
| LITE_PAGE = 7; |
| // This optimization compresses public images. |
| COMPRESS_PUBLIC_IMAGES = 8; |
| // This optimization provides the Loading Predictor with resources predicted |
| // to be on the page. |
| LOADING_PREDICTOR = 9; |
| // This optimization provides information about hosts that historically |
| // provide a fast and responsive user experience. |
| FAST_HOST_HINTS = 10; |
| // This optimization provides information about how to throttle meda requests |
| // to reduce the bitrate of adaptively streamed media. |
| LITE_VIDEO = 13; |
| // This optimization is used to provide aggregated performance information |
| // about pages linked to from the current page. |
| LINK_PERFORMANCE = 14; |
| // Detects if a page is a shopping page or not. A tradeoff has been made here |
| // where the number of shopping page predictions for non-shopping pages is |
| // increased to reduce the number of non-shopping page predictions for |
| // shopping pages. |
| SHOPPING_PAGE_PREDICTOR = 15; |
| // This optimization provides information about hosts that are identified as |
| // commonly logged-in. |
| LOGIN_DETECTION = 16; |
| // Provides key information about the merchant represented by the current |
| // host. |
| MERCHANT_TRUST_SIGNALS = 17; |
| // Provides pricing data so the user can track prices and price updates. |
| PRICE_TRACKING = 18; |
| // This optimization does validation of bloom filter. |
| BLOOM_FILTER_VALIDATION = 19; |
| // Provides 'About this site' data about the site being visited. |
| ABOUT_THIS_SITE = 20; |
| // Provides key information about the merchant represented by the current |
| // host -- VERSION 2. |
| MERCHANT_TRUST_SIGNALS_V2 = 21; |
| // Provides the entities that are present on the page. |
| PAGE_ENTITIES = 22; |
| // This optimization provides information for whether a page should be |
| // included in a history cluster. |
| HISTORY_CLUSTERS = 23; |
| // Determines if a page is eligible for 'Thank creator' functionality. |
| THANK_CREATOR_ELIGIBLE = 24; |
| // This optimization provides information about hosts that are blocked for |
| // IBAN autofill. |
| IBAN_AUTOFILL_BLOCKED = 25; |
| // This optimization provides information about images for a URL. |
| SALIENT_IMAGE = 26; |
| // This optimization provides information about a sampling rate of Autofill |
| // UKM metrics per origin based on origin popularity. |
| AUTOFILL_SAMPLING_RATE = 27; |
| // This optimization provides information about whether a merchant is |
| // opted-out of Visa virtual cards for a URL. |
| VCN_MERCHANT_OPT_OUT_VISA = 28; |
| } |
| |
| // Presents semantics for how page load URLs should be matched. |
| enum KeyRepresentation { |
| REPRESENTATION_UNSPECIFIED = 0; |
| // The suffix to match in the hostname of a page load URL. |
| // |
| // Example: A host suffix of example.com would match pages with host |
| // sports.example.com, but not fooexample.com. |
| HOST_SUFFIX = 1 [deprecated = true]; |
| // The full URL to match. |
| // |
| // This will be an exact match of a page load URL, including query params and |
| // fragments. |
| FULL_URL = 2; |
| // The host to match. |
| // |
| // This will be an exact match of a page load host. |
| HOST = 3; |
| // This will be a partial hash of a page load host. |
| HASHED_HOST = 4; |
| } |
| |
| message Optimization { |
| reserved 2, 3, 4, 5, 10, 11, 12, 14; |
| // The type of optimization the hint applies to. |
| optional OptimizationType optimization_type = 1; |
| // The version of the tuning group for the optimization type. |
| // |
| // This will only be populated if this optimization is being autotuned. |
| // |
| // If this is set to UINT64_MAX, this optimization should be considered as |
| // not allowed and was only included for metrics purposes. |
| optional uint64 tuning_version = 6; |
| // The metadata associated with the optimization type. |
| // |
| // It is expected that the client and server have agreed upon the appropriate |
| // metadata type for the optimization type. |
| // |
| // New clients should utilize any_metadata rather than adding another field. |
| oneof metadata { |
| LoadingPredictorMetadata loading_predictor_metadata = 13; |
| Any any_metadata = 15; |
| } |
| } |
| |
| message PageHint { |
| reserved 2; |
| |
| // The pattern to match against the committed page URL. |
| // |
| // The pattern may be a single substring to match against the full URL or it |
| // may be an ordered set of substrings to match where the substrings are |
| // separated by the ‘*’ wildcard character (with an implicit ‘*’ at the |
| // beginning and end). |
| optional string page_pattern = 1; |
| // An ordered set of optimizations that should be allowlisted for this page |
| // pattern. |
| // |
| // The client will use the first optimization that it supports. |
| repeated Optimization allowlisted_optimizations = 3; |
| } |
| |
| message Hint { |
| // Describes the granularity of the key field. |
| optional KeyRepresentation key_representation = 1; |
| // The key that applies to this hint. The key_representation field describes |
| // the form in which this key takes. Guaranteed to be non-empty. |
| optional string key = 2; |
| // An unordered set of optimizations that should be allowlisted for this |
| // hint. |
| // |
| // This field is currently only specified for key_representation of HOST. |
| repeated Optimization allowlisted_optimizations = 3; |
| // An ordered set of per-page hints. Only the first PageHint record |
| // that matches a committed page URL should be used for that page load. |
| repeated PageHint page_hints = 4; |
| // Version that generated this hint. |
| // |
| // It is expected that this version be sent along with subsequent requests |
| // for hosts that match this hint. |
| optional string version = 5; |
| // The maximum duration for which the hint should be used for. |
| optional Duration max_cache_duration = 6; |
| } |
| |
| // Configuration and data for a Bloom filter. |
| // |
| // Note that some additional aspects of the BloomFilter are separately |
| // specified between the client and server including the specific MurmurHash3 |
| // hashing function, how the hashing function is seeded, how bits are |
| // addressed in the byte vector, and the nature of the strings that the |
| // Bloom filter holds (whether host, host suffix, URL path, etc.). |
| message BloomFilter { |
| // Specifies the number of hash functions to use in the Bloom filter. |
| // This essentially means how many bits will be set in the bit array |
| // for a string member of the Bloom filter. |
| optional uint32 num_hash_functions = 1; |
| // The number of bits in the Bloom filter's bit array. |
| optional uint32 num_bits = 2; |
| // The bit array data of the Bloom filter provided via a byte vector. |
| // The number of bytes provided must be large enough to hold the |
| // specified number of bits (num_bits). |
| optional bytes data = 3; |
| } |
| |
| // A scalable filter for an optimization type. |
| // |
| // Next ID: 6 |
| message OptimizationFilter { |
| // The type of optimization this filter applies to. |
| optional OptimizationType optimization_type = 1; |
| // The filter data represented as a Bloom filter. |
| optional BloomFilter bloom_filter = 2; |
| // Additional filters represented as regexps matched against the main page |
| // URL. If matched, the URL will be considered as contained in the filter. |
| repeated string regexps = 3; |
| // Additional filters represented as regexps matched against the main page |
| // URL. If matched, the URL will be considered as not contained in the filter. |
| // |
| // This set of regexps should be checked prior to any matching against the |
| // contained bloom_filter or regexps fields. |
| repeated string exclusion_regexps = 5; |
| // Whether additional host suffixes (other than the host) should be checked |
| // against the filter. |
| optional bool skip_host_suffix_checking = 4; |
| } |
| |
| message Configuration { |
| // An ordered list containing hints for key/optimization combinations. |
| // |
| // It is guaranteed that there will only be a single hint per key and key |
| // representation combination. These hints are intended to apply to a full |
| // page. |
| // |
| // Note, this list may contain multiple hints that apply to a page. For |
| // example, if there are hints for (HOST_SUFFIX,example.com) and |
| // (HOST_SUFFIX,sports.example.com), these may both apply to |
| // sports.example.com/foo. |
| // |
| // The client will use the first Hint record with a key that matches the |
| // main frame URL. Therefore, the server should provide all the hint |
| // details for that key that it wants to provide as the client will only |
| // look at that one record to decide which optimization to apply. |
| repeated Hint hints = 1; |
| // A set of per-optimization blocklists. |
| // |
| // It is guaranteed that an optimization type will not have filters in both |
| // |optimization_blocklists| and |optimization_allowlists|. |
| repeated OptimizationFilter optimization_blocklists = 2; |
| // A set of per-optimization allowlists. |
| // |
| // It is guaranteed that an optimization type will not have filters in both |
| // |optimization_blocklists| and |optimization_allowlists|. |
| repeated OptimizationFilter optimization_allowlists = 3; |
| } |
| |
| enum HintSource { |
| HINT_SOURCE_UNKNOWN = 0; |
| // Served from the Chrome Optimization Hints Component. |
| HINT_SOURCE_OPTIMIZATION_HINTS_COMPONENT = 1; |
| // Served from the Chrome Optimization Guide Service. |
| HINT_SOURCE_OPTIMIZATION_GUIDE_SERVICE = 2; |
| } |
| |
| message Version { |
| reserved 2; |
| |
| // The time the hint was generated. |
| optional Timestamp generation_timestamp = 1; |
| // The source from which the hint was served from. |
| optional HintSource hint_source = 3; |
| } |