Verified Commit 73d6126a authored by Maurice Dauer's avatar Maurice Dauer Committed by ma1
Browse files

Bug 1419501 - Part 4: Implement framebusting intervention,...

Bug 1419501 - Part 4: Implement framebusting intervention, r=fluent-reviewers,desktop-theme-reviewers,tabbrowser-reviewers,bolsson,edgar,mstriemer,sfoster,sthompson,emz

Differential Revision: https://phabricator.services.mozilla.com/D254680
parent 27d346a6
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -187,7 +187,10 @@ var gBrowserInit = {

  onLoad() {
    gBrowser.addEventListener("DOMUpdateBlockedPopups", e =>
      PopupBlockerObserver.handleEvent(e)
      PopupAndRedirectBlockerObserver.handleEvent(e)
    );
    gBrowser.addEventListener("DOMUpdateBlockedRedirect", e =>
      PopupAndRedirectBlockerObserver.handleEvent(e)
    );
    gBrowser.addEventListener(
      "TranslationsParent:LanguageState",
+56 −20
Original line number Diff line number Diff line
@@ -187,9 +187,13 @@ var gPermissionPanel = {
      }
    }

    // Show blocked popup icon in the identity-box if popups are blocked
    // irrespective of popup permission capability value.
    if (gBrowser.selectedBrowser.popupBlocker.getBlockedPopupCount()) {
    // Show blocked popup icon in the identity-box if popups or a
    // third-party redirect is blocked irrespective of popup permission
    // capability value.
    if (
      gBrowser.selectedBrowser.popupAndRedirectBlocker.getBlockedPopupCount() ||
      gBrowser.selectedBrowser.popupAndRedirectBlocker.isRedirectBlocked()
    ) {
      let icon = permissionAnchors.popup;
      icon.setAttribute("showing", "true");
      hasPermissions = true;
@@ -512,8 +516,12 @@ var gPermissionPanel = {
    }

    let totalBlockedPopups =
      gBrowser.selectedBrowser.popupBlocker.getBlockedPopupCount();
    let hasBlockedPopupIndicator = false;
      gBrowser.selectedBrowser.popupAndRedirectBlocker.getBlockedPopupCount();
    let isRedirectBlocked =
      gBrowser.selectedBrowser.popupAndRedirectBlocker.isRedirectBlocked();
    let showBlockedIndicator = totalBlockedPopups || isRedirectBlocked;

    let hasBlockedIndicator = false;
    for (let permission of permissions) {
      let [id, key] = permission.id.split(SitePermissions.PERM_KEY_DELIMITER);

@@ -571,15 +579,20 @@ var gPermissionPanel = {
        anchor.appendChild(item);
      }

      if (id == "popup" && totalBlockedPopups) {
        this._createBlockedPopupIndicator(totalBlockedPopups);
        hasBlockedPopupIndicator = true;
      // Note: The `id` of the permission is "popup", but this may also
      //       include blocked third-party redirects.
      if (id == "popup" && showBlockedIndicator) {
        this._createBlockedPopupIndicator(
          totalBlockedPopups,
          isRedirectBlocked
        );
        hasBlockedIndicator = true;
      } else if (id == "geo" && permission.state === SitePermissions.ALLOW) {
        this._createGeoLocationLastAccessIndicator();
      }
    }

    if (totalBlockedPopups && !hasBlockedPopupIndicator) {
    if (showBlockedIndicator && !hasBlockedIndicator) {
      let permission = {
        id: "popup",
        state: SitePermissions.getDefault("popup"),
@@ -587,7 +600,7 @@ var gPermissionPanel = {
      };
      let item = this._createPermissionItem({ permission });
      this._defaultPermissionAnchor.appendChild(item);
      this._createBlockedPopupIndicator(totalBlockedPopups);
      this._createBlockedPopupIndicator(totalBlockedPopups, isRedirectBlocked);
    }
  },

@@ -1075,24 +1088,47 @@ var gPermissionPanel = {
    return initialCall && container;
  },

  _createBlockedPopupIndicator(aTotalBlockedPopups) {
    let indicator = document.createXULElement("hbox");
    indicator.setAttribute("class", "permission-popup-permission-item");
    indicator.setAttribute("align", "center");
    indicator.setAttribute("id", "blocked-popup-indicator-item");
  _createBlockedRedirectText() {
    let text = document.createXULElement("label", { is: "text-link" });
    text.setAttribute("class", "permission-popup-permission-label");
    text.addEventListener("click", () => {
      gBrowser.selectedBrowser.popupAndRedirectBlocker.unblockFirstRedirect();
    });

    MozXULElement.insertFTLIfNeeded("browser/sitePermissions.ftl");
    document.l10n.setAttributes(text, "site-permissions-unblock-redirect");

    return text;
  },

  _createBlockedPopupText(aTotalBlockedPopups) {
    let text = document.createXULElement("label", { is: "text-link" });
    text.setAttribute("class", "permission-popup-permission-label");
    text.addEventListener("click", () => {
      gBrowser.selectedBrowser.popupAndRedirectBlocker.unblockAllPopups();
    });

    document.l10n.setAttributes(text, "site-permissions-open-blocked-popups", {
      count: aTotalBlockedPopups,
    });

    text.addEventListener("click", () => {
      gBrowser.selectedBrowser.popupBlocker.unblockAllPopups();
    });
    return text;
  },

    indicator.appendChild(text);
  _createBlockedPopupIndicator(aTotalBlockedPopups, aIsRedirectBlocked) {
    let indicator = document.createXULElement("hbox");
    indicator.setAttribute("class", "permission-popup-permission-item");
    indicator.setAttribute("align", "center");
    indicator.setAttribute("id", "blocked-popup-indicator-item");

    MozXULElement.insertFTLIfNeeded("browser/sitePermissions.ftl");

    if (aIsRedirectBlocked) {
      indicator.appendChild(this._createBlockedRedirectText());
    }

    if (aTotalBlockedPopups) {
      indicator.appendChild(this._createBlockedPopupText(aTotalBlockedPopups));
    }

    document
      .getElementById("permission-popup-container")
+2 −1
Original line number Diff line number Diff line
@@ -64,7 +64,8 @@ ChromeUtils.defineESModuleGetters(this, {
  PlacesUIUtils: "resource:///modules/PlacesUIUtils.sys.mjs",
  PlacesUtils: "resource://gre/modules/PlacesUtils.sys.mjs",
  Pocket: "chrome://pocket/content/Pocket.sys.mjs",
  PopupBlockerObserver: "resource:///modules/PopupBlockerObserver.sys.mjs",
  PopupAndRedirectBlockerObserver:
    "resource:///modules/PopupAndRedirectBlockerObserver.sys.mjs",
  PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
  ProcessHangMonitor: "resource:///modules/ProcessHangMonitor.sys.mjs",
  ProfilesDatastoreService:
+1 −1
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@
  "gClickAndHoldListenersOnElement",
  "gSessionHistoryObserver",
  "gStoragePressureObserver",
  "PopupBlockerObserver",
  "PopupAndRedirectBlockerObserver",
  "gKeywordURIFixup",
  "_createNullPrincipalFromTabUserContextId",
  "HandleAppCommandEvent",
+1 −0
Original line number Diff line number Diff line
@@ -478,6 +478,7 @@
    <menuitem id="blockedPopupDontShowMessage"
              data-l10n-id="popups-infobar-dont-show-message2"
              type="checkbox"/>
    <menuseparator id="blockedRedirectSeparator"/>
    <menuseparator id="blockedPopupsSeparator"/>
  </menupopup>

Loading