var APP_NAME = 'breaklock', APP_VERSION = 12, CACHE_NAME = APP_NAME + '_' + APP_VERSION; var filesToCache = [ './', './?utm_source=homescreen', './app.css', './app.js', './assets/intro.svg', './assets/fonts/robotomono-light-webfont.woff2', './assets/fonts/robotomono-light-webfont.woff', './assets/fonts/robotomono-light-webfont.ttf' ]; // Service worker from Google Documentation self.addEventListener('install', function(event) { // Perform install steps event.waitUntil( caches.open(CACHE_NAME) .then(function(cache) { return cache.addAll(filesToCache); }) ); }); self.addEventListener('activate', function(event) { event.waitUntil( caches.keys().then(function(cacheNames) { return Promise.all( cacheNames.map(function(cacheName) { if (cacheName.indexOf(APP_NAME) === 0 && CACHE_NAME !== cacheName) { return caches.delete(cacheName); } }) ); }) ); }); self.addEventListener('fetch', function(event) { event.respondWith( caches.match(event.request) .then(function(response) { // Cache hit - return response if (response) { return response; } // IMPORTANT: Clone the request. A request is a stream and // can only be consumed once. Since we are consuming this // once by cache and once by the browser for fetch, we need // to clone the response. var fetchRequest = event.request.clone(); return fetch(fetchRequest).then( function(response) { // Check if we received a valid response if(!response || response.status !== 200 || response.type !== 'basic') { return response; } // IMPORTANT: Clone the response. A response is a stream // and because we want the browser to consume the response // as well as the cache consuming the response, we need // to clone it so we have two streams. var responseToCache = response.clone(); caches.open(CACHE_NAME) .then(function(cache) { cache.put(event.request, responseToCache); }); return response; } ); }) ); });