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> |