diff --git a/src/vector/platform/VectorBasePlatform.js b/src/vector/platform/VectorBasePlatform.js index f24031f732..e60da1448d 100644 --- a/src/vector/platform/VectorBasePlatform.js +++ b/src/vector/platform/VectorBasePlatform.js @@ -85,10 +85,31 @@ export default class VectorBasePlatform extends BasePlatform { bgColor = "#f00"; } - this.favicon.badge(notif, { - bgColor: bgColor, - }); - } catch (e) { + const doUpdate = () => { + this.favicon.badge(notif, { + bgColor: bgColor, + }); + }; + + doUpdate(); + + // HACK: Workaround for Chrome 78+ and dependency incompatibility. + // The library we use doesn't appear to work in Chrome 78, likely due to their + // changes surrounding tab behaviour. Tabs went through a bit of a redesign and + // restructuring in Chrome 78, so it's not terribly surprising that the library + // doesn't work correctly. The library we use hasn't been updated in years and + // does not look easy to fix/fork ourselves - we might as well write our own that + // doesn't include animation/webcam/etc support. However, that's a bit difficult + // so for now we'll just trigger the update twice. + // + // Note that trying to reproduce the problem in isolation doesn't seem to work: + // see https://gist.github.com/turt2live/5ab87919918adbfd7cfb8f1ad10f2409 for + // an example (you'll need your own web server to host that). + if (!!window.chrome) { + doUpdate(); + } + } + catch (e) { console.warn(`Failed to set badge count: ${e.message}`); } }