From 178d8ef5277463190587ce878c9d113c205b120e Mon Sep 17 00:00:00 2001 From: vivek singh Date: Tue, 9 Feb 2021 14:48:10 +0530 Subject: [PATCH 1/3] fixed registration problem of service worker --- examples/lib/cache.js | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/examples/lib/cache.js b/examples/lib/cache.js index a402e30339..d14e7e96d8 100644 --- a/examples/lib/cache.js +++ b/examples/lib/cache.js @@ -29,24 +29,19 @@ var setupCache = function() { if(navigator.serviceWorker.controller) { // New service worker available; prompt the user to update. showUpdateModal(); + $('#reload').on('click',(e) => { + e.preventDefault(); + console.log('New Service Worker Installed Successfully'); + location.reload(); + }) } // No updates available; do nothing. break; } - }); - }); - - const installingWorker = registration.installing; - installingWorker.onstatechange = () => { - console.log(installingWorker); - if (installingWorker.state === 'installed') { - location.reload(); - } - }; - console.log('Registration successful, scope is:', registration.scope); - }) - .catch(function(error) { - console.log('Service worker registration failed, error:', error); + }) + }) + }).catch(err => { + console.log('Failed In Registering Service Worker: ',err); }); /** @@ -80,10 +75,6 @@ var setupCache = function() { location.reload(); }); - - - - }; module.exports = setupCache; From e8be77f0bc251aa5496edf4bab5d6212d673be6d Mon Sep 17 00:00:00 2001 From: vivek singh Date: Fri, 12 Feb 2021 18:00:42 +0530 Subject: [PATCH 2/3] added a test for service worker --- examples/lib/cache.js | 2 +- test/core/sequencer/sw.js | 72 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 test/core/sequencer/sw.js diff --git a/examples/lib/cache.js b/examples/lib/cache.js index d14e7e96d8..1f4131803e 100644 --- a/examples/lib/cache.js +++ b/examples/lib/cache.js @@ -1,6 +1,6 @@ var setupCache = function() { let newWorker; // When sw.js is changed, this is the new service worker generated. - + // Toggle a CSS class to display a popup prompting the user to fetch a new version. function showUpdateModal() { $('#update-prompt-modal').addClass('show'); diff --git a/test/core/sequencer/sw.js b/test/core/sequencer/sw.js new file mode 100644 index 0000000000..7260eed213 --- /dev/null +++ b/test/core/sequencer/sw.js @@ -0,0 +1,72 @@ +var sw = require('../../examples/sw'); +var test = require('tape'); + +function SWInstallation(registration){ + return new Promise((resolve, reject) => { + let newWorker = registration.installing; + + if (!newWorker) { + return reject(new Error('error in installing service worker')); + } + + function checkState(e){ + if (e.target.state === 'activated') { + newWorker.removeEventList('statechange',checkState); + return resolve(); + } + + if (e.target.state === 'redundant') { + newWorker.removeEventListener('statechange',checkState); + + return reject(new Error('installing new service worker now became redundant')); + } + }; + + newWorker.addEventListener('statechange',checkState); + }); +} + +function UnRegisterSW(){ + + function unregister() { + return navigator.serviceWorker.getRegistrations() + .then(function(registrations) { + var unRegisteredWorker = registrations.map(function(registration) { + return registration.unregister(); + }); + return Promise.all(unRegisteredWorker); + }); + } + + function clearCaches() { + return caches.keys() + .then(function(cache) { + return Promise.all(cache.map(function(cacheItem) { + return caches.delete(cacheItem); + })); + }); + }; + + return Promise.all([ + unregister(), + clearCaches(), + ]); +} + +function InstallSw(){ + return navigator.serviceWorker.register(sw) + .then(reg => { + return SWInstallation(reg); + }) +} + +test('Register service worker',function(t) { + + t.test('unregister service worker',function(st) { + st.equal(UnRegisterSW(),true,'unregistered successfully and cleared the cache') + }) + + t.test('install service worker',function(st) { + st.equal(InstallSw(),true,'successfully installed new worker') + }); +}); From 835b60fb6c0a613fdf31627e306925b965f47f90 Mon Sep 17 00:00:00 2001 From: vivek singh Date: Sun, 14 Feb 2021 09:08:39 +0530 Subject: [PATCH 3/3] reused some existing code to avoid code duplication --- examples/lib/cache.js | 26 +++++++++++++++++----- test/core/sequencer/sw.js | 47 +++++---------------------------------- 2 files changed, 27 insertions(+), 46 deletions(-) diff --git a/examples/lib/cache.js b/examples/lib/cache.js index 1f4131803e..969ea3c627 100644 --- a/examples/lib/cache.js +++ b/examples/lib/cache.js @@ -1,3 +1,5 @@ +const { reject } = require("lodash"); + var setupCache = function() { let newWorker; // When sw.js is changed, this is the new service worker generated. @@ -22,6 +24,11 @@ var setupCache = function() { registration.addEventListener('updatefound', () => { // When sw.js has been changed, get a reference to the new service worker. newWorker = registration.installing; + + if(!newWorker){ + return reject(new Error('error in installing service worker')); + } + newWorker.addEventListener('statechange', () => { // Check if service worker state has changed. switch(newWorker.state) { @@ -33,10 +40,14 @@ var setupCache = function() { e.preventDefault(); console.log('New Service Worker Installed Successfully'); location.reload(); + return resolve(); }) } // No updates available; do nothing. break; + + case 'redundant': + return reject(new Error('installing new service worker now became redundant')); } }) }) @@ -64,14 +75,19 @@ var setupCache = function() { }); } - $('#clear-cache').click(function() { + const clearCache = () => { if ('serviceWorker' in navigator) { - caches.keys().then(function(cacheNames) { - cacheNames.forEach(function(cacheName) { - caches.delete(cacheName); - }); + return caches.keys() + .then(function(cache) { + return Promise.all(cache.map(function(cacheItem) { + return caches.delete(cacheItem); + })); }); } + } + + $('#clear-cache').click(function() { + clearCache(); location.reload(); }); diff --git a/test/core/sequencer/sw.js b/test/core/sequencer/sw.js index 7260eed213..42bd900e67 100644 --- a/test/core/sequencer/sw.js +++ b/test/core/sequencer/sw.js @@ -1,28 +1,9 @@ -var sw = require('../../examples/sw'); +var setUpCache = new require('../../../examples/lib/cache')(); var test = require('tape'); -function SWInstallation(registration){ - return new Promise((resolve, reject) => { - let newWorker = registration.installing; - - if (!newWorker) { - return reject(new Error('error in installing service worker')); - } - - function checkState(e){ - if (e.target.state === 'activated') { - newWorker.removeEventList('statechange',checkState); - return resolve(); - } - - if (e.target.state === 'redundant') { - newWorker.removeEventListener('statechange',checkState); - - return reject(new Error('installing new service worker now became redundant')); - } - }; - - newWorker.addEventListener('statechange',checkState); +function SWInstallation(){ + return new Promise(() => { + return setupCache(); }); } @@ -38,28 +19,12 @@ function UnRegisterSW(){ }); } - function clearCaches() { - return caches.keys() - .then(function(cache) { - return Promise.all(cache.map(function(cacheItem) { - return caches.delete(cacheItem); - })); - }); - }; - return Promise.all([ unregister(), - clearCaches(), + setUpCache.clearCache() ]); } -function InstallSw(){ - return navigator.serviceWorker.register(sw) - .then(reg => { - return SWInstallation(reg); - }) -} - test('Register service worker',function(t) { t.test('unregister service worker',function(st) { @@ -67,6 +32,6 @@ test('Register service worker',function(t) { }) t.test('install service worker',function(st) { - st.equal(InstallSw(),true,'successfully installed new worker') + st.equal(SWInstallation(),true,'successfully installed new service worker') }); });