Summary: This change improves our offline page. Mainly: - Remove Oops! wording as it may imply some error took place. - Remove the reload button. Automatic reload takes place at 2.5s intervals so this is unnecessary. Changelog: Improved offline page (reload button removal) Reviewed By: antonk52 Differential Revision: D46720650 fbshipit-source-id: 522f86d1a4d3d4b091672077cba1a26f898d19e8
71 lines
2.6 KiB
JavaScript
71 lines
2.6 KiB
JavaScript
/**
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
// OFFLINE_VERSION is used as an update marker so that on subsequent installations
|
|
// the newer version of the file gets updated.
|
|
// eslint-disable-next-line header/header, no-unused-vars
|
|
const OFFLINE_VERSION = 1.1;
|
|
const CACHE_NAME = 'offline';
|
|
const OFFLINE_URL = 'offline.html';
|
|
|
|
self.addEventListener('install', (event) => {
|
|
console.log('Flipper service worker installed');
|
|
|
|
event.waitUntil((async () => {
|
|
const cache = await caches.open(CACHE_NAME);
|
|
// Setting {cache: 'reload'} in the new request will ensure that the response
|
|
// isn't fulfilled from the HTTP cache; i.e., it will be from the network.
|
|
await cache.add(new Request(OFFLINE_URL, {cache: 'reload'}));
|
|
})());
|
|
// Force the waiting service worker to become the active service worker.
|
|
self.skipWaiting();
|
|
});
|
|
|
|
self.addEventListener('activate', (event) => {
|
|
console.log('Flipper service worker activate');
|
|
event.waitUntil((async () => {
|
|
// Enable navigation preload if it's supported.
|
|
// See https://developers.google.com/web/updates/2017/02/navigation-preload
|
|
if ('navigationPreload' in self.registration) {
|
|
await self.registration.navigationPreload.enable();
|
|
}
|
|
})());
|
|
|
|
// Tell the active service worker to take control of the page immediately.
|
|
self.clients.claim();
|
|
});
|
|
|
|
self.addEventListener('fetch', (event) => {
|
|
// We only want to call event.respondWith() if this is a navigation request
|
|
// for an HTML page.
|
|
if (event.request.mode === 'navigate') {
|
|
event.respondWith((async () => {
|
|
try {
|
|
// First, try to use the navigation preload response if it's supported.
|
|
const preloadResponse = await event.preloadResponse;
|
|
if (preloadResponse) {
|
|
return preloadResponse;
|
|
}
|
|
|
|
// Always try the network first (try flipper server)
|
|
const networkResponse = await fetch(event.request);
|
|
return networkResponse;
|
|
} catch (error) {
|
|
// Catch is only triggered if an exception is thrown, which is likely
|
|
// due to a network error.
|
|
// If fetch() returns a valid HTTP response with a response code in
|
|
// the 4xx or 5xx range, the catch() will NOT be called.
|
|
console.log('Fetch failed; returning offline page instead.', error);
|
|
|
|
const cache = await caches.open(CACHE_NAME);
|
|
const cachedResponse = await cache.match(OFFLINE_URL);
|
|
return cachedResponse;
|
|
}
|
|
})());
|
|
}
|
|
});
|