Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Unified Diff: third_party/WebKit/LayoutTests/mojo/associated_interface_ptr.html

Issue 2832303002: Fifo order should be preserved for messages on associated interfaces. (Closed)
Patch Set: Address codereview Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();
});

Powered by Google App Engine
This is Rietveld 408576698