| Index: LayoutTests/http/tests/serviceworker/resources/stashed-ports-basics.js
|
| diff --git a/LayoutTests/http/tests/serviceworker/resources/stashed-ports-basics.js b/LayoutTests/http/tests/serviceworker/resources/stashed-ports-basics.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..00f3cfc82fa32b4333dd7965258237eaa3d75376
|
| --- /dev/null
|
| +++ b/LayoutTests/http/tests/serviceworker/resources/stashed-ports-basics.js
|
| @@ -0,0 +1,57 @@
|
| +importScripts('worker-testharness.js');
|
| +
|
| +// Helper method that waits for a reply on a port, and resolves a promise with
|
| +// the reply.
|
| +function wait_for_message_to_port(test, port) {
|
| + return new Promise(function(resolve) {
|
| + var resolved = false;
|
| + port.onmessage = test.step_func(function(event) {
|
| + assert_false(resolved);
|
| + resolved = true;
|
| + resolve(event.data);
|
| + });
|
| + });
|
| +}
|
| +
|
| +// Similar helper method, but waits for a reply to a stashed port with a
|
| +// particular name.
|
| +function wait_for_message_to_stashed_port(test, name) {
|
| + return new Promise(function(resolve) {
|
| + var event_handler = function(e) {
|
| + if (e.source.name === name) {
|
| + self.ports.removeEventListener('message', event_handler);
|
| + resolve(e);
|
| + }
|
| + };
|
| + self.ports.addEventListener('message', event_handler);
|
| + });
|
| +}
|
| +
|
| +test(function(test) {
|
| + var channel = new MessageChannel();
|
| + var name = 'somename';
|
| + var stashed_port = self.ports.add(name, channel.port1);
|
| + assert_equals(stashed_port.name, name);
|
| + }, 'Name set when adding port is set correctly.');
|
| +
|
| +promise_test(function(test) {
|
| + var channel = new MessageChannel();
|
| + var stashed_port = self.ports.add('', channel.port1);
|
| + stashed_port.postMessage('pingy ping');
|
| + return wait_for_message_to_port(test, channel.port2)
|
| + .then(test.step_func(function(reply) {
|
| + assert_equals(reply, 'pingy ping');
|
| + }));
|
| + }, 'Messages posted into stashed port arrive on other side.');
|
| +
|
| +promise_test(function(test) {
|
| + var channel = new MessageChannel();
|
| + var name = 'test_events';
|
| + var stashed_port = self.ports.add(name, channel.port1);
|
| + channel.port2.postMessage('ping blah');
|
| + return wait_for_message_to_stashed_port(test, name)
|
| + .then(test.step_func(function(reply) {
|
| + assert_equals(reply.data, 'ping blah');
|
| + assert_equals(reply.source, stashed_port);
|
| + }));
|
| + }, 'Messages sent to stashed port arrive as global events.');
|
|
|