OLD | NEW |
| (Empty) |
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 }; | |
OLD | NEW |