Commit 0a31ccd3 authored by Giovanni Ortuño Urquidi's avatar Giovanni Ortuño Urquidi Committed by Commit Bot

mojo-js: Add PendingReceiver exported interface and use it in InterfaceRemoteBase

A new version of Closure Compiler started mangling symbols of a
generic type used for pending receivers. This CL introduces a
PendingReceiver interface and exports its properties so that Closure
doesn't mangle its symbols.

Ideally we would use bounded generic types, but that feature is not
available on the current version of Closure Compiler. A follow up
CL will change all usage of generic types to bounded generic types
to avoid future instances of this bug and will land after we roll
a new version of Closure Compiler.

Fixed: 1012109
Change-Id: Ibdd42b4fe496042a3edd3079707c675dc81bc626
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1868216
Commit-Queue: Giovanni Ortuño Urquidi <ortuno@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Cr-Commit-Position: refs/heads/master@{#707616}
parent b105c7cb
......@@ -84,6 +84,7 @@ if (enable_mojom_closure_compile || closure_compile) {
"language_in=ECMASCRIPT_2017",
"language_out=ECMASCRIPT_2015",
"generate_exports",
"export_local_property_definitions",
]
}
} else {
......
......@@ -149,16 +149,30 @@ mojo.internal.interfaceSupport.ConnectionErrorEventRouter = class {
}
};
/**
* @interface
* @export
*/
mojo.internal.interfaceSupport.PendingReceiver = class {
/**
* @return {!MojoHandle}
* @export
*/
get handle() {}
};
/**
* Generic helper used to implement all generated remote classes. Knows how to
* serialize requests and deserialize their replies, both according to
* declarative message structure specs.
* @template T
*
* TODO(crbug.com/1012109): Use a bounded generic type instead of
* mojo.internal.interfaceSupport.PendingReceiver.
* @export
*/
mojo.internal.interfaceSupport.InterfaceRemoteBase = class {
/**
* @param {!function(new:T, !MojoHandle)} requestType
* @param {!function(new:mojo.internal.interfaceSupport.PendingReceiver, !MojoHandle)} requestType
* @param {MojoHandle=} opt_handle The message pipe handle to use as a remote
* endpoint. If null, this object must be bound with bindHandle before
* it can be used to send any messages.
......@@ -168,7 +182,7 @@ mojo.internal.interfaceSupport.InterfaceRemoteBase = class {
/** @public {?MojoHandle} */
this.handle = null;
/** @private {!function(new:T, !MojoHandle)} */
/** @private {!function(new:mojo.internal.interfaceSupport.PendingReceiver, !MojoHandle)} */
this.requestType_ = requestType;
/** @private {?mojo.internal.interfaceSupport.HandleReader} */
......@@ -194,7 +208,7 @@ mojo.internal.interfaceSupport.InterfaceRemoteBase = class {
}
/**
* @return {!T}
* @return {!mojo.internal.interfaceSupport.PendingReceiver}
*/
bindNewPipeAndPassReceiver() {
let {handle0, handle1} = Mojo.createMessagePipe();
......
......@@ -53,6 +53,7 @@ if (enable_mojom_closure_compile || closure_compile) {
"language_in=ECMASCRIPT_2017",
"language_out=ECMASCRIPT5_STRICT",
"generate_exports",
"export_local_property_definitions",
]
}
} else {
......
......@@ -28,7 +28,10 @@ goog.provide('{{module.namespace}}.{{interface.name}}{{primitives_names.remote}}
goog.provide('{{module.namespace}}.{{interface.name}}{{primitives_names.pending_receiver}}');
{% endif %}
/** @export */
/**
* @implements {mojo.internal.interfaceSupport.PendingReceiver}
* @export
*/
{{module.namespace}}.{{interface.name}}{{primitives_names.pending_receiver}} = class {
/** @param {!MojoHandle} handle */
constructor(handle) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment