forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			223 lines
		
	
	
	
		
			8.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			223 lines
		
	
	
	
		
			8.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!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;
 | |
|   // XXX Bug 1418959 - For some reason, using Services.strings here causes
 | |
|   // about:plugins to leak when running browser_aboutURLs.js.
 | |
|   // eslint-disable-next-line mozilla/use-services
 | |
|   var strBundleService = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Ci.nsIStringBundleService);
 | |
|   var pluginsbundle = strBundleService.createBundle("chrome://global/locale/plugins.properties");
 | |
| 
 | |
|   // eslint-disable-next-line no-unsanitized/method
 | |
|   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">
 | |
|   /* eslint-env mozilla/frame-script */
 | |
| 
 | |
|   "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>
 | 
