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

module IPC.mojom;

interface SimpleTestDriver {
  ExpectValue(int32 value);

  [Sync]
  GetExpectedValue() => (int32 value);

  [Sync]
  RequestValue() => (int32 value);

  RequestQuit() => ();
};

interface SimpleTestClient {
  [Sync]
  RequestValue() => (int32 value);
};

interface PingReceiver {
  Ping() => ();
};

struct TestStruct {};

interface TestStructPasser {
  Pass(TestStruct s);
};

interface IndirectTestDriver {
  GetPingReceiver(associated PingReceiver& request);
};

interface Reflector {
  Ping(string value) => (string value);
  [Sync]
  SyncPing(string value) => (string response);
  Quit();
};

interface AssociatedInterfaceVendor {
  GetTestInterface(associated SimpleTestDriver& interface_reqest);
};

interface InterfacePassingTestDriver {
  Init() => ();
  GetPingReceiver(array<PingReceiver&> request) => ();
  GetAssociatedPingReceiver(array<associated PingReceiver&> request) => ();
  Quit();
};
