Index: LayoutTests/http/tests/serviceworker/postmessage-msgport-to-client.html |
diff --git a/LayoutTests/http/tests/serviceworker/postmessage-msgport-to-client.html b/LayoutTests/http/tests/serviceworker/postmessage-msgport-to-client.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..231610c75e4b8dfc4e93a283cb1973475e7c8174 |
--- /dev/null |
+++ b/LayoutTests/http/tests/serviceworker/postmessage-msgport-to-client.html |
@@ -0,0 +1,62 @@ |
+<!DOCTYPE html> |
+<title>Service Worker: postMessage to Client</title> |
+<script src="../resources/testharness.js"></script> |
+<script src="../resources/testharnessreport.js"></script> |
+<script src="resources/test-helpers.js"></script> |
+<script> |
+var t = async_test('postMessage MessagePorts from ServiceWorker to Client'); |
+t.step(function() { |
+ var scope = 'resources/blank.html' |
+ navigator.serviceWorker.unregister(scope).then( |
+ doRegister, |
+ unreached_rejection(t, 'Unregister should not fail') |
+ ); |
+ |
+ function doRegister() { |
+ navigator.serviceWorker.register( |
+ 'resources/postmessage-msgport-to-client-worker.js', {scope: scope} |
+ ).then( |
+ onRegister, |
+ unreached_rejection(t, 'Registration should succeed, but failed') |
+ ); |
+ } |
+ |
+ function onRegister(worker) { |
+ worker.addEventListener('statechange', t.step_func(function(event) { |
+ if (event.target.state == 'active') |
+ onActive(); |
+ })); |
+ } |
+ |
+ function onActive() { |
+ with_iframe(scope, t.step_func(function(frame) { |
+ var w = frame.contentWindow; |
+ w.onmessage = t.step_func(onMessage); |
+ w.navigator.serviceWorker.current.postMessage('ping'); |
+ })); |
+ } |
+ |
+ var result = []; |
+ var expected = [ |
+ 'Acking value: 1', |
+ 'Acking value: 2', |
+ ]; |
+ |
+ function onMessage(e) { |
+ var message = e.data; |
+ if ('port' in message) { |
+ port = message.port; |
+ port.postMessage({value: 1}); |
+ port.postMessage({value: 2}); |
+ port.postMessage({done: true}); |
+ } else if ('ack' in message) { |
+ result.push(message.ack); |
+ } else if ('done' in message) { |
+ assert_array_equals(result, expected, 'Worker should post back expected values via MessagePort.'); |
+ t.done(); |
+ } else { |
+ assert_unreached('Got unexpected message from ServiceWorker'); |
+ } |
+ } |
+}); |
+</script> |