File: gin_java_bridge.mojom

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (91 lines) | stat: -rw-r--r-- 3,886 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
// 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 "components/origin_matcher/origin_matcher.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,
    origin_matcher.mojom.OriginMatcher origin_matcher);

  // 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);
};