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