From a5f28e22cc28ca53d092f6545bc924ee43a8bbe4 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Mon, 8 Apr 2024 17:18:54 +0200 Subject: Merging upstream version 115.9.0esr. Signed-off-by: Daniel Baumann --- toolkit/modules/PopupNotifications.sys.mjs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'toolkit/modules/PopupNotifications.sys.mjs') diff --git a/toolkit/modules/PopupNotifications.sys.mjs b/toolkit/modules/PopupNotifications.sys.mjs index ca51346625..0c33220174 100644 --- a/toolkit/modules/PopupNotifications.sys.mjs +++ b/toolkit/modules/PopupNotifications.sys.mjs @@ -309,9 +309,11 @@ export function PopupNotifications(tabbrowser, panel, iconBox, options = {}) { ); Services.obs.addObserver(this, "fullscreen-transition-start"); + Services.obs.addObserver(this, "pointer-lock-entered"); this.window.addEventListener("unload", () => { Services.obs.removeObserver(this, "fullscreen-transition-start"); + Services.obs.removeObserver(this, "pointer-lock-entered"); }); this.window.addEventListener("activate", this, true); @@ -361,7 +363,11 @@ PopupNotifications.prototype = { }, observe(subject, topic) { - if (topic == "fullscreen-transition-start") { + // These observers apply to all windows. + if ( + topic == "fullscreen-transition-start" || + topic == "pointer-lock-entered" + ) { // Extend security delay if the panel is open. if (this.isPanelOpen) { let notification = this.panel.firstChild?.notification; @@ -1336,9 +1342,12 @@ PopupNotifications.prototype = { n._recordTelemetryStat(TELEMETRY_STAT_OFFERED); }, this); - // We're about to open the panel while in a full screen transition. Extend - // the security delay. - if (this.window.isInFullScreenTransition) { + // We're about to open the panel while in a full screen transition or + // during pointer lock. Extend the security delay to avoid clickjacking. + if ( + this.window.isInFullScreenTransition || + this.window.PointerLock?.isActive + ) { this._extendSecurityDelay(notificationsToShow); } -- cgit v1.2.3