Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / chrome / browser / resources / print_preview / metrics.js
bloba37a94cda9d74f0582709e541e4e50bb1203ee84
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 cr.define('print_preview', function() {
6   'use strict';
8   /**
9    * Object used to measure usage statistics.
10    * @constructor
11    */
12   function Metrics() {};
14   /**
15    * Enumeration of buckets that a user can enter while using the destination
16    * search widget.
17    * @enum {number}
18    */
19   Metrics.DestinationSearchBucket = {
20     // Used when the print destination search widget is shown.
21     DESTINATION_SHOWN: 0,
22     // Used when the user selects a print destination.
23     DESTINATION_CLOSED_CHANGED: 1,
24     // Used when the print destination search widget is closed without selecting
25     // a print destination.
26     DESTINATION_CLOSED_UNCHANGED: 2,
27     // Used when the Google Cloud Print promotion (shown in the destination
28     // search widget) is shown to the user.
29     SIGNIN_PROMPT: 3,
30     // Used when the user chooses to sign-in to their Google account.
31     SIGNIN_TRIGGERED: 4,
32     // Used when a user selects the Privet printer in a pair of duplicate
33     // Privet and cloud printers.
34     PRIVET_DUPLICATE_SELECTED: 5,
35     // Used when a user selects the cloud printer in a pair of duplicate
36     // Privet and cloud printers.
37     CLOUD_DUPLICATE_SELECTED: 6,
38     // Used when a user sees a register promo for a cloud print printer.
39     REGISTER_PROMO_SHOWN: 7,
40     // Used when a user selects a register promo for a cloud print printer.
41     REGISTER_PROMO_SELECTED: 8,
42     // User changed active account.
43     ACCOUNT_CHANGED: 9,
44     // User tried to log into another account.
45     ADD_ACCOUNT_SELECTED: 10,
46     // Printer sharing invitation was shown to the user.
47     INVITATION_AVAILABLE: 11,
48     // User accepted printer sharing invitation.
49     INVITATION_ACCEPTED: 12,
50     // User rejected printer sharing invitation.
51     INVITATION_REJECTED: 13,
52     // Max value.
53     DESTINATION_SEARCH_MAX_BUCKET: 14
54   };
56   /**
57    * Enumeration of buckets that a user can enter while using the Google Cloud
58    * Print promotion.
59    * @enum {number}
60    */
61   Metrics.GcpPromoBucket = {
62     // Used when the Google Cloud Print promotion (shown above the PDF preview
63     // plugin) is shown to the user.
64     PROMO_SHOWN: 0,
65     // Used when the user clicks the "Get started" link in the promotion shown
66     // in CLOUDPRINT_BIG_PROMO_SHOWN.
67     PROMO_CLICKED: 1,
68     // Used when the user dismisses the promotion shown in
69     // CLOUDPRINT_BIG_PROMO_SHOWN.
70     PROMO_CLOSED: 2,
71     // Max value.
72     GCP_PROMO_MAX_BUCKET: 3
73   };
75   /**
76    * Print settings UI usage metrics buckets.
77    * @enum {number}
78    */
79   Metrics.PrintSettingsUiBucket = {
80     // Advanced settings dialog is shown.
81     ADVANCED_SETTINGS_DIALOG_SHOWN: 0,
82     // Advanced settings dialog is closed without saving a selection.
83     ADVANCED_SETTINGS_DIALOG_CANCELED: 1,
84     // 'More/less settings' expanded.
85     MORE_SETTINGS_CLICKED: 2,
86     // 'More/less settings' collapsed.
87     LESS_SETTINGS_CLICKED: 3,
88     // User printed with extra settings expanded.
89     PRINT_WITH_SETTINGS_EXPANDED: 4,
90     // User printed with extra settings collapsed.
91     PRINT_WITH_SETTINGS_COLLAPSED: 5,
92     // Max value.
93     PRINT_SETTINGS_UI_MAX_BUCKET: 6
94   };
96   /**
97    * A context for recording a value in a specific UMA histogram.
98    * @param {string} histogram The name of the histogram to be recorded in.
99    * @param {number} maxBucket The max value for the last histogram bucket.
100    * @constructor
101    */
102   function MetricsContext(histogram, maxBucket) {
103     /** @private {string} */
104     this.histogram_ = histogram;
106     /** @private {number} */
107     this.maxBucket_ = maxBucket;
108   };
110   MetricsContext.prototype = {
111     /**
112      * Record a histogram value in UMA. If specified value is larger than the
113      * max bucket value, record the value in the largest bucket
114      * @param {number} bucket Value to record.
115      */
116     record: function(bucket) {
117       chrome.send('metricsHandler:recordInHistogram',
118                   [this.histogram_,
119                    ((bucket > this.maxBucket_) ? this.maxBucket_ : bucket),
120                    this.maxBucket_]);
121     }
122   };
124   /**
125    * Destination Search specific usage statistics context.
126    * @constructor
127    * @extends {print_preview.MetricsContext}
128    */
129   function DestinationSearchMetricsContext() {
130     MetricsContext.call(
131         this,
132         'PrintPreview.DestinationAction',
133         Metrics.DestinationSearchBucket.DESTINATION_SEARCH_MAX_BUCKET);
134   };
136   DestinationSearchMetricsContext.prototype = {
137     __proto__: MetricsContext.prototype
138   };
140   /**
141    * GCP promotion specific usage statistics context.
142    * @constructor
143    * @extends {print_preview.MetricsContext}
144    */
145   function GcpPromoMetricsContext() {
146     MetricsContext.call(this,
147                         'PrintPreview.GcpPromo',
148                         Metrics.GcpPromoBucket.GCP_PROMO_MAX_BUCKET);
149   };
151   GcpPromoMetricsContext.prototype = {
152     __proto__: MetricsContext.prototype
153   };
155   /**
156    * Print settings UI specific usage statistics context.
157    * @constructor
158    * @extends {print_preview.MetricsContext}
159    */
160   function PrintSettingsUiMetricsContext() {
161     MetricsContext.call(
162         this,
163         'PrintPreview.PrintSettingsUi',
164         Metrics.PrintSettingsUiBucket.PRINT_SETTINGS_UI_MAX_BUCKET);
165   };
167   PrintSettingsUiMetricsContext.prototype = {
168     __proto__: MetricsContext.prototype
169   };
171   // Export
172   return {
173     Metrics: Metrics,
174     MetricsContext: MetricsContext,
175     DestinationSearchMetricsContext: DestinationSearchMetricsContext,
176     GcpPromoMetricsContext: GcpPromoMetricsContext,
177     PrintSettingsUiMetricsContext: PrintSettingsUiMetricsContext
178   };