103 lines
2.3 KiB
JavaScript
103 lines
2.3 KiB
JavaScript
let value = "";
|
|
let fetch_url = "";
|
|
|
|
self.onfetch = function (e) {
|
|
fetch_url = e.request.url;
|
|
};
|
|
|
|
// Call clients.claim() to enable fetch event.
|
|
self.addEventListener("activate", e => {
|
|
e.waitUntil(self.clients.claim());
|
|
});
|
|
|
|
self.addEventListener("message", async e => {
|
|
let res = {};
|
|
|
|
switch (e.data.type) {
|
|
case "GetHWConcurrency":
|
|
res.result = "OK";
|
|
res.value = navigator.hardwareConcurrency;
|
|
break;
|
|
|
|
case "GetScriptValue":
|
|
res.result = "OK";
|
|
res.value = value;
|
|
break;
|
|
|
|
case "SetScriptValue":
|
|
res.result = "OK";
|
|
value = e.data.value;
|
|
break;
|
|
|
|
case "HasCache":
|
|
// Return if the cache storage exists or not.
|
|
try {
|
|
res.value = await caches.has(e.data.value);
|
|
res.result = "OK";
|
|
} catch (e) {
|
|
res.result = "ERROR";
|
|
}
|
|
break;
|
|
|
|
case "SetCache":
|
|
// Open a cache storage with the given name.
|
|
try {
|
|
let cache = await caches.open(e.data.value);
|
|
await cache.add("empty.js");
|
|
res.result = "OK";
|
|
} catch (e) {
|
|
res.result = "ERROR";
|
|
}
|
|
break;
|
|
|
|
case "SetIndexedDB":
|
|
await new Promise(resolve => {
|
|
let idxDB = indexedDB.open("test", 1);
|
|
|
|
idxDB.onupgradeneeded = evt => {
|
|
let db = evt.target.result;
|
|
db.createObjectStore("foobar", { keyPath: "id" });
|
|
};
|
|
|
|
idxDB.onsuccess = evt => {
|
|
let db = evt.target.result;
|
|
db
|
|
.transaction("foobar", "readwrite")
|
|
.objectStore("foobar")
|
|
.put({ id: 1, value: e.data.value }).onsuccess = _ => {
|
|
resolve();
|
|
};
|
|
};
|
|
});
|
|
res.result = "OK";
|
|
break;
|
|
|
|
case "GetIndexedDB":
|
|
res.value = await new Promise(resolve => {
|
|
let idxDB = indexedDB.open("test", 1);
|
|
|
|
idxDB.onsuccess = evt => {
|
|
let db = evt.target.result;
|
|
db.transaction("foobar").objectStore("foobar").get(1).onsuccess =
|
|
ee => {
|
|
resolve(
|
|
ee.target.result === undefined ? "" : ee.target.result.value
|
|
);
|
|
};
|
|
};
|
|
});
|
|
res.result = "OK";
|
|
break;
|
|
|
|
case "GetFetchURL":
|
|
res.value = fetch_url;
|
|
fetch_url = "";
|
|
res.result = "OK";
|
|
break;
|
|
|
|
default:
|
|
res.result = "ERROR";
|
|
}
|
|
|
|
e.source.postMessage(res);
|
|
});
|