Home | History | Annotate | Download | only in proto
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 syntax = "proto2";
      6 
      7 option optimize_for = LITE_RUNTIME;
      8 
      9 package variations;
     10 
     11 // This defines the Protocol Buffer representation of a Chrome Variations study
     12 // as sent to clients of the Variations server.
     13 //
     14 // Next tag: 13
     15 message Study {
     16   // The name of the study. Should not contain spaces or special characters.
     17   // Ex: "my_study"
     18   required string name = 1;
     19 
     20   // The expiry date of the study in Unix time format. (Seconds since midnight
     21   // January 1, 1970 UTC). See: http://en.wikipedia.org/wiki/Unix_time
     22   //
     23   // A study that has expired will be disabled, which will take precedence over
     24   // a corresponding hardcoded field trial in the client.
     25   //
     26   // Ex: 1330893974  (corresponds to 2012-03-04 20:46:14Z)
     27   optional int64 expiry_date = 3;
     28 
     29   // Consistency setting for a study.
     30   enum Consistency {
     31     SESSION = 0;  // Can't change within a session.
     32     PERMANENT = 1;  // Can't change for a given user.
     33   }
     34 
     35   // Consistency setting for this study. Optional - defaults to SESSION.
     36   // Ex: PERMANENT
     37   optional Consistency consistency = 7 [default = SESSION];
     38 
     39   // Name of the experiment that gets the default experience. This experiment
     40   // must be included in the list below.
     41   // Ex: "default"
     42   optional string default_experiment_name = 8;
     43 
     44   // An experiment within the study.
     45   //
     46   // Next tag: 10
     47   message Experiment {
     48     // A named parameter value for this experiment.
     49     //
     50     // Next tag: 3
     51     message Param {
     52       // The name of the parameter.
     53       optional string name = 1;
     54 
     55       // The value of the parameter.
     56       optional string value = 2;
     57     }
     58 
     59     // The name of the experiment within the study.
     60     // Ex: "bucketA"
     61     required string name = 1;
     62 
     63     // The cut of the total probability taken for this experiment (the x in
     64     // x / N, where N is the sum of all xs).  Ex: "50"
     65     required uint32 probability_weight = 2;
     66 
     67     // Optional id used to uniquely identify this experiment for Google web
     68     // properties.
     69     optional uint64 google_web_experiment_id = 3;
     70 
     71     // Optional id used to allow this experiment to trigger experimental
     72     // behavior on Google web properties.
     73     optional uint64 google_web_trigger_experiment_id = 8;
     74 
     75     // Optional id used to uniquely identify this experiment for Google Update.
     76     optional uint64 google_update_experiment_id = 4;
     77 
     78     // Optional name of a Chrome flag that, when present, causes this experiment
     79     // to be forced. If the forcing_flag field is set, users will not be
     80     // assigned to this experiment unless that flag is present in Chrome's
     81     // command line.
     82     optional string forcing_flag = 5;
     83 
     84     // Parameter values for this experiment.
     85     repeated Param param = 6;
     86 
     87     enum Type {
     88       // Regular experiment group. This is the default value and can be omitted.
     89       NORMAL = 0;
     90 
     91       // Changes to this experiment group are ignored for the purposes of
     92       // kill-switch triggering. Included to allow the flexibility to not
     93       // trigger this logic for specific cases (e.g. a group rename without
     94       // any functionality changes).
     95       IGNORE_CHANGE = 1;
     96 
     97       // This is a kill-switch group that should be killed at "best effort"
     98       // priority, e.g. with a hot dog menu badge. The experiment must have a
     99       // probability_weight of 0.
    100       KILL_BEST_EFFORT = 2;
    101 
    102       // This is a kill-switch group that should be killed with "critical"
    103       // priority. Depending on platform this may result in showing a
    104       // non-dismissible restart prompt with a timer. This should only be used
    105       // in very serious emergency circumstances. The experiment must have a
    106       // probability_weight of 0.
    107       KILL_CRITICAL = 3;
    108     }
    109     optional Type type = 7 [default = NORMAL];
    110 
    111     // A UI string to override, and the new value to use.
    112     message OverrideUIString {
    113       // The first 32 bits of the MD5 hash digest of the resource name to
    114       // override.
    115       // e.g. Hash("IDS_BOOKMARK_BAR_UNDO")
    116       optional fixed32 name_hash = 1;
    117 
    118       // The new value of the string being overridden.
    119       // e.g. "Undo"
    120       optional string value = 2;
    121     }
    122     repeated OverrideUIString override_ui_string = 9;
    123   }
    124 
    125   // List of experiments in this study. This list should include the default /
    126   // control experiment.
    127   //
    128   // For example, to specify that 99% of users get the default behavior, while
    129   // 0.5% of users get experience "A" and 0.5% of users get experience "B",
    130   // specify the values below.
    131   // Ex: { "default": 990, "A": 5, "B": 5 }
    132   repeated Experiment experiment = 9;
    133 
    134   // Possible Chrome release channels.
    135   // See: http://dev.chromium.org/getting-involved/dev-channel
    136   enum Channel {
    137     // UNKNOWN value is defined here for the benefit of code using this enum
    138     // type, but is not actually meant to be encoded in the protobuf.
    139     UNKNOWN = -1;
    140     CANARY = 0;
    141     DEV = 1;
    142     BETA = 2;
    143     STABLE = 3;
    144   }
    145 
    146   // Possible Chrome operating system platforms.
    147   enum Platform {
    148     PLATFORM_WINDOWS  = 0;
    149     PLATFORM_MAC      = 1;
    150     PLATFORM_LINUX    = 2;
    151     PLATFORM_CHROMEOS = 3;
    152     PLATFORM_ANDROID  = 4;
    153     PLATFORM_IOS      = 5;
    154   }
    155 
    156   // Possible form factors Chrome is running on.
    157   enum FormFactor {
    158     DESKTOP = 0;
    159     PHONE   = 1;
    160     TABLET  = 2;
    161   }
    162 
    163   // Filtering criteria specifying whether this study is applicable to a given
    164   // Chrome instance.
    165   //
    166   // Next tag: 10
    167   message Filter {
    168     // The start date of the study in Unix time format. (Seconds since midnight
    169     // January 1, 1970 UTC). See: http://en.wikipedia.org/wiki/Unix_time
    170     // Ex: 1330893974  (corresponds to 2012-03-04 20:46:14Z)
    171     optional int64 start_date = 1;
    172 
    173     // The minimum Chrome version for this study, allowing a trailing '*'
    174     // character for pattern matching. Inclusive. (To check for a match, iterate
    175     // over each component checking >= until a * or end of string is reached.)
    176     // Optional - if not specified, there is no minimum version.
    177     // Ex: "17.0.963.46", "17.0.963.*", "17.*"
    178     optional string min_version = 2;
    179 
    180     // The maximum Chrome version for this study; same formatting as
    181     // |min_version| above. Inclusive. (To check for a match, iterate over each
    182     // component checking <= until a * or end of string is reached.)
    183     // Optional - if not specified, there is no maximum version.
    184     // Ex: "19.*"
    185     optional string max_version = 3;
    186 
    187     // List of channels that will receive this study. If omitted, the study
    188     // applies to all channels.
    189     // Ex: [BETA, STABLE]
    190     repeated Channel channel = 4;
    191 
    192     // List of platforms that will receive this study. If omitted, the study
    193     // applies to all platforms.
    194     // Ex: [PLATFORM_WINDOWS, PLATFORM_MAC]
    195     repeated Platform platform = 5;
    196 
    197     // List of locales that will receive this study. If omitted, the study
    198     // applies to all locales.
    199     // Ex: ["en-US", "en-CA"]
    200     repeated string locale = 6;
    201 
    202     // List of form factors that will receive this study. If omitted, the study
    203     // applies to all form factors.
    204     // Ex: [PHONE, TABLET]
    205     repeated FormFactor form_factor = 7;
    206 
    207     // List of ChromeOS hardware classes that will receive this study. Each
    208     // entry is treated as a substring of the actual device hardware_class,
    209     // so "FOO" will match the client's hardware class "Device FOOBAR". If
    210     // omitted, the study applies to all hardware classes unless
    211     // |exclude_hardware_class| is specified. Mutually exclusive with
    212     // |exclude_hardware_class|.
    213     repeated string hardware_class = 8;
    214 
    215     // List of ChromeOS hardware classes that will be excluded in this
    216     // study. Each entry is treated as a substring of the actual device
    217     // hardware_class, so "FOO" will match the client's hardware class
    218     // "Device FOOBAR". If omitted, the study applies to all hardware classes
    219     // unless |hardware_class| is specified. Mutually exclusive with
    220     // |hardware_class|.
    221     repeated string exclude_hardware_class = 9;
    222   }
    223 
    224   // Filtering criteria for this study. A study that is filtered out for a given
    225   // client is equivalent to that study not being sent at all.
    226   optional Filter filter = 10;
    227 
    228   // Randomization seed to be used when |consistency| is set to PERMANENT. If
    229   // not specified, randomization will be done using the trial name.
    230   optional uint32 randomization_seed = 11;
    231 
    232   // Specifies whether the study starts as active initially, or whether it
    233   // requires the client to query its state before it is marked as active.
    234   enum ActivationType {
    235     // The study will be activated when its state is queried by the client.
    236     // This is recommended for most studies that include client code.
    237     ACTIVATION_EXPLICIT  = 0;
    238     // The study will be automatically activated when it is created. This
    239     // is recommended for studies that do not have any client logic.
    240     ACTIVATION_AUTO      = 1;
    241   }
    242 
    243   // Activation type for this study. Defaults to ACTIVATION_EXPLICIT if omitted.
    244   optional ActivationType activation_type = 12;
    245 }
    246