fix: navigator.setAppBadge/clearAppBadge from a service worker (#27950)

This commit is contained in:
John Kleinschmidt 2021-03-04 20:12:03 -05:00 committed by GitHub
parent d92bab0e29
commit afb7d9f550
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 202 additions and 26 deletions

View file

@ -0,0 +1,31 @@
<script>
const ipcRenderer = require('electron').ipcRenderer;
let search = (new URL(document.location)).search;
async function testIt() {
if (search === '?clearBadge') {
try {
await navigator.setAppBadge(42);
ipcRenderer.send('setAppBadge','SUCCESS setting app badge');
} catch (error) {
ipcRenderer.send('error', `${error.message}\n${error.stack}`);
}
}
navigator.serviceWorker.register('service-worker-badge.js', {scope: './'}).then(function() {
if (navigator.serviceWorker.controller) {
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://dummy/echo'+search);
xhr.setRequestHeader('X-Mock-Response', 'yes');
xhr.addEventListener('load', function() {
ipcRenderer.send('response', xhr.responseText);
});
xhr.send();
} else {
ipcRenderer.send('reload');
}
}).catch(function(error) {
ipcRenderer.send('error', `${error.message}\n${error.stack}`);
})
}
testIt();
</script>

View file

@ -0,0 +1,33 @@
self.addEventListener('fetch', async function (event) {
const requestUrl = new URL(event.request.url);
let responseTxt;
if (requestUrl.pathname === '/echo' &&
event.request.headers.has('X-Mock-Response')) {
if (requestUrl.search === '?setBadge') {
if (navigator.setAppBadge()) {
try {
await navigator.setAppBadge(42);
responseTxt = 'SUCCESS setting app badge';
await navigator.clearAppBadge();
} catch (ex) {
responseTxt = 'ERROR setting app badge ' + ex;
}
} else {
responseTxt = 'ERROR navigator.setAppBadge is not available in ServiceWorker!';
}
} else if (requestUrl.search === '?clearBadge') {
if (navigator.clearAppBadge()) {
try {
await navigator.clearAppBadge();
responseTxt = 'SUCCESS clearing app badge';
} catch (ex) {
responseTxt = 'ERROR clearing app badge ' + ex;
}
} else {
responseTxt = 'ERROR navigator.clearAppBadge is not available in ServiceWorker!';
}
}
const mockResponse = new Response(responseTxt);
event.respondWith(mockResponse);
}
});