0
0
Fork 0

fix(web_push_notification): Do not hard reload tab (#4380)

* fix(web_push_notification): Do not hard reload tab

* fix(web_push_notification_worker): Guard against null subscription

* refactor: Incorporate pull request feedback
This commit is contained in:
Sorin Davidoi 2017-07-28 05:06:01 +02:00 committed by Eugen Rochko
parent 0f92119ceb
commit 3e01a7e677
2 changed files with 41 additions and 10 deletions

View file

@ -50,22 +50,37 @@ const makeRequest = (notification, action) =>
credentials: 'include',
});
const findBestClient = clients => {
const focusedClient = clients.find(client => client.focused);
const visibleClient = clients.find(client => client.visibilityState === 'visible');
return focusedClient || visibleClient || clients[0];
};
const openUrl = url =>
self.clients.matchAll({ type: 'window' }).then(clientList => {
if (clientList.length !== 0 && 'navigate' in clientList[0]) { // Chrome 42-48 does not support navigate
const webClients = clientList
.filter(client => /\/web\//.test(client.url))
.sort(client => client !== 'visible');
if (clientList.length !== 0) {
const webClients = clientList.filter(client => /\/web\//.test(client.url));
const visibleClient = clientList.find(client => client.visibilityState === 'visible');
const focusedClient = clientList.find(client => client.focused);
if (webClients.length !== 0) {
const client = findBestClient(webClients);
const client = webClients[0] || visibleClient || focusedClient || clientList[0];
const { pathname } = new URL(url);
return client.navigate(url).then(client => client.focus());
} else {
return self.clients.openWindow(url);
if (pathname.startsWith('/web/')) {
return client.focus().then(client => client.postMessage({
type: 'navigate',
path: pathname.slice('/web/'.length - 1),
}));
}
} else if ('navigate' in clientList[0]) { // Chrome 42-48 does not support navigate
const client = findBestClient(clientList);
return client.navigate(url).then(client => client.focus());
}
}
return self.clients.openWindow(url);
});
const removeActionFromNotification = (notification, action) => {