Bug 839206 - Replace plugin installation notification bar with door hanger r=dolske
--HG-- extra : rebase_source : 20a6d7a32805772e9435ec874c049481a863a749
@ -612,6 +612,9 @@ pref("plugins.update.notifyUser", false);
|
|||||||
|
|
||||||
pref("plugins.click_to_play", false);
|
pref("plugins.click_to_play", false);
|
||||||
|
|
||||||
|
// display door hanger if flash not installed
|
||||||
|
pref("plugins.notifyMissingFlash", true);
|
||||||
|
|
||||||
#ifdef XP_WIN
|
#ifdef XP_WIN
|
||||||
pref("browser.preferences.instantApply", false);
|
pref("browser.preferences.instantApply", false);
|
||||||
#else
|
#else
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
const kPrefNotifyMissingFlash = "plugins.notifyMissingFlash";
|
||||||
|
|
||||||
var gPluginHandler = {
|
var gPluginHandler = {
|
||||||
PLUGIN_SCRIPTED_STATE_NONE: 0,
|
PLUGIN_SCRIPTED_STATE_NONE: 0,
|
||||||
PLUGIN_SCRIPTED_STATE_FIRED: 1,
|
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) {
|
handleEvent : function(event) {
|
||||||
let plugin = event.target;
|
let plugin = event.target;
|
||||||
let doc = plugin.ownerDocument;
|
let doc = plugin.ownerDocument;
|
||||||
@ -181,20 +246,20 @@ var gPluginHandler = {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case "PluginNotFound":
|
case "PluginNotFound":
|
||||||
|
let installable = this.showInstallNotification(plugin, eventType);
|
||||||
// For non-object plugin tags, register a click handler to install the
|
// For non-object plugin tags, register a click handler to install the
|
||||||
// plugin. Object tags can, and often do, deal with that themselves,
|
// plugin. Object tags can, and often do, deal with that themselves,
|
||||||
// so don't stomp on the page developers toes.
|
// so don't stomp on the page developers toes.
|
||||||
if (!(plugin instanceof HTMLObjectElement)) {
|
if (installable && !(plugin instanceof HTMLObjectElement)) {
|
||||||
// We don't yet check to see if there's actually an installer available.
|
|
||||||
let installStatus = doc.getAnonymousElementByAttribute(plugin, "class", "installStatus");
|
let installStatus = doc.getAnonymousElementByAttribute(plugin, "class", "installStatus");
|
||||||
installStatus.setAttribute("status", "ready");
|
installStatus.setAttribute("installable", "true");
|
||||||
let iconStatus = doc.getAnonymousElementByAttribute(plugin, "class", "icon");
|
let iconStatus = doc.getAnonymousElementByAttribute(plugin, "class", "icon");
|
||||||
iconStatus.setAttribute("status", "ready");
|
iconStatus.setAttribute("installable", "true");
|
||||||
|
|
||||||
let installLink = doc.getAnonymousElementByAttribute(plugin, "class", "installPluginLink");
|
let installLink = doc.getAnonymousElementByAttribute(plugin, "class", "installPluginLink");
|
||||||
this.addLinkClickCallback(installLink, "installSinglePlugin", plugin);
|
this.addLinkClickCallback(installLink, "installSinglePlugin", plugin);
|
||||||
}
|
}
|
||||||
/* FALLTHRU */
|
break;
|
||||||
|
|
||||||
case "PluginBlocklisted":
|
case "PluginBlocklisted":
|
||||||
case "PluginOutdated":
|
case "PluginOutdated":
|
||||||
@ -436,6 +501,61 @@ var gPluginHandler = {
|
|||||||
openHelpLink("plugin-crashed", false);
|
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.
|
// Event listener for click-to-play plugins.
|
||||||
_handleClickToPlayEvent: function PH_handleClickToPlayEvent(aPlugin) {
|
_handleClickToPlayEvent: function PH_handleClickToPlayEvent(aPlugin) {
|
||||||
let doc = aPlugin.ownerDocument;
|
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) {
|
pluginUnavailable: function (plugin, eventType) {
|
||||||
let browser = gBrowser.getBrowserForDocument(plugin.ownerDocument
|
let browser = gBrowser.getBrowserForDocument(plugin.ownerDocument
|
||||||
.defaultView.top.document);
|
.defaultView.top.document);
|
||||||
@ -765,8 +885,6 @@ var gPluginHandler = {
|
|||||||
// In order of priority, they are: outdated > missing > blocklisted
|
// In order of priority, they are: outdated > missing > blocklisted
|
||||||
let outdatedNotification = notificationBox.getNotificationWithValue("outdated-plugins");
|
let outdatedNotification = notificationBox.getNotificationWithValue("outdated-plugins");
|
||||||
let blockedNotification = notificationBox.getNotificationWithValue("blocked-plugins");
|
let blockedNotification = notificationBox.getNotificationWithValue("blocked-plugins");
|
||||||
let missingNotification = notificationBox.getNotificationWithValue("missing-plugins");
|
|
||||||
|
|
||||||
|
|
||||||
function showBlocklistInfo() {
|
function showBlocklistInfo() {
|
||||||
var url = formatURL("extensions.blocklist.detailsURL", true);
|
var url = formatURL("extensions.blocklist.detailsURL", true);
|
||||||
@ -781,16 +899,6 @@ var gPluginHandler = {
|
|||||||
return true;
|
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 = {
|
let notifications = {
|
||||||
PluginBlocklisted : {
|
PluginBlocklisted : {
|
||||||
barID : "blocked-plugins",
|
barID : "blocked-plugins",
|
||||||
@ -820,17 +928,6 @@ var gPluginHandler = {
|
|||||||
callback : showOutdatedPluginsInfo
|
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
|
// 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?
|
if (gPrefService.getBoolPref("plugins.hide_infobar_for_missing_plugin")) // XXX add a new pref?
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (blockedNotification || missingNotification)
|
if (blockedNotification)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (eventType == "PluginOutdated") {
|
else if (eventType == "PluginOutdated") {
|
||||||
@ -851,19 +948,6 @@ var gPluginHandler = {
|
|||||||
// Cancel any notification about blocklisting/missing plugins
|
// Cancel any notification about blocklisting/missing plugins
|
||||||
if (blockedNotification)
|
if (blockedNotification)
|
||||||
blockedNotification.close();
|
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];
|
let notify = notifications[eventType];
|
||||||
|
@ -581,6 +581,7 @@
|
|||||||
<image id="plugins-notification-icon" class="notification-anchor-icon" role="button"/>
|
<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="web-notifications-notification-icon" class="notification-anchor-icon" role="button"/>
|
||||||
<image id="blocked-plugins-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="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-shareDevices-notification-icon" class="notification-anchor-icon" role="button"/>
|
||||||
<image id="webRTC-sharingDevices-notification-icon" class="notification-anchor-icon" role="button"/>
|
<image id="webRTC-sharingDevices-notification-icon" class="notification-anchor-icon" role="button"/>
|
||||||
|
@ -103,7 +103,7 @@ function prepareTest(nextTest, url) {
|
|||||||
// Tests a page with an unknown plugin in it.
|
// Tests a page with an unknown plugin in it.
|
||||||
function test1() {
|
function test1() {
|
||||||
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
|
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(!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, "Test 1, Should be a missing plugin list");
|
||||||
ok(gTestBrowser.missingPlugins.has("application/x-unknown"), "Test 1, Should know about application/x-unknown");
|
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.
|
// Tests a page with a working plugin in it.
|
||||||
function test2() {
|
function test2() {
|
||||||
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
|
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(!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");
|
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.
|
// Tests a page with a disabled plugin in it.
|
||||||
function test3() {
|
function test3() {
|
||||||
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
|
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(!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");
|
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.
|
// Tests a page with a blocked plugin in it.
|
||||||
function test5() {
|
function test5() {
|
||||||
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
|
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(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, "Test 5, Should be a missing plugin list");
|
||||||
ok(gTestBrowser.missingPlugins.has("application/x-test"), "Test 5, Should know about application/x-test");
|
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.
|
// Tests a page with a blocked and unknown plugin in it.
|
||||||
function test6() {
|
function test6() {
|
||||||
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
|
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
|
||||||
ok(notificationBox.getNotificationWithValue("missing-plugins"), "Test 6, Should have displayed the missing 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 not have displayed the blocked 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, "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-unknown"), "Test 6, Should know about application/x-unknown");
|
||||||
ok(gTestBrowser.missingPlugins.has("application/x-test"), "Test 6, Should know about application/x-test");
|
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).
|
// Tests a page with a blocked and unknown plugin in it (alternate order to above).
|
||||||
function test7() {
|
function test7() {
|
||||||
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
|
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
|
||||||
ok(notificationBox.getNotificationWithValue("missing-plugins"), "Test 7, Should have displayed the missing 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 not have displayed the blocked 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, "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-unknown"), "Test 7, Should know about application/x-unknown");
|
||||||
ok(gTestBrowser.missingPlugins.has("application/x-test"), "Test 7, Should know about application/x-test");
|
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
|
// Tests a page with a working plugin that is click-to-play
|
||||||
function test8() {
|
function test8() {
|
||||||
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
|
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(!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(!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");
|
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)
|
// Tests that activating one click-to-play plugin will activate only that plugin (part 1/3)
|
||||||
function test9a() {
|
function test9a() {
|
||||||
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
|
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(!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");
|
ok(!gTestBrowser.missingPlugins, "Test 9a, Should not be a missing plugin list");
|
||||||
var notification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser);
|
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)
|
// Tests that activating one click-to-play plugin will activate only that plugin (part 2/3)
|
||||||
function test9b() {
|
function test9b() {
|
||||||
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
|
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(!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");
|
ok(!gTestBrowser.missingPlugins, "Test 9b, Should not be a missing plugin list");
|
||||||
var notification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser);
|
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)
|
// Tests that activating one click-to-play plugin will activate only that plugin (part 3/3)
|
||||||
function test9c() {
|
function test9c() {
|
||||||
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
|
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(!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(!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");
|
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)
|
// Tests that activating a hidden click-to-play plugin through the notification works (part 1/2)
|
||||||
function test10a() {
|
function test10a() {
|
||||||
var notificationBox = gBrowser.getNotificationBox(gTestBrowser);
|
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(!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");
|
ok(!gTestBrowser.missingPlugins, "Test 10a, Should not be a missing plugin list");
|
||||||
var popupNotification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser);
|
var popupNotification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser);
|
||||||
|
@ -98,9 +98,11 @@ popupWarningDontShowFromLocationbar=Don't show info bar when pop-ups are blocked
|
|||||||
popupShowPopupPrefix=Show '%S'
|
popupShowPopupPrefix=Show '%S'
|
||||||
|
|
||||||
# missing plugin installer
|
# missing plugin installer
|
||||||
missingpluginsMessage.title=Additional plugins are required to display all the media on this page.
|
installPlugin.message = Would you like to install the plugin needed to display the media on this page?
|
||||||
missingpluginsMessage.button.label=Install Missing Plugins…
|
installPlugin.button.label=Install %S
|
||||||
missingpluginsMessage.button.accesskey=I
|
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.title=Some plugins used by this page are out of date.
|
||||||
outdatedpluginsMessage.updateButton.label=Update Plugins…
|
outdatedpluginsMessage.updateButton.label=Update Plugins…
|
||||||
outdatedpluginsMessage.updateButton.accesskey=U
|
outdatedpluginsMessage.updateButton.accesskey=U
|
||||||
|
@ -1161,6 +1161,10 @@ toolbar[iconsize="small"] #webrtc-status-button {
|
|||||||
list-style-image: url(chrome://mozapps/skin/plugins/pluginBlocked-64.png);
|
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"] {
|
.popup-notification-icon[popupid="web-notifications"] {
|
||||||
list-style-image: url(chrome://browser/skin/notification-64.png);
|
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);
|
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] {
|
#notification-popup-box[hidden] {
|
||||||
/* Override display:none to make the pluginBlockedNotification animation work
|
/* Override display:none to make the pluginBlockedNotification animation work
|
||||||
when showing the notification repeatedly. */
|
when showing the notification repeatedly. */
|
||||||
|
@ -39,6 +39,8 @@ browser.jar:
|
|||||||
* skin/classic/browser/pageInfo.css
|
* skin/classic/browser/pageInfo.css
|
||||||
skin/classic/browser/pageInfo.png
|
skin/classic/browser/pageInfo.png
|
||||||
skin/classic/browser/page-livemarks.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-16.png
|
||||||
skin/classic/browser/pointerLock-64.png
|
skin/classic/browser/pointerLock-64.png
|
||||||
skin/classic/browser/Privacy-16.png
|
skin/classic/browser/Privacy-16.png
|
||||||
|
BIN
browser/themes/linux/pluginInstall-16.png
Normal file
After Width: | Height: | Size: 236 B |
BIN
browser/themes/linux/pluginInstall-64.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
@ -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] {
|
#notification-popup-box[hidden] {
|
||||||
/* Override display:none to make the pluginBlockedNotification animation work
|
/* Override display:none to make the pluginBlockedNotification animation work
|
||||||
when showing the notification repeatedly. */
|
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);
|
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 {
|
.addon-progress-description {
|
||||||
width: 350px;
|
width: 350px;
|
||||||
max-width: 350px;
|
max-width: 350px;
|
||||||
|
@ -58,6 +58,10 @@ browser.jar:
|
|||||||
skin/classic/browser/page-livemarks.png
|
skin/classic/browser/page-livemarks.png
|
||||||
skin/classic/browser/page-livemarks@2x.png
|
skin/classic/browser/page-livemarks@2x.png
|
||||||
skin/classic/browser/pageInfo.css
|
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.png
|
||||||
skin/classic/browser/pointerLock-16@2x.png
|
skin/classic/browser/pointerLock-16@2x.png
|
||||||
skin/classic/browser/pointerLock-64.png
|
skin/classic/browser/pointerLock-64.png
|
||||||
|
BIN
browser/themes/osx/pluginInstall-16.png
Normal file
After Width: | Height: | Size: 236 B |
BIN
browser/themes/osx/pluginInstall-16@2x.png
Normal file
After Width: | Height: | Size: 426 B |
BIN
browser/themes/osx/pluginInstall-64.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
browser/themes/osx/pluginInstall-64@2x.png
Normal file
After Width: | Height: | Size: 4.5 KiB |
@ -2336,6 +2336,10 @@ toolbarbutton.bookmark-item[dragover="true"][open="true"] {
|
|||||||
list-style-image: url(chrome://mozapps/skin/plugins/pluginBlocked-64.png);
|
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"] {
|
.popup-notification-icon[popupid="web-notifications"] {
|
||||||
list-style-image: url(chrome://browser/skin/notification-64.png);
|
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);
|
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] {
|
#notification-popup-box[hidden] {
|
||||||
/* Override display:none to make the pluginBlockedNotification animation work
|
/* Override display:none to make the pluginBlockedNotification animation work
|
||||||
when showing the notification repeatedly. */
|
when showing the notification repeatedly. */
|
||||||
|
@ -47,6 +47,8 @@ browser.jar:
|
|||||||
skin/classic/browser/pageInfo.css
|
skin/classic/browser/pageInfo.css
|
||||||
skin/classic/browser/pageInfo.png
|
skin/classic/browser/pageInfo.png
|
||||||
skin/classic/browser/page-livemarks.png (feeds/feedIcon16.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-16.png
|
||||||
skin/classic/browser/pointerLock-64.png
|
skin/classic/browser/pointerLock-64.png
|
||||||
skin/classic/browser/Privacy-16.png
|
skin/classic/browser/Privacy-16.png
|
||||||
@ -292,8 +294,10 @@ browser.jar:
|
|||||||
skin/classic/aero/browser/pageInfo.css
|
skin/classic/aero/browser/pageInfo.css
|
||||||
skin/classic/aero/browser/pageInfo.png (pageInfo-aero.png)
|
skin/classic/aero/browser/pageInfo.png (pageInfo-aero.png)
|
||||||
skin/classic/aero/browser/page-livemarks.png (feeds/feedIcon16-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/pluginInstall-16.png
|
||||||
skin/classic/aero/browser/pointerLock-64.png (pointerLock-64.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-16.png (Privacy-16-aero.png)
|
||||||
skin/classic/aero/browser/Privacy-32.png (Privacy-32-aero.png)
|
skin/classic/aero/browser/Privacy-32.png (Privacy-32-aero.png)
|
||||||
skin/classic/aero/browser/Privacy-48.png (Privacy-48-aero.png)
|
skin/classic/aero/browser/Privacy-48.png (Privacy-48-aero.png)
|
||||||
|
BIN
browser/themes/windows/pluginInstall-16.png
Normal file
After Width: | Height: | Size: 236 B |
BIN
browser/themes/windows/pluginInstall-64.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
@ -102,7 +102,7 @@ html|applet:not([height]), html|applet[height=""] {
|
|||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.installStatus[status="ready"] .msgInstallPlugin {
|
.installStatus[installable] .msgInstallPlugin {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ html|a {
|
|||||||
:-moz-type-unsupported .icon {
|
:-moz-type-unsupported .icon {
|
||||||
background-image: url(chrome://mozapps/skin/plugins/contentPluginMissing.png);
|
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);
|
background-image: url(chrome://mozapps/skin/plugins/contentPluginDownload.png);
|
||||||
}
|
}
|
||||||
:-moz-handler-vulnerable-updatable .icon,
|
:-moz-handler-vulnerable-updatable .icon,
|
||||||
|
@ -46,7 +46,7 @@ html|a {
|
|||||||
:-moz-type-unsupported-platform .icon {
|
:-moz-type-unsupported-platform .icon {
|
||||||
background-image: url(chrome://mozapps/skin/plugins/contentPluginMissing.png);
|
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);
|
background-image: url(chrome://mozapps/skin/plugins/contentPluginDownload.png);
|
||||||
}
|
}
|
||||||
:-moz-handler-vulnerable-updatable .icon,
|
:-moz-handler-vulnerable-updatable .icon,
|
||||||
|