diff options
Diffstat (limited to 'toolkit/content/plugins.html')
-rw-r--r-- | toolkit/content/plugins.html | 217 |
1 files changed, 217 insertions, 0 deletions
diff --git a/toolkit/content/plugins.html b/toolkit/content/plugins.html new file mode 100644 index 000000000..84cbba596 --- /dev/null +++ b/toolkit/content/plugins.html @@ -0,0 +1,217 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> + +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<html> +<head> +<script type="application/javascript"> + "use strict"; + + Components.utils.import("resource://gre/modules/Services.jsm"); + + var Ci = Components.interfaces; + var strBundleService = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Ci.nsIStringBundleService); + var pluginsbundle = strBundleService.createBundle("chrome://global/locale/plugins.properties"); + + document.writeln("<title>" + pluginsbundle.GetStringFromName("title_label") + "<\/title>"); +</script> +<link rel="stylesheet" type="text/css" href="chrome://global/content/plugins.css"> +<link rel="stylesheet" type="text/css" href="chrome://global/skin/plugins.css"> +</head> +<body> +<div id="outside"> +<script type="application/javascript"> + "use strict"; + + function setDirection() { + var frame = document.getElementById("directionDetector"); + var direction = frame.contentDocument + .defaultView + .window + .getComputedStyle(frame.contentDocument.getElementById("target"), "") + .getPropertyValue("direction"); + document.body.removeChild(frame); + document.dir = direction; + } + + function setupDirection() { + var frame = document.createElement("iframe"); + frame.setAttribute("id", "directionDetector"); + frame.setAttribute("src", "chrome://global/content/directionDetector.html"); + frame.setAttribute("width", "0"); + frame.setAttribute("height", "0"); + frame.setAttribute("style", "visibility: hidden;"); + frame.setAttribute("onload", "setDirection();"); + document.body.appendChild(frame); + } + setupDirection(); + + /* JavaScript to enumerate and display all installed plug-ins + + * First, refresh plugins in case anything has been changed recently in + * prefs: (The "false" argument tells refresh not to reload or activate + * any plug-ins that would be active otherwise. In contrast, one would + * use "true" in the case of ASD instead of restarting) + */ + navigator.plugins.refresh(false); + + addMessageListener("PluginList", function({ data: aPlugins }) { + var fragment = document.createDocumentFragment(); + + // "Installed plugins" + var id, label; + if (aPlugins.length > 0) { + id = "plugs"; + label = "installedplugins_label"; + } else { + id = "noplugs"; + label = "nopluginsareinstalled_label"; + } + var enabledplugins = document.createElement("h1"); + enabledplugins.setAttribute("id", id); + enabledplugins.appendChild(document.createTextNode(pluginsbundle.GetStringFromName(label))); + fragment.appendChild(enabledplugins); + + var deprecation = document.createElement("p"); + deprecation.setAttribute("class", "notice"); + deprecation.textContent = pluginsbundle.GetStringFromName("deprecation_description") + " \u00A0 "; + var deprecationLink = document.createElement("a"); + deprecationLink.textContent = pluginsbundle.GetStringFromName("deprecation_learn_more"); + deprecationLink.href = Services.urlFormatter.formatURLPref("app.support.baseURL") + "npapi"; + deprecation.appendChild(deprecationLink); + fragment.appendChild(deprecation); + + var stateNames = {}; + ["STATE_SOFTBLOCKED", + "STATE_BLOCKED", + "STATE_OUTDATED", + "STATE_VULNERABLE_UPDATE_AVAILABLE", + "STATE_VULNERABLE_NO_UPDATE"].forEach(function(label) { + stateNames[Ci.nsIBlocklistService[label]] = label; + }); + + for (var i = 0; i < aPlugins.length; i++) { + var plugin = aPlugins[i]; + if (plugin) { + // "Shockwave Flash" + var plugname = document.createElement("h2"); + plugname.setAttribute("class", "plugname"); + plugname.appendChild(document.createTextNode(plugin.name)); + fragment.appendChild(plugname); + + var dl = document.createElement("dl"); + fragment.appendChild(dl); + + // "File: Flash Player.plugin" + var fileDd = document.createElement("dd"); + var file = document.createElement("span"); + file.setAttribute("class", "label"); + file.appendChild(document.createTextNode(pluginsbundle.GetStringFromName("file_label") + " ")); + fileDd.appendChild(file); + fileDd.appendChild(document.createTextNode(plugin.pluginLibraries)); + dl.appendChild(fileDd); + + // "Path: /usr/lib/mozilla/plugins/libtotem-cone-plugin.so" + var pathDd = document.createElement("dd"); + var path = document.createElement("span"); + path.setAttribute("class", "label"); + path.appendChild(document.createTextNode(pluginsbundle.GetStringFromName("path_label") + " ")); + pathDd.appendChild(path); + pathDd.appendChild(document.createTextNode(plugin.pluginFullpath)); + dl.appendChild(pathDd); + + // "Version: " + var versionDd = document.createElement("dd"); + var version = document.createElement("span"); + version.setAttribute("class", "label"); + version.appendChild(document.createTextNode(pluginsbundle.GetStringFromName("version_label") + " ")); + versionDd.appendChild(version); + versionDd.appendChild(document.createTextNode(plugin.version)); + dl.appendChild(versionDd); + + // "State: " + var stateDd = document.createElement("dd"); + var state = document.createElement("span"); + state.setAttribute("label", "state"); + state.appendChild(document.createTextNode(pluginsbundle.GetStringFromName("state_label") + " ")); + stateDd.appendChild(state); + var status = plugin.isActive ? pluginsbundle.GetStringFromName("state_enabled") : pluginsbundle.GetStringFromName("state_disabled"); + if (plugin.blocklistState in stateNames) { + status += " (" + stateNames[plugin.blocklistState] + ")"; + } + stateDd.appendChild(document.createTextNode(status)); + dl.appendChild(stateDd); + + // Plugin Description + var descDd = document.createElement("dd"); + descDd.appendChild(document.createTextNode(plugin.description)); + dl.appendChild(descDd); + + // MIME Type table + var mimetypeTable = document.createElement("table"); + mimetypeTable.setAttribute("border", "1"); + mimetypeTable.setAttribute("class", "contenttable"); + fragment.appendChild(mimetypeTable); + + var thead = document.createElement("thead"); + mimetypeTable.appendChild(thead); + var tr = document.createElement("tr"); + thead.appendChild(tr); + + // "MIME Type" column header + var typeTh = document.createElement("th"); + typeTh.setAttribute("class", "type"); + typeTh.appendChild(document.createTextNode(pluginsbundle.GetStringFromName("mimetype_label"))); + tr.appendChild(typeTh); + + // "Description" column header + var descTh = document.createElement("th"); + descTh.setAttribute("class", "desc"); + descTh.appendChild(document.createTextNode(pluginsbundle.GetStringFromName("description_label"))); + tr.appendChild(descTh); + + // "Suffixes" column header + var suffixesTh = document.createElement("th"); + suffixesTh.setAttribute("class", "suff"); + suffixesTh.appendChild(document.createTextNode(pluginsbundle.GetStringFromName("suffixes_label"))); + tr.appendChild(suffixesTh); + + var tbody = document.createElement("tbody"); + mimetypeTable.appendChild(tbody); + + var mimeTypes = plugin.pluginMimeTypes; + for (var j = 0; j < mimeTypes.length; j++) { + var mimetype = mimeTypes[j]; + if (mimetype) { + var mimetypeRow = document.createElement("tr"); + tbody.appendChild(mimetypeRow); + + // "application/x-shockwave-flash" + var typename = document.createElement("td"); + typename.appendChild(document.createTextNode(mimetype.type)); + mimetypeRow.appendChild(typename); + + // "Shockwave Flash" + var description = document.createElement("td"); + description.appendChild(document.createTextNode(mimetype.description)); + mimetypeRow.appendChild(description); + + // "swf" + var suffixes = document.createElement("td"); + suffixes.appendChild(document.createTextNode(mimetype.suffixes)); + mimetypeRow.appendChild(suffixes); + } + } + } + } + + document.getElementById("outside").appendChild(fragment); + }); + + sendAsyncMessage("RequestPlugins"); +</script> +</div> +</body> +</html> |