Bug 839206 - Replace plugin installation notification bar with door hanger r=dolske

--HG--
extra : rebase_source : 20a6d7a32805772e9435ec874c049481a863a749
This commit is contained in:
Christian Sonne ext:(%2C%20Justin%20Dolske%20%3Cdolske%40mozilla.com%3E) 2013-05-03 13:44:12 -07:00
parent 9b1a0377f4
commit c3368424ee
22 changed files with 198 additions and 64 deletions

View File

@ -612,6 +612,9 @@ pref("plugins.update.notifyUser", false);
pref("plugins.click_to_play", false);
// display door hanger if flash not installed
pref("plugins.notifyMissingFlash", true);
#ifdef XP_WIN
pref("browser.preferences.instantApply", false);
#else

View File

@ -3,6 +3,8 @@
# 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/.
const kPrefNotifyMissingFlash = "plugins.notifyMissingFlash";
var gPluginHandler = {
PLUGIN_SCRIPTED_STATE_NONE: 0,
PLUGIN_SCRIPTED_STATE_FIRED: 1,
@ -148,6 +150,69 @@ var gPluginHandler = {
}
},
supportedPlugins: {
"mimetypes": {
"application/x-shockwave-flash": "flash",
"application/futuresplash": "flash",
"application/x-java-.*": "java",
"application/x-director": "shockwave",
"application/(sdp|x-(mpeg|rtsp|sdp))": "quicktime",
"audio/(3gpp(2)?|AMR|aiff|basic|mid(i)?|mp4|mpeg|vnd\.qcelp|wav|x-(aiff|m4(a|b|p)|midi|mpeg|wav))": "quicktime",
"image/(pict|png|tiff|x-(macpaint|pict|png|quicktime|sgi|targa|tiff))": "quicktime",
"video/(3gpp(2)?|flc|mp4|mpeg|quicktime|sd-video|x-mpeg)": "quicktime",
"application/x-unknown": "test",
},
"plugins": {
"flash": {
"displayName": "Flash",
"installWINNT": true,
"installDarwin": true,
"installLinux": true,
},
"java": {
"displayName": "Java",
"installWINNT": true,
"installDarwin": true,
"installLinux": true,
},
"shockwave": {
"displayName": "Shockwave",
"installWINNT": true,
"installDarwin": true,
},
"quicktime": {
"displayName": "QuickTime",
"installWINNT": true,
},
"test": {
"displayName": "Test plugin",
"installWINNT": true,
"installLinux": true,
"installDarwin": true,
}
}
},
nameForSupportedPlugin: function (aMimeType) {
for (let type in this.supportedPlugins.mimetypes) {
let re = new RegExp(type);
if (re.test(aMimeType)) {
return this.supportedPlugins.mimetypes[type];
}
}
return null;
},
canInstallThisMimeType: function (aMimeType) {
let os = Services.appinfo.OS;
let pluginName = this.nameForSupportedPlugin(aMimeType);
if (pluginName && "install" + os in this.supportedPlugins.plugins[pluginName]) {
return true;
}
return false;
},
handleEvent : function(event) {
let plugin = event.target;
let doc = plugin.ownerDocument;
@ -181,20 +246,20 @@ var gPluginHandler = {
break;
case "PluginNotFound":
let installable = this.showInstallNotification(plugin, eventType);
// For non-object plugin tags, register a click handler to install the
// plugin. Object tags can, and often do, deal with that themselves,
// so don't stomp on the page developers toes.
if (!(plugin instanceof HTMLObjectElement)) {
// We don't yet check to see if there's actually an installer available.
if (installable && !(plugin instanceof HTMLObjectElement)) {
let installStatus = doc.getAnonymousElementByAttribute(plugin, "class", "installStatus");
installStatus.setAttribute("status", "ready");
installStatus.setAttribute("installable", "true");
let iconStatus = doc.getAnonymousElementByAttribute(plugin, "class", "icon");
iconStatus.setAttribute("status", "ready");
iconStatus.setAttribute("installable", "true");
let installLink = doc.getAnonymousElementByAttribute(plugin, "class", "installPluginLink");
this.addLinkClickCallback(installLink, "installSinglePlugin", plugin);
}
/* FALLTHRU */
break;
case "PluginBlocklisted":
case "PluginOutdated":
@ -436,6 +501,61 @@ var gPluginHandler = {
openHelpLink("plugin-crashed", false);
},
showInstallNotification: function (aPlugin) {
let browser = gBrowser.getBrowserForDocument(aPlugin.ownerDocument
.defaultView.top.document);
if (!browser.missingPlugins)
browser.missingPlugins = new Map();
let pluginInfo = this._getPluginInfo(aPlugin);
browser.missingPlugins.set(pluginInfo.mimetype, pluginInfo);
// only show notification for small subset of plugins
let mimetype = pluginInfo.mimetype.split(";")[0];
if (!this.canInstallThisMimeType(mimetype))
return;
let pluginIdentifier = this.nameForSupportedPlugin(mimetype);
if (!pluginIdentifier)
return;
let displayName = this.supportedPlugins.plugins[pluginIdentifier].displayName;
// don't show several notifications
let notification = PopupNotifications.getNotification("plugins-not-found", browser);
if (notification)
return true;
let messageString = gNavigatorBundle.getString("installPlugin.message");
let mainAction = {
label: gNavigatorBundle.getFormattedString("installPlugin.button.label",
[displayName]),
accessKey: gNavigatorBundle.getString("installPlugin.button.accesskey"),
callback: function () {
openDialog("chrome://mozapps/content/plugins/pluginInstallerWizard.xul",
"PFSWindow", "chrome,centerscreen,resizable=yes",
{plugins: browser.missingPlugins, browser: browser});
}
};
let secondaryActions = null;
let options = { dismissed: true };
let showForFlash = Services.prefs.getBoolPref(kPrefNotifyMissingFlash);
if (pluginIdentifier == "flash" && showForFlash) {
secondaryActions = [{
label: gNavigatorBundle.getString("installPlugin.ignoreButton.label"),
accessKey: gNavigatorBundle.getString("installPlugin.ignoreButton.accesskey"),
callback: function () {
Services.prefs.setBoolPref(kPrefNotifyMissingFlash, false);
}
}];
options.dismissed = false;
}
PopupNotifications.show(browser, "plugins-not-found",
messageString, "plugin-install-notification-icon",
mainAction, secondaryActions, options);
return true;
},
// Event listener for click-to-play plugins.
_handleClickToPlayEvent: function PH_handleClickToPlayEvent(aPlugin) {
let doc = aPlugin.ownerDocument;
@ -749,7 +869,7 @@ var gPluginHandler = {
}
},
// event listener for missing/blocklisted/outdated plugins.
// event listener for blocklisted/outdated plugins.
pluginUnavailable: function (plugin, eventType) {
let browser = gBrowser.getBrowserForDocument(plugin.ownerDocument
.defaultView.top.document);
@ -765,8 +885,6 @@ var gPluginHandler = {
// In order of priority, they are: outdated > missing > blocklisted
let outdatedNotification = notificationBox.getNotificationWithValue("outdated-plugins");
let blockedNotification = notificationBox.getNotificationWithValue("blocked-plugins");
let missingNotification = notificationBox.getNotificationWithValue("missing-plugins");
function showBlocklistInfo() {
var url = formatURL("extensions.blocklist.detailsURL", true);
@ -781,16 +899,6 @@ var gPluginHandler = {
return true;
}
function showPluginsMissing() {
// get the urls of missing plugins
var missingPlugins = gBrowser.selectedBrowser.missingPlugins;
if (missingPlugins) {
openDialog("chrome://mozapps/content/plugins/pluginInstallerWizard.xul",
"PFSWindow", "chrome,centerscreen,resizable=yes",
{plugins: missingPlugins, browser: gBrowser.selectedBrowser});
}
}
let notifications = {
PluginBlocklisted : {
barID : "blocked-plugins",
@ -820,17 +928,6 @@ var gPluginHandler = {
callback : showOutdatedPluginsInfo
}],
},
PluginNotFound : {
barID : "missing-plugins",
iconURL : "chrome://mozapps/skin/plugins/notifyPluginGeneric.png",
message : gNavigatorBundle.getString("missingpluginsMessage.title"),
buttons : [{
label : gNavigatorBundle.getString("missingpluginsMessage.button.label"),
accessKey : gNavigatorBundle.getString("missingpluginsMessage.button.accesskey"),
popup : null,
callback : showPluginsMissing
}],
},
};
// If there is already an outdated plugin notification then do nothing
@ -841,7 +938,7 @@ var gPluginHandler = {
if (gPrefService.getBoolPref("plugins.hide_infobar_for_missing_plugin")) // XXX add a new pref?
return;
if (blockedNotification || missingNotification)
if (blockedNotification)
return;
}
else if (eventType == "PluginOutdated") {
@ -851,19 +948,6 @@ var gPluginHandler = {
// Cancel any notification about blocklisting/missing plugins
if (blockedNotification)
blockedNotification.close();
if (missingNotification)
missingNotification.close();
}
else if (eventType == "PluginNotFound") {
if (gPrefService.getBoolPref("plugins.hide_infobar_for_missing_plugin"))
return;
if (missingNotification)
return;
// Cancel any notification about blocklisting plugins
if (blockedNotification)
blockedNotification.close();
}
let notify = notifications[eventType];

View File

@ -581,6 +581,7 @@
<image id="plugins-notification-icon" class="notification-anchor-icon" role="button"/>
<image id="web-notifications-notification-icon" class="notification-anchor-icon" role="button"/>
<image id="blocked-plugins-notification-icon" class="notification-anchor-icon" role="button"/>
<image id="plugin-install-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"/>

View File

@ -103,7 +103,7 @@ function prepareTest(nextTest, url) {
// Tests a page with an unknown plugin in it.
function test1() {
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
ok(notificationBox.getNotificationWithValue("missing-plugins"), "Test 1, Should have displayed the missing plugin notification");
ok(PopupNotifications.getNotification("plugins-not-found", gTestBrowser), "Test 1, Should have displayed the missing plugin notification");
ok(!notificationBox.getNotificationWithValue("blocked-plugins"), "Test 1, Should not have displayed the blocked plugin notification");
ok(gTestBrowser.missingPlugins, "Test 1, Should be a missing plugin list");
ok(gTestBrowser.missingPlugins.has("application/x-unknown"), "Test 1, Should know about application/x-unknown");
@ -124,7 +124,7 @@ function test1() {
// Tests a page with a working plugin in it.
function test2() {
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
ok(!notificationBox.getNotificationWithValue("missing-plugins"), "Test 2, Should not have displayed the missing plugin notification");
ok(!PopupNotifications.getNotification("plugins-not-found", gTestBrowser), "Test 2, Should not have displayed the missing plugin notification");
ok(!notificationBox.getNotificationWithValue("blocked-plugins"), "Test 2, Should not have displayed the blocked plugin notification");
ok(!gTestBrowser.missingPlugins, "Test 2, Should not be a missing plugin list");
@ -137,7 +137,7 @@ function test2() {
// Tests a page with a disabled plugin in it.
function test3() {
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
ok(!notificationBox.getNotificationWithValue("missing-plugins"), "Test 3, Should not have displayed the missing plugin notification");
ok(!PopupNotifications.getNotification("plugins-not-found", gTestBrowser), "Test 3, Should not have displayed the missing plugin notification");
ok(!notificationBox.getNotificationWithValue("blocked-plugins"), "Test 3, Should not have displayed the blocked plugin notification");
ok(!gTestBrowser.missingPlugins, "Test 3, Should not be a missing plugin list");
@ -168,7 +168,7 @@ function prepareTest5() {
// Tests a page with a blocked plugin in it.
function test5() {
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
ok(!notificationBox.getNotificationWithValue("missing-plugins"), "Test 5, Should not have displayed the missing plugin notification");
ok(!PopupNotifications.getNotification("plugins-not-found", gTestBrowser), "Test 5, Should not have displayed the missing plugin notification");
ok(notificationBox.getNotificationWithValue("blocked-plugins"), "Test 5, Should have displayed the blocked plugin notification");
ok(gTestBrowser.missingPlugins, "Test 5, Should be a missing plugin list");
ok(gTestBrowser.missingPlugins.has("application/x-test"), "Test 5, Should know about application/x-test");
@ -184,8 +184,8 @@ function test5() {
// Tests a page with a blocked and unknown plugin in it.
function test6() {
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
ok(notificationBox.getNotificationWithValue("missing-plugins"), "Test 6, Should have displayed the missing plugin notification");
ok(!notificationBox.getNotificationWithValue("blocked-plugins"), "Test 6, Should not have displayed the blocked plugin notification");
ok(PopupNotifications.getNotification("plugins-not-found", gTestBrowser), "Test 6, Should have displayed the missing plugin notification");
ok(notificationBox.getNotificationWithValue("blocked-plugins"), "Test 6, Should have displayed the blocked plugin notification");
ok(gTestBrowser.missingPlugins, "Test 6, Should be a missing plugin list");
ok(gTestBrowser.missingPlugins.has("application/x-unknown"), "Test 6, Should know about application/x-unknown");
ok(gTestBrowser.missingPlugins.has("application/x-test"), "Test 6, Should know about application/x-test");
@ -196,8 +196,8 @@ function test6() {
// Tests a page with a blocked and unknown plugin in it (alternate order to above).
function test7() {
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
ok(notificationBox.getNotificationWithValue("missing-plugins"), "Test 7, Should have displayed the missing plugin notification");
ok(!notificationBox.getNotificationWithValue("blocked-plugins"), "Test 7, Should not have displayed the blocked plugin notification");
ok(PopupNotifications.getNotification("plugins-not-found", gTestBrowser), "Test 7, Should have displayed the missing plugin notification");
ok(notificationBox.getNotificationWithValue("blocked-plugins"), "Test 7, Should have displayed the blocked plugin notification");
ok(gTestBrowser.missingPlugins, "Test 7, Should be a missing plugin list");
ok(gTestBrowser.missingPlugins.has("application/x-unknown"), "Test 7, Should know about application/x-unknown");
ok(gTestBrowser.missingPlugins.has("application/x-test"), "Test 7, Should know about application/x-test");
@ -214,7 +214,7 @@ function test7() {
// Tests a page with a working plugin that is click-to-play
function test8() {
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
ok(!notificationBox.getNotificationWithValue("missing-plugins"), "Test 8, Should not have displayed the missing plugin notification");
ok(!PopupNotifications.getNotification("plugins-not-found", gTestBrowser), "Test 8, Should not have displayed the missing plugin notification");
ok(!notificationBox.getNotificationWithValue("blocked-plugins"), "Test 8, Should not have displayed the blocked plugin notification");
ok(!gTestBrowser.missingPlugins, "Test 8, Should not be a missing plugin list");
ok(PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser), "Test 8, Should have a click-to-play notification");
@ -230,7 +230,7 @@ function test8() {
// Tests that activating one click-to-play plugin will activate only that plugin (part 1/3)
function test9a() {
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
ok(!notificationBox.getNotificationWithValue("missing-plugins"), "Test 9a, Should not have displayed the missing plugin notification");
ok(!PopupNotifications.getNotification("plugins-not-found", gTestBrowser), "Test 9a, Should not have displayed the missing plugin notification");
ok(!notificationBox.getNotificationWithValue("blocked-plugins"), "Test 9a, Should not have displayed the blocked plugin notification");
ok(!gTestBrowser.missingPlugins, "Test 9a, Should not be a missing plugin list");
var notification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser);
@ -261,7 +261,7 @@ function test9a() {
// Tests that activating one click-to-play plugin will activate only that plugin (part 2/3)
function test9b() {
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
ok(!notificationBox.getNotificationWithValue("missing-plugins"), "Test 9b, Should not have displayed the missing plugin notification");
ok(!PopupNotifications.getNotification("plugins-not-found", gTestBrowser), "Test 9b, Should not have displayed the missing plugin notification");
ok(!notificationBox.getNotificationWithValue("blocked-plugins"), "Test 9b, Should not have displayed the blocked plugin notification");
ok(!gTestBrowser.missingPlugins, "Test 9b, Should not be a missing plugin list");
var notification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser);
@ -293,7 +293,7 @@ function test9b() {
// Tests that activating one click-to-play plugin will activate only that plugin (part 3/3)
function test9c() {
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
ok(!notificationBox.getNotificationWithValue("missing-plugins"), "Test 9c, Should not have displayed the missing plugin notification");
ok(!PopupNotifications.getNotification("plugins-not-found", gTestBrowser), "Test 9c, Should not have displayed the missing plugin notification");
ok(!notificationBox.getNotificationWithValue("blocked-plugins"), "Test 9c, Should not have displayed the blocked plugin notification");
ok(!gTestBrowser.missingPlugins, "Test 9c, Should not be a missing plugin list");
ok(!PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser), "Test 9c, Click to play notification should be removed now");
@ -319,7 +319,7 @@ function test9c() {
// Tests that activating a hidden click-to-play plugin through the notification works (part 1/2)
function test10a() {
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
ok(!notificationBox.getNotificationWithValue("missing-plugins"), "Test 10a, Should not have displayed the missing plugin notification");
ok(!PopupNotifications.getNotification("plugins-not-found", gTestBrowser), "Test 10a, Should not have displayed the missing plugin notification");
ok(!notificationBox.getNotificationWithValue("blocked-plugins"), "Test 10a, Should not have displayed the blocked plugin notification");
ok(!gTestBrowser.missingPlugins, "Test 10a, Should not be a missing plugin list");
var popupNotification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser);

View File

@ -98,9 +98,11 @@ popupWarningDontShowFromLocationbar=Don't show info bar when pop-ups are blocked
popupShowPopupPrefix=Show '%S'
# missing plugin installer
missingpluginsMessage.title=Additional plugins are required to display all the media on this page.
missingpluginsMessage.button.label=Install Missing Plugins…
missingpluginsMessage.button.accesskey=I
installPlugin.message = Would you like to install the plugin needed to display the media on this page?
installPlugin.button.label=Install %S
installPlugin.button.accesskey=I
installPlugin.ignoreButton.label=Don't ask again
installPlugin.ignoreButton.accesskey=N
outdatedpluginsMessage.title=Some plugins used by this page are out of date.
outdatedpluginsMessage.updateButton.label=Update Plugins…
outdatedpluginsMessage.updateButton.accesskey=U

View File

@ -1161,6 +1161,10 @@ toolbar[iconsize="small"] #webrtc-status-button {
list-style-image: url(chrome://mozapps/skin/plugins/pluginBlocked-64.png);
}
.popup-notification-icon[popupid="plugins-not-found"] {
list-style-image: url(chrome://browser/skin/pluginInstall-64.png);
}
.popup-notification-icon[popupid="web-notifications"] {
list-style-image: url(chrome://browser/skin/notification-64.png);
}
@ -1287,6 +1291,10 @@ toolbar[iconsize="small"] #webrtc-status-button {
list-style-image: url(chrome://mozapps/skin/plugins/notifyPluginBlocked.png);
}
#plugin-install-notification-icon {
list-style-image: url(chrome://browser/skin/pluginInstall-16.png);
}
#notification-popup-box[hidden] {
/* Override display:none to make the pluginBlockedNotification animation work
when showing the notification repeatedly. */

View File

@ -39,6 +39,8 @@ browser.jar:
* skin/classic/browser/pageInfo.css
skin/classic/browser/pageInfo.png
skin/classic/browser/page-livemarks.png
skin/classic/browser/pluginInstall-16.png
skin/classic/browser/pluginInstall-64.png
skin/classic/browser/pointerLock-16.png
skin/classic/browser/pointerLock-64.png
skin/classic/browser/Privacy-16.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -3106,6 +3106,15 @@ toolbarbutton.chevron > .toolbarbutton-menu-dropmarker {
}
}
#plugin-install-notification-icon {
list-style-image: url(chrome://browser/skin/pluginInstall-16.png);
}
@media (min-resolution: 2dppx) {
#plugin-install-notification-icon {
list-style-image: url(chrome://browser/skin/pluginInstall-16@2x.png);
}
}
#notification-popup-box[hidden] {
/* Override display:none to make the pluginBlockedNotification animation work
when showing the notification repeatedly. */
@ -3218,6 +3227,15 @@ toolbarbutton.chevron > .toolbarbutton-menu-dropmarker {
list-style-image: url(chrome://mozapps/skin/plugins/pluginBlocked-64.png);
}
.popup-notification-icon[popupid="plugins-not-found"] {
list-style-image: url(chrome://browser/skin/pluginInstall-64.png);
}
@media (min-resolution: 2dppx) {
.popup-notification-icon[popupid="plugins-not-found"] {
list-style-image: url(chrome://browser/skin/pluginInstall-64\@2x.png);
}
}
.addon-progress-description {
width: 350px;
max-width: 350px;

View File

@ -58,6 +58,10 @@ browser.jar:
skin/classic/browser/page-livemarks.png
skin/classic/browser/page-livemarks@2x.png
skin/classic/browser/pageInfo.css
skin/classic/browser/pluginInstall-16.png
skin/classic/browser/pluginInstall-16@2x.png
skin/classic/browser/pluginInstall-64.png
skin/classic/browser/pluginInstall-64@2x.png
skin/classic/browser/pointerLock-16.png
skin/classic/browser/pointerLock-16@2x.png
skin/classic/browser/pointerLock-64.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 426 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -2336,6 +2336,10 @@ toolbarbutton.bookmark-item[dragover="true"][open="true"] {
list-style-image: url(chrome://mozapps/skin/plugins/pluginBlocked-64.png);
}
.popup-notification-icon[popupid="plugins-not-found"] {
list-style-image: url(chrome://browser/skin/pluginInstall-64.png);
}
.popup-notification-icon[popupid="web-notifications"] {
list-style-image: url(chrome://browser/skin/notification-64.png);
}
@ -2468,6 +2472,10 @@ toolbarbutton.bookmark-item[dragover="true"][open="true"] {
list-style-image: url(chrome://mozapps/skin/plugins/notifyPluginBlocked.png);
}
#plugin-install-notification-icon {
list-style-image: url(chrome://browser/skin/pluginInstall-16.png);
}
#notification-popup-box[hidden] {
/* Override display:none to make the pluginBlockedNotification animation work
when showing the notification repeatedly. */

View File

@ -47,6 +47,8 @@ browser.jar:
skin/classic/browser/pageInfo.css
skin/classic/browser/pageInfo.png
skin/classic/browser/page-livemarks.png (feeds/feedIcon16.png)
skin/classic/browser/pluginInstall-16.png
skin/classic/browser/pluginInstall-64.png
skin/classic/browser/pointerLock-16.png
skin/classic/browser/pointerLock-64.png
skin/classic/browser/Privacy-16.png
@ -292,8 +294,10 @@ browser.jar:
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/pointerLock-16.png (pointerLock-16.png)
skin/classic/aero/browser/pointerLock-64.png (pointerLock-64.png)
skin/classic/aero/browser/pluginInstall-16.png
skin/classic/aero/browser/pluginInstall-64.png
skin/classic/aero/browser/pointerLock-16.png
skin/classic/aero/browser/pointerLock-64.png
skin/classic/aero/browser/Privacy-16.png (Privacy-16-aero.png)
skin/classic/aero/browser/Privacy-32.png (Privacy-32-aero.png)
skin/classic/aero/browser/Privacy-48.png (Privacy-48-aero.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -102,7 +102,7 @@ html|applet:not([height]), html|applet[height=""] {
display: block;
}
.installStatus[status="ready"] .msgInstallPlugin {
.installStatus[installable] .msgInstallPlugin {
display: block;
}

View File

@ -45,7 +45,7 @@ html|a {
:-moz-type-unsupported .icon {
background-image: url(chrome://mozapps/skin/plugins/contentPluginMissing.png);
}
:-moz-type-unsupported .icon[status="ready"] {
:-moz-type-unsupported .icon[installable] {
background-image: url(chrome://mozapps/skin/plugins/contentPluginDownload.png);
}
:-moz-handler-vulnerable-updatable .icon,

View File

@ -46,7 +46,7 @@ html|a {
:-moz-type-unsupported-platform .icon {
background-image: url(chrome://mozapps/skin/plugins/contentPluginMissing.png);
}
:-moz-type-unsupported .icon[status="ready"] {
:-moz-type-unsupported .icon[installable] {
background-image: url(chrome://mozapps/skin/plugins/contentPluginDownload.png);
}
:-moz-handler-vulnerable-updatable .icon,