| Index: third_party/WebKit/LayoutTests/mojo/associated_interface_ptr.html
|
| diff --git a/third_party/WebKit/LayoutTests/mojo/associated_interface_ptr.html b/third_party/WebKit/LayoutTests/mojo/associated_interface_ptr.html
|
| index 361cff3aafd65806a8fb85df09decb293d72ddd5..661e11e3735050781179d4bbcfc9bbc6e9242a36 100644
|
| --- a/third_party/WebKit/LayoutTests/mojo/associated_interface_ptr.html
|
| +++ b/third_party/WebKit/LayoutTests/mojo/associated_interface_ptr.html
|
| @@ -13,20 +13,23 @@ define([
|
| "mojo/public/js/bindings",
|
| ], function(testAssociatedInterfaces, associatedBindings, bindings) {
|
|
|
| - function IntegerSenderImpl(callback) {
|
| + function SenderImpl(callback) {
|
| this.callback = callback;
|
| }
|
|
|
| - IntegerSenderImpl.prototype.echo = function(value) {
|
| + SenderImpl.prototype.echo = function(value) {
|
| return Promise.resolve({value: value});
|
| };
|
|
|
| - IntegerSenderImpl.prototype.send = function(value) {
|
| + SenderImpl.prototype.send = function(value) {
|
| if (this.callback) {
|
| this.callback(value);
|
| }
|
| };
|
|
|
| + var IntegerSenderImpl = SenderImpl;
|
| + var StringSenderImpl = SenderImpl;
|
| +
|
| function IntegerSenderConnectionImpl() {
|
| this.integerSenderBinding_ = null;
|
| }
|
| @@ -58,8 +61,8 @@ define([
|
| IntegerSenderConnectionAtBothEndsImpl.prototype.setSender = function(
|
| integerSenderPtrInfo) {
|
| this.integerSender_ = new
|
| - testAssociatedInterfaces.AssociatedIntegerSenderPtr();
|
| - this.integerSender_.ptr.bind(integerSenderPtrInfo);
|
| + testAssociatedInterfaces.AssociatedIntegerSenderPtr(
|
| + integerSenderPtrInfo);
|
| return this.integerSender_.echo(456);
|
| };
|
|
|
| @@ -77,6 +80,33 @@ define([
|
| {custom_reason: 42, description: 'hey'});
|
| };
|
|
|
| + function SenderConnectionBindLaterImpl(resolve, reject) {
|
| + this.resolve = resolve;
|
| + this.reject = reject;
|
| + this.integerSenderBinding_ = null;
|
| + this.stringSenderBinding_ = null;
|
| + }
|
| +
|
| + SenderConnectionBindLaterImpl.prototype.getIntegerSender =
|
| + function(integerSenderRequest) {
|
| + setTimeout(() => {
|
| + this.integerSenderBinding_ = new associatedBindings.AssociatedBinding(
|
| + testAssociatedInterfaces.IntegerSender,
|
| + new IntegerSenderImpl(this.resolve),
|
| + integerSenderRequest);
|
| + }, 0);
|
| + };
|
| +
|
| + SenderConnectionBindLaterImpl.prototype.getStringSender =
|
| + function(stringSenderRequest) {
|
| + setTimeout(() => {
|
| + this.stringSenderBinding_ = new associatedBindings.AssociatedBinding(
|
| + testAssociatedInterfaces.StringSender,
|
| + new StringSenderImpl(this.reject),
|
| + stringSenderRequest);
|
| + }, 0);
|
| + };
|
| +
|
| promise_test(async () => {
|
| var integerSenderConnection = new
|
| testAssociatedInterfaces.IntegerSenderConnectionPtr();
|
| @@ -92,8 +122,8 @@ define([
|
| integerSenderPtrInfo0);
|
|
|
| var integerSender0 = new
|
| - testAssociatedInterfaces.AssociatedIntegerSenderPtr();
|
| - integerSender0.ptr.bind(integerSenderPtrInfo0);
|
| + testAssociatedInterfaces.AssociatedIntegerSenderPtr(
|
| + integerSenderPtrInfo0);
|
|
|
| integerSenderConnection.getSender(integerSenderRequest0);
|
| assert_equals((await integerSender0.echo(123)).value, 123);
|
| @@ -102,8 +132,8 @@ define([
|
| var integerSenderPtrInfo1 =
|
| (await integerSenderConnection.asyncGetSender()).sender;
|
| var integerSender1 = new
|
| - testAssociatedInterfaces.AssociatedIntegerSenderPtr();
|
| - integerSender1.ptr.bind(integerSenderPtrInfo1);
|
| + testAssociatedInterfaces.AssociatedIntegerSenderPtr(
|
| + integerSenderPtrInfo1);
|
| assert_equals((await integerSender1.echo(456)).value, 456);
|
| }, 'pass associated interfaces');
|
|
|
| @@ -125,8 +155,8 @@ define([
|
| integerSenderPtrInfo0);
|
|
|
| var integerSender0 = new
|
| - testAssociatedInterfaces.AssociatedIntegerSenderPtr();
|
| - integerSender0.ptr.bind(integerSenderPtrInfo0);
|
| + testAssociatedInterfaces.AssociatedIntegerSenderPtr(
|
| + integerSenderPtrInfo0);
|
|
|
| integerSenderConnectionAtBothEnds.getSender(integerSenderRequest0);
|
| assert_equals((await integerSender0.echo(123)).value, 123);
|
| @@ -162,8 +192,8 @@ define([
|
| integerSenderPtrInfo0);
|
|
|
| var integerSender0 = new
|
| - testAssociatedInterfaces.AssociatedIntegerSenderPtr();
|
| - integerSender0.ptr.bind(integerSenderPtrInfo0);
|
| + testAssociatedInterfaces.AssociatedIntegerSenderPtr(
|
| + integerSenderPtrInfo0);
|
|
|
| integerSenderConnection.getSender(integerSenderRequest0);
|
| await new Promise((resolve, reject) => {
|
| @@ -190,16 +220,16 @@ define([
|
| var integerSenderRequest0 = associatedBindings.makeRequest(
|
| integerSenderPtrInfo0);
|
| var integerSender0 = new
|
| - testAssociatedInterfaces.AssociatedIntegerSenderPtr();
|
| - integerSender0.ptr.bind(integerSenderPtrInfo0);
|
| + testAssociatedInterfaces.AssociatedIntegerSenderPtr(
|
| + integerSenderPtrInfo0);
|
| integerSenderConnection.getSender(integerSenderRequest0);
|
|
|
| // Recieving AssociatedInterfacePtrInfo.
|
| var integerSenderPtrInfo1 =
|
| (await integerSenderConnection.asyncGetSender()).sender;
|
| var integerSender1 = new
|
| - testAssociatedInterfaces.AssociatedIntegerSenderPtr();
|
| - integerSender1.ptr.bind(integerSenderPtrInfo1);
|
| + testAssociatedInterfaces.AssociatedIntegerSenderPtr(
|
| + integerSenderPtrInfo1);
|
|
|
| // Master InterfacePtrController reset triggers connection error handler on
|
| // interface endpoint clients for all associated endpoints.
|
| @@ -220,6 +250,54 @@ define([
|
| await Promise.all([connectionErrorHandler0, connectionErrorHandler1]);
|
| }, 'all endpoints connectionErrorHandler called on master interface reset');
|
|
|
| + // Cache the current message and pause processing incoming messages if
|
| + // endpoint does not have client attached yet to ensure fifo message arrival.
|
| + promise_test(async () => {
|
| + var value = await new Promise(function(resolve, reject) {
|
| + var senderConnection = new
|
| + testAssociatedInterfaces.SenderConnectionBindLaterPtr();
|
| + var senderConnectionBinding = new bindings.Binding(
|
| + testAssociatedInterfaces.SenderConnectionBindLater,
|
| + new SenderConnectionBindLaterImpl(resolve, reject),
|
| + bindings.makeRequest(senderConnection));
|
| +
|
| + // Sending AssociatedInterfaceRequest.
|
| + var stringSenderPtrInfo = new
|
| + associatedBindings.AssociatedInterfacePtrInfo();
|
| + var stringSenderRequest = associatedBindings.makeRequest(
|
| + stringSenderPtrInfo);
|
| +
|
| + var stringSender = new
|
| + testAssociatedInterfaces.AssociatedStringSenderPtr(
|
| + stringSenderPtrInfo);
|
| + senderConnection.getStringSender(stringSenderRequest);
|
| +
|
| + // Wait for associated endpoint handle to be bound to the binding side
|
| + // and for method call to return a value. This tests that the message
|
| + // is cached properly because the handle is bound later.
|
| + stringSender.echo('hello').then((result) => {
|
| + assert_equals(result.value, 'hello');
|
| +
|
| + // integerSender whose binding side has not bound the associated
|
| + // endpoint handle.
|
| + var integerSenderPtrInfo = new
|
| + associatedBindings.AssociatedInterfacePtrInfo();
|
| + var integerSenderRequest = associatedBindings.makeRequest(
|
| + integerSenderPtrInfo);
|
| + var integerSender = new
|
| + testAssociatedInterfaces.AssociatedIntegerSenderPtr(
|
| + integerSenderPtrInfo);
|
| + senderConnection.getIntegerSender(integerSenderRequest);
|
| +
|
| + // Test FIFO arrival order of message.
|
| + integerSender.send(456); // This message should arrive first.
|
| + stringSender.send('goodbye');
|
| + });
|
| + });
|
| +
|
| + assert_equals(value, 456);
|
| + }, 'fifo order should be preserved for messages');
|
| +
|
| done();
|
| });
|
|
|
|
|