| // Copyright 2023 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; |
| |
| import "mojo/public/mojom/base/values.mojom"; |
| |
| // Descriptive errors raised by the gin java bridge. |
| enum GinJavaBridgeError { |
| kGinJavaBridgeNoError, |
| kGinJavaBridgeUnknownObjectId, |
| kGinJavaBridgeObjectIsGone, |
| kGinJavaBridgeMethodNotFound, |
| kGinJavaBridgeAccessToObjectGetClassIsBlocked, |
| kGinJavaBridgeJavaExceptionRaised, |
| kGinJavaBridgeNonAssignableTypes, |
| kGinJavaBridgeRenderFrameDeleted, |
| }; |
| |
| // Interface for adding objects to a frame in the renderer. |
| // TODO(crbug.com/40554401): This interface mirrors |
| // `blink.mojom.RemoteObjectGateway` and should be removed once |
| // crbug.com/794320 is complete. |
| interface GinJavaBridge { |
| // Sent from browser to renderer to add a Java object with the given name. |
| // Object IDs are generated on the browser side. |
| AddNamedObject(string name, int32 object_id); |
| |
| // Sent from browser to renderer to remove a Java object with the given name. |
| RemoveNamedObject(string name); |
| |
| // Sets the associated GinJavaBridgeHost object. |
| SetHost(pending_remote<GinJavaBridgeHost> host); |
| }; |
| |
| // Implemented in the process hosting the remote object. Allows methods to be |
| // synchronously invoked on the object. |
| // TODO(crbug.com/40554401): This interface mirrors `blink.mojom.RemoteObject` |
| // but without the serialization changes. This should be merged with that |
| // definition once crbug.com/794320 is complete. |
| interface GinJavaBridgeRemoteObject { |
| // Sent from renderer to browser to get information about methods of |
| // the given object. The query will only succeed if inspection of injected |
| // objects is enabled on the browser side. |
| [Sync] |
| GetMethods() => (array<string> method_names); |
| |
| // Sent from renderer to browser to find out, if an object has a method with |
| // the given name. |
| [Sync] |
| HasMethod(string method_name) => (bool result); |
| |
| // Sent from renderer to browser to invoke a method. Method arguments |
| // are chained into |arguments| list. base::Value::List is used for |result| |
| // as a container to work around immutability of base::Value. |
| // Empty result list indicates that an error has happened on the Java side |
| // (either bridge-induced error or an unhandled Java exception) and an |
| // exception must be thrown into JavaScript. |error_code| indicates the cause |
| // of the error. |
| // Some special value types that are not supported by base::Value are encoded |
| // as BinaryValues via GinJavaBridgeValue. |
| [Sync] |
| InvokeMethod(string method_name, mojo_base.mojom.ListValue arguments) => |
| (GinJavaBridgeError error_code, mojo_base.mojom.ListValue result); |
| }; |
| |
| // Implemented in the process hosting the remote objects. Allows access to an |
| // object graph. |
| // TODO(crbug.com/40554401): This class mirrors `blink.mojom.RemoteObjectHost` |
| // and should be removed once crbug.com/794320 is complete. |
| interface GinJavaBridgeHost { |
| // Binds |receiver| to an implementation of RemoteObject corresponding to |
| // |object_id|. |
| GetObject(int32 object_id, |
| pending_receiver<GinJavaBridgeRemoteObject> receiver); |
| |
| // Sent from renderer to browser in two cases: |
| // |
| // 1. (Main usage) To inform that the JS wrapper of the object has |
| // been completely dereferenced and garbage-collected. |
| // |
| // 2. To notify the browser that wrapper creation has failed. The browser |
| // side assumes optimistically that every time an object is returned from |
| // a method, the corresponding wrapper object will be successfully |
| // created on the renderer side. Sending of this message informs the |
| // browser whether this expectation has failed. |
| ObjectWrapperDeleted(int32 object_id); |
| }; |