// Copyright 2018 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 blink.mojom;

import "mojo/public/mojom/base/string16.mojom";

// These interfaces allow an object implemented outside the Blink renderer
// process to be exposed to JavaScript via synchronous IPC.
//
// See also this design doc:
//   https://docs.google.com/document/d/1T8Zj_gZK7jHsy80Etk-Rw4hXMIW4QeaTtXjy5ZKP3X0/edit

// Implemented in the process hosting the remote objects.
// Allows access to an object graph.
//
// Identifiers used by this object apply only within this RemoteObjectHost.
interface RemoteObjectHost {
  GetObject(int32 object_id, RemoteObject& request);

  // Ideally lifetime would be scoped to an associated RemoteObject pipe. This
  // is complicated by the fact that the missing support for associated
  // interfaces in the Mojo Java bindings.
  ReleaseObject(int32 object_id);
};

// Implemented in the process hosting the remote object.
// Allows methods to be synchronously invoked on the object.
interface RemoteObject {
  [Sync] HasMethod(string name) => (bool method_exists);
  [Sync] GetMethods() => (array<string> method_names);
  [Sync] InvokeMethod(string name, array<RemoteInvocationArgument> arguments)
      => (RemoteInvocationResult result);
};

enum SingletonJavaScriptValue {
  kNull,
  kUndefined,
};

union RemoteInvocationArgument {
  double number_value;
  bool boolean_value;
  mojo_base.mojom.String16 string_value;
  SingletonJavaScriptValue singleton_value;
  array<RemoteInvocationArgument> array_value;
};

enum RemoteInvocationError {
  OK = 0,
  METHOD_NOT_FOUND,
  OBJECT_GET_CLASS_BLOCKED,
  EXCEPTION_THROWN,
};

union RemoteInvocationResultValue {
  double number_value;
  bool boolean_value;
  mojo_base.mojom.String16 string_value;
  SingletonJavaScriptValue singleton_value;

  // Scoped to the RemoteObjectHost that manages the callee object.
  // The caller is expected to use RemoteObjectHost.GetObject to obtain a pipe,
  // if it does not already have one.
  int32 object_id;
};

struct RemoteInvocationResult {
  RemoteInvocationError error = OK;

  // Must be set if |error == OK|.
  RemoteInvocationResultValue? value;
};
