Index: third_party/WebKit/LayoutTests/external/wpt/webmessaging/message-channels/close.html |
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webmessaging/message-channels/close.html b/third_party/WebKit/LayoutTests/external/wpt/webmessaging/message-channels/close.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..912aacda52ccae805625c2d9a9589c56bf2fb02c |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/external/wpt/webmessaging/message-channels/close.html |
@@ -0,0 +1,74 @@ |
+<!DOCTYPE html> |
+<meta charset=utf-8> |
+<link rel="help" href="https://html.spec.whatwg.org/multipage/comms.html#dom-messageport-close"> |
+<script src="/resources/testharness.js"></script> |
+<script src="/resources/testharnessreport.js"></script> |
+<script> |
+// How long (in ms) these tests should wait before deciding no further messages |
+// will be received. |
+const time_to_wait_for_messages = 100; |
+ |
+async_test(t => { |
+ const c = new MessageChannel(); |
+ c.port1.onmessage = t.unreached_func('Should not have delivered message'); |
+ c.port1.close(); |
+ c.port2.postMessage('TEST'); |
+ setTimeout(t.step_func_done(), time_to_wait_for_messages); |
+ }, 'Message sent to closed port should not arrive.'); |
+ |
+async_test(t => { |
+ const c = new MessageChannel(); |
+ c.port1.onmessage = t.unreached_func('Should not have delivered message'); |
+ c.port2.close(); |
+ c.port2.postMessage('TEST'); |
+ setTimeout(t.step_func_done(), time_to_wait_for_messages); |
+ }, 'Message sent from closed port should not arrive.'); |
+ |
+async_test(t => { |
+ const c = new MessageChannel(); |
+ c.port1.onmessage = t.unreached_func('Should not have delivered message'); |
+ c.port1.close(); |
+ const c2 = new MessageChannel(); |
+ c2.port1.onmessage = t.step_func(e => { |
+ e.ports[0].postMessage('TESTMSG'); |
+ setTimeout(t.step_func_done(), time_to_wait_for_messages); |
+ }); |
+ c2.port2.postMessage('TEST', [c.port2]); |
+ }, 'Message sent to closed port from transferred port should not arrive.'); |
+ |
+async_test(t => { |
+ const c = new MessageChannel(); |
+ c.port1.onmessage = t.unreached_func('Should not have delivered message'); |
+ c.port2.close(); |
+ const c2 = new MessageChannel(); |
+ c2.port1.onmessage = t.step_func(e => { |
+ e.ports[0].postMessage('TESTMSG'); |
+ setTimeout(t.step_func_done(), time_to_wait_for_messages); |
+ }); |
+ c2.port2.postMessage('TEST', [c.port2]); |
+ }, 'Message sent from transferred closed port should not arrive.'); |
+ |
+async_test(t => { |
+ const c = new MessageChannel(); |
+ let isClosed = false; |
+ c.port1.onmessage = t.step_func_done(e => { |
+ assert_true(isClosed); |
+ assert_equals(e.data, 'TEST'); |
+ }); |
+ c.port2.postMessage('TEST'); |
+ c.port2.close(); |
+ isClosed = true; |
+ }, 'Inflight messages should be delivered even when sending port is closed afterwards.'); |
+ |
+async_test(t => { |
+ const c = new MessageChannel(); |
+ c.port1.onmessage = t.step_func_done(e => { |
+ if (e.data == 'DONE') t.done(); |
+ assert_equals(e.data, 'TEST'); |
+ c.port1.close(); |
+ }); |
+ c.port2.postMessage('TEST'); |
+ c.port2.postMessage('DONE'); |
+ }, 'Close in onmessage should not cancel inflight messages.'); |
+ |
+</script> |