You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
samples/web/slide_puzzle/flutter_service_worker.js

272 lines
13 KiB

'use strict';
const MANIFEST = 'flutter-app-manifest';
const TEMP = 'flutter-temp-cache';
const CACHE_NAME = 'flutter-app-cache';
const RESOURCES = {
"assets/NOTICES": "eaa1153c633fb6aa029336a0ddde55af",
"assets/assets/images/logo_flutter_white.png": "fe99d806f7819c9ef2d2c9a1dc350693",
"assets/assets/images/facebook_icon.png": "284d2a1d2782e5e24b1f9bce25f3ea9a",
"assets/assets/images/twitter_icon.png": "f9a8b83fc280f6a6363783cdbdd81573",
"assets/assets/images/simple_dash_large.png": "c3100434238b1fe0f6b8e6d074ccd80e",
"assets/assets/images/timer_icon.png": "284049eb59c25888ebe6ecf864728727",
"assets/assets/images/simple_dash_medium.png": "4e2fd9dee5fbd150653f06a83be3accf",
"assets/assets/images/logo_flutter_color.png": "496548be6768a0945cafe0cf7c12b389",
"assets/assets/images/audio_control/green_dashatar_off.png": "8aae7e7135d47a7536b2cca91d877c2a",
"assets/assets/images/audio_control/dashatar_on.png": "927040d878eeeb9c0700d50fac87674f",
"assets/assets/images/audio_control/blue_dashatar_off.png": "fb9cf31f68997341215e5484252350fe",
"assets/assets/images/audio_control/simple_off.png": "ecac9ec0e8dc5d526e204651b5e62dcc",
"assets/assets/images/audio_control/yellow_dashatar_off.png": "f1606e5fb255a5a48dbadc722a983060",
"assets/assets/images/audio_control/simple_on.png": "63e24186aec21d19e6f82f88d656a951",
"assets/assets/images/dashatar/gallery/yellow.png": "8529c74259d6963491ceda3a82a8df30",
"assets/assets/images/dashatar/gallery/blue.png": "0d11f20efc6570a048f7fdaaaf91fb01",
"assets/assets/images/dashatar/gallery/green.png": "56aabe4c6f02f0000fb00cf8d7a93544",
"assets/assets/images/dashatar/yellow/12.png": "aa572bdcf208950ba3ba18163843ce9b",
"assets/assets/images/dashatar/yellow/5.png": "004623c40322bfde14297f900e9fca9a",
"assets/assets/images/dashatar/yellow/6.png": "eccda62166e60dd38eb2f7e8e299ad6d",
"assets/assets/images/dashatar/yellow/10.png": "762f254e03a141c4f37f5266252e7fda",
"assets/assets/images/dashatar/yellow/13.png": "125ce26c7037c3ce1b5cc5612c6f45a4",
"assets/assets/images/dashatar/yellow/11.png": "06b5abb83556b27e419fd25b6379718d",
"assets/assets/images/dashatar/yellow/4.png": "242529bdbff47093644ae7c3294a5605",
"assets/assets/images/dashatar/yellow/9.png": "4871571dbf700aa442f0164de2741584",
"assets/assets/images/dashatar/yellow/8.png": "009119a3070bb1a26e1c0818416b9443",
"assets/assets/images/dashatar/yellow/7.png": "8f8ab4dc886aa6ab28ee3915cb253fef",
"assets/assets/images/dashatar/yellow/2.png": "27c9f436411e6fd5ae90747365567332",
"assets/assets/images/dashatar/yellow/14.png": "4305aad7dece1bf58563be4b1206462e",
"assets/assets/images/dashatar/yellow/3.png": "5819a2018af0001c722ab7bcc9dd68a8",
"assets/assets/images/dashatar/yellow/1.png": "f08b518484f7089f7efbd5b0fa582410",
"assets/assets/images/dashatar/yellow/15.png": "627fc0b4d5f7143d6054a12320e24ea3",
"assets/assets/images/dashatar/green/12.png": "3eb9c7dce99bbf25206d3528651fc342",
"assets/assets/images/dashatar/green/5.png": "70c96aa8481c1d899b70813a9ebe9464",
"assets/assets/images/dashatar/green/6.png": "70f369d4a89fc9ef9008d99299e23777",
"assets/assets/images/dashatar/green/10.png": "06b7f188768b1057a8e66347909f53ef",
"assets/assets/images/dashatar/green/13.png": "d64aff6c5f2a5aa8a2c5e4190c1664a1",
"assets/assets/images/dashatar/green/11.png": "cbde174349a89fb85b55d53f31fb113a",
"assets/assets/images/dashatar/green/4.png": "e44d562d1f26717216974e2604649dbb",
"assets/assets/images/dashatar/green/9.png": "4b652f03ed51359a4729dacb9a3f7479",
"assets/assets/images/dashatar/green/8.png": "4f238cb5b59b8d246f3b45d64fa4065e",
"assets/assets/images/dashatar/green/7.png": "33c182d78222e82fbc5ab27ab2f5c394",
"assets/assets/images/dashatar/green/2.png": "f253681e729a485077e089ea0f6af8f2",
"assets/assets/images/dashatar/green/14.png": "485fef2877b1e82ecf1e8c1fc76ce82b",
"assets/assets/images/dashatar/green/3.png": "026e60505858e27f4c38667ab345b5b7",
"assets/assets/images/dashatar/green/1.png": "1aaa0fc741c524e9072308c3a791783c",
"assets/assets/images/dashatar/green/15.png": "dd8360ee77b91eb98590d38fe242f574",
"assets/assets/images/dashatar/success/yellow.png": "463f9b0eddcae6089e8fd33f3ded3164",
"assets/assets/images/dashatar/success/blue.png": "993266c9723f234300d052cd4fda43d1",
"assets/assets/images/dashatar/success/green.png": "7c284d7b36bb5388c4d87b1dd5cf3f88",
"assets/assets/images/dashatar/blue/12.png": "f5c7df6eeb615606ec8a0824cf5edc01",
"assets/assets/images/dashatar/blue/5.png": "bf5a87a649c90a2063fcee6cc1d2bcfe",
"assets/assets/images/dashatar/blue/6.png": "6f15995595827885e26620f0d28edaff",
"assets/assets/images/dashatar/blue/10.png": "4a8b897b54605febe3e52fc4e4af7be2",
"assets/assets/images/dashatar/blue/13.png": "c0c339eb522ed4ee91842291b86bc083",
"assets/assets/images/dashatar/blue/11.png": "7cc92a508afb5f8f11398623dc87b13d",
"assets/assets/images/dashatar/blue/4.png": "2db99be298e081eb8e005c1c607ec855",
"assets/assets/images/dashatar/blue/9.png": "a69e1869147b271c707255945b79b327",
"assets/assets/images/dashatar/blue/8.png": "cd05b0e2b93549f4aac372874658161e",
"assets/assets/images/dashatar/blue/7.png": "33a6c0c5e4e019fba561e399494d4df8",
"assets/assets/images/dashatar/blue/2.png": "f3175c4deda4e4da7b89fd70f4d47b20",
"assets/assets/images/dashatar/blue/14.png": "b3930b781f602a18fecbc287eb8de536",
"assets/assets/images/dashatar/blue/3.png": "d3fe8adeec6576a60714495345c71536",
"assets/assets/images/dashatar/blue/1.png": "05d5a28959eb68afdc257d86f81df8df",
"assets/assets/images/dashatar/blue/15.png": "a7d13e26458a3945df47c5f867d91399",
"assets/assets/images/simple_dash_small.png": "b3f2ec92db7be8297f529f94d8e38136",
"assets/assets/images/shuffle_icon.png": "32ebb4a7c6f9b07157a57f537f254619",
"assets/assets/fonts/GoogleSans-Regular.ttf": "51134713ade7b1f137e06ce395d39d40",
"assets/assets/fonts/GoogleSans-Italic.ttf": "b08c7421b2d5350ea3003c8f38932601",
"assets/assets/fonts/GoogleSans-BoldItalic.ttf": "aebc8fe5e393970fa3d468524e64b670",
"assets/assets/fonts/GoogleSans-Bold.ttf": "c0370e8a74992bab73461f8348e3b369",
"assets/assets/audio/dumbbell.mp3": "aa341eb857b4fd972767430aa5babb30",
"assets/assets/audio/shuffle.mp3": "0ac82d67f08b71d43046256dbc2db12d",
"assets/assets/audio/skateboard.mp3": "13e460479dc92b0ff1574d35a5204392",
"assets/assets/audio/click.mp3": "7b257864b73a219a79572b785910e685",
"assets/assets/audio/success.mp3": "746679b7331cf687df94188b40ff6f67",
"assets/assets/audio/tile_move.mp3": "f4056eec1581ee5264ab8f481a59d5d3",
"assets/assets/audio/sandwich.mp3": "5a3cf659842b0db22ab9495ea2cdc80a",
"assets/FontManifest.json": "a6a35a39ab693849dcde3aba2d4304a7",
"assets/AssetManifest.json": "1b1637a32286fee38b7df3f3ce2da987",
"assets/fonts/MaterialIcons-Regular.otf": "7e7a6cccddf6d7b20012a548461d5d81",
"manifest.json": "c58884a2d51c23985850658029a90226",
"index.html": "5b18241247a74a0f08a034af03853267",
"/": "5b18241247a74a0f08a034af03853267",
"icons/Icon-192.png": "12d05db1c0b26d429b54e3f8c946a496",
"icons/favicon.png": "7a26ea9d4e61122fc023b84e5acdb148",
"icons/Icon-512.png": "aabba36693aba0ec8d954adf297d3125",
"canvaskit/canvaskit.js": "c2b4e5f3d7a3d82aed024e7249a78487",
"canvaskit/canvaskit.wasm": "4b83d89d9fecbea8ca46f2f760c5a9ba",
"canvaskit/profiling/canvaskit.js": "ae2949af4efc61d28a4a80fffa1db900",
"canvaskit/profiling/canvaskit.wasm": "95e736ab31147d1b2c7b25f11d4c32cd",
"main.dart.js": "7f64a17e6764e8896b44e1edcf323cc6",
"favicon.png": "7a26ea9d4e61122fc023b84e5acdb148",
"version.json": "edac6610d63f93aebfb1c09a76230248"
};
// The application shell files that are downloaded before a service worker can
// start.
const CORE = [
"/",
"main.dart.js",
"index.html",
"assets/NOTICES",
"assets/AssetManifest.json",
"assets/FontManifest.json"];
// During install, the TEMP cache is populated with the application shell files.
self.addEventListener("install", (event) => {
self.skipWaiting();
return event.waitUntil(
caches.open(TEMP).then((cache) => {
return cache.addAll(
CORE.map((value) => new Request(value, {'cache': 'reload'})));
})
);
});
// During activate, the cache is populated with the temp files downloaded in
// install. If this service worker is upgrading from one with a saved
// MANIFEST, then use this to retain unchanged resource files.
self.addEventListener("activate", function(event) {
return event.waitUntil(async function() {
try {
var contentCache = await caches.open(CACHE_NAME);
var tempCache = await caches.open(TEMP);
var manifestCache = await caches.open(MANIFEST);
var manifest = await manifestCache.match('manifest');
// When there is no prior manifest, clear the entire cache.
if (!manifest) {
await caches.delete(CACHE_NAME);
contentCache = await caches.open(CACHE_NAME);
for (var request of await tempCache.keys()) {
var response = await tempCache.match(request);
await contentCache.put(request, response);
}
await caches.delete(TEMP);
// Save the manifest to make future upgrades efficient.
await manifestCache.put('manifest', new Response(JSON.stringify(RESOURCES)));
return;
}
var oldManifest = await manifest.json();
var origin = self.location.origin;
for (var request of await contentCache.keys()) {
var key = request.url.substring(origin.length + 1);
if (key == "") {
key = "/";
}
// If a resource from the old manifest is not in the new cache, or if
// the MD5 sum has changed, delete it. Otherwise the resource is left
// in the cache and can be reused by the new service worker.
if (!RESOURCES[key] || RESOURCES[key] != oldManifest[key]) {
await contentCache.delete(request);
}
}
// Populate the cache with the app shell TEMP files, potentially overwriting
// cache files preserved above.
for (var request of await tempCache.keys()) {
var response = await tempCache.match(request);
await contentCache.put(request, response);
}
await caches.delete(TEMP);
// Save the manifest to make future upgrades efficient.
await manifestCache.put('manifest', new Response(JSON.stringify(RESOURCES)));
return;
} catch (err) {
// On an unhandled exception the state of the cache cannot be guaranteed.
console.error('Failed to upgrade service worker: ' + err);
await caches.delete(CACHE_NAME);
await caches.delete(TEMP);
await caches.delete(MANIFEST);
}
}());
});
// The fetch handler redirects requests for RESOURCE files to the service
// worker cache.
self.addEventListener("fetch", (event) => {
if (event.request.method !== 'GET') {
return;
}
var origin = self.location.origin;
var key = event.request.url.substring(origin.length + 1);
// Redirect URLs to the index.html
if (key.indexOf('?v=') != -1) {
key = key.split('?v=')[0];
}
if (event.request.url == origin || event.request.url.startsWith(origin + '/#') || key == '') {
key = '/';
}
// If the URL is not the RESOURCE list then return to signal that the
// browser should take over.
if (!RESOURCES[key]) {
return;
}
// If the URL is the index.html, perform an online-first request.
if (key == '/') {
return onlineFirst(event);
}
event.respondWith(caches.open(CACHE_NAME)
.then((cache) => {
return cache.match(event.request).then((response) => {
// Either respond with the cached resource, or perform a fetch and
// lazily populate the cache.
return response || fetch(event.request).then((response) => {
cache.put(event.request, response.clone());
return response;
});
})
})
);
});
self.addEventListener('message', (event) => {
// SkipWaiting can be used to immediately activate a waiting service worker.
// This will also require a page refresh triggered by the main worker.
if (event.data === 'skipWaiting') {
self.skipWaiting();
return;
}
if (event.data === 'downloadOffline') {
downloadOffline();
return;
}
});
// Download offline will check the RESOURCES for all files not in the cache
// and populate them.
async function downloadOffline() {
var resources = [];
var contentCache = await caches.open(CACHE_NAME);
var currentContent = {};
for (var request of await contentCache.keys()) {
var key = request.url.substring(origin.length + 1);
if (key == "") {
key = "/";
}
currentContent[key] = true;
}
for (var resourceKey of Object.keys(RESOURCES)) {
if (!currentContent[resourceKey]) {
resources.push(resourceKey);
}
}
return contentCache.addAll(resources);
}
// Attempt to download the resource online before falling back to
// the offline cache.
function onlineFirst(event) {
return event.respondWith(
fetch(event.request).then((response) => {
return caches.open(CACHE_NAME).then((cache) => {
cache.put(event.request, response.clone());
return response;
});
}).catch((error) => {
return caches.open(CACHE_NAME).then((cache) => {
return cache.match(event.request).then((response) => {
if (response != null) {
return response;
}
throw error;
});
});
})
);
}