Home | History | Annotate | Download | only in print_preview
      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 cr.define('print_preview', function() {
      6   'use strict';
      7 
      8   /**
      9    * Object used to measure usage statistics.
     10    * @constructor
     11    */
     12   function Metrics() {};
     13 
     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   };
     55 
     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   };
     74 
     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   };
     95 
     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;
    105 
    106     /** @private {number} */
    107     this.maxBucket_ = maxBucket;
    108   };
    109 
    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   };
    123 
    124   /**
    125    * Destination Search specific usage statistics context.
    126    * @constructor
    127    * @implements {MetricsContext}
    128    */
    129   function DestinationSearchMetricsContext() {
    130     MetricsContext.call(
    131         this,
    132         'PrintPreview.DestinationAction',
    133         Metrics.DestinationSearchBucket.DESTINATION_SEARCH_MAX_BUCKET);
    134   };
    135 
    136   DestinationSearchMetricsContext.prototype = {
    137     __proto__: MetricsContext.prototype
    138   };
    139 
    140   /**
    141    * GCP promotion specific usage statistics context.
    142    * @constructor
    143    * @implements {MetricsContext}
    144    */
    145   function GcpPromoMetricsContext() {
    146     MetricsContext.call(this,
    147                         'PrintPreview.GcpPromo',
    148                         Metrics.GcpPromoBucket.GCP_PROMO_MAX_BUCKET);
    149   };
    150 
    151   GcpPromoMetricsContext.prototype = {
    152     __proto__: MetricsContext.prototype
    153   };
    154 
    155   /**
    156    * Print settings UI specific usage statistics context.
    157    * @constructor
    158    * @implements {MetricsContext}
    159    */
    160   function PrintSettingsUiMetricsContext() {
    161     MetricsContext.call(
    162         this,
    163         'PrintPreview.PrintSettingsUi',
    164         Metrics.PrintSettingsUiBucket.PRINT_SETTINGS_UI_MAX_BUCKET);
    165   };
    166 
    167   PrintSettingsUiMetricsContext.prototype = {
    168     __proto__: MetricsContext.prototype
    169   };
    170 
    171   // Export
    172   return {
    173     Metrics: Metrics,
    174     MetricsContext: MetricsContext,
    175     DestinationSearchMetricsContext: DestinationSearchMetricsContext,
    176     GcpPromoMetricsContext: GcpPromoMetricsContext,
    177     PrintSettingsUiMetricsContext: PrintSettingsUiMetricsContext
    178   };
    179 });
    180