| // Copyright 2022 The ChromiumOS Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| syntax = "proto3"; |
| |
| option optimize_for = LITE_RUNTIME; |
| |
| // This file defines messages necessary for early boot experimentation |
| package featured; |
| |
| option go_package = "go.chromium.org/chromiumos/system_api/featured_proto"; |
| |
| // Defines the key and value of a feature's parameter. |
| message Param { |
| // Key of an experiment's parameter. |
| string key = 1; |
| // Value of an experiment's parameter. |
| string value = 2; |
| } |
| |
| // Specifies whether a feature override enables or disables the feature. This |
| // enum is based off the OverrideState enum in chromium's base/feature_list.h. |
| enum OverrideState { |
| OVERRIDE_USE_DEFAULT = 0; |
| OVERRIDE_DISABLE_FEATURE = 1; |
| OVERRIDE_ENABLE_FEATURE = 2; |
| } |
| |
| // Defines a chrome://flags entry that can override a feature's state determined |
| // by the evaluate_seed binary. |
| message FeatureOverride { |
| // Name of the feature, always starting with "CrOSEarlyBoot" |
| string name = 1; |
| // True if the feature is enabled, and false otherwise. |
| // NOTE: This field is *deprecated* and will eventually be replaced by the |
| // |override_state| field. This field will be deleted after all existing |
| // references to it are removed. Future code should *not* use this field. |
| bool enabled = 2; |
| // If the feature is enabled AND has parameters associated with it, |
| // they'll appear here. |
| repeated Param params = 3; |
| // Name of the field trial (study). |
| string trial_name = 4; |
| // Name of the experiment group the device is enrolled in. |
| string group_name = 5; |
| // A tri-state value indicating if the feature is enabled, disabled, or uses |
| // default state. |
| OverrideState override_state = 6; |
| } |
| |
| // Information about the last known "safe" seed. |
| // Keep in sync with featured::SeedsEqual when adding new fields. |
| message SeedDetails { |
| // The active client locale that was successfully used in association with the |
| // last known "safe" seed. |
| string locale = 4; |
| // Milestone with which the last known "safe" seed was fetched. |
| int32 milestone = 5; |
| // String form of pair <Chrome version string, country code string> (eg. |
| // "106.0.5249.119,us") representing the country used for filtering permanent |
| // consistency studies until the next time Chrome is updated. |
| string permanent_consistency_country = 6; |
| // A country code string representing the country used for evaluating session |
| // consistency studies. |
| string session_consistency_country = 7; |
| // Base64-encoded digital signature of the last known "safe" seed's binary |
| // data. Empty if there is no known "safe" seed. |
| string signature = 8; |
| // The serialized base::Time used for safe seed expiry checks. This is usually |
| // the time at which the last known "safe" seed was received; however, it |
| // could be a build timestamp if the received date is unknown. An empty |
| // (default-constructed) base::Time if there is no known "safe" seed. This is |
| // a server-provided timestamp in milliseconds. |
| int64 date = 9; |
| // The serialized base::Time from the fetch corresponding to the last known |
| // "safe" seed. This is a client timestamp in milliseconds. |
| int64 fetch_time = 10; |
| // Last known "safe" seed represented as the base64-encoded compressed |
| // serialized form of the variations.VariationsSeed protobuf. |
| bytes b64_compressed_data = 11; |
| |
| // Tags 1, 2, and 3 are reserved since they have been deleted. |
| // Tag 1 was the last known "safe" seed represented as the serialized form of |
| // the variations.VariationsSeed protobuf. Despite the name, it was |
| // decompressed data that came from VariationsSeedStore::LoadSeed. |
| // Tags 2 and 3 were used for older versions of the date and fetch_time |
| // fields, which were both of type google.protobuf.Timestamp. Importing |
| // google.protobuf.Timestamp is not supported in Chromium's |
| // third_party/cros_system_api, so both fields were changed to type int64 (the |
| // same data type finch protos use for dates). |
| reserved 1, 2, 3; |
| } |
| |
| // Message containing all the chrome://flags overrides. |
| message OverridesSet { |
| repeated FeatureOverride overrides = 1; |
| } |
| |
| // Encapsulates information necessary for platform disaster recovery. |
| message Store { |
| // Number of platform reboots since receiving a Chrome dbus call indicating |
| // successful seed fetch. |
| uint32 boot_attempts_since_last_seed_update = 1; |
| // Data associated with the last known "safe" seed. |
| SeedDetails last_good_seed = 2; |
| // chrome://flags overrides, as a serialized OverridesSet. |
| bytes overrides = 4; |
| // HMAC of |overrides|. |
| bytes overrides_hmac = 5; |
| |
| // The repeated FeatureOverride overrides was a member of this message |
| // directly, but we need to wrap it in a message so we can separately |
| // serialize and HMAC it. |
| reserved 3; |
| } |
| |
| // ComputedState is evaluate_seed's output, including both the evaluated state |
| // of each feature in the seed as well as the seed that was used to generate |
| // that state. |
| message ComputedState { |
| // Computed state for each experiment in a seed. |
| repeated FeatureOverride overrides = 1; |
| // Which seed was used to generate the overrides? |
| SeedDetails used_seed = 2; |
| } |