Bug 822371 - Mixed Content Doorhanger UI. r=dao
authorTanvi Vyas <tvyas@mozilla.com>
Wed, 30 Jan 2013 00:04:28 -0800
changeset 120343 a74d6901fd71bb53de89ea97a797d367a6f9c476
parent 120341 dd6cfdf29d037aa46a63c0440488041eb5469c8c
child 120344 4068ef6c54a6355d23893c56afa69b8de4d4b320
push id24247
push userryanvm@gmail.com
push dateWed, 30 Jan 2013 15:20:29 +0000
treeherdermozilla-central@2cc710018b14 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersdao
bugs822371
milestone21.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 822371 - Mixed Content Doorhanger UI. r=dao
browser/app/profile/firefox.js
browser/base/content/browser.js
browser/base/content/browser.xul
browser/locales/en-US/chrome/browser/browser.dtd
browser/locales/en-US/chrome/browser/browser.properties
browser/themes/gnomestripe/browser.css
browser/themes/gnomestripe/jar.mn
browser/themes/gnomestripe/mixed-content-blocked-16.png
browser/themes/pinstripe/browser.css
browser/themes/pinstripe/jar.mn
browser/themes/pinstripe/mixed-content-blocked-16.png
browser/themes/pinstripe/mixed-content-blocked-16@2x.png
browser/themes/pinstripe/mixed-content-blocked-64.png
browser/themes/pinstripe/mixed-content-blocked-64@2x.png
browser/themes/winstripe/browser.css
browser/themes/winstripe/jar.mn
browser/themes/winstripe/mixed-content-blocked-16.png
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -752,16 +752,17 @@ pref("urlclassifier.gethashtables", "goo
 
 // If an urlclassifier table has not been updated in this number of seconds,
 // a gethash request will be forced to check that the result is still in
 // the database.
 pref("urlclassifier.max-complete-age", 2700);
 #endif
 
 pref("browser.geolocation.warning.infoURL", "http://www.mozilla.com/%LOCALE%/firefox/geolocation/");
+pref("browser.mixedcontent.warning.infoURL", "http://support.mozilla.org/1/%APP%/%VERSION%/%OS%/%LOCALE%/mixed-content/");
 
 pref("browser.EULA.version", 3);
 pref("browser.rights.version", 3);
 pref("browser.rights.3.shown", false);
 
 #ifdef DEBUG
 // Don't show the about:rights notification in debug builds.
 pref("browser.rights.override", true);
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -6643,24 +6643,66 @@ var gIdentityHandler = {
     let nsIWebProgressListener = Ci.nsIWebProgressListener;
     if (location.protocol == "chrome:" || location.protocol == "about:") {
       this.setMode(this.IDENTITY_MODE_CHROMEUI);
     } else if (state & nsIWebProgressListener.STATE_IDENTITY_EV_TOPLEVEL) {
       this.setMode(this.IDENTITY_MODE_IDENTIFIED);
     } else if (state & nsIWebProgressListener.STATE_IS_SECURE) {
       this.setMode(this.IDENTITY_MODE_DOMAIN_VERIFIED);
     } else if (state & nsIWebProgressListener.STATE_IS_BROKEN) {
-      if (gBrowser.docShell.hasMixedActiveContentLoaded) {
+      if (state & nsIWebProgressListener.STATE_LOADED_MIXED_ACTIVE_CONTENT) {
         this.setMode(this.IDENTITY_MODE_MIXED_ACTIVE_CONTENT);
       } else {
         this.setMode(this.IDENTITY_MODE_MIXED_CONTENT);
       }
     } else {
       this.setMode(this.IDENTITY_MODE_UNKNOWN);
     }
+
+    // Ensure the doorhanger is shown when mixed active content is blocked.
+    if (state & nsIWebProgressListener.STATE_BLOCKED_MIXED_ACTIVE_CONTENT)
+      this.showMixedContentDoorhanger();
+  },
+
+  /**
+   * Display the Mixed Content Blocker doohanger, providing an option
+   * to the user to override mixed content blocking
+   */
+  showMixedContentDoorhanger : function() {
+    // If we've already got an active notification, bail out to avoid showing it repeatedly.
+    if (PopupNotifications.getNotification("mixed-content-blocked", gBrowser.selectedBrowser))
+      return;
+
+    let helplink = document.getElementById("mixed-content-blocked-helplink");
+    helplink.href = Services.urlFormatter.formatURLPref("browser.mixedcontent.warning.infoURL");
+
+    let brandBundle = document.getElementById("bundle_brand");
+    let brandShortName = brandBundle.getString("brandShortName");
+    let messageString = gNavigatorBundle.getFormattedString("mixedContentBlocked.message", [brandShortName]);
+    let action = {
+      label: gNavigatorBundle.getString("mixedContentBlocked.keepBlockingButton.label"),
+      accessKey: gNavigatorBundle.getString("mixedContentBlocked.keepBlockingButton.accesskey"),
+      callback: function() { /* NOP */ }
+    };
+    let secondaryActions = [
+      {
+        label: gNavigatorBundle.getString("mixedContentBlocked.unblock.label"),
+        accessKey: gNavigatorBundle.getString("mixedContentBlocked.unblock.accesskey"),
+        callback: function() {
+          // Reload the page with the content unblocked
+          BrowserReloadWithFlags(nsIWebNavigation.LOAD_FLAGS_ALLOW_MIXED_CONTENT);
+        }
+      }
+    ];
+    let options = {
+      dismissed: true,
+    };
+    PopupNotifications.show(gBrowser.selectedBrowser, "mixed-content-blocked",
+                            messageString, "mixed-content-blocked-notification-icon",
+                            action, secondaryActions, options);
   },
 
   /**
    * Return the eTLD+1 version of the current hostname
    */
   getEffectiveHost : function() {
     if (!this._IDNService)
       this._IDNService = Cc["@mozilla.org/network/idn-service;1"]
--- a/browser/base/content/browser.xul
+++ b/browser/base/content/browser.xul
@@ -468,16 +468,27 @@
     </popupnotification>
 
     <popupnotification id="geolocation-notification" hidden="true">
       <popupnotificationcontent orient="vertical" align="start">
         <separator class="thin"/>
         <label id="geolocation-learnmore-link" class="text-link"/>
       </popupnotificationcontent>
     </popupnotification>
+
+    <popupnotification id="mixed-content-blocked-notification" hidden="true">
+      <popupnotificationcontent orient="vertical" align="start">
+        <separator/>
+        <description id="mixed-content-blocked-moreinfo">&mixedContentBlocked.moreinfo;</description>
+        <separator/>
+        <label id="mixed-content-blocked-helplink" class="text-link"
+               value="&mixedContentBlocked.helplink;"/>
+      </popupnotificationcontent>
+    </popupnotification>
+
   </popupset>
 
 #ifdef CAN_DRAW_IN_TITLEBAR
 <vbox id="titlebar">
   <hbox id="titlebar-content">
     <hbox id="appmenu-button-container">
       <button id="appmenu-button"
               type="menu"
@@ -582,16 +593,17 @@
             <image id="identity-notification-icon" class="notification-anchor-icon" role="button"/>
             <image id="geo-notification-icon" class="notification-anchor-icon" role="button"/>
             <image id="addons-notification-icon" class="notification-anchor-icon" role="button"/>
             <image id="indexedDB-notification-icon" class="notification-anchor-icon" role="button"/>
             <image id="password-notification-icon" class="notification-anchor-icon" role="button"/>
             <image id="webapps-notification-icon" class="notification-anchor-icon" role="button"/>
             <image id="plugins-notification-icon" class="notification-anchor-icon" role="button"/>
             <image id="blocked-plugins-notification-icon" class="notification-anchor-icon" role="button"/>
+            <image id="mixed-content-blocked-notification-icon" class="notification-anchor-icon" role="button"/>
             <image id="webRTC-shareDevices-notification-icon" class="notification-anchor-icon" role="button"/>
             <image id="webRTC-sharingDevices-notification-icon" class="notification-anchor-icon" role="button"/>
           </box>
           <!-- Use onclick instead of normal popup= syntax since the popup
                code fires onmousedown, and hence eats our favicon drag events.
                We only add the identity-box button to the tab order when the location bar
                has focus, otherwise pressing F6 focuses it instead of the location bar -->
           <box id="identity-box" role="button"
--- a/browser/locales/en-US/chrome/browser/browser.dtd
+++ b/browser/locales/en-US/chrome/browser/browser.dtd
@@ -626,8 +626,11 @@ just addresses the organization to follo
 
 <!ENTITY getUserMedia.selectCamera.label "Camera to share:">
 <!ENTITY getUserMedia.selectCamera.accesskey "C">
 <!ENTITY getUserMedia.selectMicrophone.label "Microphone to share:">
 <!ENTITY getUserMedia.selectMicrophone.accesskey "M">
 
 <!ENTITY webrtcIndicatorButton.label "Camera / Microphone Access">
 <!ENTITY webrtcIndicatorButton.tooltip "Display sites you are currently sharing your camera or microphone with">
+
+<!ENTITY mixedContentBlocked.helplink "Learn more">
+<!ENTITY mixedContentBlocked.moreinfo "Most websites will still work properly even when this content is blocked.">
--- a/browser/locales/en-US/chrome/browser/browser.properties
+++ b/browser/locales/en-US/chrome/browser/browser.properties
@@ -430,8 +430,16 @@ getUserMedia.noVideo.label = No Video
 getUserMedia.noAudio.label = No Audio
 getUserMedia.shareSelectedDevices.label = Share Selected Device;Share Selected Devices
 getUserMedia.shareSelectedDevices.accesskey = S
 getUserMedia.denyRequest.label = Don't Share
 getUserMedia.denyRequest.accesskey = D
 getUserMedia.sharingCamera.message = You are currently sharing your camera with %S.
 getUserMedia.sharingMicrophone.message = You are currently sharing your microphone with %S.
 getUserMedia.sharingCameraAndMicrophone.message = You are currently sharing your camera and microphone with %S.
+
+# Mixed Content Blocker Doorhanger Notification
+# LOCALIZATION NOTE - %S is brandShortName
+mixedContentBlocked.message = %S has blocked content that isn't secure.
+mixedContentBlocked.keepBlockingButton.label = Keep Blocking
+mixedContentBlocked.keepBlockingButton.accesskey = B
+mixedContentBlocked.unblock.label = Disable Protection on This Page
+mixedContentBlocked.unblock.accesskey = D
--- a/browser/themes/gnomestripe/browser.css
+++ b/browser/themes/gnomestripe/browser.css
@@ -1297,16 +1297,20 @@ toolbar[iconsize="small"] #webrtc-status
   from {
     opacity: 0;
   }
   to {
     opacity: 1;
   }
 }
 
+#mixed-content-blocked-notification-icon {
+  list-style-image: url(chrome://browser/skin/mixed-content-blocked-16.png);
+}
+
 #webRTC-shareDevices-notification-icon {
   list-style-image: url(chrome://browser/skin/webRTC-shareDevice-16.png);
 }
 
 #webRTC-sharingDevices-notification-icon {
   list-style-image: url(chrome://browser/skin/webRTC-sharingDevice-16.png);
 }
 
--- a/browser/themes/gnomestripe/jar.mn
+++ b/browser/themes/gnomestripe/jar.mn
@@ -25,16 +25,17 @@ browser.jar:
   skin/classic/browser/Go-arrow.png
   skin/classic/browser/identity.png
   skin/classic/browser/identity-icons-generic.png
   skin/classic/browser/identity-icons-https.png
   skin/classic/browser/identity-icons-https-ev.png
   skin/classic/browser/identity-icons-https-mixed-active.png
   skin/classic/browser/Info.png
   skin/classic/browser/KUI-close.png
+  skin/classic/browser/mixed-content-blocked-16.png
   skin/classic/browser/monitor.png
   skin/classic/browser/monitor_16-10.png
 * skin/classic/browser/pageInfo.css
   skin/classic/browser/pageInfo.png
   skin/classic/browser/page-livemarks.png
   skin/classic/browser/Privacy-16.png
   skin/classic/browser/Privacy-48.png
   skin/classic/browser/privatebrowsing-mask.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7cf33ec4c5acc81330208f5f5ac45fa5435c3d1a
GIT binary patch
literal 346
zc$@)R0j2(lP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0003YNkl<Zc-p1Y
zu}Z^G6o6rI6kNJ=3;GC7f|I3C+AcnXu6+Wh#1KLVgcuT%!P(7@(kBqi0~nvcC=S}m
z2K4w3XK1+54jn!?xhMQta(6^zE1ic$QCM(L;Ynv}V<6A-9#S+AeBwjrMt8l=K$c|_
zyg;zP7<<^&c>zI<i4jQC^c5?d;}Ey_TK}5vR;Z0Yk|ZVWaEc`aqI&@PPH6<<IG*DX
z7Z7CxI4dzX0#Ovjs4<2pBcShG8-XwkXAm4gR4c&qJ_Iu(5Cp*xf)gxtZUuNghG1v}
zeBbXwaEU9OTLIk(`t5-7Jg>q#MmWRs+HRz~>d!yXb=?8p@Piv1z|#3!cZ2SLavaCP
sJp_#sJ+n4nCS}|96c1|p-)-E=FZ@fcYF)+4`v3p{07*qoM6N<$f<M=eoB#j-
--- a/browser/themes/pinstripe/browser.css
+++ b/browser/themes/pinstripe/browser.css
@@ -3090,16 +3090,25 @@ toolbarbutton.chevron > .toolbarbutton-m
 }
 
 @media (min-resolution: 2dppx) {
   #plugins-notification-icon {
     list-style-image: url(chrome://mozapps/skin/plugins/pluginGeneric.png);
   }
 }
 
+#mixed-content-blocked-notification-icon {
+  list-style-image: url(chrome://browser/skin/mixed-content-blocked-16.png);
+}
+@media (min-resolution: 2dppx) {
+  #mixed-content-blocked-notification-icon {
+    list-style-image: url(chrome://browser/skin/mixed-content-blocked-16@2x.png);
+  }
+}
+
 #webRTC-shareDevices-notification-icon {
   list-style-image: url(chrome://browser/skin/webRTC-shareDevice-16.png);
 }
 @media (min-resolution: 2dppx) {
   #webRTC-shareDevices-notification-icon {
     list-style-image: url(chrome://browser/skin/webRTC-shareDevice-16@2x.png);
   }
 }
@@ -3183,16 +3192,29 @@ toolbarbutton.chevron > .toolbarbutton-m
 .popup-notification-icon[popupid="password-change"] {
   list-style-image: url(chrome://mozapps/skin/passwordmgr/key-64.png);
 }
 
 .popup-notification-icon[popupid="webapps-install"] {
   list-style-image: url(chrome://browser/skin/webapps-64.png);
 }
 
+.popup-notification-icon[popupid="mixed-content-blocked"] {
+  list-style-image: url(chrome://browser/skin/mixed-content-blocked-64.png);
+}
+@media (min-resolution: 2dppx) {
+  .popup-notification-icon[popupid="mixed-content-blocked"] {
+    list-style-image: url(chrome://browser/skin/mixed-content-blocked-64@2x.png);
+  }
+}
+
+#mixed-content-blocked-helplink {
+  margin: 0px;
+}
+
 .popup-notification-icon[popupid="webRTC-sharingDevices"],
 .popup-notification-icon[popupid="webRTC-shareDevices"] {
   list-style-image: url(chrome://browser/skin/webRTC-shareDevice-64.png);
 }
 @media (min-resolution: 2dppx) {
   .popup-notification-icon[popupid="webRTC-sharingDevices"],
   .popup-notification-icon[popupid="webRTC-shareDevices"] {
     list-style-image: url(chrome://browser/skin/webRTC-shareDevice-64@2x.png);
--- a/browser/themes/pinstripe/jar.mn
+++ b/browser/themes/pinstripe/jar.mn
@@ -35,16 +35,20 @@ browser.jar:
   skin/classic/browser/identity-icons-https-ev@2x.png
   skin/classic/browser/identity-icons-https-mixed-active.png
   skin/classic/browser/identity-icons-https-mixed-active@2x.png
   skin/classic/browser/Info.png
   skin/classic/browser/KUI-background.png
   skin/classic/browser/KUI-close.png
   skin/classic/browser/menu-back.png
   skin/classic/browser/menu-forward.png
+  skin/classic/browser/mixed-content-blocked-16.png
+  skin/classic/browser/mixed-content-blocked-16@2x.png
+  skin/classic/browser/mixed-content-blocked-64.png
+  skin/classic/browser/mixed-content-blocked-64@2x.png
   skin/classic/browser/panel-expander-closed.png
   skin/classic/browser/panel-expander-closed@2x.png
   skin/classic/browser/panel-expander-open.png
   skin/classic/browser/panel-expander-open@2x.png
   skin/classic/browser/panel-plus-sign.png
   skin/classic/browser/page-livemarks.png
   skin/classic/browser/page-livemarks@2x.png
   skin/classic/browser/pageInfo.css
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7cf33ec4c5acc81330208f5f5ac45fa5435c3d1a
GIT binary patch
literal 346
zc$@)R0j2(lP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0003YNkl<Zc-p1Y
zu}Z^G6o6rI6kNJ=3;GC7f|I3C+AcnXu6+Wh#1KLVgcuT%!P(7@(kBqi0~nvcC=S}m
z2K4w3XK1+54jn!?xhMQta(6^zE1ic$QCM(L;Ynv}V<6A-9#S+AeBwjrMt8l=K$c|_
zyg;zP7<<^&c>zI<i4jQC^c5?d;}Ey_TK}5vR;Z0Yk|ZVWaEc`aqI&@PPH6<<IG*DX
z7Z7CxI4dzX0#Ovjs4<2pBcShG8-XwkXAm4gR4c&qJ_Iu(5Cp*xf)gxtZUuNghG1v}
zeBbXwaEU9OTLIk(`t5-7Jg>q#MmWRs+HRz~>d!yXb=?8p@Piv1z|#3!cZ2SLavaCP
sJp_#sJ+n4nCS}|96c1|p-)-E=FZ@fcYF)+4`v3p{07*qoM6N<$f<M=eoB#j-
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c2e49b3a7fb616bf5b84f1e99575e8d1658d2321
GIT binary patch
literal 691
zc$@*V0!;mhP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80007dNkl<Zc-rmP
zze`nd7{~DkB_$<n5X4o2hN5Wb*T0|;2qL%y4$&6UQdGnB`ukU2f9q1VxD`PVQITT=
z5tM>rdLbeLn<6X3>eG98gv*z6`d(3}q2aZB&+{DK)8Tte(qHxO2h7aOBsq&5R$R`{
zEU^24>FMch6}W_DD8;hRRKTz&0cE&~Pf#&@_6o{&6)-h5Rgbq&f(<-(8&Jr1>vtS5
zIXPK{+fd*a9^xFzVXoZI9{P*|w@_770E4HIhXRjr6y{2B2o^Z%vkK&KIvOxBF_DJ~
zd_^nF)nORx5G+Nj@2WsP8ZbUS{sM9zaRP=4+{6}Cz|#2cN65X128@l3-Gy8;40Tw5
z5?Dkt<nBcSMn^|;kh=gw9!g;m7a=zi4Hy|2xeU213@cCyi^xLmax@^9%QZo67KUd~
z3X8Y{xu$5q@bK_S$j!qr3#G7#dB~lL1`G`i)j)0yhAfoABGw>R6A1tY2M0ex*g`qZ
zLn$nc@BV=BrRY!bz`(#u$Q{EOD21i*UAb392lV&%&q1yQ2k;Y0U}=0;Zm#HnzP`R|
zkn4b90ZL$Ld{^#z(E+`^y$z6i3PT1;V1Mugat%cX^z`)9K<+yZVjpr)z*1D<8{}$=
z3vk`t-HVWWfGQXo@eXp9pc3~Xx47dQQCC-2KU81^$6=_%4XncgNAM=t9o%t1XJ=<E
zR-po$XvcmSDq(IvGCrdMtEi0xB<twtsKzrW@BwY8bZvMK1?Ew`t6On4n=QpPY(jx`
zr@*G~l<xXk-rnB6?Jyoe5zH{_dwUTOYQz#0Sn_A)_9h^c$s{R33tqbxKeIse{r~@t
Ze*-iXDJC4w(s2L)002ovPDHLkV1f@5Ej$1K
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cac4415140767c17f9132e79e68805a959f14591
GIT binary patch
literal 2063
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
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4ef0a5cb1a2a7eaad57d78d2a7015d0c4a9c9711
GIT binary patch
literal 4788
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
O0000<MNUMnLSTa1*%j;n
--- a/browser/themes/winstripe/browser.css
+++ b/browser/themes/winstripe/browser.css
@@ -2299,16 +2299,20 @@ toolbarbutton.bookmark-item[dragover="tr
 .popup-notification-icon[popupid="password-change"] {
   list-style-image: url(chrome://mozapps/skin/passwordmgr/key-64.png);
 }
 
 .popup-notification-icon[popupid="webapps-install"] {
   list-style-image: url(chrome://browser/skin/webapps-64.png);
 }
 
+.popup-notification-icon[popupid="mixed-content-blocked"] {
+  list-style-image: url(chrome://browser/skin/mixed-content-blocked-64.png);
+}
+
 .popup-notification-icon[popupid="webRTC-sharingDevices"],
 .popup-notification-icon[popupid="webRTC-shareDevices"] {
   list-style-image: url(chrome://browser/skin/webRTC-shareDevice-64.png);
 }
 
 /* Notification icon box */
 #notification-popup-box {
   position: relative;
@@ -2386,16 +2390,20 @@ toolbarbutton.bookmark-item[dragover="tr
   from {
     opacity: 0;
   }
   to {
     opacity: 1;
   }
 }
 
+#mixed-content-blocked-notification-icon {
+  list-style-image: url(chrome://browser/skin/mixed-content-blocked-16.png);
+}
+
 #webRTC-shareDevices-notification-icon {
   list-style-image: url(chrome://browser/skin/webRTC-shareDevice-16.png);
 }
 
 #webRTC-sharingDevices-notification-icon {
   list-style-image: url(chrome://browser/skin/webRTC-sharingDevice-16.png);
 }
 
--- a/browser/themes/winstripe/jar.mn
+++ b/browser/themes/winstripe/jar.mn
@@ -33,16 +33,17 @@ browser.jar:
         skin/classic/browser/identity-icons-https-ev.png
         skin/classic/browser/identity-icons-https-mixed-active.png
         skin/classic/browser/keyhole-forward-mask.svg
         skin/classic/browser/KUI-background.png
         skin/classic/browser/KUI-close.png
         skin/classic/browser/livemark-folder.png
         skin/classic/browser/menu-back.png
         skin/classic/browser/menu-forward.png
+        skin/classic/browser/mixed-content-blocked-16.png
         skin/classic/browser/monitor.png
         skin/classic/browser/monitor_16-10.png
         skin/classic/browser/pageInfo.css
         skin/classic/browser/pageInfo.png
         skin/classic/browser/page-livemarks.png                      (feeds/feedIcon16.png)
         skin/classic/browser/Privacy-16.png
         skin/classic/browser/Privacy-48.png
         skin/classic/browser/privatebrowsing-light.png
@@ -260,16 +261,17 @@ browser.jar:
         skin/classic/aero/browser/identity-icons-https-ev.png
         skin/classic/aero/browser/identity-icons-https-mixed-active.png
         skin/classic/aero/browser/keyhole-forward-mask.svg
         skin/classic/aero/browser/KUI-background.png
         skin/classic/aero/browser/KUI-close.png
         skin/classic/aero/browser/livemark-folder.png                (livemark-folder-aero.png)
         skin/classic/aero/browser/menu-back.png                      (menu-back-aero.png)
         skin/classic/aero/browser/menu-forward.png                   (menu-forward-aero.png)
+        skin/classic/aero/browser/mixed-content-blocked-16.png
         skin/classic/aero/browser/monitor.png
         skin/classic/aero/browser/monitor_16-10.png
         skin/classic/aero/browser/pageInfo.css
         skin/classic/aero/browser/pageInfo.png                       (pageInfo-aero.png)
         skin/classic/aero/browser/page-livemarks.png                 (feeds/feedIcon16-aero.png)
         skin/classic/aero/browser/Privacy-16.png                     (Privacy-16-aero.png)
         skin/classic/aero/browser/Privacy-48.png                     (Privacy-48-aero.png)
         skin/classic/aero/browser/privatebrowsing-light.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7cf33ec4c5acc81330208f5f5ac45fa5435c3d1a
GIT binary patch
literal 346
zc$@)R0j2(lP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0003YNkl<Zc-p1Y
zu}Z^G6o6rI6kNJ=3;GC7f|I3C+AcnXu6+Wh#1KLVgcuT%!P(7@(kBqi0~nvcC=S}m
z2K4w3XK1+54jn!?xhMQta(6^zE1ic$QCM(L;Ynv}V<6A-9#S+AeBwjrMt8l=K$c|_
zyg;zP7<<^&c>zI<i4jQC^c5?d;}Ey_TK}5vR;Z0Yk|ZVWaEc`aqI&@PPH6<<IG*DX
z7Z7CxI4dzX0#Ovjs4<2pBcShG8-XwkXAm4gR4c&qJ_Iu(5Cp*xf)gxtZUuNghG1v}
zeBbXwaEU9OTLIk(`t5-7Jg>q#MmWRs+HRz~>d!yXb=?8p@Piv1z|#3!cZ2SLavaCP
sJp_#sJ+n4nCS}|96c1|p-)-E=FZ@fcYF)+4`v3p{07*qoM6N<$f<M=eoB#j-