Bug 793338 - Implement blocklist click-to-play plugin notification popup UI. r=jaws a=akeybl CALENDAR_1_9b1_BUILD1 CALENDAR_1_9b1_RELEASE
authorDavid Keeler <dkeeler@mozilla.com>
Sat, 29 Sep 2012 19:32:34 -0700
changeset 107038 a4880b03634f8858f7d25f42a205dbd02a76a0d3
parent 107037 93aa14ba87dd07e66ea5d6d9f56e8bbff6f0c5b0
child 107039 4a0e0685addbd2ce4b95fdaefb7a70b41157693e
child 107041 9be5b2790273209da3d35486b9b8bf4d58dfe46a
push idunknown
push userunknown
push dateunknown
reviewersjaws, akeybl
bugs793338
milestone17.0a2
Bug 793338 - Implement blocklist click-to-play plugin notification popup UI. r=jaws a=akeybl
browser/base/content/browser-plugins.js
browser/base/content/urlbarBindings.xml
browser/locales/en-US/chrome/browser/browser.properties
browser/themes/gnomestripe/browser.css
browser/themes/pinstripe/browser.css
browser/themes/winstripe/browser.css
toolkit/locales/en-US/chrome/global/notification.dtd
toolkit/themes/pinstripe/mozapps/extensions/stripes-info-negative-small.png
toolkit/themes/pinstripe/mozapps/jar.mn
toolkit/themes/winstripe/mozapps/extensions/stripes-info-negative-small.png
toolkit/themes/winstripe/mozapps/jar.mn
--- a/browser/base/content/browser-plugins.js
+++ b/browser/base/content/browser-plugins.js
@@ -430,18 +430,39 @@ var gPluginHandler = {
         let pluginName = getPluginInfo(plugin).pluginName;
         if (!pluginsDictionary[pluginName]) pluginsDictionary[pluginName] = [];
         pluginsDictionary[pluginName].push(objLoadingContent);
       }
     }
 
     let centerActions = [];
     for (let pluginName in pluginsDictionary) {
+      let plugin = pluginsDictionary[pluginName][0];
+      let warn = false;
+      let warningText = "";
+      let updateLink = Services.urlFormatter.formatURLPref("plugins.update.url");
+      if (plugin.pluginFallbackType) {
+        if (plugin.pluginFallbackType ==
+              Ci.nsIObjectLoadingContent.PLUGIN_VULNERABLE_UPDATABLE) {
+          warn = true;
+          warningText = gNavigatorBundle.getString("vulnerableUpdatablePluginWarning");
+        }
+        else if (plugin.pluginFallbackType ==
+                   Ci.nsIObjectLoadingContent.PLUGIN_VULNERABLE_NO_UPDATE) {
+          warn = true;
+          warningText = gNavigatorBundle.getString("vulnerableNoUpdatePluginWarning");
+          updateLink = "";
+        }
+      }
+
       let action = {
         message: pluginName,
+        warn: warn,
+        warningText: warningText,
+        updateLink: updateLink,
         label: gNavigatorBundle.getString("activateSinglePlugin"),
         callback: function() {
           let plugins = gPluginHandler._getPluginsByName(cwu, this.message);
           for (let objLoadingContent of plugins) {
             objLoadingContent.playPlugin();
           }
 
           let notification = PopupNotifications.getNotification("click-to-play-plugins", aBrowser);
@@ -463,16 +484,27 @@ var gPluginHandler = {
 
     let messageString = gNavigatorBundle.getString("activatePluginsMessage.message");
     let mainAction = {
       label: gNavigatorBundle.getString("activatePluginsMessage.label"),
       accessKey: gNavigatorBundle.getString("activatePluginsMessage.accesskey"),
       callback: function() { gPluginHandler.activatePlugins(contentWindow); }
     };
     let centerActions = gPluginHandler._makeCenterActions(aBrowser);
+    let cwu = contentWindow.QueryInterface(Ci.nsIInterfaceRequestor)
+                           .getInterface(Ci.nsIDOMWindowUtils);
+    let haveVulnerablePlugin = cwu.plugins.some(function(plugin) {
+      let objLoadingContent = plugin.QueryInterface(Ci.nsIObjectLoadingContent);
+      return (gPluginHandler.canActivatePlugin(objLoadingContent) &&
+              (objLoadingContent.pluginFallbackType == Ci.nsIObjectLoadingContent.PLUGIN_VULNERABLE_UPDATABLE ||
+               objLoadingContent.pluginFallbackType == Ci.nsIObjectLoadingContent.PLUGIN_VULNERABLE_NO_UPDATE));
+    });
+    if (haveVulnerablePlugin) {
+      messageString = gNavigatorBundle.getString("vulnerablePluginsMessage");
+    }
     let secondaryActions = [{
       label: gNavigatorBundle.getString("activatePluginsMessage.always"),
       accessKey: gNavigatorBundle.getString("activatePluginsMessage.always.accesskey"),
       callback: function () {
         Services.perms.add(aBrowser.currentURI, "plugins", Ci.nsIPermissionManager.ALLOW_ACTION);
         gPluginHandler.activatePlugins(contentWindow);
       }
     },{
--- a/browser/base/content/urlbarBindings.xml
+++ b/browser/base/content/urlbarBindings.xml
@@ -1426,27 +1426,35 @@
         ]]></body>
       </method>
 
     </implementation>
   </binding>
 
   <binding id="center-item">
     <content align="center">
-      <xul:hbox flex="1" align="center" class="center-item-box"
-                xbl:inherits="padbottom">
-        <xul:image class="center-item-icon"
-                   xbl:inherits="src=itemicon"/>
-        <xul:description class="center-item-label"
-                         xbl:inherits="xbl:text=itemtext"/>
-        <xul:spacer flex="1"/>
-        <xul:button class="popup-notification-menubutton center-item-button"
-                    oncommand="document.getBindingParent(this).runCallback();"
-                    xbl:inherits="label=buttonlabel"/>
-      </xul:hbox>
+      <xul:vbox flex="1" class="center-item-box"
+                xbl:inherits="warn,showseparator,padbottom">
+        <xul:hbox flex="1" align="center">
+          <xul:image class="center-item-icon"
+                     xbl:inherits="src=itemicon"/>
+          <xul:description class="center-item-label"
+                           xbl:inherits="xbl:text=itemtext"/>
+          <xul:spacer flex="1"/>
+          <xul:button class="popup-notification-menubutton center-item-button"
+                      oncommand="document.getBindingParent(this).runCallback();"
+                      xbl:inherits="label=buttonlabel"/>
+        </xul:hbox>
+        <xul:hbox flex="1" align="center" class="center-item-warning">
+          <xul:image class="center-item-warning-icon"/>
+          <xul:label class="center-item-warning-description" xbl:inherits="xbl:text=warningText"/>
+          <xul:label xbl:inherits="href=updateLink" value="&checkForUpdates;" class="text-link"/>
+          <xul:spacer flex="1"/>
+        </xul:hbox>
+      </xul:vbox>
     </content>
     <resources>
       <stylesheet src="chrome://global/skin/notification.css"/>
     </resources>
     <implementation>
       <field name="action"></field>
       <method name="runCallback">
         <body><![CDATA[
@@ -1506,23 +1514,36 @@
       </field>
       <field name="menupopup" readonly="true">
         document.getAnonymousElementByAttribute(this, "anonid", "menupopup");
       </field>
       <constructor><![CDATA[
         const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
         let popupnotification = this;
         let item = null;
+        let prev = null;
         this.notification.options.centerActions.forEach(function(action) {
           action.popupnotification = popupnotification;
           item = document.createElementNS(XUL_NS, "popupnotification-centeritem");
           item.action = action;
           item.setAttribute("itemtext", action.message);
           item.setAttribute("buttonlabel", action.label);
+          item.setAttribute("warn", action.warn);
+          item.setAttribute("warningText", action.warningText);
+          item.setAttribute("updateLink", action.updateLink);
+          if (prev &&
+              (prev.getAttribute("warn") == "true" ||
+               item.getAttribute("warn") == "true")) {
+            item.setAttribute("showseparator", true);
+            if (prev.getAttribute("warn") != "true") {
+              prev.setAttribute("padbottom", true);
+            }
+          }
           popupnotification.appendChild(item);
+          prev = item;
         });
         if (item != null) {
           item.setAttribute("padbottom", "true");
         }
       ]]></constructor>
     </implementation>
   </binding>
 
--- a/browser/locales/en-US/chrome/browser/browser.properties
+++ b/browser/locales/en-US/chrome/browser/browser.properties
@@ -123,18 +123,23 @@ activatePluginsMessage.message=Would you
 activatePluginsMessage.label=Activate All Plugins
 activatePluginsMessage.accesskey=A
 activatePluginsMessage.always=Always activate plugins for this site
 activatePluginsMessage.always.accesskey=c
 activatePluginsMessage.never=Never activate plugins for this site
 activatePluginsMessage.never.accesskey=N
 activateSinglePlugin=Activate
 PluginClickToPlay=Click here to activate the %S plugin.
+# LOCALIZATION NOTE - "vulnerable" indicates there is a security bug in the
+# plugin that is being exploited by attackers.
 PluginVulnerableUpdatable=This plugin is vulnerable and should be updated.
 PluginVulnerableNoUpdate=This plugin has security vulnerabilities.
+vulnerableUpdatablePluginWarning=Outdated Version!
+vulnerableNoUpdatePluginWarning=Vulnerable Plugin!
+vulnerablePluginsMessage=Some plugins have been deactivated for your safety.
 pluginInfo.unknownPlugin=Unknown
 
 # Sanitize
 # LOCALIZATION NOTE (sanitizeDialog2.everything.title): When "Time range to
 # clear" is set to "Everything", the Clear Recent History dialog's title is
 # changed to this.  See UI mockup and comment 11 at bug 480169 -->
 sanitizeDialog2.everything.title=Clear All History
 sanitizeButtonOK=Clear Now
--- a/browser/themes/gnomestripe/browser.css
+++ b/browser/themes/gnomestripe/browser.css
@@ -2878,11 +2878,52 @@ panel[type="arrow"][popupid="click-to-pl
 .center-item-icon {
   background-image: url("chrome://mozapps/skin/plugins/pluginGeneric-16.png");
   background-repeat: no-repeat;
   height: 16px;
   width: 16px;
   margin-bottom: 4px;
 }
 
+.center-item-box[warn="true"] {
+  background-image: url("chrome://mozapps/skin/extensions/stripes-info-negative-small.png");
+  background-repeat: repeat-x;
+  padding-top: 7px;
+  -moz-padding-end: 11px;
+  padding-bottom: 9px;
+  -moz-padding-start: 16px;
+}
+
+.center-item-box[padbottom="true"][warn="true"] {
+  padding-bottom: 7px;
+}
+
+.center-item-box[showseparator="true"] {
+  border-top: 1px solid hsla(211,79%,6%,.1);
+}
+
+.center-item-box[warn="false"] > .center-item-warning {
+  display: none;
+}
+
+.center-item-warning > .text-link {
+  color: #3d8cd7;
+}
+
+.center-item-warning > .text-link[href=""] {
+  display: none;
+}
+
+.center-item-warning-icon {
+  background-image: url("chrome://mozapps/skin/extensions/alerticon-info-negative.png");
+  background-repeat: no-repeat;
+  width: 16px;
+  height: 15px;
+  margin-bottom: 4px;
+}
+
+.center-item-warning-description {
+  color: #828282;
+}
+
 .center-item-button {
   min-width: 0;
 }
--- a/browser/themes/pinstripe/browser.css
+++ b/browser/themes/pinstripe/browser.css
@@ -3610,11 +3610,52 @@ panel[type="arrow"][popupid="click-to-pl
   background-image: url("chrome://mozapps/skin/plugins/pluginGeneric-16.png");
   background-repeat: no-repeat;
   height: 16px;
   width: 16px;
   margin-bottom: 4px;
   -moz-margin-end: 6px;
 }
 
+.center-item-box[warn="true"] {
+  background-image: url("chrome://mozapps/skin/extensions/stripes-info-negative-small.png");
+  background-repeat: repeat-x;
+  padding-top: 3px;
+  -moz-padding-end: 11px;
+  padding-bottom: 9px;
+  -moz-padding-start: 16px;
+}
+
+.center-item-box[padbottom="true"][warn="true"] {
+  padding-bottom: 7px;
+}
+
+.center-item-box[showseparator="true"] {
+  border-top: 1px solid hsla(211,79%,6%,.1);
+}
+
+.center-item-box[warn="false"] > .center-item-warning {
+  display: none;
+}
+
+.center-item-warning > .text-link {
+  color: #3d8cd7;
+}
+
+.center-item-warning > .text-link[href=""] {
+  display: none;
+}
+
+.center-item-warning-icon {
+  background-image: url("chrome://mozapps/skin/extensions/alerticon-info-negative.png");
+  background-repeat: no-repeat;
+  width: 16px;
+  height: 15px;
+  margin-bottom: 4px;
+}
+
+.center-item-warning-description {
+  color: #828282;
+}
+
 .center-item-button {
   min-width: 0;
 }
--- a/browser/themes/winstripe/browser.css
+++ b/browser/themes/winstripe/browser.css
@@ -3579,11 +3579,49 @@ chatbox[minimized="true"] {
 .center-item-icon {
   background-image: url("chrome://mozapps/skin/plugins/pluginGeneric-16.png");
   background-repeat: no-repeat;
   height: 16px;
   width: 16px;
   margin-bottom: 4px;
 }
 
+.center-item-box[warn="true"] {
+  background-image: url("chrome://mozapps/skin/extensions/stripes-info-negative-small.png");
+  background-repeat: repeat-x;
+  padding: 8px 16px 6px 16px;
+}
+
+.center-item-box[padbottom="true"][warn="true"] {
+  padding-bottom: 4px;
+}
+
+.center-item-box[showseparator="true"] {
+  border-top: 1px solid hsla(211,79%,6%,.1);
+}
+
+.center-item-box[warn="false"] > .center-item-warning {
+  display: none;
+}
+
+.center-item-warning > .text-link {
+  color: #3d8cd7;
+}
+
+.center-item-warning > .text-link[href=""] {
+  display: none;
+}
+
+.center-item-warning-icon {
+  background-image: url("chrome://mozapps/skin/extensions/alerticon-info-negative.png");
+  background-repeat: no-repeat;
+  width: 16px;
+  height: 15px;
+  margin-bottom: 4px;
+}
+
+.center-item-warning-description {
+  color: #828282;
+}
+
 .center-item-button {
   min-width: 0;
 }
--- a/toolkit/locales/en-US/chrome/global/notification.dtd
+++ b/toolkit/locales/en-US/chrome/global/notification.dtd
@@ -1,7 +1,9 @@
 <!-- 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/. -->
 
 <!ENTITY closeNotification.tooltip "Close this message">
 
 <!ENTITY closeNotificationItem.label "Not Now">
+
+<!ENTITY checkForUpdates "Check for updates…">
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..29f15f7b8c20a39a79454fc8b81852daa36548a2
GIT binary patch
literal 1563
zc$@(n2ITpPP)<h;3K|Lk000e1NJLTq0024w001lq1^@s6G&HNO00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn(
z5efmLUF78e00o;#L_t(&-nE&%k}E|Fg^$!dfA{i}5s?uPkdW{OyalgKL`DP;z-6Y#
zZXJT|vBzF}J?br7wY6L2S|5L{mUN_%7-Yys#laT|h9DR_UA`<C-q%-Cz`WXMMsfTb
zV^DTc(!ULwL#I(akVR1N%a30#Mz<b5j{(bSlllIcF(`lg^}ECd&7s$D%Iri{rel#L
zqY8fh;hW|6KmWm;vKum;Y{~@W`1N53%G24>*ejOR+>qxpdjoI~lvEM?^!+!>AAkEH
zKaBzF*(URR&mH761h?kUX*g&0+a-ts@P!^URLH;lkke2gnL#-iN`i<{xt=Udy&rNc
z*R=<)ni5n-5ZC*(!={iy1>b(|)0g>-dG$k{vyGQXK08vmzDFTrP_8FiTOwH@JMdO7
zLUuxO1t!QKg0DXJ>7V(G#SN)AXB#g$x%=$rupfs!XLbZ2cY1mww9k(UximoroHIt-
zLmtS<4RY-DV~`KtkMgijDn1RGmgR)mS?Q)BAR9+BgUIpv8iFEKNN;r=dkxvxk$kEd
z?=vR^!KV%>orpQLLXr+hgrG=kPU8@;xFZ>~K;m7^xV=e|s)8Y6O=oE;JZ2nT3EubS
z3RxoA2noE_)IDSjSkLB%9Qy+4F+6+7sSob!I$a@;-5M2yP$5Za>XQJ6?D(EiT1bUd
zcO4k}phk8cOBh2Cs9>eFU01S1Qjd=XP*E&vZfYUZaE;_n^G&fOYm3<;+C|MmG*wrU
zeP*>X0`BDa;0Hn?1m&{k(>N#=f3Z_DM!r3}eTyu5a-(U2hSxMGNa<;Idu;E_b`XK8
za8CKu7D*K|bdDmhY34cQEdM)XJ>sC?ob1$gutALI;7H1<ndfBrsAqWtX-CZt04e#)
zIpvQ*Ism~9GUrFe??6tXH{jT6pdP*|@sUW9><A%Tny@|O=8TT?EC49(<8TWBM8G-O
zxfK#XB<1jZt(tEj4@Gnu6o7QzFG_;Tn%f|I6^cahYud8r{LJgVFav0SB$xGLk!)xO
zPa$u|w7v5f0>(iBva8+EQ`EVvcCLry>dRxV@@UX_wT>WZbIN&qM>9O~tx^W@V)(^Z
z@0MiQ+b3&!2p~bg!)>c3pDnA|^kTfz`=TRdi4;YAkp#dwS)QCj^H?EC1_9{k%>-d{
z$~Fz*rL&W}d<4LHbq*gZ31CS%k9}}$BgR1?MJK#<rw3AGgFJAsQYUmsS=vO1(9vHB
z0`r=)cQY^zg^hwJ1Rd)L)?#PVpof<OT6-iY47?TrD{hP2dGhOCjoZ8AyyiR&zIk%&
zx7#C8AeTV0d@iy5zW#mDEY;O&B#&!G2q2J9ClJ|wi@*TcCX@X&xBA7(sW$9gOC4Yk
zh~4DeCb180iL|lQMVnJ*%TN$YLE3GV<N_p5Ek(JmHumbDVf(N_a;NqFwy+!l=QXos
zLpb$8V)=N_(-7i%b^N<t00q)f2Poi@j4j)UYCzQWB(2n9sYSqhstQ1YYnUJjf=kLA
z`{0M{gRr(xmkXi51n{pxdj&+)>39GU&MDVO=9WlSTfhU;%e5F0KwBgWq=%6LVopX+
z3%Q5fcTqi{xj9Pr-gO!R2)H0ib0y~0=xrg7A>T3e7qbk4QVLMZ@~k{o6;BZ$AXwHd
zlK$%YY%iei&gulE2>bS~rMjxioTF&XDRXRzWUm6@(+(1Mj^nnYqdY`yTWCWbe(nnw
z(P{=RKAq&VdKd3ceKTPN(qrrNc9kry`A%9PZ)VW<9x~mV0fB(xdy+N|m*K;|{U`>c
zUf1k8SP?09;(%=2=cG3mFOe(`Qrv_)O;1HHHnPr=2W7RjKVAlPzzvD|n6Kqvr#_$#
zJTB4L3|T6xYmnThrMIeHTb9E@?jza)d9kZR10>i2dGQjUFGXsa{0E@+4MWpu(?b9N
N002ovPDHLkV1i?V(r^F(
--- a/toolkit/themes/pinstripe/mozapps/jar.mn
+++ b/toolkit/themes/pinstripe/mozapps/jar.mn
@@ -33,16 +33,17 @@ toolkit.jar:
   skin/classic/mozapps/extensions/utilities.png                   (extensions/utilities.png)
   skin/classic/mozapps/extensions/toolbarbutton-dropmarker.png    (extensions/toolbarbutton-dropmarker.png)
   skin/classic/mozapps/extensions/heart.png                       (extensions/heart.png)
   skin/classic/mozapps/extensions/navigation.png                  (extensions/navigation.png)
   skin/classic/mozapps/extensions/stripes-warning.png             (extensions/stripes-warning.png)
   skin/classic/mozapps/extensions/stripes-error.png               (extensions/stripes-error.png)
   skin/classic/mozapps/extensions/stripes-info-positive.png       (extensions/stripes-info-positive.png)
   skin/classic/mozapps/extensions/stripes-info-negative.png       (extensions/stripes-info-negative.png)
+  skin/classic/mozapps/extensions/stripes-info-negative-small.png (extensions/stripes-info-negative-small.png)
   skin/classic/mozapps/extensions/alerticon-warning.png           (extensions/alerticon-warning.png)
   skin/classic/mozapps/extensions/alerticon-error.png             (extensions/alerticon-error.png)
   skin/classic/mozapps/extensions/alerticon-info-positive.png     (extensions/alerticon-info-positive.png)
   skin/classic/mozapps/extensions/alerticon-info-negative.png     (extensions/alerticon-info-negative.png)
   skin/classic/mozapps/extensions/search.png                      (extensions/search.png)
   skin/classic/mozapps/extensions/about.css                       (extensions/about.css)
 * skin/classic/mozapps/extensions/extensions.css                  (extensions/extensions.css)
   skin/classic/mozapps/extensions/extensions.svg                  (extensions/extensions.svg)
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..29f15f7b8c20a39a79454fc8b81852daa36548a2
GIT binary patch
literal 1563
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
N002ovPDHLkV1i?V(r^F(
--- a/toolkit/themes/winstripe/mozapps/jar.mn
+++ b/toolkit/themes/winstripe/mozapps/jar.mn
@@ -40,16 +40,17 @@ toolkit.jar:
         skin/classic/mozapps/extensions/cancel.png                 (extensions/cancel.png)
         skin/classic/mozapps/extensions/utilities.png              (extensions/utilities.png)
         skin/classic/mozapps/extensions/heart.png                  (extensions/heart.png)
         skin/classic/mozapps/extensions/navigation.png             (extensions/navigation.png)
         skin/classic/mozapps/extensions/stripes-warning.png        (extensions/stripes-warning.png)
         skin/classic/mozapps/extensions/stripes-error.png          (extensions/stripes-error.png)
         skin/classic/mozapps/extensions/stripes-info-positive.png  (extensions/stripes-info-positive.png)
         skin/classic/mozapps/extensions/stripes-info-negative.png  (extensions/stripes-info-negative.png)
+        skin/classic/mozapps/extensions/stripes-info-negative-small.png  (extensions/stripes-info-negative-small.png)
         skin/classic/mozapps/extensions/alerticon-warning.png      (extensions/alerticon-warning.png)
         skin/classic/mozapps/extensions/alerticon-error.png        (extensions/alerticon-error.png)
         skin/classic/mozapps/extensions/alerticon-info-positive.png (extensions/alerticon-info-positive.png)
         skin/classic/mozapps/extensions/alerticon-info-negative.png (extensions/alerticon-info-negative.png)
         skin/classic/mozapps/extensions/eula.css                   (extensions/eula.css)
         skin/classic/mozapps/extensions/newaddon.css               (extensions/newaddon.css)
         skin/classic/mozapps/handling/handling.css                 (handling/handling.css)
         skin/classic/mozapps/passwordmgr/key.png                   (passwordmgr/key.png)
@@ -120,16 +121,17 @@ toolkit.jar:
         skin/classic/aero/mozapps/extensions/cancel.png                    (extensions/cancel.png)
         skin/classic/aero/mozapps/extensions/utilities.png                 (extensions/utilities.png)
         skin/classic/aero/mozapps/extensions/heart.png                     (extensions/heart.png)
         skin/classic/aero/mozapps/extensions/navigation.png                (extensions/navigation.png)
         skin/classic/aero/mozapps/extensions/stripes-warning.png           (extensions/stripes-warning.png)
         skin/classic/aero/mozapps/extensions/stripes-error.png             (extensions/stripes-error.png)
         skin/classic/aero/mozapps/extensions/stripes-info-positive.png     (extensions/stripes-info-positive.png)
         skin/classic/aero/mozapps/extensions/stripes-info-negative.png     (extensions/stripes-info-negative.png)
+        skin/classic/aero/mozapps/extensions/stripes-info-negative-small.png  (extensions/stripes-info-negative-small.png)
         skin/classic/aero/mozapps/extensions/alerticon-warning.png         (extensions/alerticon-warning.png)
         skin/classic/aero/mozapps/extensions/alerticon-error.png           (extensions/alerticon-error.png)
         skin/classic/aero/mozapps/extensions/alerticon-info-positive.png   (extensions/alerticon-info-positive.png)
         skin/classic/aero/mozapps/extensions/alerticon-info-negative.png   (extensions/alerticon-info-negative.png)
         skin/classic/aero/mozapps/extensions/eula.css                      (extensions/eula.css)
 *       skin/classic/aero/mozapps/extensions/newaddon.css                  (extensions/newaddon-aero.css)
         skin/classic/aero/mozapps/handling/handling.css                    (handling/handling.css)
         skin/classic/aero/mozapps/passwordmgr/key.png                      (passwordmgr/key.png)