chromium/chrome/browser/resources/chromeos/accessibility/common/chrome_event_handler.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.

import {ChromeEvent} from '/tools/typescript/definitions/chrome_event.js';

type GenericListener<T extends any[]> = (...args: T) => void;

/**
 * This class wraps ChromeEvent listeners, adding some convenience
 * functions.
 */
export class ChromeEventHandler<T extends any[]> {
  private listening_ = false;

  constructor(private chromeEvent_: ChromeEvent<GenericListener<T>>,
      private callback_: GenericListener<T>) {}

  /** Starts listening to events. */
  start(): void {
    if (this.listening_) {
      return;
    }

    this.listening_ = true;
    this.chromeEvent_.addListener(this.callback_);
  }

  /** Stops listening or handling future events. */
  stop(): void {
    this.listening_ = false;
    this.chromeEvent_.removeListener(this.callback_);
  }
}