Disable firewall check. It takes signifficant time, need to be on FILE thread.
[chromium-blink-merge.git] / components / variations / proto / study.proto
blob28ac1836d368a889d47a9bce1291eea05577cee5
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.
5 syntax = "proto2";
7 option optimize_for = LITE_RUNTIME;
9 package chrome_variations;
11 // This defines the Protocol Buffer representation of a Chrome Variations study
12 // as sent to clients of the Variations server.
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;
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;
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   }
35   // Consistency setting for this study. Optional - defaults to SESSION.
36   // Ex: PERMANENT
37   optional Consistency consistency = 7 [default = SESSION];
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;
44   // An experiment within the study.
45   //
46   // Next tag: 8
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;
55       // The value of the parameter.
56       optional string value = 2;
57     }
59     // The name of the experiment within the study.
60     // Ex: "bucketA"
61     required string name = 1;
63     // The cut of the total probability taken for this experiment (the x in
64     // x / N, where N is the sum of all x’s).  Ex: "50"
65     required uint32 probability_weight = 2;
67     // Optional id used to uniquely identify this experiment for Google web
68     // properties.
69     optional uint64 google_web_experiment_id = 3;
71     // Optional id used to uniquely identify this experiment for Google Update.
72     optional uint64 google_update_experiment_id = 4;
74     // Optional name of a Chrome flag that, when present, causes this experiment
75     // to be forced. If the forcing_flag field is set, users will not be
76     // assigned to this experiment unless that flag is present in Chrome's
77     // command line.
78     optional string forcing_flag = 5;
80     // Parameter values for this experiment.
81     repeated Param param = 6;
83     enum Type {
84       // Regular experiment group. This is the default value and can be omitted.
85       NORMAL = 0;
87       // Changes to this experiment group are ignored for the purposes of
88       // kill-switch triggering. Included to allow the flexibility to not
89       // trigger this logic for specific cases (e.g. a group rename without
90       // any functionality changes).
91       IGNORE_CHANGE = 1;
93       // This is a kill-switch group that should be killed at "best effort"
94       // priority, e.g. with a hot dog menu badge. The experiment must have a
95       // probability_weight of 0.
96       KILL_BEST_EFFORT = 2;
98       // This is a kill-switch group that should be killed with "critical"
99       // priority. Depending on platform this may result in showing a
100       // non-dismissible restart prompt with a timer. This should only be used
101       // in very serious emergency circumstances. The experiment must have a
102       // probability_weight of 0.
103       KILL_CRITICAL = 3;
104     }
105     optional Type type = 7 [default = NORMAL];
106   }
108   // List of experiments in this study. This list should include the default /
109   // control experiment.
110   //
111   // For example, to specify that 99% of users get the default behavior, while
112   // 0.5% of users get experience "A" and 0.5% of users get experience "B",
113   // specify the values below.
114   // Ex: { "default": 990, "A": 5, "B": 5 }
115   repeated Experiment experiment = 9;
117   // Possible Chrome release channels.
118   // See: http://dev.chromium.org/getting-involved/dev-channel
119   enum Channel {
120     // UNKNOWN value is defined here for the benefit of code using this enum
121     // type, but is not actually meant to be encoded in the protobuf.
122     UNKNOWN = -1;
123     CANARY = 0;
124     DEV = 1;
125     BETA = 2;
126     STABLE = 3;
127   }
129   // Possible Chrome operating system platforms.
130   enum Platform {
131     PLATFORM_WINDOWS  = 0;
132     PLATFORM_MAC      = 1;
133     PLATFORM_LINUX    = 2;
134     PLATFORM_CHROMEOS = 3;
135     PLATFORM_ANDROID  = 4;
136     PLATFORM_IOS      = 5;
137   }
139   // Possible form factors Chrome is running on.
140   enum FormFactor {
141     DESKTOP = 0;
142     PHONE   = 1;
143     TABLET  = 2;
144   }
146   // Filtering criteria specifying whether this study is applicable to a given
147   // Chrome instance.
148   //
149   // Next tag: 10
150   message Filter {
151     // The start date of the study in Unix time format. (Seconds since midnight
152     // January 1, 1970 UTC). See: http://en.wikipedia.org/wiki/Unix_time
153     // Ex: 1330893974  (corresponds to 2012-03-04 20:46:14Z)
154     optional int64 start_date = 1;
156     // The minimum Chrome version for this study, allowing a trailing '*'
157     // character for pattern matching. Inclusive. (To check for a match, iterate
158     // over each component checking >= until a * or end of string is reached.)
159     // Optional - if not specified, there is no minimum version.
160     // Ex: "17.0.963.46", "17.0.963.*", "17.*"
161     optional string min_version = 2;
163     // The maximum Chrome version for this study; same formatting as
164     // |min_version| above. Inclusive. (To check for a match, iterate over each
165     // component checking <= until a * or end of string is reached.)
166     // Optional - if not specified, there is no maximum version.
167     // Ex: "19.*"
168     optional string max_version = 3;
170     // List of channels that will receive this study. If omitted, the study
171     // applies to all channels.
172     // Ex: [BETA, STABLE]
173     repeated Channel channel = 4;
175     // List of platforms that will receive this study. If omitted, the study
176     // applies to all platforms.
177     // Ex: [PLATFORM_WINDOWS, PLATFORM_MAC]
178     repeated Platform platform = 5;
180     // List of locales that will receive this study. If omitted, the study
181     // applies to all locales.
182     // Ex: ["en-US", "en-CA"]
183     repeated string locale = 6;
185     // List of form factors that will receive this study. If omitted, the study
186     // applies to all form factors.
187     // Ex: [PHONE, TABLET]
188     repeated FormFactor form_factor = 7;
190     // List of ChromeOS hardware classes that will receive this study. Each
191     // entry is treated as a substring of the actual device hardware_class,
192     // so "FOO" will match the client's hardware class "Device FOOBAR". If
193     // omitted, the study applies to all hardware classes unless
194     // |exclude_hardware_class| is specified. Mutually exclusive with
195     // |exclude_hardware_class|.
196     repeated string hardware_class = 8;
198     // List of ChromeOS hardware classes that will be excluded in this
199     // study. Each entry is treated as a substring of the actual device
200     // hardware_class, so "FOO" will match the client's hardware class
201     // "Device FOOBAR". If omitted, the study applies to all hardware classes
202     // unless |hardware_class| is specified. Mutually exclusive with
203     // |hardware_class|.
204     repeated string exclude_hardware_class = 9;
205   }
207   // Filtering criteria for this study. A study that is filtered out for a given
208   // client is equivalent to that study not being sent at all.
209   optional Filter filter = 10;
211   // Randomization seed to be used when |consistency| is set to PERMANENT. If
212   // not specified, randomization will be done using the trial name.
213   optional uint32 randomization_seed = 11;
215   // Specifies whether the study starts as active initially, or whether it
216   // requires the client to query its state before it is marked as active.
217   enum ActivationType {
218     // The study will be activated when its state is queried by the client.
219     // This is recommended for most studies that include client code.
220     ACTIVATION_EXPLICIT  = 0;
221     // The study will be automatically activated when it is created. This
222     // is recommended for studies that do not have any client logic.
223     ACTIVATION_AUTO      = 1;
224   }
226   // Activation type for this study. Defaults to ACTIVATION_EXPLICIT if omitted.
227   optional ActivationType activation_type = 12;