chromium/chrome/browser/resources/settings/appearance_page/appearance_browser_proxy.ts

// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// clang-format off
import {sendWithPromise} from 'chrome://resources/js/cr.js';

import {loadTimeData} from '../i18n_setup.js';
// clang-format on

export interface AppearanceBrowserProxy {
  getDefaultZoom(): Promise<number>;
  getThemeInfo(themeId: string): Promise<chrome.management.ExtensionInfo>;

  /** @return Whether the current profile is a child account. */
  isChildAccount(): boolean;

  openCustomizeChrome(): void;
  openCustomizeChromeToolbarSection(): void;
  recordHoverCardImagesEnabledChanged(enabled: boolean): void;
  resetPinnedToolbarActions(): void;
  useDefaultTheme(): void;

  // <if expr="is_linux">
  useGtkTheme(): void;
  useQtTheme(): void;
  // </if>

  validateStartupPage(url: string): Promise<boolean>;
  pinnedToolbarActionsAreDefault(): Promise<boolean>;
}

export class AppearanceBrowserProxyImpl implements AppearanceBrowserProxy {
  getDefaultZoom(): Promise<number> {
    return chrome.settingsPrivate.getDefaultZoom();
  }

  getThemeInfo(themeId: string): Promise<chrome.management.ExtensionInfo> {
    return chrome.management.get(themeId);
  }

  isChildAccount() {
    return loadTimeData.getBoolean('isChildAccount');
  }

  openCustomizeChrome() {
    chrome.send('openCustomizeChrome');
  }

  openCustomizeChromeToolbarSection() {
    chrome.send('openCustomizeChromeToolbarSection');
  }

  recordHoverCardImagesEnabledChanged(enabled: boolean) {
    chrome.metricsPrivate.recordBoolean(
        'Settings.HoverCards.ImagePreview.Enabled', enabled);
  }

  resetPinnedToolbarActions() {
    chrome.send('resetPinnedToolbarActions');
  }

  useDefaultTheme() {
    chrome.send('useDefaultTheme');
  }

  // <if expr="is_linux">
  useGtkTheme() {
    chrome.send('useGtkTheme');
  }

  useQtTheme() {
    chrome.send('useQtTheme');
  }
  // </if>

  validateStartupPage(url: string) {
    return sendWithPromise('validateStartupPage', url);
  }

  pinnedToolbarActionsAreDefault() {
    return sendWithPromise('pinnedToolbarActionsAreDefault');
  }

  static getInstance(): AppearanceBrowserProxy {
    return instance || (instance = new AppearanceBrowserProxyImpl());
  }

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

let instance: AppearanceBrowserProxy|null = null;