Upstream version 10.38.222.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / http / tests / serviceworker / install-phase-event-waituntil.html
1 <!DOCTYPE html>
2 <title>InstallPhaseEvent: waitUntil</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 function runTest(test, scope, onRegister) {
8   var script = 'resources/install-phase-event-waituntil.js';
9   test.step(function() {
10       service_worker_unregister_and_register(test, script, scope)
11         .then(function(registration) {
12             return wait_for_update(test, registration);
13           })
14         .then(test.step_func(onRegister));
15     });
16 }
17
18 function syncWorker(test, worker, obj) {
19   var channel = new MessageChannel();
20   channel.port1.onmessage = test.step_func(function(e) {
21       var message = e.data;
22       assert_equals(message, 'SYNC',
23                     'Should receive sync message from worker.');
24       obj.synced = true;
25       channel.port1.postMessage('ACK');
26     });
27   worker.postMessage({port: channel.port2}, [channel.port2]);
28 }
29
30 async_test(function(t) {
31     // Passing scope as the test switch for worker script.
32     var scope = 'install-fulfilled';
33     var onRegister = function(worker) {
34         var obj = {};
35         worker.onstatechange = t.step_func(function() {
36             if (worker.state == 'installing') {
37               syncWorker(t, worker, obj);
38             } else if (worker.state == 'installed') {
39               assert_true(
40                   obj.synced,
41                   'state should be "installed" after the waitUntil promise ' +
42                       'for "oninstall" is fulfilled.');
43               service_worker_unregister_and_done(t, scope);
44             }
45           });
46       };
47     runTest(t, scope, onRegister);
48   }, 'Test install event waitUntil fulfilled');
49
50 async_test(function(t) {
51     var scope = 'activate-fulfilled';
52     var onRegister = function(worker) {
53         var obj = {};
54         worker.onstatechange = t.step_func(function() {
55             if (worker.state == 'activating') {
56               syncWorker(t, worker, obj);
57             } else if (worker.state == 'activated') {
58               assert_true(
59                   obj.synced,
60                   'state should be "activated" after the waitUntil promise ' +
61                       'for "onactivate" is fulfilled.');
62               service_worker_unregister_and_done(t, scope);
63             }
64           });
65       };
66     runTest(t, scope, onRegister);
67   }, 'Test activate event waitUntil fulfilled');
68
69 async_test(function(t) {
70     var scope = 'install-rejected';
71     var onRegister = function(worker) {
72         worker.onstatechange = t.step_func(function() {
73             if (worker.state == 'redundant')
74               service_worker_unregister_and_done(t, scope);
75           });
76       };
77     runTest(t, scope, onRegister);
78   }, 'Test install event waitUntil rejected');
79
80 async_test(function(t) {
81     var scope = 'activate-rejected';
82     var onRegister = function(worker) {
83         worker.onstatechange = t.step_func(function() {
84             if (worker.state == 'redundant')
85               service_worker_unregister_and_done(t, scope);
86           });
87       };
88     runTest(t, scope, onRegister);
89   }, 'Test activate event waitUntil rejected.');
90
91 async_test(function(t) {
92     var scope = 'activate-multiple-fulfilled';
93     var onRegister = function(worker) {
94         var obj1 = {};
95         var obj2 = {};
96         worker.onstatechange = t.step_func(function() {
97             if (worker.state == 'activating') {
98               syncWorker(t, worker, obj1);
99               syncWorker(t, worker, obj2);
100             } else if (worker.state == 'activated') {
101               assert_true(
102                   obj1.synced && obj2.synced,
103                   'state should be "activated" after all waitUnitl promises ' +
104                       'for "onactivate" are fulfilled.');
105               service_worker_unregister_and_done(t, scope);
106             }
107           });
108       };
109     runTest(t, scope, onRegister);
110   }, 'Test InstallPhaseEvent multiple waitUntil fulfilled.');
111
112 async_test(function(t) {
113     var scope = 'activate-reject-precedence';
114     var onRegister = function(worker) {
115         worker.onstatechange = t.step_func(function() {
116             if (worker.state == 'redundant')
117               service_worker_unregister_and_done(t, scope);
118           });
119       };
120     runTest(t, scope, onRegister);
121   }, 'Test InstallPhaseEvent waitUntil reject precedence.');
122 </script>