blob: 9774ae0b601a093e4bedac16a458ff76997adceb [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {assertNotReached} from 'chrome://resources/js/assert_ts.js';
import {PrinterType} from './data/destination_match.js';
import {NativeLayer, NativeLayerImpl} from './native_layer.js';
/**
* Enumeration of buckets that a user can enter while using the destination
* search widget.
*/
export enum DestinationSearchBucket {
// Used when the print destination search widget is shown.
DESTINATION_SHOWN = 0,
// Used when the user selects a print destination.
DESTINATION_CLOSED_CHANGED = 1,
// Used when the print destination search widget is closed without selecting
// a print destination.
DESTINATION_CLOSED_UNCHANGED = 2,
// Used when the Google Cloud Print promotion (shown in the destination
// search widget) is shown to the user.
SIGNIN_PROMPT = 3,
// Used when the user chooses to sign-in to their Google account.
SIGNIN_TRIGGERED = 4,
// Used when a user selects the Privet printer in a pair of duplicate
// Privet and cloud printers.
PRIVET_DUPLICATE_SELECTED = 5,
// Used when a user selects the cloud printer in a pair of duplicate
// Privet and cloud printers.
CLOUD_DUPLICATE_SELECTED = 6,
// Used when a user sees a register promo for a cloud print printer.
REGISTER_PROMO_SHOWN = 7,
// Used when a user selects a register promo for a cloud print printer.
REGISTER_PROMO_SELECTED = 8,
// User changed active account.
ACCOUNT_CHANGED = 9,
// User tried to log into another account.
ADD_ACCOUNT_SELECTED = 10,
// Note: values 11-13 are intentionally unset as these correspond to
// deprecated values in histograms/enums.xml. These enums are append-only.
// User clicked on Manage button
MANAGE_BUTTON_CLICKED = 14,
// Max value.
DESTINATION_SEARCH_MAX_BUCKET = 15
}
/**
* Print Preview initialization events metrics buckets.
*/
export enum PrintPreviewInitializationEvents {
// Function initiated.
FUNCTION_INITIATED = 0,
// Function completed succesfully.
FUNCTION_SUCCESSFUL = 1,
// Function failed.
FUNCTION_FAILED = 2,
// Max value.
PRINT_PREVIEW_INITIALIZATION_EVENTS_MAX_BUCKET = 3
}
/**
* Print settings UI usage metrics buckets.
*/
export enum PrintSettingsUiBucket {
// Advanced settings dialog is shown.
ADVANCED_SETTINGS_DIALOG_SHOWN = 0,
// Advanced settings dialog is closed without saving a selection.
ADVANCED_SETTINGS_DIALOG_CANCELED = 1,
// 'More/less settings' expanded.
MORE_SETTINGS_CLICKED = 2,
// 'More/less settings' collapsed.
LESS_SETTINGS_CLICKED = 3,
// User printed with extra settings expanded.
PRINT_WITH_SETTINGS_EXPANDED = 4,
// User printed with extra settings collapsed.
PRINT_WITH_SETTINGS_COLLAPSED = 5,
// Max value.
PRINT_SETTINGS_UI_MAX_BUCKET = 6
}
/* A context for recording a value in a specific UMA histogram. */
export class MetricsContext {
private histogram_: string;
private maxBucket_: number;
private nativeLayer_: NativeLayer = NativeLayerImpl.getInstance();
/**
* @param histogram The name of the histogram to be recorded in.
* @param maxBucket The max value for the last histogram bucket.
*/
constructor(histogram: string, maxBucket: number) {
this.histogram_ = histogram;
this.maxBucket_ = maxBucket;
}
/**
* Record a histogram value in UMA. If specified value is larger than the
* max bucket value, record the value in the largest bucket
* @param bucket Value to record.
*/
record(bucket: number) {
this.nativeLayer_.recordInHistogram(
this.histogram_, (bucket > this.maxBucket_) ? this.maxBucket_ : bucket,
this.maxBucket_);
}
/**
* Destination Search specific usage statistics context.
*/
static destinationSearch(): MetricsContext {
return new MetricsContext(
'PrintPreview.DestinationAction',
DestinationSearchBucket.DESTINATION_SEARCH_MAX_BUCKET);
}
/**
* Print settings UI specific usage statistics context
*/
static printSettingsUi(): MetricsContext {
return new MetricsContext(
'PrintPreview.PrintSettingsUi',
PrintSettingsUiBucket.PRINT_SETTINGS_UI_MAX_BUCKET);
}
/**
* NativeLayer.getInitialSettings() specific usage statistics context
*/
static getInitialSettings(): MetricsContext {
return new MetricsContext(
'PrintPreview.Initialization.GetInitialSettings',
PrintPreviewInitializationEvents
.PRINT_PREVIEW_INITIALIZATION_EVENTS_MAX_BUCKET);
}
/**
* NativeLayer.getPrinterCapabilities() specific usage statistics context
*/
static getPrinterCapabilities(): MetricsContext {
return new MetricsContext(
'PrintPreview.Initialization.GetPrinterCapabilities',
PrintPreviewInitializationEvents
.PRINT_PREVIEW_INITIALIZATION_EVENTS_MAX_BUCKET);
}
/**
* NativeLayer.getPreview() specific usage statistics context
*/
static getPreview(): MetricsContext {
return new MetricsContext(
'PrintPreview.Initialization.GetPreview',
PrintPreviewInitializationEvents
.PRINT_PREVIEW_INITIALIZATION_EVENTS_MAX_BUCKET);
}
/**
* NativeLayer.getPrinters() specific usage statistics context
*/
static getPrinters(type: PrinterType): MetricsContext {
let histogram = '';
switch (type) {
case (PrinterType.EXTENSION_PRINTER):
histogram = 'PrintPreview.Initialization.GetPrinters.Extension';
break;
case (PrinterType.PDF_PRINTER):
histogram = 'PrintPreview.Initialization.GetPrinters.PDF';
break;
case (PrinterType.LOCAL_PRINTER):
histogram = 'PrintPreview.Initialization.GetPrinters.Local';
break;
case (PrinterType.CLOUD_PRINTER):
histogram = 'PrintPreview.Initialization.GetPrinters.Cloud';
break;
default:
assertNotReached('unknown type = ' + type);
}
return new MetricsContext(
histogram,
PrintPreviewInitializationEvents
.PRINT_PREVIEW_INITIALIZATION_EVENTS_MAX_BUCKET);
}
}