gecko-dev/toolkit/content/plugins.js

200 строки
6.9 KiB
JavaScript

/* 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/. */
/* eslint-env mozilla/frame-script */
"use strict";
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
/* 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);
RPMAddMessageListener("PluginList", function({ data: aPlugins }) {
var fragment = document.createDocumentFragment();
// "Installed plugins"
var id, label;
if (aPlugins.length > 0) {
id = "plugs";
label = "installed-plugins-label";
} else {
id = "noplugs";
label = "no-plugins-are-installed-label";
}
var enabledplugins = document.createElement("h1");
enabledplugins.setAttribute("id", id);
document.l10n.setAttributes(enabledplugins, label);
fragment.appendChild(enabledplugins);
var deprecation = document.createElement("p");
var deprecationLink = document.createElement("a");
let deprecationLink_href =
Services.urlFormatter.formatURLPref("app.support.baseURL") + "npapi";
deprecationLink.setAttribute("data-l10n-name", "deprecation-link");
deprecationLink.setAttribute("href", deprecationLink_href);
deprecation.appendChild(deprecationLink);
deprecation.setAttribute("class", "notice");
document.l10n.setAttributes(deprecation, "deprecation-description");
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("data-l10n-name", "file");
file.setAttribute("class", "label");
fileDd.appendChild(file);
document.l10n.setAttributes(fileDd, "file-dd", {
pluginLibraries: plugin.pluginLibraries[0],
});
dl.appendChild(fileDd);
// "Path: /usr/lib/mozilla/plugins/libtotem-cone-plugin.so"
var pathDd = document.createElement("dd");
var path = document.createElement("span");
path.setAttribute("data-l10n-name", "path");
path.setAttribute("class", "label");
pathDd.appendChild(path);
document.l10n.setAttributes(pathDd, "path-dd", {
pluginFullPath: plugin.pluginFullpath[0],
});
dl.appendChild(pathDd);
// "Version: "
var versionDd = document.createElement("dd");
var version = document.createElement("span");
version.setAttribute("data-l10n-name", "version");
version.setAttribute("class", "label");
versionDd.appendChild(version);
document.l10n.setAttributes(versionDd, "version-dd", {
version: plugin.version,
});
dl.appendChild(versionDd);
// "State: "
var stateDd = document.createElement("dd");
var state = document.createElement("span");
state.setAttribute("data-l10n-name", "state");
state.setAttribute("label", "state");
stateDd.appendChild(state);
if (plugin.isActive) {
if (plugin.blocklistState in stateNames) {
document.l10n.setAttributes(
stateDd,
"state-dd-enabled-block-list-state",
{ blockListState: stateNames[plugin.blocklistState] }
);
} else {
document.l10n.setAttributes(stateDd, "state-dd-enabled");
}
} else if (plugin.blocklistState in stateNames) {
document.l10n.setAttributes(
stateDd,
"state-dd-disabled-block-list-state",
{ blockListState: stateNames[plugin.blocklistState] }
);
} else {
document.l10n.setAttributes(stateDd, "state-dd-disabled");
}
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");
document.l10n.setAttributes(typeTh, "mime-type-label");
tr.appendChild(typeTh);
// "Description" column header
var descTh = document.createElement("th");
descTh.setAttribute("class", "desc");
document.l10n.setAttributes(descTh, "description-label");
tr.appendChild(descTh);
// "Suffixes" column header
var suffixesTh = document.createElement("th");
suffixesTh.setAttribute("class", "suff");
document.l10n.setAttributes(suffixesTh, "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);
});
RPMSendAsyncMessage("RequestPlugins");