chromium/ui/webui/resources/cr_components/theme_color_picker/browser_proxy.ts

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

/**
 * @fileoverview A helper object used by the cr-theme-color-picker
 * component to interact with the browser.
 */

import {ThemeColorPickerClientCallbackRouter, ThemeColorPickerHandlerFactory, ThemeColorPickerHandlerRemote} from './theme_color_picker.mojom-webui.js';

let instance: ThemeColorPickerBrowserProxy|null = null;

export class ThemeColorPickerBrowserProxy {
  handler: ThemeColorPickerHandlerRemote;
  callbackRouter: ThemeColorPickerClientCallbackRouter;

  private constructor(
      handler: ThemeColorPickerHandlerRemote,
      callbackRouter: ThemeColorPickerClientCallbackRouter) {
    this.handler = handler;
    this.callbackRouter = callbackRouter;
  }

  static getInstance(): ThemeColorPickerBrowserProxy {
    if (!instance) {
      const handler = new ThemeColorPickerHandlerRemote();
      const callbackRouter = new ThemeColorPickerClientCallbackRouter();
      ThemeColorPickerHandlerFactory.getRemote().createThemeColorPickerHandler(
          handler.$.bindNewPipeAndPassReceiver(),
          callbackRouter.$.bindNewPipeAndPassRemote());
      instance = new ThemeColorPickerBrowserProxy(handler, callbackRouter);
    }
    return instance;
  }

  static setInstance(
      handler: ThemeColorPickerHandlerRemote,
      callbackRouter: ThemeColorPickerClientCallbackRouter) {
    instance = new ThemeColorPickerBrowserProxy(handler, callbackRouter);
  }
}