Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / http / tests / serviceworker / postmessage-msgport-to-client.html
1 <!DOCTYPE html>
2 <title>Service Worker: postMessage to Client</title>
3 <script src="../resources/testharness.js"></script>
4 <script src="../resources/testharnessreport.js"></script>
5 <script src="resources/test-helpers.js"></script>
6 <script>
7 var t = async_test('postMessage MessagePorts from ServiceWorker to Client');
8 t.step(function() {
9     var scope = 'resources/blank.html'
10     navigator.serviceWorker.unregister(scope).then(
11         doRegister,
12         unreached_rejection(t, 'Unregister should not fail')
13     );
14
15     function doRegister() {
16         navigator.serviceWorker.register(
17             'resources/postmessage-msgport-to-client-worker.js', {scope: scope}
18         ).then(
19             onRegister,
20             unreached_rejection(t, 'Registration should succeed, but failed')
21         );
22     }
23
24     function onRegister(worker) {
25         worker.addEventListener('statechange', t.step_func(function(event) {
26             if (event.target.state == 'active')
27                 onActive();
28         }));
29     }
30
31     function onActive() {
32         with_iframe(scope, t.step_func(function(frame) {
33             var w = frame.contentWindow;
34             w.onmessage = t.step_func(onMessage);
35             w.navigator.serviceWorker.current.postMessage('ping');
36         }));
37     }
38
39     var result = [];
40     var expected = [
41         'Acking value: 1',
42         'Acking value: 2',
43     ];
44
45     function onMessage(e) {
46         var message = e.data;
47         if ('port' in message) {
48             var port = message.port;
49             port.postMessage({value: 1});
50             port.postMessage({value: 2});
51             port.postMessage({done: true});
52         } else if ('ack' in message) {
53             result.push(message.ack);
54         } else if ('done' in message) {
55             assert_array_equals(result, expected, 'Worker should post back expected values via MessagePort.');
56             t.done();
57         } else {
58             assert_unreached('Got unexpected message from ServiceWorker');
59         }
60     }
61 });
62 </script>