blob: 6c3c3eb9a0d4e3b7bd78444f2120fcc9349e27fe [file] [log] [blame]
// Copyright 2018 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.
/**
* NuxNtpBackgroundInteractions enum.
* These values are persisted to logs and should not be renumbered or
* re-used.
* See tools/metrics/histograms/enums.xml.
* @enum {number}
*/
export const NuxNtpBackgroundInteractions = {
PageShown: 0,
DidNothingAndNavigatedAway: 1,
DidNothingAndChoseSkip: 2,
DidNothingAndChoseNext: 3,
ChoseAnOptionAndNavigatedAway: 4,
ChoseAnOptionAndChoseSkip: 5,
ChoseAnOptionAndChoseNext: 6,
NavigatedAwayThroughBrowserHistory: 7,
BackgroundImageFailedToLoad: 8,
BackgroundImageNeverLoaded: 9,
};
/**
* NuxGoogleAppsInteractions enum.
* These values are persisted to logs and should not be renumbered or
* re-used.
* See tools/metrics/histograms/enums.xml.
* @enum {number}
*/
export const NuxGoogleAppsInteractions = {
PageShown: 0,
NotUsed_DEPRECATED: 1,
GetStarted_DEPRECATED: 2,
DidNothingAndNavigatedAway: 3,
DidNothingAndChoseSkip: 4,
ChoseAnOptionAndNavigatedAway: 5,
ChoseAnOptionAndChoseSkip: 6,
ChoseAnOptionAndChoseNext: 7,
ClickedDisabledNextButtonAndNavigatedAway: 8,
ClickedDisabledNextButtonAndChoseSkip: 9,
ClickedDisabledNextButtonAndChoseNext: 10,
DidNothingAndChoseNext: 11,
NavigatedAwayThroughBrowserHistory: 12,
};
/** @interface */
class ModuleMetricsProxy {
recordPageShown() {}
recordDidNothingAndNavigatedAway() {}
recordDidNothingAndChoseSkip() {}
recordDidNothingAndChoseNext() {}
recordChoseAnOptionAndNavigatedAway() {}
recordChoseAnOptionAndChoseSkip() {}
recordChoseAnOptionAndChoseNext() {}
recordClickedDisabledNextButtonAndNavigatedAway() {}
recordClickedDisabledNextButtonAndChoseSkip() {}
recordClickedDisabledNextButtonAndChoseNext() {}
recordNavigatedAwayThroughBrowserHistory() {}
}
/** @implements {ModuleMetricsProxy} */
export class ModuleMetricsProxyImpl {
/**
* @param {string} histogramName The histogram that will record the module
* navigation metrics.
*/
constructor(histogramName, interactions) {
/** @private {string} */
this.interactionMetric_ = histogramName;
this.interactions_ = interactions;
}
/** @override */
recordPageShown() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_, this.interactions_.PageShown,
Object.keys(this.interactions_).length);
}
/** @override */
recordDidNothingAndNavigatedAway() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_, this.interactions_.DidNothingAndNavigatedAway,
Object.keys(this.interactions_).length);
}
/** @override */
recordDidNothingAndChoseSkip() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_, this.interactions_.DidNothingAndChoseSkip,
Object.keys(this.interactions_).length);
}
/** @override */
recordDidNothingAndChoseNext() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_, this.interactions_.DidNothingAndChoseNext,
Object.keys(this.interactions_).length);
}
/** @override */
recordChoseAnOptionAndNavigatedAway() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_,
this.interactions_.ChoseAnOptionAndNavigatedAway,
Object.keys(this.interactions_).length);
}
/** @override */
recordChoseAnOptionAndChoseSkip() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_, this.interactions_.ChoseAnOptionAndChoseSkip,
Object.keys(this.interactions_).length);
}
/** @override */
recordChoseAnOptionAndChoseNext() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_, this.interactions_.ChoseAnOptionAndChoseNext,
Object.keys(this.interactions_).length);
}
/** @override */
recordClickedDisabledNextButtonAndNavigatedAway() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_,
this.interactions_.ClickedDisabledNextButtonAndNavigatedAway,
Object.keys(this.interactions_).length);
}
/** @override */
recordClickedDisabledNextButtonAndChoseSkip() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_,
this.interactions_.ClickedDisabledNextButtonAndChoseSkip,
Object.keys(this.interactions_).length);
}
/** @override */
recordClickedDisabledNextButtonAndChoseNext() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_,
this.interactions_.ClickedDisabledNextButtonAndChoseNext,
Object.keys(this.interactions_).length);
}
/** @override */
recordNavigatedAwayThroughBrowserHistory() {
chrome.metricsPrivate.recordEnumerationValue(
this.interactionMetric_,
this.interactions_.NavigatedAwayThroughBrowserHistory,
Object.keys(this.interactions_).length);
}
}
export class ModuleMetricsManager {
/** @param {ModuleMetricsProxy} metricsProxy */
constructor(metricsProxy) {
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();
}
}