summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/appmanifest/name-member/name-member-service-worker.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/appmanifest/name-member/name-member-service-worker.js')
-rw-r--r--testing/web-platform/tests/appmanifest/name-member/name-member-service-worker.js52
1 files changed, 52 insertions, 0 deletions
diff --git a/testing/web-platform/tests/appmanifest/name-member/name-member-service-worker.js b/testing/web-platform/tests/appmanifest/name-member/name-member-service-worker.js
new file mode 100644
index 0000000000..5733f35636
--- /dev/null
+++ b/testing/web-platform/tests/appmanifest/name-member/name-member-service-worker.js
@@ -0,0 +1,52 @@
+// Some user agents only offer app installation if there is a SW and it handles
+// offline requests.
+
+const cacheVersion = "1.2";
+const CACHE_NAME = `cache-v${cacheVersion}`;
+
+// The resources cached by this service worker.
+const resources = [
+ "name-member-manual.html",
+ "name-member-service-worker.js",
+ "resources/name-member-manual.js",
+ "resources/icon.png",
+];
+
+// Load all resources for this service worker.
+const precache = async () => {
+ const cache = await caches.open(CACHE_NAME);
+ await cache.addAll(resources);
+};
+
+// Get a resource from the cache.
+const fromCache = async request => {
+ const cache = await caches.open(CACHE_NAME);
+ return await cache.match(request.url);
+};
+
+// Attempt to get resources from the network first, fallback to the cache if we're
+// offline.
+const networkFallbackToCache = async request => {
+ try {
+ const response = await fetch(request);
+ if (response.ok) return response;
+ } catch (err) {}
+ return await fromCache(request);
+};
+
+// When we have a new service worker, update the caches and swap immediately.
+self.addEventListener("install", e => {
+ e.waitUntil(precache().then(() => self.skipWaiting()));
+});
+
+// Claim existing clients.
+self.addEventListener("activate", e => {
+ e.waitUntil(self.clients.claim());
+});
+
+// When a resource need to be fetched, check whether it is
+// contained in the cache and return the cached version, otherwise
+// get it from the network.
+self.addEventListener("fetch", e => {
+ e.respondWith(networkFallbackToCache(e.request));
+});