Skip to content

Commit

Permalink
Delay creating the Favico instance
Browse files Browse the repository at this point in the history
This avoids a canvas permission prompt from appearing on page load for users in
Firefox's resist fingerprinting mode. The prompt will still happen once you log
in and receive a notification, but at least this prevents it from happening
during the initial app experience.

Fixes #9605
  • Loading branch information
jryans committed May 2, 2019
1 parent 989b755 commit d4de7f5
Showing 1 changed file with 18 additions and 7 deletions.
25 changes: 18 additions & 7 deletions src/vector/platform/VectorBasePlatform.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,7 @@ export default class VectorBasePlatform extends BasePlatform {
constructor() {
super();

// The 'animations' are really low framerate and look terrible.
// Also it re-starts the animation every time you set the badge,
// and we set the state each time, even if the value hasn't changed,
// so we'd need to fix that if enabling the animation.
this.favicon = new Favico({animation: 'none'});
this.showUpdateCheck = false;
this._updateFavicon();

this.startUpdateCheck = this.startUpdateCheck.bind(this);
this.stopUpdateCheck = this.stopUpdateCheck.bind(this);
}
Expand All @@ -55,6 +48,24 @@ export default class VectorBasePlatform extends BasePlatform {
return 'Vector Base Platform'; // no translation required: only used for analytics
}

/**
* Delay creating the `Favico` instance until first use (on the first notification) as
* it uses canvas, which can trigger a permission prompt in Firefox's resist
* fingerprinting mode.
* See https://github.com/vector-im/riot-web/issues/9605.
*/
get favicon() {
if (this._favicon) {
return this._favicon;
}
// The 'animations' are really low framerate and look terrible.
// Also it re-starts the animation every time you set the badge,
// and we set the state each time, even if the value hasn't changed,
// so we'd need to fix that if enabling the animation.
this._favicon = new Favico({ animation: 'none' });
return this._favicon;
}

_updateFavicon() {
try {
// This needs to be in in a try block as it will throw
Expand Down

0 comments on commit d4de7f5

Please sign in to comment.