Commit f982fb17 authored by Emma Zuehlcke's avatar Emma Zuehlcke
Browse files

Bug 1876675, a=diannaS

parent 4ffc0adf
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -275,11 +275,24 @@ var PointerlockFsWarning = {
};

var PointerLock = {
  _isActive: false,

  /**
   * @returns {boolean} - true if pointer lock is currently active for the
   * associated window.
   */
  get isActive() {
    return this._isActive;
  },

  entered(originNoSuffix) {
    this._isActive = true;
    Services.obs.notifyObservers(null, "pointer-lock-entered");
    PointerlockFsWarning.showPointerLock(originNoSuffix);
  },

  exited() {
    this._isActive = false;
    PointerlockFsWarning.close("pointerlock-warning");
  },
};
+13 −4
Original line number Diff line number Diff line
@@ -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);
      }