Chromium Code Reviews| 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..1b29a5afd0abfcbf4a47bcfb78588df08ac0b28f |
| --- /dev/null |
| +++ b/third_party/WebKit/LayoutTests/mojo/associated_binding.html |
| @@ -0,0 +1,163 @@ |
| +<!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( |
|
yzshen1
2017/04/27 17:28:38
Would you please explain this line?
wangjimmy
2017/04/27 20:26:49
Fixed.
|
| + integerSenderConnection.ptr), 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)); |
| + |
| + // AssociatedInterfaceRequest for integerSender. |
| + var integerSenderPtrInfo0 = |
|
yzshen1
2017/04/27 17:28:38
Please use a for loop to do the work, instead of d
wangjimmy
2017/04/27 20:26:49
Done.
|
| + 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); |
| + |
| + var integerSenderPtrInfo2 = |
| + new associatedBindings.AssociatedInterfacePtrInfo(); |
| + var integerSenderRequest2 = associatedBindings.makeRequest( |
| + integerSenderPtrInfo2); |
| + var integerSender2 = |
| + new testAssociatedInterfaces.AssociatedIntegerSenderPtr( |
| + integerSenderPtrInfo2); |
| + |
| + integerSenderConnection.getSender(integerSenderRequest0); |
| + integerSenderConnection.getSender(integerSenderRequest1); |
| + integerSenderConnection.getSender(integerSenderRequest2); |
| + |
| + // Wait for integerSenderConnection getSender message to be received by |
| + // integerSenderConnection's binding side and all integerSender bindings |
| + // to be created. |
| + assert_equals((await integerSender0.echo(3)).value, 3); |
| + assert_equals((await integerSender1.echo(4)).value, 4); |
| + assert_equals((await integerSender2.echo(5)).value, 5); |
| + |
| + await new Promise((resolve, reject) => { |
| + integerSenderConnectionImpl.integerSenderBindings |
| + .setConnectionErrorHandler(() => {resolve();}); |
| + integerSender0.ptr.reset(); |
| + }); |
| + |
| + await new Promise((resolve, reject) => { |
| + integerSenderConnectionImpl.integerSenderBindings |
| + .setConnectionErrorHandler(function({custom_reason, description}) { |
| + assert_equals(custom_reason, 32); |
| + assert_equals(description, 'goodbye'); |
| + resolve(); |
| + }); |
| + integerSender1.ptr.resetWithReason({custom_reason: 32, |
| + description: 'goodbye'}); |
| + }); |
| + |
| + // integerSender2's binding should still exist. |
| + assert_equals((await integerSender2.echo(11)).value, 11); |
| + |
| + integerSenderConnectionImpl.integerSenderBindings.closeAllBindings(); |
| + assert_true(integerSenderConnectionImpl.integerSenderBindings.isEmpty()); |
| + }, 'associated binding set'); |
| + |
| + done(); |
| +}); |
| + |
| +</script> |