-
Notifications
You must be signed in to change notification settings - Fork 0
/
app-manager.js
91 lines (83 loc) · 1.81 KB
/
app-manager.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*global appManager: true*/
/*global Promise*/
appManager =
(function () {
"use strict";
var waitingQueries = {};
function sendQuery (type, args) {
var key, promise;
key = type + ':' + JSON.stringify(args);
if (waitingQueries[key]) {
return waitingQueries[key].promise;
}
promise = new Promise(function (fulfill, reject) {
waitingQueries[key] = {
promise: promise,
fulfill: fulfill,
reject: reject
};
navigator.serviceWorker.controller.postMessage({
key: key,
type: type,
args: args
});
});
return promise;
}
function initQueries () {
navigator.serviceWorker.addEventListener('message', function (e) {
var key = e.data.key;
if (waitingQueries[key]) {
if (e.data.success) {
waitingQueries[key].fulfill(e.data.result);
} else {
waitingQueries[key].reject(e.data.result);
}
delete waitingQueries[key];
}
});
}
function isCompatible () {
return !!navigator.serviceWorker;
}
function init () {
return new Promise(function (fulfill) {
navigator.serviceWorker.register('sw.js');
initQueries();
if (navigator.serviceWorker.controller) {
fulfill();
} else {
navigator.serviceWorker.addEventListener('controllerchange', function () {
if (navigator.serviceWorker.controller) {
fulfill();
}
});
}
});
}
return {
install: function (idOrUrl) {
return sendQuery('install', [idOrUrl]);
},
uninstall: function (id) {
return sendQuery('uninstall', [id]);
},
update: function (id) {
return sendQuery('update', [id]);
},
checkUpdate: function (id) {
return sendQuery('checkUpdate', [id]);
},
checkInstalled: function (id) {
return sendQuery('checkInstalled', [id]);
},
getList: function () {
return sendQuery('getList', []);
},
getUpdates: function () {
return sendQuery('getUpdates', []);
},
isCompatible: isCompatible,
init: init
};
})();