fix: navigator.setAppBadge/clearAppBadge from a service worker (#27950)
This commit is contained in:
parent
d92bab0e29
commit
afb7d9f550
7 changed files with 202 additions and 26 deletions
31
spec/fixtures/pages/service-worker/badge-index.html
vendored
Normal file
31
spec/fixtures/pages/service-worker/badge-index.html
vendored
Normal 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>
|
33
spec/fixtures/pages/service-worker/service-worker-badge.js
vendored
Normal file
33
spec/fixtures/pages/service-worker/service-worker-badge.js
vendored
Normal 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);
|
||||
}
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue