blob: b99d77bf09389c4f6aded8462a6c565b359c444b [file] [log] [blame]
kenobi85339df82015-02-13 00:15:251// Copyright (c) 2015 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
5var goog = {};
6goog.async = {};
7
8/**
9 * @interface
10 * @template VALUE
11 */
12goog.async.Deferred;
13
14/**
15 * @param {!function(this:T,VALUE):?} cb
16 * @param {T=} opt_scope
17 * @return {!goog.async.Deferred}
18 * @template T
19 */
20goog.async.Deferred.prototype.addCallback;
21
kenobif7dd25c2015-03-10 17:02:5122/**
23 * @param {!function(this:T,VALUE):?} cb
24 * @param {T=} opt_scope
25 * @return {!goog.async.Deferred}
26 * @template T
27 */
28goog.async.Deferred.prototype.callback;
29
30/**
31 * @param {?(function(this:THIS, TYPE):
32 * (RESULT|IThenable<RESULT>|Thenable))=} opt_onFulfilled
33 * @param {?(function(this:THIS, *): *)=} opt_onRejected
34 * @param {THIS=} opt_context
35 * @return {!goog.Promise<RESULT>}
36 * @template RESULT,THIS
37 */
38goog.async.Deferred.prototype.then;
39
kenobi85339df82015-02-13 00:15:2540var analytics = {};
41
42/** @typedef {string} */
43analytics.HitType;
44
45/** @enum {analytics.HitType} */
46analytics.HitTypes = {
47 APPVIEW: 'appview',
48 EVENT: 'event',
49 SOCIAL: 'social',
50 TRANSACTION: 'transaction',
51 ITEM: 'item',
52 TIMING: 'timing',
53 EXCEPTION: 'exception'
54};
55
56/**
57 * @typedef {{
58 * id: string,
59 * name: string,
60 * valueType: analytics.ValueType,
61 * maxLength: (number|undefined),
62 * defaultValue: (string|undefined)
63 * }}
64 */
65analytics.Parameter;
66
67/** @typedef {string|number|boolean} */
68analytics.Value;
69
70/** @typedef {string} */
71analytics.ValueType;
72
73
74/**
75 * @param {string} appName
76 * @param {string=} opt_appVersion
77 * @return {!analytics.GoogleAnalytics}
78 */
79analytics.getService;
80
81
82/** @interface */
83analytics.GoogleAnalytics;
84
85/**
86 * @param {string} trackingId
87 * @return {!analytics.Tracker}
88 */
89analytics.GoogleAnalytics.prototype.getTracker;
90
91/** @return {!goog.async.Deferred.<!analytics.Config>} */
92analytics.GoogleAnalytics.prototype.getConfig;
93
94
95/** @interface */
96analytics.Tracker;
97
98/** @typedef {function(!analytics.Tracker.Hit)} */
99analytics.Tracker.Filter;
100
101/**
102 * @param {!analytics.HitType|!analytics.EventBuilder} hitType
103 * @param {(!analytics.ParameterMap|
104 * !Object.<string, !analytics.Value>)=} opt_extraParams
105 * @return {!goog.async.Deferred}
106 */
107analytics.Tracker.prototype.send;
108
109/**
110 * @param {string} description
111 * @return {!goog.async.Deferred}
112 */
113analytics.Tracker.prototype.sendAppView;
114
115/**
116 * @param {string} category
117 * @param {string} action
118 * @param {string=} opt_label
119 * @param {number=} opt_value
120 * @return {!goog.async.Deferred}
121 */
122analytics.Tracker.prototype.sendEvent;
123
124/**
125 * @param {string} network Specifies the social network, for example Facebook
126 * or Google Plus.
127 * @param {string} action Specifies the social interaction action.
128 * For example on Google Plus when a user clicks the +1 button,
129 * the social action is 'plus'.
130 * @param {string} target Specifies the target of a social interaction.
131 * This value is typically a URL but can be any text.
132 * @return {!goog.async.Deferred}
133 */
134analytics.Tracker.prototype.sendSocial;
135
136/**
137 * @param {string=} opt_description Specifies the description of an exception.
138 * @param {boolean=} opt_fatal Was the exception fatal.
139 * @return {!goog.async.Deferred}
140 */
141analytics.Tracker.prototype.sendException;
142
143/**
144 * @param {string} category Specifies the category of the timing.
145 * @param {string} variable Specifies the variable name of the timing.
146 * @param {number} value Specifies the value of the timing.
147 * @param {string=} opt_label Specifies the optional label of the timing.
148 * @param {number=} opt_sampleRate
149 * @return {!goog.async.Deferred}
150 */
151analytics.Tracker.prototype.sendTiming;
152
153analytics.Tracker.prototype.forceSessionStart;
154
155/**
156 * @param {string} category
157 * @param {string} variable
158 * @param {string=} opt_label
159 * @param {number=} opt_sampleRate
160 * @return {!analytics.Tracker.Timing}
161 */
162analytics.Tracker.prototype.startTiming;
163
164/** @interface */
165analytics.Tracker.Timing;
166
167/** @return {!goog.async.Deferred} */
168analytics.Tracker.Timing.prototype.send;
169
170/** @param {!analytics.Tracker.Filter} filter */
171analytics.Tracker.prototype.addFilter;
172
173/** @interface */
174analytics.Tracker.Hit;
175
176/** @return {!analytics.HitType} */
177analytics.Tracker.Hit.prototype.getHitType;
178
179/** @return {!analytics.ParameterMap} */
180analytics.Tracker.Hit.prototype.getParameters;
181
182analytics.Tracker.Hit.prototype.cancel;
183
184
185/** @interface */
186analytics.Config = function() {};
187
188/** @param {boolean} permitted */
189analytics.Config.prototype.setTrackingPermitted;
190
191/** @return {boolean} */
192analytics.Config.prototype.isTrackingPermitted;
193
194/** @param {number} sampleRate */
195analytics.Config.prototype.setSampleRate;
196
kenobif7dd25c2015-03-10 17:02:51197/** @return {!goog.async.Deferred} Settles once the id has been reset. */
198analytics.Config.prototype.resetUserId;
199
kenobi85339df82015-02-13 00:15:25200
201/** @interface */
202analytics.ParameterMap;
203
204/**
205 * @typedef {{
206 * key: !analytics.Parameter,
207 * value: !analytics.Value
208 * }}
209 */
210analytics.ParameterMap.Entry;
211
212/**
213 * @param {!analytics.Parameter} param
214 * @param {!analytics.Value} value
215 */
216analytics.ParameterMap.prototype.set;
217
218/**
219 * @param {!analytics.Parameter} param
220 * @return {?analytics.Value}
221 */
222analytics.ParameterMap.prototype.get;
223
224/** @param {!analytics.Parameter} param */
225analytics.ParameterMap.prototype.remove;
226
227/** @return {!Object.<string, analytics.Value>} */
228analytics.ParameterMap.prototype.toObject;
229
230
231/** @interface */
232analytics.EventBuilder;
233
234/** @typedef {{ index: number, value: string }} */
235analytics.EventBuilder.Dimension;
236
237/** @typedef {{ index: number, value: number }} */
238analytics.EventBuilder.Metric;
239
240/** @return {!analytics.EventBuilder} */
241analytics.EventBuilder.builder;
242
243/**
244 * @param {string} category
245 * @return {!analytics.EventBuilder}
246 */
247analytics.EventBuilder.prototype.category;
248
249/**
250 * @param {string} action
251 * @return {!analytics.EventBuilder}
252 */
253analytics.EventBuilder.prototype.action;
254
255/**
256 * @param {string} label
257 * @return {!analytics.EventBuilder}
258 */
259analytics.EventBuilder.prototype.label;
260
261/**
262 * @param {number} value
263 * @return {!analytics.EventBuilder}
264 */
265analytics.EventBuilder.prototype.value;
266
267/**
268 * @param {!analytics.EventBuilder.Dimension} dimension
269 * @return {!analytics.EventBuilder}
270 */
271analytics.EventBuilder.prototype.dimension;
272
273/**
274 * @param {!analytics.EventBuilder.Metric} metric
275 * @return {!analytics.EventBuilder}
276 */
277analytics.EventBuilder.prototype.metric;
278
279/**
280 * @param {!analytics.Tracker} tracker
281 * @return {!goog.async.Deferred}
282 */
283analytics.EventBuilder.prototype.send;
284
285/** @param {!analytics.ParameterMap} parameters */
286analytics.EventBuilder.prototype.collect;