chromium/content/web_test/common/mojo_echo.mojom

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

module content.mojom;

// Interfaces used to test that encoding/decoding between JS and C++ works
// correctly.

union TestUnion {
  bool bool_value;
  int32 int32_value;
  string string_value;
};

union NestedUnion {
  int8 int8_value;
  TestUnion union_value;
};

// Interface that echos the arguments by extracting them from structs, unions,
// etc. or by adding them to structs, unions, etc.
interface MojoEcho {
  // The following methods help test that JS can correctly encode unions. They
  // CHECK if the union has not the expected type.
  //
  // Runs callback with |test_union.bool_value|.
  EchoBoolFromUnion(TestUnion test_union) => (bool value);
  // Runs callback with |test_union.int32_value|.
  EchoInt32FromUnion(TestUnion test_union) => (int32 value);
  // Runs callback with |test_union.string_value|.
  EchoStringFromUnion(TestUnion test_union) => (string value);

  // The following methods help test that JS can correctly decode unions.
  //
  // Runs callback with |value| as the TestUnion's value.
  EchoBoolAsUnion(bool value) => (TestUnion test_union);
  // Runs callback with |value| as the TestUnion's value.
  EchoInt32AsUnion(int32 value) => (TestUnion test_union);
  // Runs callback with |value| as the TestUnion's value.
  EchoStringAsUnion(string value) => (TestUnion test_union);

  // The following methods help test that JS can correctly encode optional
  // unions. They CHECK if the union has not the expected type.
  //
  // Runs the empty callback.
  EchoNullFromOptionalUnion(TestUnion? test_union) => ();
  // Runs callback with |test_union.bool_value|.
  EchoBoolFromOptionalUnion(TestUnion? test_union) => (bool value);
  // Runs callback with |test_union.int32_value|.
  EchoInt32FromOptionalUnion(TestUnion? test_union) => (int32 value);
  // Runs callback with |test_union.string_value|.
  EchoStringFromOptionalUnion(TestUnion? test_union) => (string value);

  // The following methods help test that JS can correctly decode optional
  // unions.
  //
  // Runs callback with a null TestUnion.
  EchoNullAsOptionalUnion() => (TestUnion? test_union);
  // Runs callback with |value| as the TestUnion's value.
  EchoBoolAsOptionalUnion(bool value) => (TestUnion? test_union);
  // Runs callback with |value| as the TestUnion's value.
  EchoInt32AsOptionalUnion(int32 value) => (TestUnion? test_union);
  // Runs callback with |value| as the TestUnion's value.
  EchoStringAsOptionalUnion(string value) => (TestUnion? test_union);

  // The following methods help test that JS can correctly encode nested unions.
  // They CHECK if the union has not the expected type.
  //
  // Runs callback with |test_union.int8_value|.
  EchoInt8FromNestedUnion(NestedUnion test_union) => (int8 value);
  // Runs callback with |test_union.union_value.bool_value|.
  EchoBoolFromNestedUnion(NestedUnion test_union) => (bool value);
  // Runs callback with |test_union.union_value.string_value|.
  EchoStringFromNestedUnion(NestedUnion test_union) => (string value);

  // The following methods help test that JS can correctly decode nested unions.
  //
  // Runs callback with |value| as the NestedUnion's value.
  EchoInt8AsNestedUnion(int8 value) => (NestedUnion test_union);
  // Runs callback with |value| as the NestedUnion.TestUnion's value.
  EchoBoolAsNestedUnion(bool value) => (NestedUnion test_union);
  // Runs callback with |value| as the NestedUnion.TestUnion's value.
  EchoStringAsNestedUnion(string value) => (NestedUnion test_union);

  // The following methods help test that JS can correctly encode optional
  // nested unions. They CHECK if the union has not the expected type.
  //
  // Runs the empty callback.
  EchoNullFromOptionalNestedUnion(NestedUnion? test_union) => ();
  // Runs callback with |test_union.int8_value|.
  EchoInt8FromOptionalNestedUnion(NestedUnion? test_union) => (int8 value);
  // Runs callback with |test_union.union_value.bool_value|.
  EchoBoolFromOptionalNestedUnion(NestedUnion? test_union) => (bool value);
  // Runs callback with |test_union.union_value.string_value|.
  EchoStringFromOptionalNestedUnion(NestedUnion? test_union) => (string value);

  // The following methods help test that JS can correctly decode optional
  // nested unions.
  //
  // Runs the empty callback.
  EchoNullAsOptionalNestedUnion() => (NestedUnion? test_union);
  // Runs callback with |test_union.int8_value|.
  EchoInt8AsOptionalNestedUnion(int8 value) => (NestedUnion? test_union);
  // Runs callback with |test_union.union_value.bool_value|.
  EchoBoolAsOptionalNestedUnion(bool value) => (NestedUnion? test_union);
  // Runs callback with |test_union.union_value.string_value|.
  EchoStringAsOptionalNestedUnion(string value) => (NestedUnion? test_union);

  // The following methods help test that JS can correctly encode array of
  // bools.
  EchoBoolArray(array<bool> values) => (array<bool> values);
};