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_binding.html

Issue 2844133003: Add associated binding set. Add associated_binding.html layout test. (Closed)
Patch Set: Simplify binding and associated bindings code. Fix associated_binding.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
« mojo/public/js/associated_bindings.js ('K') | « mojo/public/js/bindings.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_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..c102fda3c931730fb54387e5d8421a38cb83a1f8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/mojo/associated_binding.html
@@ -0,0 +1,146 @@
+<!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(
+ integerSenderConnectionBinding), 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));
+
+ var integerSenders = [];
+ for (var i = 0; i < 3; i++) {
+ // AssociatedInterfaceRequest for integerSender.
+ var integerSenderPtrInfo =
+ new associatedBindings.AssociatedInterfacePtrInfo();
+ var integerSenderRequest = associatedBindings.makeRequest(
+ integerSenderPtrInfo);
+ var integerSender =
+ new testAssociatedInterfaces.AssociatedIntegerSenderPtr(
+ integerSenderPtrInfo);
+ integerSenderConnection.getSender(integerSenderRequest);
+
+ // Wait for integerSenderConnection getSender message to be received by
+ // integerSenderConnection's binding side and all integerSender binding
+ // to be created.
+ assert_equals((await integerSender.echo(3)).value, 3);
+ integerSenders.push(integerSender);
+ }
+
+ await new Promise((resolve, reject) => {
+ integerSenderConnectionImpl.integerSenderBindings
+ .setConnectionErrorHandler(() => {resolve();});
+ integerSenders[0].ptr.reset();
+ });
+
+ await new Promise((resolve, reject) => {
+ integerSenderConnectionImpl.integerSenderBindings
+ .setConnectionErrorHandler(function({custom_reason, description}) {
+ assert_equals(custom_reason, 32);
+ assert_equals(description, 'goodbye');
+ resolve();
+ });
+ integerSenders[1].ptr.resetWithReason({custom_reason: 32,
+ description: 'goodbye'});
+ });
+
+ // integerSender2's binding should still exist.
+ assert_equals((await integerSenders[2].echo(11)).value, 11);
+
+ integerSenderConnectionImpl.integerSenderBindings.closeAllBindings();
+ assert_true(integerSenderConnectionImpl.integerSenderBindings.isEmpty());
+ }, 'associated binding set');
+
+ done();
+});
+
+</script>
« mojo/public/js/associated_bindings.js ('K') | « mojo/public/js/bindings.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698