Upstream version 10.38.222.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / http / tests / serviceworker / resources / install-phase-event-waituntil.js
1 var pendingPorts = [];
2 var portResolves = [];
3
4 onmessage = function(e) {
5     var message = e.data;
6     if ('port' in message) {
7         var resolve = self.portResolves.shift();
8         if (resolve)
9             resolve(message.port);
10         else
11             self.pendingPorts.push(message.port);
12     }
13 };
14
15 function fulfillPromise() {
16     return new Promise(function(resolve) {
17         // Make sure the oninstall/onactivate callback returns first.
18         Promise.resolve().then(function() {
19             var port = self.pendingPorts.shift();
20             if (port)
21                 resolve(port);
22             else
23                 self.portResolves.push(resolve);
24         });
25     }).then(function(port) {
26         port.postMessage('SYNC');
27         return new Promise(function(resolve) {
28             port.onmessage = function(e) {
29                 if (e.data == 'ACK')
30                     resolve();
31             };
32         });
33     });
34 }
35
36 function rejectPromise() {
37     return new Promise(function(resolve, reject) {
38         // Make sure the oninstall/onactivate callback returns first.
39         Promise.resolve().then(reject);
40     });
41 }
42
43 function stripScopeName(scope) {
44     return scope.split('/').slice(-1)[0];
45 }
46
47 oninstall = function(e) {
48     switch (stripScopeName(self.scope)) {
49         case 'install-fulfilled':
50             e.waitUntil(fulfillPromise());
51             break;
52         case 'install-rejected':
53             e.waitUntil(rejectPromise());
54             break;
55     }
56 };
57
58 onactivate = function(e) {
59     switch (stripScopeName(self.scope)) {
60         case 'activate-fulfilled':
61             e.waitUntil(fulfillPromise());
62             break;
63         case 'activate-rejected':
64             e.waitUntil(rejectPromise());
65             break;
66         case 'activate-multiple-fulfilled':
67             e.waitUntil(fulfillPromise());
68             e.waitUntil(fulfillPromise());
69             break;
70         case 'activate-reject-precedence':
71             e.waitUntil(fulfillPromise());
72             e.waitUntil(rejectPromise());
73             break;
74     }
75 };