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

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: Remove timer from closeEndpointHandle. Clean up associated_interface_ptr.html test. 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
« no previous file with comments | « mojo/public/js/router.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..ecccfec366d8aab6812d4bc68a2fdfe9eccd7eed 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,56 @@ define([
{custom_reason: 42, description: 'hey'});
};
+ function SenderConnectionBindLaterImpl({getIntegerSenderCallback,
+ getStringSenderCallback} = {}) {
+ this.getIntegerSenderCallback = getIntegerSenderCallback;
+ this.getStringSenderCallback = getStringSenderCallback;
+ this.integerSenderBinding_ = null;
+ this.stringSenderBinding_ = null;
+ }
+
+ SenderConnectionBindLaterImpl.prototype.getIntegerSender =
+ function(integerSenderRequest) {
+ setTimeout(() => {
+ this.integerSenderBinding_ = new associatedBindings.AssociatedBinding(
+ testAssociatedInterfaces.IntegerSender,
+ new IntegerSenderImpl(this.getIntegerSenderCallback),
+ integerSenderRequest);
+ }, 0);
+ };
+
+ SenderConnectionBindLaterImpl.prototype.getStringSender =
+ function(stringSenderRequest) {
+ this.stringSenderBinding_ = new associatedBindings.AssociatedBinding(
+ testAssociatedInterfaces.StringSender,
+ new StringSenderImpl(this.getStringSenderCallback),
+ stringSenderRequest);
+ };
+
+ function SenderConnectionImpl({getIntegerSenderCallback,
+ getStringSenderCallback} = {}) {
+ this.getIntegerSenderCallback = getIntegerSenderCallback;
+ this.getStringSenderCallback = getStringSenderCallback;
+ this.integerSenderBinding_ = null;
+ this.stringSenderBinding_ = null;
+ }
+
+ SenderConnectionImpl.prototype.getIntegerSender =
+ function(integerSenderRequest) {
+ this.integerSenderBinding_ = new associatedBindings.AssociatedBinding(
+ testAssociatedInterfaces.IntegerSender,
+ new IntegerSenderImpl(this.getIntegerSenderCallback),
+ integerSenderRequest);
+ };
+
+ SenderConnectionImpl.prototype.getStringSender =
+ function(stringSenderRequest) {
+ this.stringSenderBinding_ = new associatedBindings.AssociatedBinding(
+ testAssociatedInterfaces.StringSender,
+ new StringSenderImpl(this.getStringSenderCallback),
+ stringSenderRequest);
+ };
+
promise_test(async () => {
var integerSenderConnection = new
testAssociatedInterfaces.IntegerSenderConnectionPtr();
@@ -92,8 +145,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 +155,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 +178,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 +215,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 +243,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 +273,103 @@ 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 senderConnection = new
+ testAssociatedInterfaces.SenderConnectionPtr();
+ var senderConnectionBindLaterImpl = new SenderConnectionBindLaterImpl();
+ var senderConnectionBinding = new bindings.Binding(
+ testAssociatedInterfaces.SenderConnection,
+ senderConnectionBindLaterImpl,
+ bindings.makeRequest(senderConnection));
+
+ // AssociatedInterfaceRequest for stringSender.
+ var stringSenderPtrInfo = new
+ associatedBindings.AssociatedInterfacePtrInfo();
+ var stringSenderRequest = associatedBindings.makeRequest(
+ stringSenderPtrInfo);
+ var stringSender =
+ new testAssociatedInterfaces.AssociatedStringSenderPtr(
+ stringSenderPtrInfo);
+
+ // AssociatedInterfaceRequest for integerSender.
+ var integerSenderPtrInfo = new
+ associatedBindings.AssociatedInterfacePtrInfo();
+ var integerSenderRequest = associatedBindings.makeRequest(
+ integerSenderPtrInfo);
+ var integerSender = new
+ testAssociatedInterfaces.AssociatedIntegerSenderPtr(
+ integerSenderPtrInfo);
+
+ var value = await new Promise(function(resolve, reject) {
+ senderConnectionBindLaterImpl.getIntegerSenderCallback = resolve;
+ senderConnectionBindLaterImpl.getStringSenderCallback= reject;
+ senderConnection.getStringSender(stringSenderRequest);
+ 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');
+
+ promise_test(async () => {
+ var senderConnection = new
+ testAssociatedInterfaces.SenderConnectionPtr();
+ var senderConnectionImpl = new SenderConnectionImpl();
+ var senderConnectionBinding = new bindings.Binding(
+ testAssociatedInterfaces.SenderConnection,
+ senderConnectionImpl,
+ bindings.makeRequest(senderConnection));
+
+ // AssociatedInterfaceRequest for stringSender.
+ var stringSenderPtrInfo = new
+ associatedBindings.AssociatedInterfacePtrInfo();
+ var stringSenderRequest = associatedBindings.makeRequest(
+ stringSenderPtrInfo);
+ var stringSender =
+ new testAssociatedInterfaces.AssociatedStringSenderPtr(
+ stringSenderPtrInfo);
+
+ // AssociatedInterfaceRequest for integerSender.
+ var integerSenderPtrInfo = new
+ associatedBindings.AssociatedInterfacePtrInfo();
+ var integerSenderRequest = associatedBindings.makeRequest(
+ integerSenderPtrInfo);
+ var integerSender = new
+ testAssociatedInterfaces.AssociatedIntegerSenderPtr(
+ integerSenderPtrInfo);
+
+ var value = await new Promise(function(resolve, reject) {
+ senderConnectionImpl.getIntegerSenderCallback = reject;
+ senderConnectionImpl.getStringSenderCallback= resolve;
+ senderConnection.getStringSender(stringSenderRequest);
+ senderConnection.getIntegerSender(integerSenderRequest);
+
+ // Wait for integerSenderBinding to be created.
+ integerSender.echo(100).then(function(result) {
+ assert_equals(result.value, 100);
+
+ // This causes this endpoint handle's endpoint client to be detached.
+ var handle = senderConnectionImpl.integerSenderBinding_.
+ interfaceEndpointClient_.passHandle();
+
+ // Cache message. Connector will pause processing incoming messages.
+ integerSender.send(456);
+ stringSender.send('goodbye');
+
+ // Closing the target endpoint handle of the cached message will cause
+ // the cached message to be discarded and the connector to resume
+ // processing incoming messages.
+ setTimeout(handle.reset.bind(handle), 0);
+ });
+ });
+
+ assert_equals(value, 'goodbye');
+ }, 'discard cached message if target endpoint closed');
+
done();
});
« no previous file with comments | « mojo/public/js/router.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698