Bug 380932: land netError page for malware URIs, patch by Johnathan Nightingale <johnath@mozilla.com>, r=biesi, ui+r=beltzner
authorgavin@gavinsharp.com
Tue, 03 Jul 2007 09:49:06 -0700
changeset 3082 90d4d5e895eb9fa1a9adc4116e44ddc3e317cce9
parent 3081 5fad674e36bc7127f5f9a6a070b2a0cbaf1ac680
child 3083 1892ff1a5a23ec12a3703483674394089ba0367e
push id1
push userbsmedberg@mozilla.com
push dateThu, 20 Mar 2008 16:49:24 +0000
treeherdermozilla-central@61007906a1f8 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersbiesi, ui
bugs380932
milestone1.9a7pre
Bug 380932: land netError page for malware URIs, patch by Johnathan Nightingale <johnath@mozilla.com>, r=biesi, ui+r=beltzner
browser/locales/en-US/chrome/overrides/netError.dtd
docshell/resources/content/netError.xhtml
dom/locales/en-US/chrome/netError.dtd
toolkit/themes/pinstripe/global/icons/blacklist_favicon.png
toolkit/themes/pinstripe/global/icons/blacklist_large.png
toolkit/themes/pinstripe/global/jar.mn
toolkit/themes/pinstripe/global/netError.css
toolkit/themes/winstripe/global/icons/blacklist_favicon.png
toolkit/themes/winstripe/global/icons/blacklist_large.png
toolkit/themes/winstripe/global/jar.mn
toolkit/themes/winstripe/global/netError.css
--- a/browser/locales/en-US/chrome/overrides/netError.dtd
+++ b/browser/locales/en-US/chrome/overrides/netError.dtd
@@ -129,8 +129,14 @@
   <li>The site could be temporarily unavailable or too busy. Try again in a few
     moments.</li>
   <li>If you are unable to load any pages, check your computer's network
     connection.</li>
   <li>If your computer or network is protected by a firewall or proxy, make sure
     that &brandShortName; is permitted to access the Web.</li>
 </ul>
 ">
+
+<!ENTITY malwareBlocked.title "Suspected Attack Site!">
+<!ENTITY malwareBlocked.longDesc "<p>
+Attack sites try to install programs that steal private information, use your computer to attack others, or damage your system.</p>
+<p>You should not visit this site.</p>
+">
--- a/docshell/resources/content/netError.xhtml
+++ b/docshell/resources/content/netError.xhtml
@@ -33,16 +33,17 @@
    - Portions created by the Initial Developer are Copyright (C) 1998
    - the Initial Developer. All Rights Reserved.
    -
    - Contributor(s):
    -   Adam Lock <adamlock@netscape.com>
    -   William R. Price <wrprice@alumni.rice.edu>
    -   Henrik Skupin <mozilla@hskupin.info>
    -   Jeff Walden <jwalden+code@mit.edu>
+   -   Johnathan Nightingale <johnath@mozilla.com>
    -
    - Alternatively, the contents of this file may be used under the terms of
    - either the GNU General Public License Version 2 or later (the "GPL"), or
    - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
    - in which case the provisions of the GPL or the LGPL are applicable instead
    - of those above. If you wish to allow use of your version of this file only
    - under the terms of either the GPL or the LGPL, and not to allow others to
    - use your version of this file under the terms of the MPL, indicate your
@@ -52,37 +53,54 @@
    - the terms of any one of the MPL, the GPL or the LGPL.
    -
    - ***** END LICENSE BLOCK ***** -->
 
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <title>&loadError.label;</title>
     <link rel="stylesheet" href="chrome://global/skin/netError.css" type="text/css" media="all" />
-    <!-- XXX this needs to be themeable -->
-    <link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAICSURBVHjaYvz//z8DJQAggJhwiDPvnmlzc2aR0O+JGezt+AwACCCsBhxfYhn59N41FWtXIxZOLu70niRGXVwGAAQQNgNYHj96O8HaWYdJW5ubwd4/mI2Ng7sblwEAAYRhwMm1URk/vn4SUNWVYGD8+YZBXZOZm5OLzRjoCmNsBgAEEKoBN82Y7l851GLrqMjM8Oc7A8O/3wwMP54wuAQFCXNycUzGZgBAAKEYcOaKZO2/f//5FbUVgBrfMoRVcgHpNwyKGjKMXDwCan0prFboBgAEELIBzDcvXyy2cVZhYPj9GWj7H4jo/38MDJ9OMDj7O/KzsjH3oxsAEEBwA/bNNipiZf7FI6cqwcDw8x2qqp8fGORUpVn4BEXlgGHhhCwFEEAwA9gfP3hdZ+Oizcjw+wvCdjgAuuLrFQbXIH9hTm7uqcgyAAEENuD4ctcebm5mbikFYRTbV7V/Q6j88Z5BSuY7q4CQgAjQFR4wYYAAAhtw89L5ZFsnRaDtn4CW/YXrAQcisit+PGVwDgrnZ2NnnwATBQggpsNLvGYLCAmxi8tLARWg+h3FBVBXSEj/ZZWQkRcCuiIQJAQQQCyvnj5KMDTkZ2JgYmRg4FchnHv+vmEwttLmeXT3VjKQtx4ggFgk5TXebV63UfT3ijOMxOZAVlZWdiB1EMQGCCBGSrMzQIABAFR3kRM3KggZAAAAAElFTkSuQmCC" />
+    <link rel="icon" type="image/png" id="favicon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAICSURBVHjaYvz//z8DJQAggJhwiDPvnmlzc2aR0O+JGezt+AwACCCsBhxfYhn59N41FWtXIxZOLu70niRGXVwGAAQQNgNYHj96O8HaWYdJW5ubwd4/mI2Ng7sblwEAAYRhwMm1URk/vn4SUNWVYGD8+YZBXZOZm5OLzRjoCmNsBgAEEKoBN82Y7l851GLrqMjM8Oc7A8O/3wwMP54wuAQFCXNycUzGZgBAAKEYcOaKZO2/f//5FbUVgBrfMoRVcgHpNwyKGjKMXDwCan0prFboBgAEELIBzDcvXyy2cVZhYPj9GWj7H4jo/38MDJ9OMDj7O/KzsjH3oxsAEEBwA/bNNipiZf7FI6cqwcDw8x2qqp8fGORUpVn4BEXlgGHhhCwFEEAwA9gfP3hdZ+Oizcjw+wvCdjgAuuLrFQbXIH9hTm7uqcgyAAEENuD4ctcebm5mbikFYRTbV7V/Q6j88Z5BSuY7q4CQgAjQFR4wYYAAAhtw89L5ZFsnRaDtn4CW/YXrAQcisit+PGVwDgrnZ2NnnwATBQggpsNLvGYLCAmxi8tLARWg+h3FBVBXSEj/ZZWQkRcCuiIQJAQQQCyvnj5KMDTkZ2JgYmRg4FchnHv+vmEwttLmeXT3VjKQtx4ggFgk5TXebV63UfT3ijOMxOZAVlZWdiB1EMQGCCBGSrMzQIABAFR3kRM3KggZAAAAAElFTkSuQmCC"/>
 
     <script type="application/x-javascript"><![CDATA[
       // Error url MUST be formatted like this:
       //   moz-neterror:page?e=error&u=url&d=desc
+      //
+      // or optionally, to specify an alternate CSS class to allow for
+      // custom styling and favicon:
+      //
+      //   moz-neterror:page?c=classname&e=error&u=url&d=desc
 
       // 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 getCSSClass()
+      {
+        var url = document.documentURI;
+        var class = url.search(/c\=/);
+        
+        // c is optional, if class === -1 just return nothing
+        if (class === -1)
+          return "";
+          
+        var rest = url.search(/\&/);
+        return decodeURIComponent(url.slice(class + 2, rest));
+      }
+
       function getDescription()
       {
         var url = document.documentURI;
         var desc = url.search(/d\=/);
 
         // desc == -1 if not found; if so, return an empty string
         // instead of what would turn out to be portions of the URI
         if (desc == -1) return "";
@@ -137,16 +155,32 @@
           ld.parentNode.replaceChild(errDesc, ld);
           // change id to the replaced child's id so styling works
           errDesc.id = "errorLongDesc";
         }
 
         // remove undisplayed errors to avoid bug 39098
         var errContainer = document.getElementById("errorContainer");
         errContainer.parentNode.removeChild(errContainer);
+
+        var class = getCSSClass();
+        if (class) {
+          // Associate a CSS class with the root of the page, if one was passed in,
+          // to allow custom styling.
+          document.documentElement.className = class;
+
+          // Also, if they specified a CSS class, they must supply their own
+          // favicon.  In order to trigger the browser to repaint though, we
+          // need to remove/add the link element. 
+          var favicon = document.getElementById("favicon");
+          var faviconParent = favicon.parentNode;
+          faviconParent.removeChild(favicon);
+          favicon.setAttribute("href", "chrome://global/skin/icons/" + class + "_favicon.png");
+          faviconParent.appendChild(favicon);
+        }
       }
     ]]></script>
   </head>
 
   <body dir="&locale.dir;">
 
     <!-- ERROR ITEM CONTAINER (removed during loading to avoid bug 39098) -->
     <div id="errorContainer">
@@ -163,16 +197,17 @@
         <h1 id="et_netReset">&netReset.title;</h1>
         <h1 id="et_netOffline">&netOffline.title;</h1>
         <h1 id="et_netInterrupt">&netInterrupt.title;</h1>
         <h1 id="et_deniedPortAccess">&deniedPortAccess.title;</h1>
         <h1 id="et_proxyResolveFailure">&proxyResolveFailure.title;</h1>
         <h1 id="et_proxyConnectFailure">&proxyConnectFailure.title;</h1>
         <h1 id="et_contentEncodingError">&contentEncodingError.title;</h1>
         <h1 id="et_nssFailure2">&nssFailure2.title;</h1>
+        <h1 id="et_malwareBlocked">&malwareBlocked.title;</h1>
       </div>
       <div id="errorDescriptionsContainer">
         <div id="ed_generic">&generic.longDesc;</div>
         <div id="ed_dnsNotFound">&dnsNotFound.longDesc;</div>
         <div id="ed_fileNotFound">&fileNotFound.longDesc;</div>
         <div id="ed_malformedURI">&malformedURI.longDesc;</div>
         <div id="ed_protocolNotFound">&protocolNotFound.longDesc;</div>
         <div id="ed_connectionFailure">&connectionFailure.longDesc;</div>
@@ -182,16 +217,17 @@
         <div id="ed_netReset">&netReset.longDesc;</div>
         <div id="ed_netOffline">&netOffline.longDesc;</div>
         <div id="ed_netInterrupt">&netInterrupt.longDesc;</div>
         <div id="ed_deniedPortAccess">&deniedPortAccess.longDesc;</div>
         <div id="ed_proxyResolveFailure">&proxyResolveFailure.longDesc;</div>
         <div id="ed_proxyConnectFailure">&proxyConnectFailure.longDesc;</div>
         <div id="ed_contentEncodingError">&contentEncodingError.longDesc;</div>
         <div id="ed_nssFailure2">&nssFailure2.longDesc;</div>
+        <div id="ed_malwareBlocked">&malwareBlocked.longDesc;</div>
       </div>
     </div>
 
     <!-- PAGE CONTAINER (for styling purposes only) -->
     <div id="errorPageContainer">
     
       <!-- Error Title -->
       <div id="errorTitle">
--- a/dom/locales/en-US/chrome/netError.dtd
+++ b/dom/locales/en-US/chrome/netError.dtd
@@ -48,8 +48,14 @@
 <!ENTITY redirectLoop.title "Redirect Loop">
 <!ENTITY redirectLoop.longDesc "<p>The browser has stopped trying to retrieve the requested item. The site is redirecting the request in a way that will never complete.</p><ul><li>Have you disabled or blocked cookies required by this site?</li><li><em>NOTE</em>: If accepting the site's cookies does not resolve the problem, it is likely a server configuration issue and not your computer.</li></ul>">
 
 <!ENTITY unknownSocketType.title "Incorrect Response">
 <!ENTITY unknownSocketType.longDesc "<p>The site responded to the network request in an unexpected way and the browser cannot continue.</p>">
 
 <!ENTITY nssFailure2.title "Secure Connection Failed">
 <!ENTITY nssFailure2.longDesc "<p>The page you are trying to view can not be shown because the authenticity of the received data could not be verified.</p><ul><li>Please contact the web site owners to inform them of this problem.</li></ul>">
+
+<!ENTITY malwareBlocked.title "Suspected Attack Site!">
+<!ENTITY malwareBlocked.longDesc "<p>
+Attack sites try to install programs that steal private information, use your computer to attack others, or damage your system.</p>
+<p>You should not visit this site.</p>
+">
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2558067d9d412055ff44a3cedd5da98d672868e0
GIT binary patch
literal 705
zc$@*j0zUnTP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004XF*Lt007q5
z)K6G40000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!Q%OWYRCwBq
zQ%!GDK@>gn0f;~fCanhPMk{q=abbVJi)nPDJ0t!9w$@)#*Zcvk?(E9AcuN<?7<MhO
zjcp=@NC*h>G4Er%_d!S@MxA8xl9_wXJ?Gpv0!!<|)5m2Sh81hALpwSXLhyEl6xE&m
zgVz`9#RXuV0Im?SxO(Fjve(y<%jY4qM7P<*pw+^UZ^xMQx^<zHv$OxMF(-Kc<WU|7
z4^!FIOkwLDbTW=uOoIxkGeC;qdp>;QqjhqG&T+jDsct`bd(hBKFfqnWrLvi;#XAT*
zLx=!~YpPL^IwlCbfJi*#)(S8qlWCuRb?ItTym@%POeL>2ig%G%NkhdHZ4IS~Knf0E
zO5leG{izBYS{#1<h`@%=^u&0Tw68HZ{SLjcj*u`xjJrz+DIuv%NMVKn69nL3f1P)r
zM;1frRkSg_10oo;yU?l2Slcc|$uOAHk5VEKcjck9KYc;(tO?}{809<KkY_zf!c#uf
z$`#z)eU87a`nCh;I0YBL#2HJT$R&9UF!(vd*?ALoR&1B%&2|Dq0SAP!96o*bN?W!d
zvPeKhVZnGbdoi^j<&25^vjqxLBofh4Nc1PR!=%C;!cd19=u#q*Xr-niIo*P$tzvU9
ztC?cp@}R0cJ0?Dh|6SAuZ9C+a)#y*$E0vBiNEEM$bR_Lx;HDj*k4gPSt+pv=lAJ!q
zeZE+DAWI>tIe6S>%tGzUQYlZpT`DT(L=vP38q*Mc(#4)xHvLL<2JhBtjXyRcqB0Rx
nD0;^(K3SJN6L8@<{}x~XC=(iX4f+Ps00000NkvXXu0mjfzqvFl
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..51b2e06263c2ee32ec7008c76987595bc204b4cb
GIT binary patch
literal 7013
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
DfdPh$
--- a/toolkit/themes/pinstripe/global/jar.mn
+++ b/toolkit/themes/pinstripe/global/jar.mn
@@ -108,16 +108,18 @@ classic.jar:
 +  skin/classic/global/console/console-error-dash.gif                 (console/console-error-dash.gif)
 +  skin/classic/global/console/console.css                            (console/console.css)
 +  skin/classic/global/icons/alltabs.png                              (icons/alltabs.png)
 +  skin/classic/global/icons/alert-error.gif                          (icons/alert-error.gif)
 +  skin/classic/global/icons/alert-message.gif                        (icons/alert-message.gif)
 +  skin/classic/global/icons/alert-question.gif                       (icons/alert-question.gif)
 +  skin/classic/global/icons/autocomplete-dropmarker.png              (icons/autocomplete-dropmarker.png)
 +  skin/classic/global/icons/autoscroll.png                           (icons/autoscroll.png)
++  skin/classic/global/icons/blacklist_favicon.png                    (icons/blacklist_favicon.png)
++  skin/classic/global/icons/blacklist_large.png                      (icons/blacklist_large.png)
 +  skin/classic/global/icons/chevron.png                              (icons/chevron.png)
 +  skin/classic/global/icons/close.gif                                (icons/close.gif)
 +  skin/classic/global/icons/closetab-active.png                      (icons/closetab-active.png)
 +  skin/classic/global/icons/closetab-hover.png                       (icons/closetab-hover.png)
 +  skin/classic/global/icons/closetab.png                             (icons/closetab.png)
 +  skin/classic/global/icons/find.png                                 (icons/find.png)
 +  skin/classic/global/icons/find-bar-background.png                  (icons/find-bar-background.png)
 +  skin/classic/global/icons/find-bar-flash.png                       (icons/find-bar-flash.png)
--- a/toolkit/themes/pinstripe/global/netError.css
+++ b/toolkit/themes/pinstripe/global/netError.css
@@ -98,8 +98,29 @@ body[dir="rtl"] #brand {
 
 #brand > p {
   margin: 0;
 }
 
 #errorContainer {
   display: none;
 }
+
+/* Custom styling for 'blacklist' error class */
+:root.blacklist #errorTitle, :root.blacklist #errorLongContent,
+:root.blacklist #errorShortDesc, :root.blacklist #errorLongDesc {
+  background-color: #722; /* Dark red */
+  color: white;
+}
+
+:root.blacklist #errorPageContainer {
+  background-image: url("chrome://global/skin/icons/blacklist_large.png");
+  background-color: #722;
+}
+
+:root.blacklist {
+  background: #333;
+}
+
+:root.blacklist #errorTryAgain {
+  display: none;
+}
+
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2558067d9d412055ff44a3cedd5da98d672868e0
GIT binary patch
literal 705
zc$@*j0zUnTP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004XF*Lt007q5
z)K6G40000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!Q%OWYRCwBq
zQ%!GDK@>gn0f;~fCanhPMk{q=abbVJi)nPDJ0t!9w$@)#*Zcvk?(E9AcuN<?7<MhO
zjcp=@NC*h>G4Er%_d!S@MxA8xl9_wXJ?Gpv0!!<|)5m2Sh81hALpwSXLhyEl6xE&m
zgVz`9#RXuV0Im?SxO(Fjve(y<%jY4qM7P<*pw+^UZ^xMQx^<zHv$OxMF(-Kc<WU|7
z4^!FIOkwLDbTW=uOoIxkGeC;qdp>;QqjhqG&T+jDsct`bd(hBKFfqnWrLvi;#XAT*
zLx=!~YpPL^IwlCbfJi*#)(S8qlWCuRb?ItTym@%POeL>2ig%G%NkhdHZ4IS~Knf0E
zO5leG{izBYS{#1<h`@%=^u&0Tw68HZ{SLjcj*u`xjJrz+DIuv%NMVKn69nL3f1P)r
zM;1frRkSg_10oo;yU?l2Slcc|$uOAHk5VEKcjck9KYc;(tO?}{809<KkY_zf!c#uf
z$`#z)eU87a`nCh;I0YBL#2HJT$R&9UF!(vd*?ALoR&1B%&2|Dq0SAP!96o*bN?W!d
zvPeKhVZnGbdoi^j<&25^vjqxLBofh4Nc1PR!=%C;!cd19=u#q*Xr-niIo*P$tzvU9
ztC?cp@}R0cJ0?Dh|6SAuZ9C+a)#y*$E0vBiNEEM$bR_Lx;HDj*k4gPSt+pv=lAJ!q
zeZE+DAWI>tIe6S>%tGzUQYlZpT`DT(L=vP38q*Mc(#4)xHvLL<2JhBtjXyRcqB0Rx
nD0;^(K3SJN6L8@<{}x~XC=(iX4f+Ps00000NkvXXu0mjfzqvFl
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..51b2e06263c2ee32ec7008c76987595bc204b4cb
GIT binary patch
literal 7013
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
DfdPh$
--- a/toolkit/themes/winstripe/global/jar.mn
+++ b/toolkit/themes/winstripe/global/jar.mn
@@ -70,16 +70,18 @@ classic.jar:
     skin/classic/global/icons/alltabs-box-overflow-start-bkgnd-animate.png   (icons/alltabs-box-overflow-start-bkgnd-animate.png)
 	skin/classic/global/icons/alltabs-box-overflow-end-bkgnd-animate.png   (icons/alltabs-box-overflow-end-bkgnd-animate.png)
 	skin/classic/global/icons/alltabs-box-overflow-start-bkgnd.png (icons/alltabs-box-overflow-start-bkgnd.png)
         skin/classic/global/icons/autocomplete-dropmark-arrow.png   (icons/autocomplete-dropmark-arrow.png)
         skin/classic/global/icons/autocomplete-dropmark-bkgnd.png   (icons/autocomplete-dropmark-bkgnd.png)
         skin/classic/global/icons/autocomplete-dropmark-bkgnd-mid-top.png    (icons/autocomplete-dropmark-bkgnd-mid-top.png)
         skin/classic/global/icons/autocomplete-dropmark-bkgnd-mid-bottom.png (icons/autocomplete-dropmark-bkgnd-mid-bottom.png)
         skin/classic/global/icons/autoscroll.png                    (icons/autoscroll.png)
+        skin/classic/global/icons/blacklist_favicon.png             (icons/blacklist_favicon.png)
+        skin/classic/global/icons/blacklist_large.png               (icons/blacklist_large.png)
         skin/classic/global/icons/Close.gif                         (icons/Close.gif)
         skin/classic/global/icons/close.png                         (icons/close.png)
         skin/classic/global/icons/alltabs.png                       (icons/alltabs.png)
         skin/classic/global/icons/Error.png                         (icons/Error.png)
         skin/classic/global/icons/find.png                          (icons/find.png)
         skin/classic/global/icons/folder-item.png                   (icons/folder-item.png)
         skin/classic/global/icons/Minimize.gif                      (icons/Minimize.gif)
         skin/classic/global/icons/notfound.png                      (icons/notfound.png)
--- a/toolkit/themes/winstripe/global/netError.css
+++ b/toolkit/themes/winstripe/global/netError.css
@@ -98,8 +98,28 @@ body[dir="rtl"] #brand {
 
 #brand > p {
   margin: 0;
 }
 
 #errorContainer {
   display: none;
 }
+
+/* Custom styling for 'blacklist' error class */
+:root.blacklist #errorTitle, :root.blacklist #errorLongContent,
+:root.blacklist #errorShortDesc, :root.blacklist #errorLongDesc {
+  background-color: #722; /* Dark red */
+  color: white;
+}
+
+:root.blacklist #errorPageContainer {
+  background-image: url("chrome://global/skin/icons/blacklist_large.png");
+  background-color: #722;
+}
+
+:root.blacklist {
+  background: #333;
+}
+
+:root.blacklist #errorTryAgain {
+  display: none;
+}