chromium/chrome/browser/resources/welcome/landing_view_proxy.ts

// 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.

const NUX_LANDING_PAGE_INTERACTION_METRIC_NAME =
    'FirstRun.NewUserExperience.LandingPageInteraction';

enum NuxLandingPageInteractions {
  PAGE_SHOWN = 0,
  NAVIGATED_AWAY,
  NEW_USER,
  EXISTING_USER,
}

const NUX_LANDING_PAGE_INTERACTIONS_COUNT =
    Object.keys(NuxLandingPageInteractions).length;

export interface LandingViewProxy {
  recordPageShown(): void;
  recordNavigatedAway(): void;
  recordNewUser(): void;
  recordExistingUser(): void;
}

export class LandingViewProxyImpl implements LandingViewProxy {
  recordPageShown() {
    this.recordInteraction_(NuxLandingPageInteractions.PAGE_SHOWN);
  }

  recordNavigatedAway() {
    this.recordInteraction_(NuxLandingPageInteractions.NAVIGATED_AWAY);
  }

  recordNewUser() {
    this.recordInteraction_(NuxLandingPageInteractions.NEW_USER);
  }

  recordExistingUser() {
    this.recordInteraction_(NuxLandingPageInteractions.EXISTING_USER);
  }

  private recordInteraction_(interaction: number) {
    chrome.metricsPrivate.recordEnumerationValue(
        NUX_LANDING_PAGE_INTERACTION_METRIC_NAME, interaction,
        NUX_LANDING_PAGE_INTERACTIONS_COUNT);
  }

  static getInstance(): LandingViewProxy {
    return instance || (instance = new LandingViewProxyImpl());
  }

  static setInstance(obj: LandingViewProxy) {
    instance = obj;
  }
}

let instance: LandingViewProxy|null = null;