Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / http / tests / serviceworker / postmessage.html
1 <!DOCTYPE html>
2 <title>Service Worker: postMessage</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 async_test(function(t) {
8     var scope = 'resources/blank.html';
9     var registration;
10     var worker;
11     service_worker_unregister_and_register(
12         t, 'resources/postmessage-worker.js', scope)
13       .then(function(r) {
14           registration = r;
15           return get_newest_worker(registration);
16         })
17       .then(function(sw) {
18           worker = sw;
19           var messageChannel = new MessageChannel();
20           messageChannel.port1.onmessage = t.step_func(onMessage);
21           sw.postMessage({port: messageChannel.port2}, [messageChannel.port2]);
22           sw.postMessage({value: 1});
23           sw.postMessage({value: 2});
24           sw.postMessage({done: true});
25         })
26       .catch(unreached_rejection(t));
27
28     var result = [];
29     var expected = [
30       'Acking value: 1',
31       'Acking value: 2',
32     ];
33
34     function onMessage(e) {
35       var message = e.data;
36       if (message === 'quit') {
37         assert_array_equals(result, expected,
38                             'Worker should post back expected values.');
39         postMessageToRedundantWorker();
40       } else {
41         result.push(message);
42       }
43     };
44
45     function postMessageToRedundantWorker() {
46       registration.unregister(scope)
47         .then(function() {
48             return wait_for_state(t, worker, 'redundant');
49           })
50         .then(function() {
51             assert_equals(worker.state, 'redundant');
52             assert_throws(
53               {name:'InvalidStateError'},
54               function() { worker.postMessage(''); },
55               'Calling postMessage on a redundant ServiceWorker should ' +
56                   'throw InvalidStateError.');
57             t.done();
58           })
59         .catch(unreached_rejection(t));
60     }
61   }, 'postMessage to a ServiceWorker (and back via MessagePort)');
62 </script>