Fix lite js_templates
Sanitze the method parameter names to ensure proper handling of arguments that match reserved javascript keywords. Example: frame.mojom's JavaScriptMethodExecuteRequest method which has a parameter named `arguments` - a reserved word. Change-Id: I468e781fef1ff9e2207d926e0d7a61029905b24e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6244181 Reviewed-by: Alex Gough <ajgo@chromium.org> Commit-Queue: Ali Hijazi <ahijazi@chromium.org> Cr-Commit-Position: refs/heads/main@{#1418185}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
b650165e7b
commit
db8b988113
content/test/data
mojo/public/tools/bindings/generators/js_templates/lite
third_party/blink/web_tests/http/tests/mojo/shared
@ -57,6 +57,11 @@ interface TestMessageTarget {
|
|||||||
|
|
||||||
RequestSubinterface(pending_receiver<Subinterface> receiver,
|
RequestSubinterface(pending_receiver<Subinterface> receiver,
|
||||||
pending_remote<SubinterfaceClient> client);
|
pending_remote<SubinterfaceClient> client);
|
||||||
|
|
||||||
|
// This ensures we properly handle method parameters that have reserved
|
||||||
|
// javascript names when generating js bindings.
|
||||||
|
MethodWithReservedNameParameter(array<int32> arguments)
|
||||||
|
=> (array<int32> arguments);
|
||||||
};
|
};
|
||||||
|
|
||||||
interface Subinterface {
|
interface Subinterface {
|
||||||
|
@ -93,7 +93,7 @@ goog.provide('{{module.namespace}}.{{interface.name}}PendingReceiver');
|
|||||||
{{generateMethodAnnotation(method)}}
|
{{generateMethodAnnotation(method)}}
|
||||||
{{method.name}}(
|
{{method.name}}(
|
||||||
{%- for param in method.parameters %}
|
{%- for param in method.parameters %}
|
||||||
{{param.name}}{%- if not loop.last %},{% endif %}
|
{{param.name|sanitize_identifier}}{%- if not loop.last %},{% endif %}
|
||||||
{%- endfor -%}) {
|
{%- endfor -%}) {
|
||||||
{%- if method.response_parameters != None %}
|
{%- if method.response_parameters != None %}
|
||||||
return this.proxy.sendMessage(
|
return this.proxy.sendMessage(
|
||||||
@ -109,7 +109,7 @@ goog.provide('{{module.namespace}}.{{interface.name}}PendingReceiver');
|
|||||||
{%- endif %}
|
{%- endif %}
|
||||||
[
|
[
|
||||||
{%- for param in method.parameters %}
|
{%- for param in method.parameters %}
|
||||||
{{param.name}}{%- if not loop.last %},{% endif %}
|
{{param.name|sanitize_identifier}}{%- if not loop.last %},{% endif %}
|
||||||
{%- endfor %}
|
{%- endfor %}
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,7 @@ export class {{interface.name}}Remote {
|
|||||||
{{generateMethodAnnotation(method)}}
|
{{generateMethodAnnotation(method)}}
|
||||||
{{method.name}}(
|
{{method.name}}(
|
||||||
{%- for param in method.parameters %}
|
{%- for param in method.parameters %}
|
||||||
{{param.name}}{%- if not loop.last %},{% endif %}
|
{{param.name|sanitize_identifier}}{%- if not loop.last %},{% endif %}
|
||||||
{%- endfor -%}) {
|
{%- endfor -%}) {
|
||||||
{%- if method.response_parameters != None %}
|
{%- if method.response_parameters != None %}
|
||||||
return this.proxy.sendMessage(
|
return this.proxy.sendMessage(
|
||||||
@ -94,7 +94,7 @@ export class {{interface.name}}Remote {
|
|||||||
{%- endif %}
|
{%- endif %}
|
||||||
[
|
[
|
||||||
{%- for param in method.parameters %}
|
{%- for param in method.parameters %}
|
||||||
{{param.name}}{%- if not loop.last %},{% endif %}
|
{{param.name|sanitize_identifier}}{%- if not loop.last %},{% endif %}
|
||||||
{%- endfor %}
|
{%- endfor %}
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,9 @@ class TargetImpl {
|
|||||||
flattenUnions(unions) {}
|
flattenUnions(unions) {}
|
||||||
flattenMap(map) {}
|
flattenMap(map) {}
|
||||||
requestSubinterface(request, client) {}
|
requestSubinterface(request, client) {}
|
||||||
|
methodWithReservedNameParameter(arguments_) {
|
||||||
|
return Promise.resolve({arguments: arguments_});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
promise_test(() => {
|
promise_test(() => {
|
||||||
@ -32,6 +35,16 @@ promise_test(() => {
|
|||||||
});
|
});
|
||||||
}, 'messages with replies return Promises that resolve on reply received');
|
}, 'messages with replies return Promises that resolve on reply received');
|
||||||
|
|
||||||
|
|
||||||
|
promise_test(() => {
|
||||||
|
let impl = new TargetImpl;
|
||||||
|
let remote = impl.target.$.bindNewPipeAndPassRemote();
|
||||||
|
return remote.methodWithReservedNameParameter([1, 2, 3, 4]).then(reply => {
|
||||||
|
assert_array_equals(reply.arguments, [1, 2, 3, 4]);
|
||||||
|
});
|
||||||
|
}, 'Methods with reserved argument names are properly handled.');
|
||||||
|
|
||||||
|
|
||||||
promise_test(() => {
|
promise_test(() => {
|
||||||
let impl = new TargetImpl;
|
let impl = new TargetImpl;
|
||||||
let remote = impl.target.$.bindNewPipeAndPassRemote();
|
let remote = impl.target.$.bindNewPipeAndPassRemote();
|
||||||
|
Reference in New Issue
Block a user