| Index: third_party/WebKit/LayoutTests/mojo/associated_binding.html
|
| diff --git a/third_party/WebKit/LayoutTests/mojo/associated_binding.html b/third_party/WebKit/LayoutTests/mojo/associated_binding.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c102fda3c931730fb54387e5d8421a38cb83a1f8
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/mojo/associated_binding.html
|
| @@ -0,0 +1,146 @@
|
| +<!DOCTYPE html>
|
| +<script src="../resources/testharness.js"></script>
|
| +<script src="../resources/testharnessreport.js"></script>
|
| +<script src="../resources/mojo-helpers.js"></script>
|
| +<script>
|
| +'use strict';
|
| +
|
| +setup({ explicit_done: true });
|
| +
|
| +define([
|
| + "mojo/public/interfaces/bindings/tests/test_associated_interfaces.mojom",
|
| + "mojo/public/js/associated_bindings",
|
| + "mojo/public/js/bindings",
|
| +], function(testAssociatedInterfaces, associatedBindings, bindings) {
|
| +
|
| + function SenderImpl(callback) {
|
| + this.callback = callback;
|
| + }
|
| +
|
| + SenderImpl.prototype.echo = function(value) {
|
| + return Promise.resolve({value: value});
|
| + };
|
| +
|
| + SenderImpl.prototype.send = function(value) {
|
| + if (this.callback) {
|
| + this.callback(value);
|
| + }
|
| + };
|
| +
|
| + var IntegerSenderImpl = SenderImpl;
|
| +
|
| + function IntegerSenderConnectionImpl() {
|
| + this.integerSenderBindings = new associatedBindings.AssociatedBindingSet(
|
| + testAssociatedInterfaces.IntegerSender);
|
| + }
|
| +
|
| + IntegerSenderConnectionImpl.prototype.getSender = function(
|
| + integerSenderRequest) {
|
| + this.integerSenderBindings.addBinding(new IntegerSenderImpl(),
|
| + integerSenderRequest);
|
| + };
|
| +
|
| + promise_test(async () => {
|
| + var integerSenderConnection =
|
| + new testAssociatedInterfaces.IntegerSenderConnectionPtr();
|
| + var integerSenderConnectionImpl = new IntegerSenderConnectionImpl();
|
| + var integerSenderConnectionBinding = new bindings.Binding(
|
| + testAssociatedInterfaces.IntegerSenderConnection,
|
| + integerSenderConnectionImpl,
|
| + bindings.makeRequest(integerSenderConnection));
|
| +
|
| + // AssociatedInterfaceRequest for integerSender.
|
| + var integerSenderPtrInfo0 =
|
| + new associatedBindings.AssociatedInterfacePtrInfo();
|
| + var integerSenderRequest0 = associatedBindings.makeRequest(
|
| + integerSenderPtrInfo0);
|
| + var integerSender0 =
|
| + new testAssociatedInterfaces.AssociatedIntegerSenderPtr(
|
| + integerSenderPtrInfo0);
|
| +
|
| + var integerSenderPtrInfo1 =
|
| + new associatedBindings.AssociatedInterfacePtrInfo();
|
| + var integerSenderRequest1 = associatedBindings.makeRequest(
|
| + integerSenderPtrInfo1);
|
| + var integerSender1 =
|
| + new testAssociatedInterfaces.AssociatedIntegerSenderPtr(
|
| + integerSenderPtrInfo1);
|
| +
|
| + integerSenderConnection.getSender(integerSenderRequest0);
|
| + integerSenderConnection.getSender(integerSenderRequest1);
|
| +
|
| + // Master Binding close triggers connection error handler on
|
| + // interface endpoint clients for all associated endpoints.
|
| + var connectionErrorHandler0 = new Promise((resolve, reject) => {
|
| + integerSender0.ptr.setConnectionErrorHandler(() => {
|
| + resolve();
|
| + });
|
| + });
|
| +
|
| + var connectionErrorHandler1 = new Promise((resolve, reject) => {
|
| + integerSender1.ptr.setConnectionErrorHandler(() => {
|
| + resolve();
|
| + });
|
| + });
|
| +
|
| + setTimeout(integerSenderConnectionBinding.close.bind(
|
| + integerSenderConnectionBinding), 0);
|
| + await Promise.all([connectionErrorHandler0, connectionErrorHandler1]);
|
| + }, 'all endpoints connectionErrorHandler called on master binding close');
|
| +
|
| + promise_test(async () => {
|
| + var integerSenderConnection =
|
| + new testAssociatedInterfaces.IntegerSenderConnectionPtr();
|
| + var integerSenderConnectionImpl = new IntegerSenderConnectionImpl();
|
| + var integerSenderConnectionBinding = new bindings.Binding(
|
| + testAssociatedInterfaces.IntegerSenderConnection,
|
| + integerSenderConnectionImpl,
|
| + bindings.makeRequest(integerSenderConnection));
|
| +
|
| + var integerSenders = [];
|
| + for (var i = 0; i < 3; i++) {
|
| + // AssociatedInterfaceRequest for integerSender.
|
| + var integerSenderPtrInfo =
|
| + new associatedBindings.AssociatedInterfacePtrInfo();
|
| + var integerSenderRequest = associatedBindings.makeRequest(
|
| + integerSenderPtrInfo);
|
| + var integerSender =
|
| + new testAssociatedInterfaces.AssociatedIntegerSenderPtr(
|
| + integerSenderPtrInfo);
|
| + integerSenderConnection.getSender(integerSenderRequest);
|
| +
|
| + // Wait for integerSenderConnection getSender message to be received by
|
| + // integerSenderConnection's binding side and all integerSender binding
|
| + // to be created.
|
| + assert_equals((await integerSender.echo(3)).value, 3);
|
| + integerSenders.push(integerSender);
|
| + }
|
| +
|
| + await new Promise((resolve, reject) => {
|
| + integerSenderConnectionImpl.integerSenderBindings
|
| + .setConnectionErrorHandler(() => {resolve();});
|
| + integerSenders[0].ptr.reset();
|
| + });
|
| +
|
| + await new Promise((resolve, reject) => {
|
| + integerSenderConnectionImpl.integerSenderBindings
|
| + .setConnectionErrorHandler(function({custom_reason, description}) {
|
| + assert_equals(custom_reason, 32);
|
| + assert_equals(description, 'goodbye');
|
| + resolve();
|
| + });
|
| + integerSenders[1].ptr.resetWithReason({custom_reason: 32,
|
| + description: 'goodbye'});
|
| + });
|
| +
|
| + // integerSender2's binding should still exist.
|
| + assert_equals((await integerSenders[2].echo(11)).value, 11);
|
| +
|
| + integerSenderConnectionImpl.integerSenderBindings.closeAllBindings();
|
| + assert_true(integerSenderConnectionImpl.integerSenderBindings.isEmpty());
|
| + }, 'associated binding set');
|
| +
|
| + done();
|
| +});
|
| +
|
| +</script>
|
|
|