| Index: lib/contentPolicy.js | 
| =================================================================== | 
| --- a/lib/contentPolicy.js | 
| +++ b/lib/contentPolicy.js | 
| @@ -29,35 +29,16 @@ let {Prefs} = require("prefs"); | 
| let {FilterStorage} = require("filterStorage"); | 
| let {BlockingFilter, WhitelistFilter, RegExpFilter} = require("filterClasses"); | 
| let {defaultMatcher} = require("matcher"); | 
| let {objectMouseEventHander} = require("objectTabs"); | 
| let {RequestNotifier} = require("requestNotifier"); | 
| let {ElemHide} = require("elemHide"); | 
| /** | 
| - * Set of explicitly supported content types | 
| - * @type Set | 
| - */ | 
| -let contentTypes = new Set([ | 
| - "OTHER", "SCRIPT", "IMAGE", "STYLESHEET", "OBJECT", "SUBDOCUMENT", "DOCUMENT", | 
| - "XMLHTTPREQUEST", "OBJECT_SUBREQUEST", "FONT", "MEDIA", "ELEMHIDE", "POPUP", | 
| - "GENERICHIDE", "GENERICBLOCK" | 
| -]); | 
| - | 
| -/** | 
| - * Set of content types that aren't associated with a visual document area | 
| - * @type Set | 
| - */ | 
| -let nonVisualTypes = new Set([ | 
| - "SCRIPT", "STYLESHEET", "XMLHTTPREQUEST", "OBJECT_SUBREQUEST", "FONT", | 
| - "ELEMHIDE", "POPUP", "GENERICHIDE", "GENERICBLOCK" | 
| -]); | 
| - | 
| -/** | 
| * Randomly generated class name, to be applied to collapsed nodes. | 
| */ | 
| let collapsedClass = ""; | 
| /** | 
| * Maps numerical content type IDs to strings. | 
| * @type Map | 
| */ | 
| @@ -65,20 +46,33 @@ let types = new Map(); | 
| /** | 
| * Public policy checking functions and auxiliary objects | 
| * @class | 
| */ | 
| var Policy = exports.Policy = | 
| { | 
| /** | 
| - * Map of localized content type names by their identifiers. | 
| - * @type Map | 
| + * Set of explicitly supported content types | 
| + * @type Set | 
| */ | 
| - localizedDescr: new Map(), | 
| + contentTypes: new Set([ | 
| + "OTHER", "SCRIPT", "IMAGE", "STYLESHEET", "OBJECT", "SUBDOCUMENT", "DOCUMENT", | 
| + "XMLHTTPREQUEST", "OBJECT_SUBREQUEST", "FONT", "MEDIA", "ELEMHIDE", "POPUP", | 
| + "GENERICHIDE", "GENERICBLOCK" | 
| + ]), | 
| + | 
| + /** | 
| + * Set of content types that aren't associated with a visual document area | 
| + * @type Set | 
| + */ | 
| + nonVisualTypes: new Set([ | 
| + "SCRIPT", "STYLESHEET", "XMLHTTPREQUEST", "OBJECT_SUBREQUEST", "FONT", | 
| + "ELEMHIDE", "POPUP", "GENERICHIDE", "GENERICBLOCK" | 
| + ]), | 
| /** | 
| * Map containing all schemes that should be ignored by content policy. | 
| * @type Set | 
| */ | 
| whitelistSchemes: new Set(), | 
| /** | 
| @@ -87,20 +81,16 @@ var Policy = exports.Policy = | 
| init: function() | 
| { | 
| // Populate types map | 
| let iface = Ci.nsIContentPolicy; | 
| for (let name in iface) | 
| if (name.indexOf("TYPE_") == 0 && name != "TYPE_DATAREQUEST") | 
| types.set(iface[name], name.substr(5)); | 
| - // Populate localized type names | 
| - for (let typeName of contentTypes) | 
| - this.localizedDescr.set(typeName, Utils.getString("type_label_" + typeName.toLowerCase())); | 
| - | 
| // whitelisted URL schemes | 
| for (let scheme of Prefs.whitelistschemes.toLowerCase().split(" ")) | 
| this.whitelistSchemes.add(scheme); | 
| // Generate class identifier used to collapse node and register corresponding | 
| // stylesheet. | 
| let offset = "a".charCodeAt(0); | 
| for (let i = 0; i < 20; i++) | 
| @@ -127,17 +117,17 @@ var Policy = exports.Policy = | 
| */ | 
| processNode: function(wnd, node, contentType, location, collapse) | 
| { | 
| let topWnd = wnd.top; | 
| if (!topWnd || !topWnd.location || !topWnd.location.href) | 
| return true; | 
| // Interpret unknown types as "other" | 
| - if (!contentTypes.has(contentType)) | 
| + if (!this.contentTypes.has(contentType)) | 
| contentType = "OTHER"; | 
| let originWindow = Utils.getOriginWindow(wnd); | 
| let wndLocation = originWindow.location.href; | 
| let docDomain = getHostname(wndLocation); | 
| let match = null; | 
| let [sitekey, sitekeyWnd] = getSitekey(wnd); | 
| let nogeneric = false; | 
| @@ -228,17 +218,17 @@ var Policy = exports.Policy = | 
| } | 
| let thirdParty = (contentType == "ELEMHIDE" ? false : isThirdParty(location, docDomain)); | 
| if (!match && Prefs.enabled && RegExpFilter.typeMap.hasOwnProperty(contentType)) | 
| { | 
| match = defaultMatcher.matchesAny(location, RegExpFilter.typeMap[contentType], | 
| docDomain, thirdParty, sitekey, nogeneric); | 
| - if (match instanceof BlockingFilter && node.ownerDocument && !nonVisualTypes.has(contentType)) | 
| + if (match instanceof BlockingFilter && node.ownerDocument && !this.nonVisualTypes.has(contentType)) | 
| { | 
| let prefCollapse = (match.collapse != null ? match.collapse : !Prefs.fastcollapse); | 
| if (collapse || prefCollapse) | 
| schedulePostProcess(node); | 
| } | 
| // Track mouse events for objects | 
| if (!match && contentType == "OBJECT" && node.nodeType == Ci.nsIDOMNode.ELEMENT_NODE) |