From 1543f5dc94b1a2fa4dfe3e576bda44ab9b52d1fa Mon Sep 17 00:00:00 2001 From: janekptacijarabaci Date: Thu, 12 Jan 2017 00:15:42 +0100 Subject: [PATCH] Permissions: Plugins improvements (+ style clean up), skips the same permString --- .../preferences/aboutPermissions.js | 82 ++++++++++--------- 1 file changed, 45 insertions(+), 37 deletions(-) diff --git a/browser/components/preferences/aboutPermissions.js b/browser/components/preferences/aboutPermissions.js index 7131ab199c..cbaf146cd7 100644 --- a/browser/components/preferences/aboutPermissions.js +++ b/browser/components/preferences/aboutPermissions.js @@ -524,47 +524,55 @@ let AboutPermissions = { let pluginHost = Cc["@mozilla.org/plugin/host;1"] .getService(Ci.nsIPluginHost); let tags = pluginHost.getPluginTags(); + + let permissionMap = new Map(); + let permissionEntries = []; let XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; for (let plugin of tags) { - let mimeType = plugin.getMimeTypes()[0]; - let permString = pluginHost.getPermissionStringForType(mimeType); - let permissionEntry = document.createElementNS(XUL_NS, "box"); - permissionEntry.setAttribute("label", this.makeNicePluginName(plugin.name) - + " " + plugin.version); - permissionEntry.setAttribute("tooltiptext", plugin.description); - permissionEntry.setAttribute("vulnerable", ""); - permissionEntry.setAttribute("mimeType", mimeType); - permissionEntry.setAttribute("permString", permString); - permissionEntry.setAttribute("class", "pluginPermission"); - permissionEntry.setAttribute("id", permString + "-entry"); - // If the plugin is disabled, it makes no sense to change its - // click-to-play status, so don't add it. - // If the click-to-play pref is not set and the plugin is not - // click-to-play blocklisted, again click-to-play doesn't apply, - // so don't add it. - if (plugin.disabled || - (!Services.prefs.getBoolPref("plugins.click_to_play") && - pluginHost.getStateForType(mimeType) - != Ci.nsIPluginTag.STATE_CLICKTOPLAY)) { - permissionEntry.hidden = true; - } else { - permissionEntry.hidden = false; + for (let mimeType of plugin.getMimeTypes()) { + let permString = pluginHost.getPermissionStringForType(mimeType); + if (!permissionMap.has(permString)) { + let permissionEntry = document.createElementNS(XUL_NS, "box"); + permissionEntry.setAttribute("label", + this.makeNicePluginName(plugin.name) + + " " + plugin.version); + permissionEntry.setAttribute("tooltiptext", plugin.description); + permissionEntry.setAttribute("vulnerable", ""); + permissionEntry.setAttribute("mimeType", mimeType); + permissionEntry.setAttribute("permString", permString); + permissionEntry.setAttribute("class", "pluginPermission"); + permissionEntry.setAttribute("id", permString + "-entry"); + // If the plugin is disabled, it makes no sense to change its + // click-to-play status, so don't add it. + // If the click-to-play pref is not set and the plugin is not + // click-to-play blocklisted, again click-to-play doesn't apply, + // so don't add it. + if (plugin.disabled || + (!Services.prefs.getBoolPref("plugins.click_to_play") && + pluginHost.getStateForType(mimeType) + != Ci.nsIPluginTag.STATE_CLICKTOPLAY)) { + permissionEntry.hidden = true; + } else { + permissionEntry.hidden = false; + } + permissionEntries.push(permissionEntry); + this._supportedPermissions.push(permString); + this._noGlobalDeny.push(permString); + Object.defineProperty(PermissionDefaults, permString, { + get: function() { + return this.isClickToPlay() + ? PermissionDefaults.UNKNOWN + : PermissionDefaults.ALLOW; + }.bind(permissionEntry), + set: function(aValue) { + this.clicktoplay = (aValue == PermissionDefaults.UNKNOWN); + }.bind(plugin), + configurable: true + }); + permissionMap.set(permString, ""); + } } - permissionEntries.push(permissionEntry); - this._supportedPermissions.push(permString); - this._noGlobalDeny.push(permString); - Object.defineProperty(PermissionDefaults, permString, { - get: function() { - return this.isClickToPlay() - ? PermissionDefaults.UNKNOWN - : PermissionDefaults.ALLOW; - }.bind(permissionEntry), - set: function(aValue) { - this.clicktoplay = (aValue == PermissionDefaults.UNKNOWN); - }.bind(plugin), - configurable: true - }); } if (permissionEntries.length > 0) {