// interface.test-mojom-webui.ts is auto generated by mojom_bindings_generator.py, do not edit

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

import {mojo} from '//resources/mojo/mojo/public/js/bindings.js';








export type IFacePendingReceiverEndpoint =
  mojo.internal.interfaceSupport.Endpoint<IFacePendingReceiver>;

export class IFacePendingReceiver implements
    mojo.internal.interfaceSupport.PendingReceiver<IFace> {

  handle: mojo.internal.interfaceSupport.Endpoint<IFacePendingReceiver>;
  constructor(handle: MojoHandle|IFacePendingReceiverEndpoint) {
    this.handle = mojo.internal.interfaceSupport.getEndpointForReceiver(handle);
  }

  bindInBrowser(scope: string = 'context') {
    mojo.internal.interfaceSupport.bind(
        this.handle,
        'golden.IFace',
        scope);
  }
}

export interface IFaceInterface {
  method(param: boolean): Promise<{
        result: string, }>;
}

export class IFaceRemote implements IFaceInterface {
  private proxy: mojo.internal.interfaceSupport.InterfaceRemoteBase<IFacePendingReceiver>;
  $: mojo.internal.interfaceSupport.InterfaceRemoteBaseWrapper<IFacePendingReceiver>;
  onConnectionError: mojo.internal.interfaceSupport.ConnectionErrorEventRouter;

  constructor(
      handle?: MojoHandle|IFacePendingReceiverEndpoint) {
    this.proxy =
        new mojo.internal.interfaceSupport.InterfaceRemoteBase(
          IFacePendingReceiver, handle);

    this.$ = new mojo.internal.interfaceSupport.InterfaceRemoteBaseWrapper(this.proxy);

    this.onConnectionError = this.proxy.getConnectionErrorEventRouter();
  }

  method(
      param: boolean): Promise<{
        result: string, }> {
    return this.proxy.sendMessage(
        0,
        IFace_Method_ParamsSpec.$,
        IFace_Method_ResponseParamsSpec.$,
        [
          param
        ],
        false);
  }
};

/**
 * An object which receives request messages for the IFace
 * mojom interface. Must be constructed over an object which implements that
 * interface.
 */
export class IFaceReceiver {
  private helper_internal_: mojo.internal.interfaceSupport.InterfaceReceiverHelperInternal<
    IFaceRemote, IFacePendingReceiver>;

  $: mojo.internal.interfaceSupport.InterfaceReceiverHelper<
    IFaceRemote, IFacePendingReceiver>;

  onConnectionError: mojo.internal.interfaceSupport.ConnectionErrorEventRouter;


  constructor(impl: IFaceInterface) {

    this.helper_internal_ = new mojo.internal.interfaceSupport.InterfaceReceiverHelperInternal(
        IFaceRemote);

    this.$ = new mojo.internal.interfaceSupport.InterfaceReceiverHelper(this.helper_internal_);


    this.helper_internal_.registerHandler(
        0,
        IFace_Method_ParamsSpec.$,
        IFace_Method_ResponseParamsSpec.$,
        impl.method.bind(impl),
        false);
    this.onConnectionError = this.helper_internal_.getConnectionErrorEventRouter();
  }
}

export class IFace {
  static get $interfaceName(): string {
    return "golden.IFace";
  }

  /**
   * Returns a remote for this interface which sends messages to the browser.
   * The browser must have an interface request binder registered for this
   * interface and accessible to the calling document's frame.
   */
  static getRemote(): IFaceRemote {
    let remote = new IFaceRemote;
    remote.$.bindNewPipeAndPassReceiver().bindInBrowser();
    return remote;
  }
}

/**
 * An object which receives request messages for the IFace
 * mojom interface and dispatches them as callbacks. One callback receiver exists
 * on this object for each message defined in the mojom interface, and each
 * receiver can have any number of listeners added to it.
 */
export class IFaceCallbackRouter {
  private helper_internal_: mojo.internal.interfaceSupport.InterfaceReceiverHelperInternal<
    IFaceRemote, IFacePendingReceiver>;
  $: mojo.internal.interfaceSupport.InterfaceReceiverHelper<
    IFaceRemote, IFacePendingReceiver>;
  router_: mojo.internal.interfaceSupport.CallbackRouter;

  method: mojo.internal.interfaceSupport.InterfaceCallbackReceiver<
    (param: boolean,) => any>;
  onConnectionError: mojo.internal.interfaceSupport.ConnectionErrorEventRouter;

  constructor() {
    this.helper_internal_ = new mojo.internal.interfaceSupport.InterfaceReceiverHelperInternal(
      IFaceRemote);

    this.$ = new mojo.internal.interfaceSupport.InterfaceReceiverHelper(this.helper_internal_);

    this.router_ = new mojo.internal.interfaceSupport.CallbackRouter;

    this.method =
        new mojo.internal.interfaceSupport.InterfaceCallbackReceiver(
            this.router_);

    this.helper_internal_.registerHandler(
        0,
        IFace_Method_ParamsSpec.$,
        IFace_Method_ResponseParamsSpec.$,
        this.method.createReceiverHandler(true /* expectsResponse */),
        false);
    this.onConnectionError = this.helper_internal_.getConnectionErrorEventRouter();
  }

  /**
   * @param id An ID returned by a prior call to addListener.
   * @return True iff the identified listener was found and removed.
   */
  removeListener(id: number): boolean {
    return this.router_.removeListener(id);
  }
}

export const IFace_Method_ParamsSpec: { $: mojo.internal.MojomType } =
    { $: {} as unknown as mojo.internal.MojomType };

export const IFace_Method_ResponseParamsSpec: { $: mojo.internal.MojomType } =
    { $: {} as unknown as mojo.internal.MojomType };




export interface IFace_Method_ParamsMojoType {
  param: boolean;
}


export type IFace_Method_Params = IFace_Method_ParamsMojoType;
mojo.internal.Struct<IFace_Method_ParamsMojoType>(
    IFace_Method_ParamsSpec.$,
    'IFace_Method_Params',
    [
      mojo.internal.StructField<IFace_Method_ParamsMojoType, boolean>(
        'param', 0,
        0,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0,
        undefined,
        undefined,
    ),
    ],
    [[0, 16],]);





export interface IFace_Method_ResponseParamsMojoType {
  result: string;
}


export type IFace_Method_ResponseParams = IFace_Method_ResponseParamsMojoType;
mojo.internal.Struct<IFace_Method_ResponseParamsMojoType>(
    IFace_Method_ResponseParamsSpec.$,
    'IFace_Method_ResponseParams',
    [
      mojo.internal.StructField<IFace_Method_ResponseParamsMojoType, string>(
        'result', 0,
        0,
        mojo.internal.String,
        null,
        false /* nullable */,
        0,
        undefined,
        undefined,
    ),
    ],
    [[0, 16],]);



