From 7bac2af2ad810c6d23ab25c4d5cd6d709719af0b Mon Sep 17 00:00:00 2001 From: David Keeler Date: Tue, 28 Aug 2012 09:23:10 -0700 Subject: [PATCH] Bug 754472 - Implement multiple plugin click-to-play UI. r=jaws r=margaret r=dietrich --- browser/base/content/browser-plugins.js | 116 ++++++++++++++--- browser/base/content/browser.css | 8 ++ browser/base/content/test/Makefile.in | 1 + .../content/test/browser_pluginnotification.js | 141 ++++++++++++++++++++- browser/base/content/test/plugin_two_types.html | 9 ++ browser/base/content/urlbarBindings.xml | 96 ++++++++++++++ .../en-US/chrome/browser/browser.properties | 7 +- browser/themes/gnomestripe/browser.css | 69 +++++++++- browser/themes/pinstripe/browser.css | 82 +++++++++++- browser/themes/winstripe/browser.css | 75 ++++++++++- toolkit/content/PopupNotifications.jsm | 3 + toolkit/content/xul.css | 2 +- .../en-US/chrome/mozapps/plugins/plugins.dtd | 2 - toolkit/mozapps/plugins/content/pluginProblem.xml | 5 +- .../plugins/content/pluginProblemContent.css | 6 +- .../global/icons/panelarrow-light-vertical.svg | 13 ++ toolkit/themes/gnomestripe/global/jar.mn | 1 + .../global/arrow/panelarrow-light-vertical.png | Bin 0 -> 382 bytes toolkit/themes/pinstripe/global/jar.mn | 1 + toolkit/themes/pinstripe/global/notification.css | 5 +- toolkit/themes/pinstripe/mozapps/jar.mn | 1 + .../pinstripe/mozapps/plugins/pluginBlocked-64.png | Bin 0 -> 4563 bytes toolkit/themes/winstripe/global/notification.css | 8 +- toolkit/themes/winstripe/mozapps/jar.mn | 2 + .../winstripe/mozapps/plugins/pluginBlocked-64.png | Bin 0 -> 3427 bytes 25 files changed, 612 insertions(+), 41 deletions(-) create mode 100644 browser/base/content/test/plugin_two_types.html create mode 100644 toolkit/themes/gnomestripe/global/icons/panelarrow-light-vertical.svg create mode 100644 toolkit/themes/pinstripe/global/arrow/panelarrow-light-vertical.png create mode 100644 toolkit/themes/pinstripe/mozapps/plugins/pluginBlocked-64.png create mode 100644 toolkit/themes/winstripe/mozapps/plugins/pluginBlocked-64.png diff --git a/browser/base/content/browser-plugins.js b/browser/base/content/browser-plugins.js index d883643cd815..0bd45e5676a4 100644 --- a/browser/base/content/browser-plugins.js +++ b/browser/base/content/browser-plugins.js @@ -7,6 +7,7 @@ function getPluginInfo(pluginElement) { var tagMimetype; var pluginsPage; + var pluginName = gNavigatorBundle.getString("pluginInfo.unknownPlugin"); if (pluginElement instanceof HTMLAppletElement) { tagMimetype = "application/x-java-vm"; } else { @@ -35,7 +36,17 @@ function getPluginInfo(pluginElement) } } - return {mimetype: tagMimetype, pluginsPage: pluginsPage}; + if (tagMimetype) { + let navMimeType = navigator.mimeTypes[tagMimetype]; + if (navMimeType && navMimeType.enabledPlugin) { + pluginName = navMimeType.enabledPlugin.name; + pluginName = gPluginHandler.makeNicePluginName(pluginName); + } + } + + return { mimetype: tagMimetype, + pluginsPage: pluginsPage, + pluginName: pluginName }; } var gPluginHandler = { @@ -49,13 +60,16 @@ var gPluginHandler = { #endif // Map the plugin's name to a filtered version more suitable for user UI. - makeNicePluginName : function (aName, aFilename) { + makeNicePluginName : function (aName) { if (aName == "Shockwave Flash") return "Adobe Flash"; // Clean up the plugin name by stripping off any trailing version numbers // or "plugin". EG, "Foo Bar Plugin 1.23_02" --> "Foo Bar" - let newName = aName.replace(/\bplug-?in\b/i, "").replace(/[\s\d\.\-\_\(\)]+$/, ""); + // Do this by first stripping the numbers, etc. off the end, and then + // removing "Plugin" (and then trimming to get rid of any whitespace). + // (Otherwise, something like "Java(TM) Plug-in 1.7.0_07" gets mangled) + let newName = aName.replace(/[\s\d\.\-\_\(\)]+$/, "").replace(/\bplug-?in\b/i, "").trim(); return newName; }, @@ -148,6 +162,17 @@ var gPluginHandler = { case "PluginVulnerableNoUpdate": case "PluginClickToPlay": self._handleClickToPlayEvent(plugin); + let overlay = doc.getAnonymousElementByAttribute(plugin, "class", "mainBox"); + let pluginName = getPluginInfo(plugin).pluginName; + let messageString = gNavigatorBundle.getFormattedString("PluginClickToPlay", [pluginName]); + let overlayText = doc.getAnonymousElementByAttribute(plugin, "class", "msg msgClickToPlay"); + overlayText.textContent = messageString; + if (event.type == "PluginVulnerableUpdatable" || + event.type == "PluginVulnerableNoUpdate") { + let vulnerabilityString = gNavigatorBundle.getString(event.type); + let vulnerabilityText = doc.getAnonymousElementByAttribute(plugin, "anonid", "vulnerabilityStatus"); + vulnerabilityText.textContent = vulnerabilityString; + } break; case "PluginPlayPreview": @@ -197,16 +222,16 @@ var gPluginHandler = { let cwu = aContentWindow.QueryInterface(Ci.nsIInterfaceRequestor) .getInterface(Ci.nsIDOMWindowUtils); - let haveUnplayedPlugins = cwu.plugins.some(function(plugin) { - let objLoadingContent = plugin.QueryInterface(Ci.nsIObjectLoadingContent); - return (plugin != aPlugin && gPluginHandler.canActivatePlugin(objLoadingContent)); - }); + let pluginNeedsActivation = gPluginHandler._pluginNeedsActivationExceptThese([aPlugin]); let browser = gBrowser.getBrowserForDocument(aContentWindow.document); let notification = PopupNotifications.getNotification("click-to-play-plugins", browser); - if (notification && !haveUnplayedPlugins) { + if (notification) { browser._clickToPlayDoorhangerShown = false; notification.remove(); } + if (pluginNeedsActivation) { + gPluginHandler._showClickToPlayNotification(browser); + } }, stopPlayPreview: function PH_stopPlayPreview(aPlugin, aPlayPlugin) { @@ -360,17 +385,78 @@ var gPluginHandler = { if (pluginsPermission == Ci.nsIPermissionManager.DENY_ACTION) return; - let contentWindow = browser.contentWindow; + if (gPluginHandler._pluginNeedsActivationExceptThese([])) + gPluginHandler._showClickToPlayNotification(browser); + }, + + // returns true if there is a plugin on this page that needs activation + // and isn't in the "except these" list + _pluginNeedsActivationExceptThese: function PH_pluginNeedsActivationExceptThese(aExceptThese) { + let contentWindow = gBrowser.selectedBrowser.contentWindow; let cwu = contentWindow.QueryInterface(Ci.nsIInterfaceRequestor) .getInterface(Ci.nsIDOMWindowUtils); let pluginNeedsActivation = cwu.plugins.some(function(plugin) { let objLoadingContent = plugin.QueryInterface(Ci.nsIObjectLoadingContent); - return gPluginHandler.canActivatePlugin(objLoadingContent); + return (gPluginHandler.canActivatePlugin(objLoadingContent) && + aExceptThese.indexOf(plugin) < 0); }); - if (pluginNeedsActivation) - gPluginHandler._showClickToPlayNotification(browser); + + return pluginNeedsActivation; + }, + + /* Gets all plugins currently in the page of the given name */ + _getPluginsByName: function PH_getPluginsByName(aDOMWindowUtils, aName) { + let plugins = []; + for (let plugin of aDOMWindowUtils.plugins) { + let objLoadingContent = plugin.QueryInterface(Ci.nsIObjectLoadingContent); + if (gPluginHandler.canActivatePlugin(objLoadingContent)) { + let pluginName = getPluginInfo(plugin).pluginName; + if (aName == pluginName) { + plugins.push(objLoadingContent); + } + } + } + return plugins; }, + _makeCenterActions: function PH_makeCenterActions(aBrowser) { + let contentWindow = aBrowser.contentWindow; + let cwu = contentWindow.QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIDOMWindowUtils); + let pluginsDictionary = {}; + for (let plugin of cwu.plugins) { + let objLoadingContent = plugin.QueryInterface(Ci.nsIObjectLoadingContent); + if (gPluginHandler.canActivatePlugin(objLoadingContent)) { + let pluginName = getPluginInfo(plugin).pluginName; + if (!pluginsDictionary[pluginName]) pluginsDictionary[pluginName] = []; + pluginsDictionary[pluginName].push(objLoadingContent); + } + } + + let centerActions = []; + for (let pluginName in pluginsDictionary) { + let action = { + message: pluginName, + 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); + if (notification && + !gPluginHandler._pluginNeedsActivationExceptThese(plugins)) { + notification.remove(); + } + } + }; + centerActions.push(action); + } + + return centerActions; + }, + _showClickToPlayNotification: function PH_showClickToPlayNotification(aBrowser) { aBrowser._clickToPlayDoorhangerShown = true; let contentWindow = aBrowser.contentWindow; @@ -381,6 +467,7 @@ var gPluginHandler = { accessKey: gNavigatorBundle.getString("activatePluginsMessage.accesskey"), callback: function() { gPluginHandler.activatePlugins(contentWindow); } }; + let centerActions = gPluginHandler._makeCenterActions(aBrowser); let secondaryActions = [{ label: gNavigatorBundle.getString("activatePluginsMessage.always"), accessKey: gNavigatorBundle.getString("activatePluginsMessage.always.accesskey"), @@ -399,7 +486,7 @@ var gPluginHandler = { gPluginHandler._removeClickToPlayOverlays(contentWindow); } }]; - let options = { dismissed: true }; + let options = { dismissed: true, centerActions: centerActions }; PopupNotifications.show(aBrowser, "click-to-play-plugins", messageString, "plugins-notification-icon", mainAction, secondaryActions, options); @@ -620,12 +707,11 @@ var gPluginHandler = { let doPrompt = true; // XXX followup for .getData("doPrompt"); let submitReports = true; // XXX followup for .getData("submitReports"); let pluginName = aEvent.getData("pluginName"); - let pluginFilename = aEvent.getData("pluginFilename"); let pluginDumpID = aEvent.getData("pluginDumpID"); let browserDumpID = aEvent.getData("browserDumpID"); // Remap the plugin name to a more user-presentable form. - pluginName = this.makeNicePluginName(pluginName, pluginFilename); + pluginName = this.makeNicePluginName(pluginName); let messageString = gNavigatorBundle.getFormattedString("crashedpluginsMessage.title", [pluginName]); diff --git a/browser/base/content/browser.css b/browser/base/content/browser.css index b4e8c4519ebb..f356683420b8 100644 --- a/browser/base/content/browser.css +++ b/browser/base/content/browser.css @@ -490,6 +490,14 @@ window[chromehidden~="toolbar"] toolbar:not(.toolbar-primary):not(.chromeclass-m -moz-binding: url("chrome://browser/content/urlbarBindings.xml#identity-request-notification"); } +#click-to-play-plugins-notification { + -moz-binding: url("chrome://browser/content/urlbarBindings.xml#click-to-play-plugins-notification"); +} + +popupnotification-centeritem { + -moz-binding: url("chrome://browser/content/urlbarBindings.xml#center-item"); +} + /* override hidden="true" for the status bar compatibility shim in case it was persisted for the real status bar */ #status-bar { diff --git a/browser/base/content/test/Makefile.in b/browser/base/content/test/Makefile.in index 4fe61ae88aee..db847c283e05 100644 --- a/browser/base/content/test/Makefile.in +++ b/browser/base/content/test/Makefile.in @@ -236,6 +236,7 @@ _BROWSER_FILES = \ plugin_clickToPlayDeny.html \ plugin_bug749455.html \ plugin_hidden_to_visible.html \ + plugin_two_types.html \ alltabslistener.html \ zoom_test.html \ dummy_page.html \ diff --git a/browser/base/content/test/browser_pluginnotification.js b/browser/base/content/test/browser_pluginnotification.js index efc74cd0e481..bb56d9d66f66 100644 --- a/browser/base/content/test/browser_pluginnotification.js +++ b/browser/base/content/test/browser_pluginnotification.js @@ -223,7 +223,9 @@ function test9a() { ok(!notificationBox.getNotificationWithValue("missing-plugins"), "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"); - ok(PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser), "Test 9a, Should have a click-to-play notification"); + var notification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser); + ok(notification, "Test 9a, Should have a click-to-play notification"); + ok(notification.options.centerActions.length == 1, "Test 9a, Should have only one type of plugin in the notification"); var doc = gTestBrowser.contentDocument; var plugin1 = doc.getElementById("test1"); @@ -252,7 +254,9 @@ function test9b() { ok(!notificationBox.getNotificationWithValue("missing-plugins"), "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"); - ok(PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser), "Test 9b, Click to play notification should not be removed now"); + var notification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser); + ok(notification, "Test 9b, Click to play notification should not be removed now"); + ok(notification.options.centerActions.length == 1, "Test 9b, Should have only one type of plugin in the notification"); var doc = gTestBrowser.contentDocument; var plugin1 = doc.getElementById("test1"); @@ -774,5 +778,138 @@ function test20c() { var objLoadingContent = plugin.QueryInterface(Ci.nsIObjectLoadingContent); ok(objLoadingContent.activated, "Test 20c, plugin should be activated"); + prepareTest(test21a, gTestRoot + "plugin_two_types.html"); +} + +// Test having multiple different types of plugin on one page +function test21a() { + var notification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser); + ok(notification, "Test 21a, Should have a click-to-play notification"); + ok(notification.options.centerActions.length == 2, "Test 21a, Should have two types of plugin in the notification"); + + var doc = gTestBrowser.contentDocument; + var ids = ["test", "secondtestA", "secondtestB"]; + for (var id of ids) { + var plugin = doc.getElementById(id); + var rect = doc.getAnonymousElementByAttribute(plugin, "class", "mainBox").getBoundingClientRect(); + ok(rect.width == 200, "Test 21a, Plugin with id=" + plugin.id + " overlay rect should have 200px width before being clicked"); + ok(rect.height == 200, "Test 21a, Plugin with id=" + plugin.id + " overlay rect should have 200px height before being clicked"); + var objLoadingContent = plugin.QueryInterface(Ci.nsIObjectLoadingContent); + ok(!objLoadingContent.activated, "Test 21a, Plugin with id=" + plugin.id + " should not be activated"); + } + + // we have to actually show the panel to get the bindings to instantiate + notification.options.dismissed = false; + notification.options.eventCallback = test21b; + PopupNotifications._showPanel([notification], notification.anchorElement); +} + +function test21b() { + var notification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser); + notification.options.eventCallback = null; + var centerAction = null; + for (var action of notification.options.centerActions) { + if (action.message == "Test") { + centerAction = action; + break; + } + } + ok(centerAction, "Test 21b, found center action for the Test plugin"); + + var centerItem = null; + for (var item of centerAction.popupnotification.childNodes) { + if (item.action == centerAction) { + centerItem = item; + break; + } + } + ok(centerItem, "Test 21b, found center item for the Test plugin"); + + // "click" the button to activate the Test plugin + centerItem.runCallback.apply(centerItem); + + var doc = gTestBrowser.contentDocument; + var plugin = doc.getElementById("test"); + var objLoadingContent = plugin.QueryInterface(Ci.nsIObjectLoadingContent); + var condition = function() objLoadingContent.activated; + waitForCondition(condition, test21c, "Test 21b, Waited too long for plugin to activate"); +} + +function test21c() { + var notification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser); + ok(notification, "Test 21c, Should have a click-to-play notification"); + ok(notification.options.centerActions.length == 1, "Test 21c, Should have one type of plugin in the notification"); + + var doc = gTestBrowser.contentDocument; + var plugin = doc.getElementById("test"); + var rect = doc.getAnonymousElementByAttribute(plugin, "class", "mainBox").getBoundingClientRect(); + ok(rect.width == 0, "Test 21c, Plugin with id=" + plugin.id + " overlay rect should have 0px width after being clicked"); + ok(rect.height == 0, "Test 21c, Plugin with id=" + plugin.id + " overlay rect should have 0px height after being clicked"); + var objLoadingContent = plugin.QueryInterface(Ci.nsIObjectLoadingContent); + ok(objLoadingContent.activated, "Test 21c, Plugin with id=" + plugin.id + " should be activated"); + + var ids = ["secondtestA", "secondtestB"]; + for (var id of ids) { + var plugin = doc.getElementById(id); + var rect = doc.getAnonymousElementByAttribute(plugin, "class", "mainBox").getBoundingClientRect(); + ok(rect.width == 200, "Test 21c, Plugin with id=" + plugin.id + " overlay rect should have 200px width before being clicked"); + ok(rect.height == 200, "Test 21c, Plugin with id=" + plugin.id + " overlay rect should have 200px height before being clicked"); + var objLoadingContent = plugin.QueryInterface(Ci.nsIObjectLoadingContent); + ok(!objLoadingContent.activated, "Test 21c, Plugin with id=" + plugin.id + " should not be activated"); + } + + // we have to actually show the panel to get the bindings to instantiate + notification.options.dismissed = false; + notification.options.eventCallback = test21d; + PopupNotifications._showPanel([notification], notification.anchorElement); +} + +function test21d() { + var notification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser); + notification.options.eventCallback = null; + + var centerAction = null; + for (var action of notification.options.centerActions) { + if (action.message == "Second Test") { + centerAction = action; + break; + } + } + ok(centerAction, "Test 21d, found center action for the Second Test plugin"); + + var centerItem = null; + for (var item of centerAction.popupnotification.childNodes) { + if (item.action == centerAction) { + centerItem = item; + break; + } + } + ok(centerItem, "Test 21d, found center item for the Second Test plugin"); + + // "click" the button to activate the Second Test plugins + centerItem.runCallback.apply(centerItem); + + var doc = gTestBrowser.contentDocument; + var plugin = doc.getElementById("secondtestA"); + var objLoadingContent = plugin.QueryInterface(Ci.nsIObjectLoadingContent); + var condition = function() objLoadingContent.activated; + waitForCondition(condition, test21e, "Test 21d, Waited too long for plugin to activate"); +} + +function test21e() { + var notification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser); + ok(!notification, "Test 21e, Should not have a click-to-play notification"); + + var doc = gTestBrowser.contentDocument; + var ids = ["test", "secondtestA", "secondtestB"]; + for (var id of ids) { + var plugin = doc.getElementById(id); + var rect = doc.getAnonymousElementByAttribute(plugin, "class", "mainBox").getBoundingClientRect(); + ok(rect.width == 0, "Test 21e, Plugin with id=" + plugin.id + " overlay rect should have 0px width after being clicked"); + ok(rect.height == 0, "Test 21e, Plugin with id=" + plugin.id + " overlay rect should have 0px height after being clicked"); + var objLoadingContent = plugin.QueryInterface(Ci.nsIObjectLoadingContent); + ok(objLoadingContent.activated, "Test 21e, Plugin with id=" + plugin.id + " should be activated"); + } + finishTest(); } diff --git a/browser/base/content/test/plugin_two_types.html b/browser/base/content/test/plugin_two_types.html new file mode 100644 index 000000000000..2359d2ec10fa --- /dev/null +++ b/browser/base/content/test/plugin_two_types.html @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/browser/base/content/urlbarBindings.xml b/browser/base/content/urlbarBindings.xml index 17549a2cb5d8..f3832dfdb8cc 100644 --- a/browser/base/content/urlbarBindings.xml +++ b/browser/base/content/urlbarBindings.xml @@ -1418,6 +1418,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + document.getAnonymousElementByAttribute(this, "anonid", "button"); + + + document.getAnonymousElementByAttribute(this, "anonid", "menupopup"); + + + + diff --git a/browser/locales/en-US/chrome/browser/browser.properties b/browser/locales/en-US/chrome/browser/browser.properties index 93c7344d6610..8f9f728cd5b4 100644 --- a/browser/locales/en-US/chrome/browser/browser.properties +++ b/browser/locales/en-US/chrome/browser/browser.properties @@ -120,12 +120,17 @@ carbonFailurePluginsMessage.message=This page asks to use a plugin that can only carbonFailurePluginsMessage.restartButton.label=Restart in 32-bit mode carbonFailurePluginsMessage.restartButton.accesskey=R activatePluginsMessage.message=Would you like to activate the plugins on this page? -activatePluginsMessage.label=Activate plugins +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. +PluginVulnerableUpdatable=This plugin is vulnerable and should be updated. +PluginVulnerableNoUpdate=This plugin has security vulnerabilities. +pluginInfo.unknownPlugin=Unknown # Sanitize # LOCALIZATION NOTE (sanitizeDialog2.everything.title): When "Time range to diff --git a/browser/themes/gnomestripe/browser.css b/browser/themes/gnomestripe/browser.css index 75d369fd13a4..8977ba8a0af9 100644 --- a/browser/themes/gnomestripe/browser.css +++ b/browser/themes/gnomestripe/browser.css @@ -1159,9 +1159,7 @@ toolbar[iconsize="small"] #feed-button { } .popup-notification-icon[popupid="click-to-play-plugins"] { - list-style-image: url(chrome://mozapps/skin/plugins/pluginGeneric.png); - width: 32px; - height: 32px; + list-style-image: url(chrome://mozapps/skin/plugins/pluginBlocked-64.png); } .addon-progress-description { @@ -2827,3 +2825,68 @@ chatbox[minimized="true"] { width: 160px; height: 20px; } + +panel[type="arrow"][popupid="click-to-play-plugins"] > .panel-arrowcontainer > .panel-arrowbox > .panel-arrow[side="top"], +panel[type="arrow"][popupid="click-to-play-plugins"] > .panel-arrowcontainer > .panel-arrowbox > .panel-arrow[side="bottom"] { + list-style-image: url("chrome://global/skin/icons/panelarrow-light-vertical.svg"); +} + +.click-to-play-plugins-notification-content { + margin: -10px; +} + +.click-to-play-plugins-notification-icon-box { + background: hsla(0,0%,100%,.4); + -moz-border-end: 1px solid hsla(0,0%,100%,.2); + padding-top: 16px; + -moz-padding-start: 16px; + -moz-padding-end: 6px; +} + +.click-to-play-plugins-notification-separator { + -moz-border-start: 1px solid hsla(211,79%,6%,.1); + border-top: 1px solid hsla(211,79%,6%,.1); +} + +.click-to-play-plugins-notification-description-box { + border-bottom: 1px solid hsla(0,0%,100%,.2); + -moz-border-start: 1px solid hsla(0,0%,100%,.2); + padding: 14px 10px 9px 10px; +} + +.click-to-play-plugins-notification-center-box { + border-top: 1px solid hsla(0,0%,100%,.2); + border-bottom: 1px solid hsla(0,0%,100%,.2); + background-color: hsla(211,79%,6%,.05); +} + +.click-to-play-plugins-notification-button-container { + border-top: 1px solid hsla(0,0%,100%,.2); + -moz-border-start: 1px solid hsla(0,0%,100%,.2); + margin: 0px; + padding: 15px 11px 14px 11px; +} + +.center-item-box { + padding-top: 11px; + -moz-padding-start: 16px; + -moz-padding-end: 11px; + margin-bottom: -2px; + -moz-border-start: 1px solid hsla(0,0%,100%,.2); +} + +.center-item-box[padbottom="true"] { + padding-bottom: 12px; +} + +.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-button { + min-width: 0; +} diff --git a/browser/themes/pinstripe/browser.css b/browser/themes/pinstripe/browser.css index 08b979859e38..bb7fa1f69a7e 100644 --- a/browser/themes/pinstripe/browser.css +++ b/browser/themes/pinstripe/browser.css @@ -3055,9 +3055,7 @@ toolbarbutton.chevron > .toolbarbutton-menu-dropmarker { } .popup-notification-icon[popupid="click-to-play-plugins"] { - list-style-image: url(chrome://mozapps/skin/plugins/pluginGeneric.png); - width: 32px; - height: 32px; + list-style-image: url(chrome://mozapps/skin/plugins/pluginBlocked-64.png); } .addon-progress-description { @@ -4251,3 +4249,81 @@ chatbox[minimized="true"] { width: 160px; height: 20px; } + +panel[type="arrow"][popupid="click-to-play-plugins"] > .panel-arrowcontainer > .panel-arrowbox > .panel-arrow[side="top"], +panel[type="arrow"][popupid="click-to-play-plugins"] > .panel-arrowcontainer > .panel-arrowbox > .panel-arrow[side="bottom"] { + list-style-image: url("chrome://global/skin/arrow/panelarrow-light-vertical.png"); +} + +.click-to-play-plugins-notification-content { + margin: -16px; + border-radius: 5px; +} + +.click-to-play-plugins-notification-icon-box { + background: hsla(0,0%,100%,.4); + -moz-border-end: 1px solid hsla(0,0%,100%,.2); + padding-top: 16px; + -moz-padding-end: 12px; + -moz-padding-start: 20px; +} + +.click-to-play-plugins-notification-icon-box:-moz-locale-dir(ltr) { + border-bottom-left-radius: 5px; + border-top-left-radius: 5px; +} + +.click-to-play-plugins-notification-icon-box:-moz-locale-dir(rtl) { + border-bottom-right-radius: 5px; + border-top-right-radius: 5px; +} + +.click-to-play-plugins-notification-separator { + -moz-border-start: 1px solid hsla(211,79%,6%,.1); + border-top: 1px solid hsla(211,79%,6%,.1); +} + +.click-to-play-plugins-notification-description-box { + border-bottom: 1px solid hsla(0,0%,100%,.2); + -moz-border-start: 1px solid hsla(0,0%,100%,.2); + max-width: 28em; + padding: 14px 16px 9px 16px; +} + +.click-to-play-plugins-notification-center-box { + border-top: 1px solid hsla(0,0%,100%,.2); + border-bottom: 1px solid hsla(0,0%,100%,.2); + background-color: hsla(211,79%,6%,.05); +} + +.click-to-play-plugins-notification-button-container { + border-top: 1px solid hsla(0,0%,100%,.2); + -moz-border-start: 1px solid hsla(0,0%,100%,.2); + margin: 0px; + padding: 16px 16px 17px 16px; +} + +.center-item-box { + -moz-border-start: 1px solid hsla(0,0%,100%,.2); + padding-top: 7px; + -moz-padding-end: 11px; + -moz-padding-start: 16px; + margin-bottom: -3px; +} + +.center-item-box[padbottom="true"] { + padding-bottom: 12px; +} + +.center-item-icon { + 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-button { + min-width: 0; +} diff --git a/browser/themes/winstripe/browser.css b/browser/themes/winstripe/browser.css index f461b5ee5d6e..8d92eabed6f4 100644 --- a/browser/themes/winstripe/browser.css +++ b/browser/themes/winstripe/browser.css @@ -2282,9 +2282,7 @@ toolbarbutton.bookmark-item[dragover="true"][open="true"] { } .popup-notification-icon[popupid="click-to-play-plugins"] { - list-style-image: url(chrome://mozapps/skin/plugins/pluginGeneric.png); - width: 32px; - height: 32px; + list-style-image: url(chrome://mozapps/skin/plugins/pluginBlocked-64.png); } .addon-progress-description { @@ -3518,3 +3516,74 @@ chatbox[minimized="true"] { width: 160px; height: 20px; } + +.click-to-play-plugins-notification-content { + margin: -10px; + border-radius: 4px; +} + +.click-to-play-plugins-notification-icon-box { + background: hsla(0,0%,100%,.4); + -moz-border-end: 1px solid hsla(0,0%,100%,.2); + padding-top: 16px; + -moz-padding-end: 16px; + -moz-padding-start: 24px; +} + +.click-to-play-plugins-notification-icon-box:-moz-locale-dir(ltr) { + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} + +.click-to-play-plugins-notification-icon-box:-moz-locale-dir(rtl) { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} + +.click-to-play-plugins-notification-separator { + -moz-border-start: 1px solid hsla(211,79%,6%,.1); + border-top: 1px solid hsla(211,79%,6%,.1); +} + +.click-to-play-plugins-notification-description-box { + border-bottom: 1px solid hsla(0,0%,100%,.2); + -moz-border-start: 1px solid hsla(0,0%,100%,.2); + padding-top: 12px; + -moz-padding-end: 11px; + padding-bottom: 9px; + -moz-padding-start: 10px; +} + +.click-to-play-plugins-notification-center-box { + border-top: 1px solid hsla(0,0%,100%,.2); + border-bottom: 1px solid hsla(0,0%,100%,.2); + -moz-border-start: 1px solid hsla(0,0%,100%,.2); + background-color: hsla(211,79%,6%,.05); +} + +.click-to-play-plugins-notification-button-container { + border-top: 1px solid hsla(0,0%,100%,.2); + -moz-border-start: 1px solid hsla(0,0%,100%,.2); + margin: 0px; + padding: 16px; +} + +.center-item-box { + padding: 12px 16px 0px 16px; +} + +.center-item-box[padbottom="true"] { + padding-bottom: 12px; +} + +.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-button { + min-width: 0; +} diff --git a/toolkit/content/PopupNotifications.jsm b/toolkit/content/PopupNotifications.jsm index e6326038cca5..258b95d6c4dd 100644 --- a/toolkit/content/PopupNotifications.jsm +++ b/toolkit/content/PopupNotifications.jsm @@ -471,6 +471,9 @@ PopupNotifications.prototype = { this._currentAnchorElement = anchorElement; + // On OS X and Linux we need a different panel arrow color for + // click-to-play plugins, so copy the popupid and use css. + this.panel.setAttribute("popupid", this.panel.firstChild.getAttribute("popupid")); this.panel.openPopup(anchorElement, "bottomcenter topleft"); notificationsToShow.forEach(function (n) { this._fireCallback(n, NOTIFICATION_EVENT_SHOWN); diff --git a/toolkit/content/xul.css b/toolkit/content/xul.css index bd20bff49a5e..a94de4817bcc 100644 --- a/toolkit/content/xul.css +++ b/toolkit/content/xul.css @@ -206,7 +206,7 @@ notification { /*********** popup notification ************/ popupnotification { - -moz-binding: url("chrome://global/content/bindings/notification.xml#popup-notification") + -moz-binding: url("chrome://global/content/bindings/notification.xml#popup-notification"); } .popup-notification-menubutton:not([label]) { diff --git a/toolkit/locales/en-US/chrome/mozapps/plugins/plugins.dtd b/toolkit/locales/en-US/chrome/mozapps/plugins/plugins.dtd index cffb370d57c2..d526c05c0fb7 100644 --- a/toolkit/locales/en-US/chrome/mozapps/plugins/plugins.dtd +++ b/toolkit/locales/en-US/chrome/mozapps/plugins/plugins.dtd @@ -36,8 +36,6 @@ - - diff --git a/toolkit/mozapps/plugins/content/pluginProblem.xml b/toolkit/mozapps/plugins/content/pluginProblem.xml index 60e7676c55b5..f09c53715cfb 100644 --- a/toolkit/mozapps/plugins/content/pluginProblem.xml +++ b/toolkit/mozapps/plugins/content/pluginProblem.xml @@ -28,10 +28,9 @@ &missingPlugin; &unsupportedPlatform.pre;&unsupportedPlatform.learnMore;&unsupportedPlatform.post; &tapToPlayPlugin; - &clickToPlayPlugin; - &clickToPlayPluginVulnerableUpdateAvailable; - &clickToPlayPluginVulnerableNoUpdate; + &checkForUpdates; + &clickToPlayPlugin; &disabledPlugin; &blockedPlugin.label; diff --git a/toolkit/mozapps/plugins/content/pluginProblemContent.css b/toolkit/mozapps/plugins/content/pluginProblemContent.css index 43b042436c9c..b3578ccb686d 100644 --- a/toolkit/mozapps/plugins/content/pluginProblemContent.css +++ b/toolkit/mozapps/plugins/content/pluginProblemContent.css @@ -75,9 +75,11 @@ html|applet:not([height]), html|applet[height=""] { :-moz-type-unsupported .msgUnsupported, :-moz-type-unsupported-platform .msgUnsupportedPlatform, :-moz-handler-clicktoplay .msgClickToPlay, -:-moz-handler-vulnerable-updatable .msgVulnerableUpdatable, +:-moz-handler-vulnerable-updatable .msgVulnerabilityStatus, :-moz-handler-vulnerable-updatable .msgCheckForUpdates, -:-moz-handler-vulnerable-no-update .msgVulnerableNoUpdate, +:-moz-handler-vulnerable-updatable .msgClickToPlay, +:-moz-handler-vulnerable-no-update .msgVulnerabilityStatus, +:-moz-handler-vulnerable-no-update .msgClickToPlay, :-moz-handler-clicktoplay .msgTapToPlay, :-moz-handler-disabled .msgDisabled, :-moz-handler-disabled .msgManagePlugins, diff --git a/toolkit/themes/gnomestripe/global/icons/panelarrow-light-vertical.svg b/toolkit/themes/gnomestripe/global/icons/panelarrow-light-vertical.svg new file mode 100644 index 000000000000..8b59ed77095d --- /dev/null +++ b/toolkit/themes/gnomestripe/global/icons/panelarrow-light-vertical.svg @@ -0,0 +1,13 @@ + + + + + + + diff --git a/toolkit/themes/gnomestripe/global/jar.mn b/toolkit/themes/gnomestripe/global/jar.mn index 8dcf16fcfda4..9216495c1450 100644 --- a/toolkit/themes/gnomestripe/global/jar.mn +++ b/toolkit/themes/gnomestripe/global/jar.mn @@ -47,6 +47,7 @@ toolkit.jar: + skin/classic/global/icons/notloading_16.png (icons/notloading_16.png) + skin/classic/global/icons/panelarrow-horizontal.svg (icons/panelarrow-horizontal.svg) + skin/classic/global/icons/panelarrow-vertical.svg (icons/panelarrow-vertical.svg) ++ skin/classic/global/icons/panelarrow-light-vertical.svg (icons/panelarrow-light-vertical.svg) + skin/classic/global/icons/resizer.png (icons/resizer.png) + skin/classic/global/icons/sslWarning.png (icons/sslWarning.png) + skin/classic/global/icons/wrap.png (icons/wrap.png) diff --git a/toolkit/themes/pinstripe/global/arrow/panelarrow-light-vertical.png b/toolkit/themes/pinstripe/global/arrow/panelarrow-light-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..96636552b0890298e0404001c0dccd6c2c7bd196 GIT binary patch literal 382 zcwPa10fGLBP)$=~0o--2ti??UV)nX~7TnSz-w=D)L!HeZ;u~DSPJdTAW z=g9;wlrynunjj*ucWRe~RtGqIE)HVDH|B!-d@1*O*-&vXxS+?n8UxlOU5$Pk1SLMjAoMugOxO7NhZ ziQx}UM2Eq9RPc!0N-Tt65R#T!Q$P&~t7T7nDt%Z9?vY!I`S2k4l0N$d%)H>M9RN8G zq_$nmm`(6)IfyZ{iWm<099QkS%^hYI!MEjr^G;sk96+u4z&rUUYRn-c=$&8Y+Ut&j c=g+=>2Pc2albu=AQUCw|07*qoM6N<$g3lVMy#N3J literal 0 HcwPel00001 diff --git a/toolkit/themes/pinstripe/global/jar.mn b/toolkit/themes/pinstripe/global/jar.mn index 38ba57fe1af7..bb83f9dee6d6 100644 --- a/toolkit/themes/pinstripe/global/jar.mn +++ b/toolkit/themes/pinstripe/global/jar.mn @@ -79,6 +79,7 @@ toolkit.jar: skin/classic/global/arrow/arrow-up.gif (arrow/arrow-up.gif) skin/classic/global/arrow/panelarrow-horizontal.png (arrow/panelarrow-horizontal.png) skin/classic/global/arrow/panelarrow-vertical.png (arrow/panelarrow-vertical.png) + skin/classic/global/arrow/panelarrow-light-vertical.png (arrow/panelarrow-light-vertical.png) skin/classic/global/checkbox/cbox-check.gif (checkbox/cbox-check.gif) skin/classic/global/checkbox/cbox-check-dis.gif (checkbox/cbox-check-dis.gif) skin/classic/global/console/console-error-caret.gif (console/console-error-caret.gif) diff --git a/toolkit/themes/pinstripe/global/notification.css b/toolkit/themes/pinstripe/global/notification.css index 17ede50a8636..0befe6e1d5f2 100644 --- a/toolkit/themes/pinstripe/global/notification.css +++ b/toolkit/themes/pinstripe/global/notification.css @@ -121,6 +121,7 @@ notification[type="critical"] { -moz-appearance: none; } +.popup-notification-menubutton:not([type="menu-button"]):-moz-focusring, .popup-notification-menubutton:-moz-focusring > .button-menubutton-dropmarker, .popup-notification-menubutton > .button-menubutton-button:-moz-focusring { box-shadow: @focusRingShadow@; @@ -143,10 +144,6 @@ notification[type="critical"] { padding: 2px 6px; } -.popup-notification-menubutton:not([type="menu-button"]) { - padding: 2px 9px; -} - .popup-notification-menubutton > .button-menubutton-button { -moz-appearance: none; margin: 0; diff --git a/toolkit/themes/pinstripe/mozapps/jar.mn b/toolkit/themes/pinstripe/mozapps/jar.mn index ed7368ab8c08..9533433ca34b 100644 --- a/toolkit/themes/pinstripe/mozapps/jar.mn +++ b/toolkit/themes/pinstripe/mozapps/jar.mn @@ -68,6 +68,7 @@ toolkit.jar: skin/classic/mozapps/plugins/pluginGeneric.png (plugins/pluginGeneric.png) skin/classic/mozapps/plugins/pluginDisabled.png (plugins/pluginDisabled.png) skin/classic/mozapps/plugins/pluginBlocked.png (plugins/pluginBlocked.png) + skin/classic/mozapps/plugins/pluginBlocked-64.png (plugins/pluginBlocked-64.png) skin/classic/mozapps/plugins/pluginGeneric-16.png (plugins/pluginGeneric-16.png) skin/classic/mozapps/plugins/pluginHelp-16.png (plugins/pluginHelp-16.png) skin/classic/mozapps/profile/profileicon.png (profile/profileicon.png) diff --git a/toolkit/themes/pinstripe/mozapps/plugins/pluginBlocked-64.png b/toolkit/themes/pinstripe/mozapps/plugins/pluginBlocked-64.png new file mode 100644 index 0000000000000000000000000000000000000000..56b8a3322d9d5054480d8ae5d70386ecfe51ea0b GIT binary patch literal 4563 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 literal 0 HcwPel00001 diff --git a/toolkit/themes/winstripe/global/notification.css b/toolkit/themes/winstripe/global/notification.css index dd2295000d42..9cc3ac698bbd 100644 --- a/toolkit/themes/winstripe/global/notification.css +++ b/toolkit/themes/winstripe/global/notification.css @@ -76,7 +76,7 @@ notification[type="critical"] { XXX: apply styles to all themes until bug 509642 is fixed @media (-moz-windows-default-theme) { */ - .popup-notification-menubutton[type="menu-button"] { + .popup-notification-menubutton { -moz-appearance: none; border-radius: 3px; padding: 0; @@ -85,10 +85,11 @@ XXX: apply styles to all themes until bug 509642 is fixed %endif } - .popup-notification-menubutton[type="menu-button"]:hover:active { + .popup-notification-menubutton:hover:active { border-color: rgba(0,0,0,.5); } + .popup-notification-menubutton:not([type="menu-button"]), .popup-notification-menubutton > .button-menubutton-button, .popup-notification-menubutton > .button-menubutton-dropmarker { -moz-appearance: none; @@ -111,6 +112,7 @@ XXX: apply styles to all themes until bug 509642 is fixed -moz-border-end: none; } + .popup-notification-menubutton:not([type="menu-button"]), .popup-notification-menubutton > .button-menubutton-button > .button-box { -moz-padding-start: 8px; -moz-padding-end: 5px; @@ -140,6 +142,7 @@ XXX: apply styles to all themes until bug 509642 is fixed } %endif + .popup-notification-menubutton:not([type="menu-button"]):hover, .popup-notification-menubutton > .button-menubutton-button:hover, .popup-notification-menubutton > .button-menubutton-dropmarker:hover { %ifdef WINSTRIPE_AERO @@ -151,6 +154,7 @@ XXX: apply styles to all themes until bug 509642 is fixed %endif } + .popup-notification-menubutton:not([type="menu-button"]):hover:active, .popup-notification-menubutton > .button-menubutton-button:hover:active, .popup-notification-menubutton > .button-menubutton-dropmarker:hover:active, .popup-notification-menubutton[open="true"] > .button-menubutton-dropmarker { diff --git a/toolkit/themes/winstripe/mozapps/jar.mn b/toolkit/themes/winstripe/mozapps/jar.mn index 26f4759c72ee..4ce69848d829 100644 --- a/toolkit/themes/winstripe/mozapps/jar.mn +++ b/toolkit/themes/winstripe/mozapps/jar.mn @@ -72,6 +72,7 @@ toolkit.jar: skin/classic/mozapps/plugins/pluginGeneric.png (plugins/pluginGeneric.png) skin/classic/mozapps/plugins/pluginDisabled.png (plugins/pluginDisabled.png) skin/classic/mozapps/plugins/pluginBlocked.png (plugins/pluginBlocked.png) + skin/classic/mozapps/plugins/pluginBlocked-64.png (plugins/pluginBlocked-64.png) skin/classic/mozapps/plugins/pluginGeneric-16.png (plugins/pluginGeneric-16.png) skin/classic/mozapps/plugins/pluginHelp-16.png (plugins/pluginHelp-16.png) skin/classic/mozapps/plugins/pluginInstallerWizard.css (plugins/pluginInstallerWizard.css) @@ -151,6 +152,7 @@ toolkit.jar: skin/classic/aero/mozapps/plugins/pluginGeneric.png (plugins/pluginGeneric-aero.png) skin/classic/aero/mozapps/plugins/pluginDisabled.png (plugins/pluginDisabled-aero.png) skin/classic/aero/mozapps/plugins/pluginBlocked.png (plugins/pluginBlocked-aero.png) + skin/classic/aero/mozapps/plugins/pluginBlocked-64.png (plugins/pluginBlocked-64.png) skin/classic/aero/mozapps/plugins/pluginGeneric-16.png (plugins/pluginGeneric-16-aero.png) skin/classic/aero/mozapps/plugins/pluginHelp-16.png (plugins/pluginHelp-16.png) skin/classic/aero/mozapps/plugins/pluginInstallerWizard.css (plugins/pluginInstallerWizard.css) diff --git a/toolkit/themes/winstripe/mozapps/plugins/pluginBlocked-64.png b/toolkit/themes/winstripe/mozapps/plugins/pluginBlocked-64.png new file mode 100644 index 0000000000000000000000000000000000000000..3263cc1be981199ee8a5502ef3d047995e1c0331 GIT binary patch literal 3427 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 FV1laaaYz6F literal 0 HcwPel00001 -- 2.11.4.GIT