blob: af42bfaef424823a4c1c0e82ce82012e5e647d92 [file] [log] [blame]
// 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;
};