webapplate/webapplate

View on GitHub
public/js/service-worker.js

Summary

Maintainability
A
0 mins
Test Coverage
/*global caches, fetch*/
'use strict';
/**
 * Service worker script.
 *
 * http://www.html5rocks.com/en/tutorials/service-worker/introduction/
 * @class ServiceWorker
 */
var CACHE_NAME = 'cache';
// The files we want to cache
var urlsToCache = [
];

// Set the callback for the install step
self.addEventListener('install', function(event) {
  // Perform install steps
  event.waitUntil(caches.open(CACHE_NAME)
    .then(function(cache) {
      return cache.addAll(urlsToCache);
    })
  );
});

self.addEventListener('fetch', function(event) {
  event.respondWith(caches.match(event.request).then(function(response) {
    // Cache hit - return response
    if (response) {
      return response;
    }
    // return cache directly
    // return fetch(event.request);

    // cache new requests
    // 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 2 stream.
      var responseToCache = response.clone();
      caches.open(CACHE_NAME).then(function(cache) {
        cache.put(event.request, responseToCache);
      });
      return response;
    });
  }));
});