Commit 49db61d8 authored by henry's avatar henry Committed by richard
Browse files

fixup! Bug 40701: Add security warning when downloading a file

Bug 42221: Migrate downloads warning strings to Fluent.
parent a5b9b03b
Loading
Loading
Loading
Loading
+0 −47
Original line number Diff line number Diff line
@@ -62,53 +62,6 @@ var ContentAreaDownloadsView = {
    if (!PrivateBrowsingUtils.isContentWindowPrivate(window)) {
      view.place = "place:transition=7&sort=4";
    }

    torWarningMessage.querySelector(
      ".downloads-tor-warning-title"
    ).textContent = this._getTorString("torbutton.download.warning.title");

    const tailsLink = document.createElement("a");
    tailsLink.href = "https://tails.net/";
    tailsLink.target = "_blank";
    tailsLink.textContent = this._getTorString(
      "torbutton.download.warning.tails_brand_name"
    );

    const [beforeLink, afterLink] = this._getTorString(
      "torbutton.download.warning.description"
    ).split("%S");

    torWarningMessage
      .querySelector(".downloads-tor-warning-description")
      .append(beforeLink, tailsLink, afterLink);

    torWarningMessage.querySelector(
      ".downloads-tor-warning-dismiss-button"
    ).textContent = this._getTorString("torbutton.download.warning.dismiss");
  },

  /**
   * Get a string from the properties bundle.
   *
   * @param {string} name - The string name.
   *
   * @return {string} The string.
   */
  _getTorString(name) {
    if (!this._stringBundle) {
      this._stringBundle = Services.strings.createBundle(
        "chrome://torbutton/locale/torbutton.properties"
      );
    }
    try {
      return this._stringBundle.GetStringFromName(name);
    } catch {}
    if (!this._fallbackStringBundle) {
      this._fallbackStringBundle = Services.strings.createBundle(
        "resource://torbutton/locale/en-US/torbutton.properties"
      );
    }
    return this._fallbackStringBundle.GetStringFromName(name);
  },
};

+27 −12
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
  <linkset>
    <html:link rel="localization" href="toolkit/global/textActions.ftl"/>
    <html:link rel="localization" href="browser/downloads.ftl" />
    <html:link rel="localization" href="browser/tor-browser.ftl" />
  </linkset>

  <script src="chrome://global/content/globalOverlay.js"/>
@@ -36,20 +37,34 @@
  </keyset>
#endif

  <html:message-bar id="aboutDownloadsTorWarning"
  <html:message-bar
    id="aboutDownloadsTorWarning"
    class="downloads-tor-warning-message-bar"
    role="alert"
    aria-labelledby="aboutDownloadsTorWarningTitle"
                    aria-describedby="aboutDownloadsTorWarningDescription">
    aria-describedby="aboutDownloadsTorWarningDescription"
  >
    <html:div class="downloads-tor-warning-grid">
      <html:p id="aboutDownloadsTorWarningTitle"
              class="downloads-tor-warning-title">
      <html:p
        id="aboutDownloadsTorWarningTitle"
        class="downloads-tor-warning-title"
        data-l10n-id="downloads-tor-warning-title"
      ></html:p>
      <html:p
        id="aboutDownloadsTorWarningDescription"
        class="downloads-tor-warning-description"
        data-l10n-id="downloads-tor-warning-description"
      >
        <html:a
          href="https://tails.net/"
          target="_blank"
          data-l10n-name="tails-link"
        ></html:a>
      </html:p>
      <html:p id="aboutDownloadsTorWarningDescription"
              class="downloads-tor-warning-description">
      </html:p>
      <html:button class="downloads-tor-warning-dismiss-button">
      </html:button>
      <html:button
        class="downloads-tor-warning-dismiss-button"
        data-l10n-id="downloads-tor-warning-dismiss-button"
      ></html:button>
    </html:div>
  </html:message-bar>

+20 −53
Original line number Diff line number Diff line
@@ -167,36 +167,27 @@ var DownloadsPanel = {
    );

    if (!this._torWarningInitialized) {
      torWarningMessage.querySelector(
        ".downloads-tor-warning-title"
      ).textContent = this._getTorString("torbutton.download.warning.title");

      const tailsLink = document.createElement("a");
      tailsLink.href = "https://tails.net";
      tailsLink.textContent = this._getTorString(
        "torbutton.download.warning.tails_brand_name"
      // Intercept clicks on the tails link.
      // NOTE: We listen for clicks on the parent instead of the
      // <a data-l10n-name="tails-link"> element because the latter may be
      // swapped for a new instance by Fluent when refreshing the parent.
      torWarningMessage
        .querySelector(".downloads-tor-warning-description")
        .addEventListener("click", event => {
          const tailsLink = event.target.closest(
            ".downloads-tor-warning-tails-link"
          );
      tailsLink.addEventListener("click", event => {
          if (!tailsLink) {
            return;
          }
          event.preventDefault();
          this.hidePanel();
          openWebLinkIn(tailsLink.href, "tab");
        });

      const [beforeLink, afterLink] = this._getTorString(
        "torbutton.download.warning.description"
      ).split("%S");

      torWarningMessage
        .querySelector(".downloads-tor-warning-description")
        .append(beforeLink, tailsLink, afterLink);

      let dismissButton = torWarningMessage.querySelector(
        ".downloads-tor-warning-dismiss-button"
      );
      dismissButton.textContent = this._getTorString(
        "torbutton.download.warning.dismiss"
      );
      dismissButton.addEventListener("click", event => {
        .querySelector(".downloads-tor-warning-dismiss-button")
        .addEventListener("click", event => {
          Services.prefs.setBoolPref(PREF_SHOW_DOWNLOAD_WARNING, false);
        });
      this._torWarningInitialized = true;
@@ -725,30 +716,6 @@ var DownloadsPanel = {
      }
    }, 0);
  },

  /**
   * Get a string from the properties bundle.
   *
   * @param {string} name - The string name.
   *
   * @return {string} The string.
   */
  _getTorString(name) {
    if (!this._stringBundle) {
      this._stringBundle = Services.strings.createBundle(
        "chrome://torbutton/locale/torbutton.properties"
      );
    }
    try {
      return this._stringBundle.GetStringFromName(name);
    } catch {}
    if (!this._fallbackStringBundle) {
      this._fallbackStringBundle = Services.strings.createBundle(
        "resource://torbutton/locale/en-US/torbutton.properties"
      );
    }
    return this._fallbackStringBundle.GetStringFromName(name);
  },
};

XPCOMUtils.defineConstant(this, "DownloadsPanel", DownloadsPanel);
+24 −11
Original line number Diff line number Diff line
@@ -125,19 +125,32 @@

    <panelview id="downloadsPanel-mainView">
      <vbox id="downloadsPanelTorWarning">
        <vbox role="alert"
        <vbox
          role="alert"
          aria-labelledby="downloadsPanelTorWarningTitle"
              aria-describedby="downloadsPanelTorWarningDescription">
          <html:p id="downloadsPanelTorWarningTitle"
                  class="downloads-tor-warning-title">
          aria-describedby="downloadsPanelTorWarningDescription"
        >
          <html:p
            id="downloadsPanelTorWarningTitle"
            class="downloads-tor-warning-title"
            data-l10n-id="downloads-tor-warning-title"
          ></html:p>
          <html:p
            id="downloadsPanelTorWarningDescription"
            class="downloads-tor-warning-description"
            data-l10n-id="downloads-tor-warning-description"
          >
            <html:a
              href="https://tails.net/"
              data-l10n-name="tails-link"
              class="downloads-tor-warning-tails-link"
            ></html:a>
          </html:p>
          <html:p id="downloadsPanelTorWarningDescription"
                  class="downloads-tor-warning-description">
          </html:p>

          <html:div class="panel-footer">
            <html:button class="downloads-tor-warning-dismiss-button">
            </html:button>
            <html:button
              class="downloads-tor-warning-dismiss-button"
              data-l10n-id="downloads-tor-warning-dismiss-button"
            ></html:button>
          </html:div>
        </vbox>
        <toolbarseparator />
+15 −49
Original line number Diff line number Diff line
@@ -176,33 +176,23 @@ var PlacesOrganizer = {
      }
    );

    // Initialize tor warning text content.
    torWarningMessage.querySelector(
      ".downloads-tor-warning-title"
    ).textContent = this._getTorString("torbutton.download.warning.title");

    const tailsLink = document.createElement("a");
    tailsLink.href = "https://tails.net/";
    tailsLink.textContent = this._getTorString(
      "torbutton.download.warning.tails_brand_name"
    // Intercept clicks on the tor warning tails link.
    // NOTE: We listen for clicks on the parent instead of the
    // <a data-l10n-name="tails-link"> element because the latter may be
    // swapped for a new instance by Fluent when refreshing the parent.
    document
      .querySelector(".downloads-tor-warning-description")
      .addEventListener("click", event => {
        const tailsLink = event.target.closest(
          ".downloads-tor-warning-tails-link"
        );
    tailsLink.addEventListener("click", event => {
        if (!tailsLink) {
          return;
        }
        event.preventDefault();
        openWebLinkIn(tailsLink.href, "tab");
      });

    const [beforeLink, afterLink] = this._getTorString(
      "torbutton.download.warning.description"
    ).split("%S");

    torWarningMessage
      .querySelector(".downloads-tor-warning-description")
      .append(beforeLink, tailsLink, afterLink);

    torWarningMessage.querySelector(
      ".downloads-tor-warning-dismiss-button"
    ).textContent = this._getTorString("torbutton.download.warning.dismiss");

    ContentArea.init();

    this._places = document.getElementById("placesList");
@@ -274,30 +264,6 @@ var PlacesOrganizer = {
    ContentArea.focus();
  },

  /**
   * Get a string from the properties bundle.
   *
   * @param {string} name - The string name.
   *
   * @returns {string} The string.
   */
  _getTorString(name) {
    if (!this._stringBundle) {
      this._stringBundle = Services.strings.createBundle(
        "chrome://torbutton/locale/torbutton.properties"
      );
    }
    try {
      return this._stringBundle.GetStringFromName(name);
    } catch {}
    if (!this._fallbackStringBundle) {
      this._fallbackStringBundle = Services.strings.createBundle(
        "resource://torbutton/locale/en-US/torbutton.properties"
      );
    }
    return this._fallbackStringBundle.GetStringFromName(name);
  },

  QueryInterface: ChromeUtils.generateQI([]),

  handleEvent: function PO_handleEvent(aEvent) {
Loading