| syntax = "proto2"; |
| |
| package org.chromium.net.httpflags; |
| |
| option java_package = "org.chromium.net.httpflags"; |
| option java_multiple_files = true; |
| option optimize_for = LITE_RUNTIME; // crbug/800281 |
| |
| // Describes a set of overrides for `base::Feature` flags. |
| message BaseFeatureOverrides { |
| // Describes the state of a given base::Feature. |
| // |
| // Note that currently this doesn't support customizing the name of the fake |
| // field trial (a.k.a study) and group (a.k.a experiment) that will be |
| // associated with the base::Feature. It is highly unlikely you'd need to do |
| // this, though. |
| message FeatureState { |
| // If set, the feature will be overridden to the enabled state (true) or the |
| // disabled state (false). If unset, the feature state will not be |
| // overridden. |
| optional bool enabled = 1; |
| |
| // The set of Feature Params that will be associated with the feature, as |
| // key-value pairs. (More specifically: the set of params that will be |
| // associated with the "fake" field trial and group that the feature is |
| // associated with.) |
| // |
| // The usual Feature Params APIs will return an empty params map for |
| // disabled features. It is possible to work around this limitation, but |
| // typical code wouldn't, so you almost certainly want to explicitly enable |
| // the feature by setting the `enabled` field above to `true` if you want |
| // this field to have any effect. |
| // |
| // Behind the scenes, feature params are always string-valued, which is why |
| // this map is string-valued as well (actually bytes-valued, to hedge |
| // against the remote possibility that someone might want to stuff binary or |
| // non-UTF-8 data in there). The non-string variants of the |
| // base::FeatureParam API (int, float, etc.) are really just convenience |
| // string parsers. |
| // |
| // The base::FeatureParam API will return the param default value if there |
| // is no entry for the corresponding param name, OR if the value is the |
| // empty string. Crucially, this means it is NOT possible to override a |
| // base::FeatureParam to the empty string. This limitation does not apply to |
| // lower-level APIs such as base::GetFieldTrialParamsByFeature(). |
| // |
| // If this field is empty, no param map will be associated with the feature. |
| // Note that this is subtly different from an empty param map as that |
| // affects the return value of low-level APIs such as |
| // base::GetFieldTrialParamsByFeature(). The high-level base::FeatureParam |
| // API will not surface that difference, though. This proto does not |
| // currently provide a way to associate an empty map. |
| map<string, bytes> params = 2; |
| } |
| |
| // The key is the name of the base::Feature. |
| map<string, FeatureState> feature_states = 1; |
| } |