browser/base/content/blockedSite.xhtml
author Jed Davis <jld@mozilla.com>
Tue, 03 Oct 2017 20:35:28 -0600
changeset 432370 fad5c108c84a9af12b9126101bdbe2772bdc59aa
parent 431064 716be9d0b6e0bacaec3f398693e13f68c6460e52
child 456469 89f7592e2b4615819374e347aed69333bc3a8a72
permissions -rw-r--r--
Bug 1401666 - Adjust sandbox policy to allow Mesa 12 to use libudev for device identification. r=gcp, a=ritu MozReview-Commit-ID: JRRI9nd83TP

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html [
  <!ENTITY % htmlDTD PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
  %htmlDTD;
  <!ENTITY % globalDTD SYSTEM "chrome://global/locale/global.dtd">
  %globalDTD;
  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd" >
  %brandDTD;
  <!ENTITY % blockedSiteDTD SYSTEM "chrome://browser/locale/safebrowsing/phishing-afterload-warning-message.dtd">
  %blockedSiteDTD;
]>

<!-- This Source Code Form is subject to the terms of the Mozilla Public
   - License, v. 2.0. If a copy of the MPL was not distributed with this
   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->

<html xmlns="http://www.w3.org/1999/xhtml" class="blacklist">
  <head>
    <link rel="stylesheet" href="chrome://browser/skin/blockedSite.css" type="text/css" media="all" />
    <link rel="icon" type="image/png" id="favicon" href="chrome://global/skin/icons/blacklist_favicon.png"/>

    <script type="application/javascript"><![CDATA[
      // Error url MUST be formatted like this:
      //   about:blocked?e=error_code&u=url(&o=1)?
      //     (o=1 when user overrides are allowed)

      // Note that this file uses document.documentURI to get
      // the URL (with the format from above). This is because
      // document.location.href gets the current URI off the docshell,
      // which is the URL displayed in the location bar, i.e.
      // the URI that the user attempted to load.

      function getErrorCode() {
        var url = document.documentURI;
        var error = url.search(/e\=/);
        var duffUrl = url.search(/\&u\=/);
        return decodeURIComponent(url.slice(error + 2, duffUrl));
      }

      function getURL() {
        var url = document.documentURI;
        var match = url.match(/&u=([^&]+)&/);

        // match == null if not found; if so, return an empty string
        // instead of what would turn out to be portions of the URI
        if (!match)
          return "";

        url = decodeURIComponent(match[1]);

        // If this is a view-source page, then get then real URI of the page
        if (url.startsWith("view-source:"))
          url = url.slice(12);
        return url;
      }

      /**
       * Check whether this warning page is overridable or not, in which case
       * the "ignore the risk" suggestion in the error description
       * should not be shown.
       */
      function getOverride() {
        var url = document.documentURI;
        var match = url.match(/&o=1&/);
        return !!match;
      }

      /**
       * Attempt to get the hostname via document.location.  Fail back
       * to getURL so that we always return something meaningful.
       */
      function getHostString() {
        try {
          return document.location.hostname;
        } catch (e) {
          return getURL();
        }
      }

      function onClickSeeDetails() {
        let details = document.getElementById("errorDescriptionContainer");
        if (details.hidden == true) {
          details.removeAttribute("hidden");
        } else {
          details.setAttribute("hidden", "true");
        }
      }

      function initPage() {
        var error = "";
        switch (getErrorCode()) {
          case "malwareBlocked" :
            error = "malware";
            break;
          case "deceptiveBlocked" :
            error = "phishing";
            break;
          case "unwantedBlocked" :
            error = "unwanted";
            break;
          case "harmfulBlocked" :
            error = "harmful";
            break;
          default:
            return;
        }

        var el;

        if (error !== "malware") {
          el = document.getElementById("errorTitleText_malware");
          el.remove();
          el = document.getElementById("errorShortDescText_malware");
          el.remove();
          el = document.getElementById("errorLongDesc_malware");
          el.remove();
        }

        if (error !== "phishing") {
          el = document.getElementById("errorTitleText_phishing");
          el.remove();
          el = document.getElementById("errorShortDescText_phishing");
          el.remove();
          el = document.getElementById("errorLongDesc_phishing");
          el.remove();
        }

        if (error !== "unwanted") {
          el = document.getElementById("errorTitleText_unwanted");
          el.remove();
          el = document.getElementById("errorShortDescText_unwanted");
          el.remove();
          el = document.getElementById("errorLongDesc_unwanted");
          el.remove();
        }

        if (error !== "harmful") {
          el = document.getElementById("errorTitleText_harmful");
          el.remove();
          el = document.getElementById("errorShortDescText_harmful");
          el.remove();
          el = document.getElementById("errorLongDesc_harmful");
          el.remove();
        }

        // Decide which version of the string should be visible in the error description.
        if (getOverride()) {
          document.getElementById(error + "_error_desc_no_override").remove();
        } else {
          document.getElementById(error + "_error_desc_override").remove();
        }

        // Set sitename in error details.
        let sitenameElem = document.getElementById(error + "_sitename");
        sitenameElem.setAttribute("class", "sitename");
        sitenameElem.textContent = getHostString();

        document.title = document.getElementById("errorTitleText_" + error).textContent;

        // Inform the test harness that we're done loading the page.
        var event = new CustomEvent("AboutBlockedLoaded",
          {
            bubbles: true,
            detail: {
              url: this.getURL(),
              err: error
            }
          });
        document.dispatchEvent(event);
      }
    ]]></script>
  </head>

  <body dir="&locale.dir;">
    <div id="errorPageContainer" class="container">

      <!-- Error Title -->
      <div id="errorTitle" class="title">
        <h1 class="title-text" id="errorTitleText_phishing">&safeb.blocked.phishingPage.title3;</h1>
        <h1 class="title-text" id="errorTitleText_malware">&safeb.blocked.malwarePage.title2;</h1>
        <h1 class="title-text" id="errorTitleText_unwanted">&safeb.blocked.unwantedPage.title2;</h1>
        <h1 class="title-text" id="errorTitleText_harmful">&safeb.blocked.harmfulPage.title;</h1>
      </div>

      <div id="errorLongContent">

        <!-- Short Description -->
        <div id="errorShortDesc">
          <p id="errorShortDescText_phishing">&safeb.blocked.phishingPage.shortDesc3;</p>
          <p id="errorShortDescText_malware">&safeb.blocked.malwarePage.shortDesc2;</p>
          <p id="errorShortDescText_unwanted">&safeb.blocked.unwantedPage.shortDesc2;</p>
          <p id="errorShortDescText_harmful">&safeb.blocked.harmfulPage.shortDesc2;</p>
        </div>

        <!-- Advisory -->
        <div id="advisoryDesc">
          <p id="advisoryDescText">&safeb.palm.advisory.desc2;</p>
        </div>

        <!-- Action buttons -->
        <div id="buttons" class="button-container">
          <!-- Commands handled in browser.js -->
          <button id="goBackButton">&safeb.palm.accept.label2;</button>
          <button id="seeDetailsButton" onclick="onClickSeeDetails();">&safeb.palm.seedetails.label;</button>
        </div>
      </div>
      <div id="errorDescriptionContainer" hidden="true">
        <div class="error-description" id="errorLongDesc_phishing">
          <p id="phishing_error_desc_override">&safeb.blocked.phishingPage.errorDesc.override;</p>
          <p id="phishing_error_desc_no_override">&safeb.blocked.phishingPage.errorDesc.noOverride;</p>
          <p id="phishing_learn_more">&safeb.blocked.phishingPage.learnMore;</p>
        </div>
        <div class="error-description" id="errorLongDesc_malware">
          <p id="malware_error_desc_override">&safeb.blocked.malwarePage.errorDesc.override;</p>
          <p id="malware_error_desc_no_override">&safeb.blocked.malwarePage.errorDesc.noOverride;</p>
          <p id="malware_learn_more">&safeb.blocked.malwarePage.learnMore;</p>
        </div>
        <div class="error-description" id="errorLongDesc_unwanted">
          <p id="unwanted_error_desc_override">&safeb.blocked.unwantedPage.errorDesc.override;</p>
          <p id="unwanted_error_desc_no_override">&safeb.blocked.unwantedPage.errorDesc.noOverride;</p>
          <p id="unwanted_learn_more">&safeb.blocked.unwantedPage.learnMore;</p>
        </div>
        <div class="error-description" id="errorLongDesc_harmful">
          <p id="harmful_error_desc_override">&safeb.blocked.harmfulPage.errorDesc.override;</p>
          <p id="harmful_error_desc_no_override">&safeb.blocked.harmfulPage.errorDesc.noOverride;</p>
          <p id="harmful_learn_more">&safeb.blocked.harmfulPage.learnMore;</p>
        </div>
      </div>
    </div>
    <!--
    - Note: It is important to run the script this way, instead of using
    - an onload handler. This is because error pages are loaded as
    - LOAD_BACKGROUND, which means that onload handlers will not be executed.
    -->
    <script type="application/javascript">
      initPage();
    </script>
  </body>
</html>