// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* NuxNtpBackgroundInteractions enum.
* These values are persisted to logs and should not be renumbered or
* re-used.
* See tools/metrics/histograms/enums.xml.
*/
export enum NuxNtpBackgroundInteractions {
PAGE_SHOWN = 0,
DID_NOTHING_AND_NAVIGATED_AWAY,
DID_NOTHING_AND_CHOSE_SKIP,
DID_NOTHING_AND_CHOSE_NEXT,
CHOSE_AN_OPTION_AND_NAVIGATED_AWAY,
CHOSE_AN_OPTION_AND_CHOSE_SKIP,
CHOSE_AN_OPTION_AND_CHOSE_NEXT,
NAVIGATED_AWAY_THROUGH_BROWSER_HISTORY,
BACKGROUND_IMAGE_FAILED_TO_LOAD,
BACKGROUND_IMAGE_NEVER_LOADED,
}
/**
* NuxGoogleAppsInteractions enum.
* These values are persisted to logs and should not be renumbered or
* re-used.
* See tools/metrics/histograms/enums.xml.
*/
export enum NuxGoogleAppsInteractions {
PAGE_SHOWN = 0,
NOT_USED_DEPRECATED,
GET_STARTED_DEPRECATED,
DID_NOTHING_AND_NAVIGATED_AWAY,
DID_NOTHING_AND_CHOSE_SKIP,
CHOSE_AN_OPTION_AND_NAVIGATED_AWAY,
CHOSE_AN_OPTION_AND_CHOSE_SKIP,
CHOSE_AN_OPTION_AND_CHOSE_NEXT,
CLICKED_DISABLED_NEXT_BUTTON_AND_NAVIGATED_AWAY,
CLICKED_DISABLED_NEXT_BUTTON_AND_CHOSE_SKIP,
CLICKED_DISABLED_NEXT_BUTTON_AND_CHOSE_NEXT,
DID_NOTHING_AND_CHOSE_NEXT,
NAVIGATED_AWAY_THROUGH_BROWSER_HISTORY,
}
export interface ModuleMetricsProxy {
recordPageShown(): void;
recordDidNothingAndNavigatedAway(): void;
recordDidNothingAndChoseSkip(): void;
recordDidNothingAndChoseNext(): void;
recordChoseAnOptionAndNavigatedAway(): void;
recordChoseAnOptionAndChoseSkip(): void;
recordChoseAnOptionAndChoseNext(): void;
recordClickedDisabledNextButtonAndNavigatedAway(): void;
recordClickedDisabledNextButtonAndChoseSkip(): void;
recordClickedDisabledNextButtonAndChoseNext(): void;
recordNavigatedAwayThroughBrowserHistory(): void;
}
export class ModuleMetricsProxyImpl implements ModuleMetricsProxy {
private interactionMetric_: string;
private interactions_: any;
/**
* @param histogramName The histogram that will record the module
* navigation metrics.
*/
constructor(histogramName: string, interactions: any) {
this.interactionMetric_ = histogramName;
this.interactions_ = interactions;
}
recordPageShown() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_, this.interactions_.PAGE_SHOWN,
Object.keys(this.interactions_).length);
}
recordDidNothingAndNavigatedAway() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_,
this.interactions_.DID_NOTHING_AND_NAVIGATED_AWAY,
Object.keys(this.interactions_).length);
}
recordDidNothingAndChoseSkip() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_, this.interactions_.DID_NOTHING_AND_CHOSE_SKIP,
Object.keys(this.interactions_).length);
}
recordDidNothingAndChoseNext() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_, this.interactions_.DID_NOTHING_AND_CHOSE_NEXT,
Object.keys(this.interactions_).length);
}
recordChoseAnOptionAndNavigatedAway() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_,
this.interactions_.CHOSE_AN_OPTION_AND_NAVIGATED_AWAY,
Object.keys(this.interactions_).length);
}
recordChoseAnOptionAndChoseSkip() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_,
this.interactions_.CHOSE_AN_OPTION_AND_CHOSE_SKIP,
Object.keys(this.interactions_).length);
}
recordChoseAnOptionAndChoseNext() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_,
this.interactions_.CHOSE_AN_OPTION_AND_CHOSE_NEXT,
Object.keys(this.interactions_).length);
}
recordClickedDisabledNextButtonAndNavigatedAway() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_,
this.interactions_.CLICKED_DISABLED_NEXT_BUTTON_AND_NAVIGATED_AWAY,
Object.keys(this.interactions_).length);
}
recordClickedDisabledNextButtonAndChoseSkip() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_,
this.interactions_.CLICKED_DISABLED_NEXT_BUTTON_AND_CHOSE_SKIP,
Object.keys(this.interactions_).length);
}
recordClickedDisabledNextButtonAndChoseNext() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_,
this.interactions_.CLICKED_DISABLED_NEXT_BUTTON_AND_CHOSE_NEXT,
Object.keys(this.interactions_).length);
}
recordNavigatedAwayThroughBrowserHistory() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_,
this.interactions_.NAVIGATED_AWAY_THROUGH_BROWSER_HISTORY,
Object.keys(this.interactions_).length);
}
}
export class ModuleMetricsManager {
private metricsProxy_: ModuleMetricsProxy;
private options_: any;
firstPart: any;
constructor(metricsProxy: ModuleMetricsProxy) {
this.metricsProxy_ = metricsProxy;
this.options_ = {
didNothing: {
andNavigatedAway: metricsProxy.recordDidNothingAndNavigatedAway,
andChoseSkip: metricsProxy.recordDidNothingAndChoseSkip,
andChoseNext: metricsProxy.recordDidNothingAndChoseNext,
},
choseAnOption: {
andNavigatedAway: metricsProxy.recordChoseAnOptionAndNavigatedAway,
andChoseSkip: metricsProxy.recordChoseAnOptionAndChoseSkip,
andChoseNext: metricsProxy.recordChoseAnOptionAndChoseNext,
},
clickedDisabledNextButton: {
andNavigatedAway:
metricsProxy.recordClickedDisabledNextButtonAndNavigatedAway,
andChoseSkip: metricsProxy.recordClickedDisabledNextButtonAndChoseSkip,
andChoseNext: metricsProxy.recordClickedDisabledNextButtonAndChoseNext,
},
};
this.firstPart = this.options_.didNothing;
}
recordPageInitialized() {
this.metricsProxy_.recordPageShown();
this.firstPart = this.options_.didNothing;
}
recordClickedOption() {
// Only overwrite this.firstPart if it's not overwritten already
if (this.firstPart === this.options_.didNothing) {
this.firstPart = this.options_.choseAnOption;
}
}
recordClickedDisabledButton() {
// Only overwrite this.firstPart if it's not overwritten already
if (this.firstPart === this.options_.didNothing) {
this.firstPart = this.options_.clickedDisabledNextButton;
}
}
recordNoThanks() {
this.firstPart.andChoseSkip.call(this.metricsProxy_);
}
recordGetStarted() {
this.firstPart.andChoseNext.call(this.metricsProxy_);
}
recordNavigatedAway() {
this.firstPart.andNavigatedAway.call(this.metricsProxy_);
}
recordBrowserBackOrForward() {
this.metricsProxy_.recordNavigatedAwayThroughBrowserHistory();
}
}