[Pkg-mozext-commits] [noscript] 01/04: Imported Upstream version 2.6.9.23~rc3

David Prévot taffit at moszumanska.debian.org
Fri May 22 13:48:34 UTC 2015


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository noscript.

commit 3f4fbe01fedde16fb73e4038da5d27100ecb17ab
Author: David Prévot <david at tilapin.org>
Date:   Fri May 22 09:01:48 2015 -0400

    Imported Upstream version 2.6.9.23~rc3
---
 chrome/noscript.jar!/content/noscript/ABE.js       | 415 ++++-----
 .../content/noscript/ChannelReplacement.js         |   2 +-
 chrome/noscript.jar!/content/noscript/about.xul    |   6 +-
 .../content/noscript/noscriptOverlay.js            | 968 ++++++++++-----------
 .../locale/bg-BG/noscript/noscript.dtd             |   2 +-
 .../locale/ca-AD/noscript/noscript.dtd             |   2 +-
 .../locale/cs-CZ/noscript/noscript.dtd             |   2 +-
 .../locale/cy-GB/noscript/noscript.dtd             |   2 +-
 .../noscript.jar!/locale/da/noscript/noscript.dtd  |   2 +-
 .../noscript.jar!/locale/de/noscript/noscript.dtd  |   2 +-
 .../noscript.jar!/locale/el/noscript/noscript.dtd  |   2 +-
 .../locale/en-GB/noscript/noscript.dtd             |   2 +-
 .../locale/en-US/noscript/noscript.dtd             |   2 +-
 .../noscript.jar!/locale/eo/noscript/noscript.dtd  |   2 +-
 .../locale/es-AR/noscript/noscript.dtd             |   2 +-
 .../locale/es-CL/noscript/noscript.dtd             |   2 +-
 .../locale/es-ES/noscript/noscript.dtd             |   2 +-
 .../locale/et-EE/noscript/noscript.dtd             |   2 +-
 .../noscript.jar!/locale/eu/noscript/noscript.dtd  |   2 +-
 .../locale/fa-IR/noscript/noscript.dtd             |   2 +-
 .../noscript.jar!/locale/fi/noscript/noscript.dtd  |   2 +-
 .../noscript.jar!/locale/fr/noscript/noscript.dtd  |   2 +-
 .../locale/gl-ES/noscript/noscript.dtd             |   2 +-
 .../locale/he-IL/noscript/noscript.dtd             |   2 +-
 .../locale/hr-HR/noscript/noscript.dtd             |   2 +-
 .../noscript.jar!/locale/hsb/noscript/noscript.dtd |   2 +-
 .../locale/hu-HU/noscript/noscript.dtd             |   2 +-
 .../locale/id-ID/noscript/noscript.dtd             |   2 +-
 .../noscript.jar!/locale/it/noscript/noscript.dtd  |   2 +-
 .../locale/ja-JP/noscript/noscript.dtd             |   2 +-
 .../locale/kk-KZ/noscript/noscript.dtd             |   2 +-
 .../locale/km-KH/noscript/noscript.dtd             |   2 +-
 .../locale/ko-KR/noscript/noscript.dtd             |   2 +-
 .../noscript.jar!/locale/lt/noscript/noscript.dtd  |   2 +-
 .../locale/mk-MK/noscript/noscript.dtd             |   2 +-
 .../locale/ms-MY/noscript/noscript.dtd             |   2 +-
 .../locale/nb-NO/noscript/noscript.dtd             |   2 +-
 .../noscript.jar!/locale/nl/noscript/noscript.dtd  |   2 +-
 .../noscript.jar!/locale/pl/noscript/noscript.dtd  |   2 +-
 .../locale/pt-BR/noscript/noscript.dtd             |   2 +-
 .../locale/pt-PT/noscript/noscript.dtd             |   2 +-
 .../noscript.jar!/locale/ro/noscript/noscript.dtd  |   2 +-
 .../locale/sk-SK/noscript/noscript.dtd             |   2 +-
 .../locale/sl-SI/noscript/noscript.dtd             |   2 +-
 .../locale/sr-RS/noscript/noscript.dtd             |   2 +-
 .../locale/sv-SE/noscript/noscript.dtd             |   2 +-
 .../locale/te-IN/noscript/noscript.dtd             |   2 +-
 .../noscript.jar!/locale/th/noscript/noscript.dtd  |   2 +-
 .../noscript.jar!/locale/tr/noscript/noscript.dtd  |   2 +-
 .../noscript.jar!/locale/vi/noscript/noscript.dtd  |   2 +-
 .../locale/zh-CN/noscript/noscript.dtd             |   2 +-
 .../locale/zh-TW/noscript/noscript.dtd             |   2 +-
 components/noscriptService.js                      |   2 +-
 install.rdf                                        |   2 +-
 54 files changed, 746 insertions(+), 745 deletions(-)

diff --git a/chrome/noscript.jar!/content/noscript/ABE.js b/chrome/noscript.jar!/content/noscript/ABE.js
index 1caab41..3211080 100644
--- a/chrome/noscript.jar!/content/noscript/ABE.js
+++ b/chrome/noscript.jar!/content/noscript/ABE.js
@@ -4,7 +4,7 @@ const ABE = {
   RULES_CHANGED_TOPIC: "abe:rules-changed",
   FLAG_CALLED: 0x01,
   FLAG_CHECKED: 0x02,
-  
+
   SITE_RULESET_LIFETIME: 12 * 60 * 60000, // 12 hours
   maxSiteRulesetSize: 8192,
   maxSiteRulesetTime: 16000,
@@ -12,7 +12,7 @@ const ABE = {
   siteEnabled: false,
   allowRulesetRedir: false,
   skipBrowserRequests: true,
-  
+
   BROWSER_URI: IOS.newURI("chrome://browser/content/", null, null),
   LOAD_BACKGROUND: Ci.nsIChannel.LOAD_BACKGROUND,
   LOAD_INITIAL_DOCUMENT_URI: Ci.nsIChannel.LOAD_INITIAL_DOCUMENT_URI,
@@ -20,16 +20,16 @@ const ABE = {
   localRulesets: [],
   _localMap: null,
   _siteRulesets: null,
-  
+
   init: function(prefParent) {
     const ps = this.prefService = Cc["@mozilla.org/preferences-service;1"]
       .getService(Ci.nsIPrefService).QueryInterface(Ci.nsIPrefBranch);
     ABEStorage.init(ps.getBranch(prefParent+ "ABE.").QueryInterface(Ci.nsIPrefBranch2));
     DoNotTrack.init(ps.getBranch(prefParent+ "doNotTrack.").QueryInterface(Ci.nsIPrefBranch2));
   },
-  
+
   siteMap: {__proto__: null},
-  
+
   get disabledRulesetNames() {
     return this.rulesets.filter(function(rs) { return rs.disabled; })
       .map(function(rs) { return rs.name; }).join(" ");
@@ -40,13 +40,13 @@ const ABE = {
     if (names) try {
       for each (var name in names.split(/\s+/)) {
         rs = this.localMap[name] || this.siteMap[name];
-        if (rs) rs.disabled = true; 
+        if (rs) rs.disabled = true;
       }
     } catch(e) {}
-    
+
     return names;
   },
-  
+
   get localMap() {
     if (this._localMap) return this._localMap;
     this._localMap = {__proto__: null};
@@ -55,7 +55,7 @@ const ABE = {
     }
     return this._localMap;
   },
-  
+
   get siteRulesets() {
     if (this._siteRulesets) return this._siteRulesets;
     this._siteRulesets = [];
@@ -67,11 +67,11 @@ const ABE = {
     this._siteRulesets.sort(function(r1, r2) { return r1.name > r2.name; });
     return this._siteRulesets;
   },
-  
+
   get rulesets() {
     return this.localRulesets.concat(this.siteRulesets);
   },
-  
+
   checkFrameOpt: function(w, chan) {
     try {
       if (!w) {
@@ -88,19 +88,19 @@ const ABE = {
     } catch(e) {}
     return false;
   },
-  
+
   clear: function() {
     this.localRulesets = [];
     this.refresh();
   },
-  
+
   refresh: function() {
     this.siteMap = {__proto__: null};
     this._siteRulesets = null;
   },
-  
+
   createRuleset: function(name, source, timestamp) new ABERuleset(name, source, timestamp || Date.now()),
-  
+
   parse: function(name, source, timestamp) {
     try {
       var rs = typeof name === "string" ? this.createRuleset(name, source, timestamp) : name;
@@ -115,7 +115,7 @@ const ABE = {
     }
     return false;
   },
-  
+
   storeRuleset: function(name, source) {
     if (this.localMap[name] === source) return false;
     ABEStorage.saveRuleset(name, source);
@@ -123,12 +123,12 @@ const ABE = {
     ABEStorage.loadRules();
     return true;
   },
-  
+
   addLocalRuleset: function(rs) {
      this.localRulesets.push(rs);
      this._localMap = null;
   },
-  
+
   putSiteRuleset: function(rs) {
     this.siteMap[rs.name] = rs;
     this._siteRulesets = null;
@@ -136,7 +136,7 @@ const ABE = {
 
   restoreJSONRules: function(data) {
     if (!data.length) return;
-    
+
     var f, change;
     try {
       ABEStorage.clear();
@@ -145,13 +145,13 @@ const ABE = {
       ABE.log("Failed to restore configuration: " + e);
     }
   },
-  
+
   resetDefaults: function() {
     ABEStorage.clear();
     this.clear();
   },
-  
-  
+
+
   checkPolicy: function(origin, destination, type) {
     try {
       return this.checkRequest(new ABERequest(new ABEPolicyChannel(origin, destination, type)));
@@ -160,16 +160,16 @@ const ABE = {
       return false;
     }
   },
-  
+
   checkRequest: function(req) {
     if (!this.enabled)
       return false;
-  
+
     const channel = req.channel;
     const loadFlags = channel.loadFlags;
-    
+
     var browserReq =  req.originURI.schemeIs("chrome") && !req.external;
-    
+
     if (browserReq &&
         (
           this.skipBrowserRequests &&
@@ -180,28 +180,28 @@ const ABE = {
       if (this.consoleDump) this.log("Skipping low-level browser request for " + req.destination);
       return false;
     }
-  
+
     if (this.localRulesets.length == 0 && !this.siteEnabled)
       return null;
-    
+
     if (this.deferIfNeeded(req))
       return false;
-    
+
     if (DoNotTrack.enabled) DoNotTrack.apply(req);
-    
+
     var t;
     if (this.consoleDump) {
       this.log("Checking #" + req.serial + ": " + req.destination + " from " + req.origin + " - " + loadFlags);
       t = Date.now();
     }
-    
+
     try {
       var res = new ABERes(req);
       var rs;
       for each (rs in this.localRulesets) {
         if (this._check(rs, res)) break;
       }
-      
+
       if (!(browserReq || res.fatal) &&
           this.siteEnabled && channel instanceof Ci.nsIHttpChannel &&
           !IOUtil.extractFromChannel(channel, "ABE.preflight", true) &&
@@ -209,17 +209,17 @@ const ABE = {
           req.destinationURI.prePath != req.originURI.prePath &&
           !(this.skipBrowserRequests && req.originURI.schemeIs("chrome") && !req.window) // skip preflight for window-less browser requests
       ) {
-        
+
         var name = this._host2name(req.destinationURI.host);
         if (!(name in this.siteMap)) {
           ABE.log("Preflight for " + req.origin + ", " + req.destination + ", " + loadFlags);
           this.downloadRuleset(name, req.destinationURI);
         }
-        
+
         rs = this.siteMap[name];
         if (rs && Date.now() - rs.timestamp > this.SITE_RULESET_LIFETIME)
           rs = this.downloadRuleset(name, req.destinationURI);
-        
+
         if (rs) this._check(rs, res);
       }
     } finally {
@@ -228,7 +228,7 @@ const ABE = {
     }
     return res.lastRuleset && res;
   },
-  
+
   _check: function(rs, res) {
     var action = rs.check(res.request);
     if (action) {
@@ -247,87 +247,87 @@ const ABE = {
     }
     return false;
   },
-  
+
   deferIfNeeded: function(req) {
     var host = req.destinationURI.host;
     if (!(req.canDoDNS && req.deferredDNS) ||
         DNS.isIP(host) ||
-        DNS.isCached(host) || 
+        DNS.isCached(host) ||
         req.channel.redirectionLimit == 0 || req.channel.status != 0 ||
         req.channel.notificationCallbacks instanceof Ci.nsIObjectLoadingContent // OBJECT elements can't be channel-replaced :(
-        ) 
+        )
       return false;
 
     IOUtil.attachToChannel(req.channel, "ABE.deferred", DUMMY_OBJ);
-    
+
     if (ChannelReplacement.runWhenPending(req.channel, function() {
       try {
-        
+
         if (req.channel.status != 0) return;
-        
+
         if ((req.channel instanceof Ci.nsITransportEventSink)
             && req.isDoc && !(req.subdoc || req.dnsNotified)) try {
           Thread.asap(function() {
             if (!req.dnsNotified) {
               ABE.log("DNS notification for " + req.destination);
-              req.dnsNotified = true; // unexplicable recursions have been reported... 
+              req.dnsNotified = true; // unexplicable recursions have been reported...
               req.channel.onTransportStatus(null, 0x804b0003, 0, 0); // notify STATUS_RESOLVING
             }
           });
         } catch(e) {}
-        
-        req.replace(false, null, function(replacement) {      
+
+        req.replace(false, null, function(replacement) {
           ABE.log(host + " not cached in DNS, deferring ABE checks after DNS resolution for request " + req.serial);
-          
+
           DNS.resolve(host, 0, function(dnsRecord) {
             req.dnsNotified = true; // prevents spurious notifications
             replacement.open();
           });
         });
-        
+
       } catch(e) {
         ABE.log("Deferred ABE checks failed: " + e);
       }
     })) {
       ABE.log(req.serial + " not pending yet, will check later.")
     }
-    
+
     return true;
   },
-  
+
   isDeferred: function(chan) {
     return !!IOUtil.extractFromChannel(chan, "ABE.deferred", true);
   },
-  
+
   hasSiteRulesFor: function(host) {
     return this._host2Name(host) in this.siteMap;
   },
-  
- 
+
+
   _host2name: function(host) {
     return "." + host;
   },
-  
+
   isSubdomain: function(parentHost, childHost) {
     if (parentHost.length > childHost.length) return false;
     parentHost = "." + parentHost;
     childHost = "." + childHost;
     return parentHost == childHost.substring(childHost.length - parentHost.length);
   },
-  
+
   _downloading: {},
   _abeContentTypeRx: /^application\/|\babe\b|^text\/plain$/i,
   downloadRuleset: function(name, uri) {
     var host = uri.host;
-  
+
     var downloading = this._downloading;
 
     if (host in downloading) {
       ABE.log("Already fetching rulesets for " + host);
     }
-    
+
     var ts = Date.now();
-    
+
     var ctrl = {
       _r: true,
       set running(v) { if (!v) delete downloading[host]; return this._r = v; },
@@ -335,32 +335,32 @@ const ABE = {
       startTime: ts,
       maxTime: ABE.maxSiteRulesetTime
     };
-    
+
     var elapsed;
-    
+
     try {
       downloading[host] = true;
-      
+
       this.log("Trying to fetch rules for " + host);
-      
+
       uri = uri.clone();
       uri.scheme = "https";
       uri.path = "/rules.abe";
-        
+
       var xhr = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.nsIXMLHttpRequest);
       xhr.mozBackgroundRequest = true;
       xhr.open("GET", uri.spec, true); // async if we can spin our own event loop
-      
+
       var channel = xhr.channel; // need to cast
       IOUtil.attachToChannel(channel, "ABE.preflight", DUMMY_OBJ);
-      
+
       if (channel instanceof Ci.nsIHttpChannel && !this.allowRulesetRedir)
         channel.redirectionLimit = 0;
-      
+
       if (channel instanceof Ci.nsICachingChannel)
         channel.loadFlags |= channel.LOAD_BYPASS_LOCAL_CACHE_IF_BUSY; // see bug 309424
-      
-      
+
+
       xhr.addEventListener("readystatechange", function() {
         switch(xhr.readyState) {
           case 2:
@@ -386,13 +386,13 @@ const ABE = {
         xhr.abort();
         ctrl.running = false;
       }, false);
-      
-  
+
+
       var send = function() {
         xhr.send(null);
         return Thread.spin(ctrl);
       };
-      
+
       if (send()) {
         var size = 0;
         try {
@@ -402,21 +402,21 @@ const ABE = {
         xhr.abort();
         return false;
       }
- 
+
       if (xhr.channel != channel && xhr.channel) // shouldn't happen, see updateRedirectChain()...
-        this._handleDownloadRedirection(channel, xhr.channel); 
+        this._handleDownloadRedirection(channel, xhr.channel);
 
       if (xhr.status != 200)
         throw new Error("Status: " + xhr.status);
-      
+
       if (!this._abeContentTypeRx.test(xhr.channel.contentType))
         throw new Error("Content-type: " + xhr.channel.contentType);
-      
+
       var source = xhr.responseText || '';
-      
+
       elapsed = Date.now() - ts;
       if (source) ABE.log("Fetched ruleset for "+ host + " in " + elapsed + "ms");
-      
+
       return this.parse(name, source);
     } catch(e) {
       elapsed = elapsed || Date.now() - ts;
@@ -427,11 +427,11 @@ const ABE = {
       else this.siteMap[name].timestamp = ts;
       ctrl.running = false;
     }
-    
+
     return false;
   },
-  
-  
+
+
   isSandboxed: function(channel) {
     return IOUtil.extractFromChannel(channel, ABE.SANDBOX_KEY, true);
   },
@@ -442,16 +442,16 @@ const ABE = {
     docShell.allowJavascript = docShell.allowPlugins =
         docShell.allowMetaRedirects= docShell.allowSubframes = !sandboxed;
   },
-  
-  
+
+
   updateRedirectChain: function(oldChannel, newChannel) {
     this._handleDownloadRedirection(oldChannel, newChannel);
-    
+
     var redirectChain = this.getRedirectChain(oldChannel);
     redirectChain.push(oldChannel.URI);
     IOUtil.attachToChannel(newChannel, "ABE.redirectChain", redirectChain);
   },
-  
+
   getRedirectChain: function(channel) {
     var rc = IOUtil.extractFromChannel(channel, "ABE.redirectChain", true);
     if (!rc) {
@@ -461,20 +461,20 @@ const ABE = {
     };
     return rc;
   },
-  
+
   getOriginalOrigin: function(channel) {
     var rc = this.getRedirectChain(channel);
     return rc.length && rc[0] || null;
   },
-  
+
   _handleDownloadRedirection: function(oldChannel, newChannel) {
     if (!IOUtil.extractFromChannel(oldChannel, "ABE.preflight", true)) return;
-    
+
     var uri = oldChannel.URI;
     var newURI = newChannel.URI;
-        
+
     if (uri.spec != newURI.spec && // redirected, check if it same path and same domain or upper
-        (uri.path != newURI.path || 
+        (uri.path != newURI.path ||
           !(newURI.schemeIs("https") && this.isSubdomain(newURI.host, uri.host))
         )
       ) {
@@ -483,11 +483,11 @@ const ABE = {
       oldChannel.cancel(NS_BINDING_ABORTED);
       throw new Error(msg);
     }
-    
+
     IOUtil.attachToChannel(oldChannel, "ABE.preflight", DUMMY_OBJ);
   },
-  
-  
+
+
   consoleDump: false,
   log: function(msg) {
     if (this.consoleDump) {
@@ -512,18 +512,18 @@ ABERes.prototype = {
 
 var ABEActions = {
   accept: function(req) {
-    return ABERes.DONE;  
+    return ABERes.DONE;
   },
   deny: function(req) {
     IOUtil.abort(req.channel, true);
     return ABERes.FATAL;
   },
-  
+
   _idempotentMethodsRx: /^(?:GET|HEAD|OPTIONS)$/i,
   anonymize: function(req) {
     var channel = req.channel;
     const ANON_KEY = "abe.anonymized";
-    
+
     let cookie;
     try {
       cookie = channel.getRequestHeader("Cookie");
@@ -544,7 +544,7 @@ var ABEActions = {
         && IOUtil.extractFromChannel(channel, ANON_KEY, true)) {// already anonymous
       return ABERes.SKIPPED;
     }
-    
+
     req.replace(
       idempotent ? null : "GET",
       anonURI,
@@ -555,12 +555,13 @@ var ABEActions = {
         IOUtil.attachToChannel(channel, ANON_KEY, DUMMY_OBJ);
         channel.loadFlags |= channel.LOAD_ANONYMOUS;
         replacement.open();
-      }
+      },
+      true
     );
 
     return ABERes.DONE;
   },
-  
+
   sandbox: function(req) {
     ABE.setSandboxed(req.channel);
     if (req.isDoc) {
@@ -588,7 +589,7 @@ function ABERuleset(name, source, timestamp) {
         if (m) throw new Error(msg, parseInt(m[1]), self.name); // TODO: error console reporting w/ line num
         throw new Error(msg)
       };
-      
+
       this._init(new ABEParser(new org.antlr.runtime.CommonTokenStream(
         new ABELexer(new org.antlr.runtime.ANTLRStringStream(source))))
             .ruleset().getTree());
@@ -606,20 +607,20 @@ ABERuleset.prototype = {
   disabled: false,
   rules: [],
   expires: 0,
-  
+
   _init: function(tree) {
     var rule = null,
         predicate = null,
         accumulator = null,
         history  = [],
         rules = [];
-    
+
     walk(tree);
-    
+
     if (!this.errors) this.rules = rules;
     rule = predicate = accumulator = history = null;
-  
-    
+
+
     function walk(tree) {
       var node, t;
       for (var j = 0, l = tree.getChildCount(); j < l; j++) {
@@ -628,17 +629,17 @@ ABERuleset.prototype = {
         walk(node.getTree());
       }
     }
-    
+
     function examine(node) {
       var t = node.getToken();
-      
+
       switch(t.type) {
         case ABEParser.T_SITE:
         case ABEParser.EOF:
           if (rule) commit();
           if (t.type == ABEParser.T_SITE) {
             rule = { destinations: [], predicates: [] };
-            accumulator = rule.destinations;		
+            accumulator = rule.destinations;
           }
           break;
         case ABEParser.T_ACTION:
@@ -668,17 +669,17 @@ ABERuleset.prototype = {
           if (accumulator) accumulator.push(node.getText());
       }
     }
-    
+
     function commit() {
       rules.push(new ABERule(rule.destinations, rule.predicates));
       rule = null;
     }
   },
-  
+
   lastMatch: null,
 	check: function(req) {
     if (this.disabled) return '';
-    
+
 		var res;
 		for each (var r in this.rules) {
 			res = r.check(req);
@@ -699,7 +700,7 @@ function ABERule(destinations, predicates) {
 
 ABERule.prototype = {
   local: false,
-  
+
 	allDestinations: false,
   lastMatch: null,
 	_destinationFilter: function(s) {
@@ -713,7 +714,7 @@ ABERule.prototype = {
 		}
 		return true;
 	},
-	
+
   check: function(req) {
     if (!req.failed &&
         (this.allDestinations ||
@@ -730,7 +731,7 @@ ABERule.prototype = {
     }
     return '';
   },
-  
+
   toString: function() {
     var s = "Site " + this.destinations + "\n" + this.predicates.join("\n");
     this.toString = function() { return s; };
@@ -740,7 +741,7 @@ ABERule.prototype = {
 
 function ABEPredicate(p) {
   this.action = p.actions[0];
- 
+
   switch(this.action) {
     case "Accept":
       this.permissive = true;
@@ -749,12 +750,12 @@ function ABEPredicate(p) {
       this.action = 'Anonymize';
       break;
   }
-  
+
   var methods = p.methods;
-  
+
   if ("inclusions" in p) {
     this.inclusion = true;
-    
+
     // rebuild method string for cosmetic reasons
     let incMethod = "INCLUSION";
     let ii = p.inclusions;
@@ -775,12 +776,12 @@ function ABEPredicate(p) {
     } else {
       this.inclusionTypes = this.ANY_TYPE;
     }
-    
+
     methods = p.methods.concat(incMethod);
   }
-  
+
   this.methods = methods.join(" ");
-  
+
   if (this.methods.length) {
     this.allMethods = false;
     var mm = p.methods.filter(this._methodFilter, this);
@@ -789,7 +790,7 @@ function ABEPredicate(p) {
   this.origins = p.origins.join(" ");
   if (p.origins.length) {
     this.allOrigins = false;
-    if (this.permissive) { // if Accept any, accept browser URLs 
+    if (this.permissive) { // if Accept any, accept browser URLs
       p.origins.push("^(?:chrome|resource):");
     }
     this.origin = new AddressMatcher(p.origins.filter(this._originFilter, this).join(" "));
@@ -798,19 +799,19 @@ function ABEPredicate(p) {
 ABEPredicate.create = function(p) { return new ABEPredicate(p); };
 ABEPredicate.prototype = {
   permissive: false,
-  
+
   subdoc: false,
   self: false,
   sameDomain: false,
   sameBaseDomain: false,
   local: false,
-  
+
   allMethods: true,
   allOrigins: true,
-  
+
   methodRx: null,
   origin: null,
-  
+
   inclusion: false,
   inlcusionTypes: [],
   get ANY_TYPE() {
@@ -827,7 +828,7 @@ ABEPredicate.prototype = {
   get _inclusionTypesMap() {
     delete this.__proto__._inclusionTypesMap;
     const CP = Ci.nsIContentPolicy;
-    return this.__proto__._inclusionTypesMap = 
+    return this.__proto__._inclusionTypesMap =
     {
       "OTHER": CP.TYPE_OTHER,
       "FONT": CP.TYPE_FONT,
@@ -844,7 +845,7 @@ ABEPredicate.prototype = {
       "DTD": CP.TYPE_DTD
     };
   },
- 
+
   _methodFilter: function(m) {
     switch(m) {
       case "SUB":
@@ -854,7 +855,7 @@ ABEPredicate.prototype = {
     }
     return true;
   },
-  
+
   _originFilter: function(s) {
     switch(s) {
       case "SELF":
@@ -870,7 +871,7 @@ ABEPredicate.prototype = {
     }
     return true;
   },
-	
+
   match: function(req) {
     return (this.allMethods || this.subdoc && req.isSubdoc ||
             this.inclusion && req.isOfType(this.inclusionTypes) ||
@@ -884,7 +885,7 @@ ABEPredicate.prototype = {
                   : req.matchSomeOrigins(this.origin)) || this.local && req.localOrigin
 		);
   },
-  
+
   toString: function() {
     var s = this.action;
     if (this.methods) s += " " + this.methods;
@@ -940,7 +941,7 @@ ABERequest.prototype = Lang.memoize({
   deferredDNS: true,
   replaced: false,
   dnsNotified: false,
-  
+
   _init: function(channel) {
     this.serial = ABERequest.serial++;
     this.channel = channel;
@@ -948,17 +949,17 @@ ABERequest.prototype = Lang.memoize({
     this.destinationURI = IOUtil.unwrapURL(channel.URI);
     this.destination = this.destinationURI.spec;
     this.destinationDomain = this.destinationURI.host;
-    
+
     this.early = channel instanceof ABEPolicyChannel;
     this.isDoc = !!(channel.loadFlags & channel.LOAD_DOCUMENT_URI);
-    
+
     if (this.isDoc) {
       var w = this.window;
       if (w) try {
         w.__loadingChannel__ = channel;
       } catch (e) {}
     }
-    
+
     var ou = ABERequest.getOrigin(channel);
     if (ou) {
       this.originURI = ou;
@@ -969,53 +970,53 @@ ABERequest.prototype = Lang.memoize({
       else {
         let ph = PolicyState.extract(channel);
         ou = ph && ph.requestOrigin ||
-            ((IOUtil.unwrapURL(channel.originalURI).spec != this.destination) 
-              ? channel.originalURI 
+            ((IOUtil.unwrapURL(channel.originalURI).spec != this.destination)
+              ? channel.originalURI
               : IOUtil.extractInternalReferrer(channel)
             ) || null;
       }
-      
+
       if (!ou) {
         if (channel instanceof Ci.nsIHttpChannelInternal) {
           ou = channel.documentURI;
           if (!ou || IOUtil.unwrapURL(ou).spec === this.destination) ou = null;
         }
       }
-      
+
       if (this.isDoc && ou && (ou.schemeIs("javascript") || ou.schemeIs("data"))) {
         ou = this.traceBack;
         if (ou) ou = IOS.newURI(ou, null, null);
       }
-      
+
       ou = ou ? IOUtil.unwrapURL(ou) : ABE.BROWSER_URI;
-      
+
       this.origin = ou.spec;
-    
+
       ABERequest.storeOrigin(channel, this.originURI = ou);
     }
   },
-   
-  replace: function(newMethod, newURI, callback) {
+
+  replace: function(newMethod, newURI, callback, forceInternal) {
     new ChannelReplacement(this.channel, newURI, newMethod)
-        .replace(newMethod || newURI, callback);
-    return true; 
+        .replace(!forceInternal && (newMethod || newURI), callback);
+    return true;
   },
-  
+
   isBrowserURI: function(uri) {
     return uri.schemeIs("chrome") || uri.schemeIs("resource") || uri.spec === "about:newtab";
   },
-  
+
   isLocal: function(uri, all) {
     return DNS.isLocalURI(uri, all);
   },
-  
+
   isOfType: function(types) {
     if (!types) return false;
     return (typeof types === "number")
       ? this.type === types
       : types.indexOf(this.type) !== -1;
   },
-  
+
   _checkLocalOrigin: function(uri) {
     try {
       return !this.failed && uri && (this.isBrowserURI(uri) || this.isLocal(uri, true)); // we cache external origins to mitigate DNS rebinding
@@ -1031,41 +1032,41 @@ ABERequest.prototype = Lang.memoize({
       return false;
     }
   },
-  
+
   _checkSelf: function(originURI) {
     return originURI && (this.isBrowserURI(originURI) || originURI.prePath == this.destinationURI.prePath);
   },
-  
+
   _checkSameDomain: function(originURI) {
     try {
       return originURI && this.isBrowserURI(originURI) || originURI.host == this.destinationDomain;
     } catch(e) {}
     return false;
   },
-  
+
   _checkSameBaseDomain: function(originURI) {
     try {
       return originURI && this.isBrowserURI(originURI) || IOUtil.TLDService.getBaseDomainFromHost(originURI.host) == this.destinationBaseDomain;
     } catch(e) {}
     return false;
   },
-  
+
   matchAllOrigins: function(matcher) {
     var canDoDNS = this.canDoDNS;
-    return (canDoDNS && matcher.netMatching) 
+    return (canDoDNS && matcher.netMatching)
       ? this.redirectChain.every(function(uri) matcher.testURI(uri, canDoDNS, true))
       : this.redirectChain.every(matcher.testURI, matcher)
       ;
   },
-  
+
   matchSomeOrigins: function(matcher) {
     var canDoDNS = this.canDoDNS;
-    return (canDoDNS && matcher.netMatching) 
+    return (canDoDNS && matcher.netMatching)
       ? this.redirectChain.some(function(uri) matcher.testURI(uri, canDoDNS, false))
       : this.redirectChain.some(matcher.testURI, matcher)
       ;
   },
-  
+
   toString: function() {
     var s = "{" + this.method + " " + this.destination + " <<< " +
       this.redirectChain.reverse().map(function(uri) { return uri.spec; })
@@ -1110,14 +1111,14 @@ ABERequest.prototype = Lang.memoize({
   isSameBaseDomain: function() {
     return this.isSameDomain || this.redirectChain.every(this._checkSameBaseDomain, this);
   },
-  
+
   destinationBaseDomain: function() {
     try {
       return IOUtil.TLDService.getBaseDomainFromHost(this.destinationDomain);
     } catch(e) {}
     return this.destinationDomain;
   },
-  
+
   isSubdoc: function() {
     if (this.isDoc) {
       var w = this.window;
@@ -1129,11 +1130,11 @@ ABERequest.prototype = Lang.memoize({
   redirectChain: function() {
     return ABE.getRedirectChain(this.channel);
   },
-  
+
   window: function() {
     return IOUtil.findWindow(this.channel);
   },
-  
+
   type: function() {
     try {
       return this.early ? this.channel.type : PolicyState.extract(this.channel).contentType;
@@ -1142,7 +1143,7 @@ ABERequest.prototype = Lang.memoize({
     }
     return Ci.nsIContentPolicy.TYPE_OTHER;
   }
-  
+
 }
 ); // end memoize
 
@@ -1188,7 +1189,7 @@ var ABEStorage = {
         }
     }
   },
-    
+
   get _rulesetPrefs() this.prefs.getChildList("rulesets", {}),
   clear: function() {
     const prefs = this.prefs;
@@ -1203,12 +1204,12 @@ var ABEStorage = {
       }
     }
   },
-  
+
   loadRules: function() {
     this._updating = false;
     if (!this._dirty) return;
     this._dirty = false;
-        
+
     const keys = this._rulesetPrefs;
     keys.sort();
     const prefs = this.prefs;
@@ -1221,18 +1222,18 @@ var ABEStorage = {
     ABE.disabledRulesetNames = disabled;
     OS.notifyObservers(ABE, ABE.RULES_CHANGED_TOPIC, null);
   },
-  
+
   saveRuleset: function(name, source) {
     var str = Cc["@mozilla.org/supports-string;1"]
       .createInstance(Ci.nsISupportsString);
     str.data = source;
     this.prefs.setComplexValue("rulesets." + name, Ci.nsISupportsString, str);
   },
-  
+
   persist: function() {
     ABE.prefService.savePrefFile(null);
   },
-   
+
   _migrateLegacyFiles: function() {
     var ret = 0;
     try {
@@ -1240,11 +1241,11 @@ var ABEStorage = {
         .getService(Ci.nsIProperties).get("ProfD", Ci.nsIFile);
       dir.append("ABE");
       dir.append("rules");
-      
+
       if (dir.exists()) {
-      
+
         dump("Migrating legacy ABE ruleset files... ")
-        
+
         var entries = dir.directoryEntries;
         while(entries.hasMoreElements()) {
           let f = entries.getNext();
@@ -1288,11 +1289,11 @@ var OriginTracer = {
     }
     return null;
   },
-  
+
   traceBackHistory: function(sh, window, breadCrumbs) {
     var wantsBreadCrumbs = !breadCrumbs;
     breadCrumbs = breadCrumbs || [window.document.documentURI];
-    
+
     var he;
     var uri = null;
     var site = '';
@@ -1302,9 +1303,9 @@ var OriginTracer = {
        if (he.isSubFrame && j > 0) {
          uri = this.detectBackFrame(sh.getEntryAtIndex(j - 1), h,
            DOM.getDocShellForWindow(window)
-         );  
+         );
        } else {
-        // not a subframe navigation 
+        // not a subframe navigation
         if (window == window.top) {
           uri = he.URI.spec; // top frame, return history entry
         } else {
@@ -1322,7 +1323,7 @@ var OriginTracer = {
     }
     return wantsBreadCrumbs ? breadCrumbs : site;
   },
-  
+
   traceBack: function(req, breadCrumbs) {
     var res = '';
         try {
@@ -1332,12 +1333,12 @@ var OriginTracer = {
         var webNav = window.getInterface(Ci.nsIWebNavigation);
         var current = webNav.currentURI;
         var isSameURI = current && current.equals(req.destinationURI);
-        if (isSameURI && (req.channel.loadFlags & req.channel.VALIDATE_ALWAYS)) 
+        if (isSameURI && (req.channel.loadFlags & req.channel.VALIDATE_ALWAYS))
           return req.destination; // RELOAD
- 
+
         const sh = webNav.sessionHistory;
-        res = sh ? this.traceBackHistory(sh, window, breadCrumbs || null) 
-                  : (!isSameURI && current) 
+        res = sh ? this.traceBackHistory(sh, window, breadCrumbs || null)
+                  : (!isSameURI && current)
                     ? req.destination
                     : '';
        if (res == "about:blank") {
@@ -1382,7 +1383,7 @@ var DoNotTrack = {
 
   apply: function(/* ABEReq */ req) {
     let url = req.destination;
-      
+
     try {
       if (
           (this.exceptions && this.exceptions.test(url) ||
@@ -1393,17 +1394,17 @@ var DoNotTrack = {
            // TODO: find a way to check whether this request is gonna be WWW-authenticated
         )
         return;
-       
+
       let channel = req.channel;
       channel.setRequestHeader("DNT", "1", false);
-      
+
       // reorder headers to mirror Firefox 4's behavior
       let conn = channel.getRequestHeader("Connection");
       channel.setRequestHeader("Connection", "", false);
       channel.setRequestHeader("Connection", conn, false);
     } catch(e) {}
   },
-  
+
   getDOMPatch: function(docShell) {
     try {
       if (docShell.document.defaultView.navigator.doNotTrack !== "yes" &&
@@ -1420,7 +1421,7 @@ const WAN = {
   ip: null,
   ipMatcher: null,
   fingerprint: '',
-  findMaxInterval: 86400000, // 1 day 
+  findMaxInterval: 86400000, // 1 day
   checkInterval: 14400000, // 4 hours
   fingerInterval: 900000, // 1/4 hour
   checkURL: "https://secure.informaction.com/ipecho/",
@@ -1433,15 +1434,15 @@ const WAN = {
   fingerprintUA: "Mozilla/5.0 (ABE, https://noscript.net/abe/wan)",
   fingerprintHeader: "X-ABE-Fingerprint",
   QueryInterface: xpcom_generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
-  
+
   log: function(msg) {
     var cs = Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService);
     return (this.log = function(msg) {
       if (this.logging) cs.logStringMessage("[ABE WAN] " + msg);
     })(msg);
-    
+
   },
-  
+
   _enabled: false,
   _timer: null,
   _observing: false,
@@ -1469,10 +1470,10 @@ const WAN = {
     return this._enabled = b;
   },
   _observingHTTP: false,
-  
+
   observe: function(subject, topic, data) {
     if (!this.enabled) return;
-    
+
     switch(topic) {
       case "wake_notification":
         if (!this._observingHTTP) OS.addObserver(this, "http-on-examine-response", true);
@@ -1490,21 +1491,21 @@ const WAN = {
 
     this._periodic(true);
   },
-  
+
   _periodic: function(forceFind) {
     if (forceFind) this.lastFound = 0;
-    
+
     var t = Date.now();
     if (forceFind ||
         t - this.lastFound > this.findMaxInterval ||
-        t - this.lastCheck > this.checkInterval) {  
+        t - this.lastCheck > this.checkInterval) {
       this.findIP(this._findCallback);
     } else if (this.fingerprint) {
       this._takeFingerprint(this.ip, this._fingerprintCallback);
     }
     this.lastCheck = t;
   },
-  
+
   _findCallback: function(ip) {
     WAN._takeFingerprint(ip);
   },
@@ -1514,7 +1515,7 @@ const WAN = {
       if (ip == WAN.ip) WAN._periodic(true);
     }
   },
-  
+
   _takeFingerprint: function(ip, callback) {
     if (!ip) {
       this.log("Can't fingerprint a null IP");
@@ -1540,14 +1541,14 @@ const WAN = {
             .replace(/\d/g, '').replace(/\b[a-f]+\b/gi, ''); // remove decimal and hex noise
         } catch(e) {
           self.log(e);
-        }   
+        }
 
         if (self.fingerprintLogging)
           self.log("Fingerprint for " + url + " = " + fingerprint);
-        
+
         if (fingerprint && /^\s*Off\s*/i.test(xhr.getResponseHeader(self.fingerprintHeader)))
           fingerprint = '';
-        
+
         if (callback) callback(fingerprint, ip);
         self.fingerprint = fingerprint;
       }
@@ -1555,7 +1556,7 @@ const WAN = {
     xhr.send(null);
 
   },
-    
+
   _createAnonXHR: function(url, noproxy) {
     var xhr = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.nsIXMLHttpRequest);
     xhr.mozBackgroundRequest = true;
@@ -1573,7 +1574,7 @@ const WAN = {
     } else xhr = null;
     return xhr;
   },
-  
+
   _callbacks: null,
   _finding: false,
   findIP: function(callback) {
@@ -1610,7 +1611,7 @@ const WAN = {
       if (!sent) this._findIPDone(null);
     }
   },
-  
+
   _findIPDone: function(ip) {
     let ipMatcher = AddressMatcher.create(ip);
     if (!ipMatcher) ip = null;
@@ -1623,26 +1624,26 @@ const WAN = {
       } catch(e) {
         this.log(e);
       }
-      
+
       if (ip != this.ip) {
         OS.notifyObservers(this, this.IP_CHANGE_TOPIC, ip);
       }
-      
+
       this.ip = ip;
       this.ipMatcher = ipMatcher;
       this.lastFound = Date.now();
-      
+
        this.log("Detected WAN IP " + ip);
     } else {
       this.lastFound = 0;
       this.fingerprint = '';
       this.log("WAN IP not detected!");
     }
-   
+
     this._finding = false;
   },
-  
-  
+
+
   _requestHeaders: function(ch) {
     var hh = [];
     if (ch instanceof Ci.nsIHttpChannel)
@@ -1651,4 +1652,4 @@ const WAN = {
       });
     return hh;
   }
-};
\ No newline at end of file
+};
diff --git a/chrome/noscript.jar!/content/noscript/ChannelReplacement.js b/chrome/noscript.jar!/content/noscript/ChannelReplacement.js
index 806241e..26f6418 100644
--- a/chrome/noscript.jar!/content/noscript/ChannelReplacement.js
+++ b/chrome/noscript.jar!/content/noscript/ChannelReplacement.js
@@ -44,7 +44,7 @@ RedirectCallback.prototype = {
     }
   },
   onRedirectVerifyCallback: function(result) {
-    if (!Components.isSuccessCode(result)) this.vetoed = true;
+    if (!Components.isSuccessCode(result)) this.vetoed = this.channelReplacement.realRedirect;
     if (--this.references === 0 && this.async)
       this._callback();
   },
diff --git a/chrome/noscript.jar!/content/noscript/about.xul b/chrome/noscript.jar!/content/noscript/about.xul
index b2c3c74..42d4d78 100644
--- a/chrome/noscript.jar!/content/noscript/about.xul
+++ b/chrome/noscript.jar!/content/noscript/about.xul
@@ -48,7 +48,7 @@ function about_onload() {
   
   var str = getString("aboutTitle",["NoScript"]);
   if(str) document.title = str;
-  str = getString("version", ["2.6.9.23rc2"]);
+  str = getString("version", ["2.6.9.23rc3"]);
   if(str) document.getElementById("extensionVersion").setAttribute("value", str);
   
   setString("extensionDescription",null,"extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description");
@@ -86,7 +86,7 @@ function about_open(url, features) {
 <hbox id="headBox" align="end">
 <vbox flex="1">
 <label value="NoScript" id="extensionName" crop="right"/>
-<label value="Version 2.6.9.23rc2" id="extensionVersion" crop="right"/>
+<label value="Version 2.6.9.23rc3" id="extensionVersion" crop="right"/>
 </vbox>
 <vbox flex="1" align="end">
 <hbox align="end">
@@ -164,7 +164,7 @@ function about_open(url, features) {
 <hbox>
 <label id="license" class="text-link" tooltiptext="Read end-user license" onclick="about_open('chrome://noscript/content/NoScript_License.txt')">License</label>
 <spacer flex="1"/>
-<label id="changelog" class="text-link" align="center" tooltiptext="See Changelog" onclick="about_open('https://noscript.net/changelog#2.6.9.23rc2')">Changelog</label>
+<label id="changelog" class="text-link" align="center" tooltiptext="See Changelog" onclick="about_open('https://noscript.net/changelog#2.6.9.23rc3')">Changelog</label>
 <spacer flex="1"/>
 <label id="extensionHomepage" class="text-link" tooltiptext="Visit Extension Home Page" onclick="about_open('https://noscript.net')">https://noscript.net</label>
 </hbox>
diff --git a/chrome/noscript.jar!/content/noscript/noscriptOverlay.js b/chrome/noscript.jar!/content/noscript/noscriptOverlay.js
index 41ff188..7dcb37a 100644
--- a/chrome/noscript.jar!/content/noscript/noscriptOverlay.js
+++ b/chrome/noscript.jar!/content/noscript/noscriptOverlay.js
@@ -8,7 +8,7 @@ return noscriptUtil.service ? {
 
   ns: noscriptUtil.service,
   recentlyBlocked: [],
-  
+
   getString: function(key, parms) {
     return noscriptUtil.getString(key, parms);
   }
@@ -17,24 +17,24 @@ return noscriptUtil.service ? {
     const ns = this.ns;
     var level = ns.getPref("toolbarToggle", 3) || forceLevel;
     if (!level) return false;
-    
+
     const url = ns.getQuickSite(content.document.documentURI, level);
     if (url)
       this.safeAllow(url, !ns.isJSEnabled(url), ns.getPref("toggle.temp"));
-    
+
     return true;
   },
 
-  
+
   getSites: function() {
     return this.ns.getSites(this.currentBrowser);
   },
-  
+
   get prompter() {
     delete this.prompter;
     return this.prompter = noscriptUtil.prompter;
   },
-  
+
   openPopup: function(popup, anchor) {
     popup.openPopup(anchor);
   },
@@ -48,44 +48,44 @@ return noscriptUtil.service ? {
     ev.preventDefault();
     noscriptOverlay.openPopup(popup, parent);
   },
-  
+
   onMenuShowing: function(ev, noSticky) {
-    
+
     var popup = ev.currentTarget;
-  
+
     if (popup != ev.originalTarget) return;
-   
+
     var stickyUI = this.stickyUI;
-    
+
     if (stickyUI) {
       popup.setAttribute("sticky", !noSticky &&
        (popup == stickyUI ||
         !popup._context && this.useStickyUI));
-      
+
       popup._context =  false;
     } else {
       popup.removeAttribute("sticky");
     }
-    
+
     if (!popup.hasAttribute("onclick")) {
       popup.setAttribute("onclick", "noscriptOverlay.onCommandClick(event)");
     }
-    
+
     popup.addEventListener("popuphidden", noscriptOverlay.onMenuHidden, false);
     popup.addEventListener("popupshown", noscriptOverlay.onMenuShown, false);
-    
+
     this.prepareMenu(popup);
   },
-  
+
   onUIOver: function(ev) {
     let parent = ev.currentTarget;
     let popup = parent.firstChild || !this.initPopups() && parent.firstChild;
-    
+
     if (!(popup && popup.openPopup) ||
         ("_hovering" in popup) && popup._hovering ||
         !this.hoverUI)
       return;
-   
+
     if (popup.state !== "open") {
       popup._context = false;
       popup._hovering = 1;
@@ -108,33 +108,33 @@ return noscriptUtil.service ? {
       popup._hovering = 2;
     }
   },
-  
+
   onUIMove: function(ev) {
     let parent = ev.currentTarget;
     let rect = parent.getBoundingClientRect();
-    let x = ev.clientX, y = ev.clientY; 
+    let x = ev.clientX, y = ev.clientY;
     parent._lastMoved =
       (x > rect.left + 1 && x < rect.right - 1 &&
        y > rect.top + 1 && y < rect.bottom - 1)
       ? Date.now() : 0;
   },
-  
+
   _uiOutTimeout: 0,
   onUIOut: function(ev) {
     let parent = ev.currentTarget;
     let popup = parent.firstChild;
-    
+
     parent._lastMoved = 0;
-    
+
     if (!("_hovering" in popup && popup._hovering && popup._hovering !== -1))
       return;
-    
+
     let related = ev.relatedTarget;
     if (related) {
-      for (let node = related; node; node = node.parentNode) 
+      for (let node = related; node; node = node.parentNode)
         if (node == parent) return;
     }
-    
+
     if (this._uiOutTimeout) window.clearTimeout(this._uiOutTimeout);
     this._uiOutTimeout = window.setTimeout(function() {
         if (!popup._hovering) {
@@ -142,9 +142,9 @@ return noscriptUtil.service ? {
             case "open":
             case "showing":
               popup.hidePopup();
-              if (popup.state !== "closed" && 
-                 !("nsIPopupBoxObject" in Ci) ||
-                  popup.boxObject instanceof Ci.nsIPopupBoxObject)
+              if (popup.state !== "closed" &&
+                 (!("nsIPopupBoxObject" in Ci) ||
+                  popup.boxObject instanceof Ci.nsIPopupBoxObject))
                 popup.boxObject.hidePopup();
               break;
           }
@@ -160,21 +160,21 @@ return noscriptUtil.service ? {
     ev.currentTarget.removeEventListener(ev.type, arguments.callee, false);
     popup._hovering = 0;
   },
-  
+
   onUICommand: function(ev) {
     if (ev.currentTarget !== ev.target) return;
-    
+
     if (!(this.hoverUI && this.ns.getPref("hoverUI.excludeToggling")) &&
       this.toggleCurrentPage())
       ev.preventDefault();
   },
-  
+
   onUIUp: function(ev) {
     let tb = ev.currentTarget;
     if (tb !== ev.target) return;
-   
+
     if (tb.id === "noscript-tbb" &&
-        (tb.type !== "menu-button" || ev.originalTarget.tagName == "xul:toolbarbutton") && 
+        (tb.type !== "menu-button" || ev.originalTarget.tagName == "xul:toolbarbutton") &&
         ev.button === 0 &&
         !(this.hoverUI && this.ns.getPref("hoverUI.excludeToggling")) &&
          this.toggleCurrentPage()
@@ -183,22 +183,22 @@ return noscriptUtil.service ? {
       ev.preventDefault();
       return;
     }
-   
+
     if (ev.button === 1) {
       this.allowPage();
       ev.preventDefault();
       return;
     }
-    
+
     let popup = tb.firstChild || !this.initPopups() && tb.firstChild;
     if ("_hovering" in popup && popup._hovering === 1 || // reopen if still hovering the icon
         this.hoverUI && !this.isOpenOrJustClosed(popup)) {
       popup._hovering = -1;
       if (ev.button !== 2) this.openPopup(popup, tb);
-    } 
+    }
   },
-  
-  
+
+
   onCommandClick: function(ev) {
     if (ev.button === 2) {
       noscriptOverlay.copy(ev.target);
@@ -206,9 +206,9 @@ return noscriptUtil.service ? {
       ev.stopPropagation();
       return;
     }
-    
+
     if (!(ev.button === 1 || ev.button === 0 && ev.shiftKey)) return;
-    
+
     if (noscriptUtil.openInfo(ev.target.getAttribute("statustext"))) {
       ev.preventDefault();
       ev.stopPropagation();
@@ -216,7 +216,7 @@ return noscriptUtil.service ? {
     }
 
   },
-  
+
   onMenuShown: function(ev) {
     let popup = ev.currentTarget;
     popup.removeEventListener(ev.type, arguments.callee, false);
@@ -225,30 +225,30 @@ return noscriptUtil.service ? {
       scroller.scrollPosition = popup.scrollHeight; // scroll to bottom
     }
   },
-  
+
   _reloadDirty: false,
-  
+
   isOpenOrJustClosed: function(popup) {
     return popup.state && popup.state == "open" ||
       this._currentPopup == popup ||
       (new Date() - (popup._lastClosed || 0)) < 300;
   },
-  
+
   onMenuHidden: function(ev) {
     var popup = ev.currentTarget;
     if (ev.originalTarget != popup) return;
-    
+
     popup.removeEventListener(ev.type, arguments.callee, false);
 
     if ("_hovering" in popup && popup._hovering !== 1)
       popup._hovering = 0;
-    
+
     if (noscriptOverlay._reloadDirty && !noscriptOverlay.liveReload) {
       noscriptOverlay.ns.reloadWhereNeeded();
       noscriptOverlay.ns.savePrefs();
     }
-    
-    
+
+
     if (popup.id === "noscript-tbb-popup") {
       // take back our stuff
       noscriptOverlay._currentPopup = null;
@@ -271,7 +271,7 @@ return noscriptUtil.service ? {
     }
     this.updateStatusClass(menu);
   }
-  
+
 ,
   parseMenuOpt: function(node) {
     let opt = node.id.match(/-((?:inv)?opt)-(.*)/);
@@ -305,8 +305,8 @@ return noscriptUtil.service ? {
       }
     }
   },
-  
-  
+
+
   prepareXssMenu: function(popup, invert) {
     this.prepareOptItems(this.populateXssMenu(popup, invert));
   },
@@ -327,9 +327,9 @@ return noscriptUtil.service ? {
     }
     return popup;
   },
-  
-  
-  
+
+
+
   getSiteTooltip: function(enabled, full) {
     const info = this.getString("siteInfo.tooltip");
     const sep = "\n";
@@ -341,33 +341,33 @@ return noscriptUtil.service ? {
       return enabled ? full && yesFull || yes : full && noFull || no;
     })(enabled, full);
   },
-  
+
   getRevokeTooltip: function(tempSites) {
     const ns = this.ns;
     const sep = "\n\n";
-     
+
     // remove http/https/file CAPS hack entries
     var tip = "<SCRIPT>: ";
     if (tempSites) {
       tempSites = this.ns.siteUtils.sanitizeString(tempSites.replace(/\b(?:https?|file):\/\//g, "")).split(/\s+/);
       tip += tempSites.join(", ");
     } else tip += "0";
-    
+
     var len = ns.objectWhitelistLen;
     if (len) tip += sep + "<OBJECT>: " + len;
-    
+
     len = ns.clearClickHandler && ns.clearClickHandler.whitelistLen;
     if (len) tip += sep + "ClearClick: " + len;
-    
+
     return tip;
   },
-  
+
   isPrivate: function() {
     try {
           // Firefox 20+
       Components.utils.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
       return PrivateBrowsingUtils.isWindowPrivate(window);
-    
+
     } catch(e) {
 
       try {
@@ -379,40 +379,40 @@ return noscriptUtil.service ? {
         return false;
       }
     }
-   
+
   },
-  
+
   _popupsInitialized: false,
   _initPopupsRecursion: false,
-  
+
   initPopups: function() {
     if (this._initPopupsRecursion) return;
-    
+
     this._initPopupsRecursion = true;
-    
+
     try {
-      
-    
+
+
       const sticky = this.stickyUI; // early init
-  
+
       const popup = $("noscript-status-popup");
       if (!popup) return; // Fennec?
-      
+
       const install = !this._popupsInitialized;
       this._popupsInitialized = true;
-      
+
       const tbb = $("noscript-tbb");
       if (tbb) {
         tbb.setAttribute("type", this.hoverUI ? "button" : this.ns.getPref("toolbarToggle") ? "menu-button" : "menu");
       }
-  
+
       const buttons = [tbb, $("noscript-statusLabel")];
-      
+
       let statusIcon = $("noscript-statusIcon");
-      
+
       if ($("addon-bar")) {
         // Fx 4  till Austrails
-        if (install &&  !("CustomizableUI" in window)) {  
+        if (install &&  !("CustomizableUI" in window)) {
           window.addEventListener("aftercustomization", function(ev) {
             noscriptOverlay.initPopups();
           }, false);
@@ -420,14 +420,14 @@ return noscriptUtil.service ? {
         if (statusIcon) statusIcon.parentNode.removeChild(statusIcon);
       } else {
         // Fx 3.6.x or below
-        if (install) {  
+        if (install) {
           let btcd = window.BrowserToolboxCustomizeDone;
           if (btcd) window.BrowserToolboxCustomizeDone = function(done) {
             btcd(done);
             if (done) noscriptOverlay.initPopups();
           }
         }
-        
+
         buttons.push(statusIcon);
       }
       // copy status bar menus
@@ -450,13 +450,13 @@ return noscriptUtil.service ? {
       this._initPopupsRecursion = false;
     }
   },
-  
+
   copy: function(node) {
     node = node || document.popupNode;
     var txt = "";
-    const classRx = /\bnoscript-(allow|forbid)\b/; 
+    const classRx = /\bnoscript-(allow|forbid)\b/;
     if (!(classRx.test(node.className) && (txt = node.getAttribute("statustext")))) {
-      let parent = node.parentNode;      
+      let parent = node.parentNode;
       let nodes = parent.childNodes;
       let untrusted = $("noscript-menu-untrusted");
       if (untrusted.parentNode === parent) {
@@ -477,12 +477,12 @@ return noscriptUtil.service ? {
       ).join("\n");
     }
     if (txt) {
-      Cc["@mozilla.org/widget/clipboardhelper;1"]  
+      Cc["@mozilla.org/widget/clipboardhelper;1"]
         .getService(Ci.nsIClipboardHelper)
         .copyString(txt);
     }
   },
- 
+
   _currentPopup: null,
   _mustReverse: function(popup) {
     if (popup.id !== "noscript-tbb-popup") return false;
@@ -499,33 +499,33 @@ return noscriptUtil.service ? {
     popup.position = upper ? "after_start" : "before_start";
     return upper;
   },
-  
+
   prepareMenu: function(popup, sites) {
     let mustReverse = this._mustReverse(popup);
 
     const ns = this.ns;
     const sticky = popup.getAttribute("sticky") == "true";
-    
+
     popup.removeAttribute("disabled");
-    
+
     if (!popup.hasAttribute("context")) {
       popup.setAttribute("context", "noscript-menuContext");
     }
-    
+
     if (this._currentPopup && this._currentPopup != popup) {
       this._currentPopup.hidePopup();
     }
     this._currentPopup = popup;
-    
-    
-    
+
+
+
     var node;
-    
+
     const global = ns.jsEnabled;
     const blockUntrusted = global && ns.alwaysBlockUntrustedContent;
     const cascadePermissions = ns.cascadePermissions;
     const globalHttps = ns.globalHttpsWhitelist;
-    
+
     var seps = { insert: null, stop: null, global: null, untrusted: null };
     {
       let allSeps = popup.getElementsByTagName("menuseparator");
@@ -541,7 +541,7 @@ return noscriptUtil.service ? {
     }
 
     const miGlobal = seps.global.nextSibling;
-    
+
     if (global || ns.getPref("showGlobal")) {
       miGlobal.hidden = seps.global.hidden = false;
       miGlobal.setAttribute("label", this.getString((global ? "forbid" : "allow") + "Global"));
@@ -551,16 +551,16 @@ return noscriptUtil.service ? {
     } else {
       miGlobal.hidden = seps.global.hidden = true;
     }
-    
+
     node = popup.getElementsByClassName("noscript-about")[0];
     if (node) node.hidden = !ns.getPref("showAbout");
-    
+
     node = seps.global;
     node.parentNode.insertBefore(
         $("noscript-mi-invopt-volatilePrivatePermissions"), node
         ).hidden = !(this.isPrivate() && ns.getPref("showVolatilePrivatePermissionsToggle"));
-    
-    
+
+
     node = miGlobal.nextSibling;
     const mainMenu = node.parentNode;
     {
@@ -577,7 +577,7 @@ return noscriptUtil.service ? {
         node.hidden = true;
       }
     }
-    
+
     node = node.nextSibling;
     let allowPageMenuItem = $("noscript-temp-allow-page-mi");
     if (node !== allowPageMenuItem) {
@@ -587,7 +587,7 @@ return noscriptUtil.service ? {
     }
 
     let xssMenu = $("noscript-xss-menu");
-      
+
     if (xssMenu && node != xssMenu) {
       mainMenu.insertBefore(xssMenu, node);
     }
@@ -595,19 +595,19 @@ return noscriptUtil.service ? {
     this.syncXssWidget(xssMenu);
 
     this.prepareOptItems(popup);
-      
+
     var untrustedMenu = null,
         recentMenu = null,
         pluginsMenu = null;
 
     if (seps.untrusted) {
-      
+
       pluginsMenu = $("noscript-menu-blocked-objects");
       recentMenu = $("noscript-menu-recent-blocked");
       untrustedMenu = $("noscript-menu-untrusted");
       // cleanup untrustedCount display
       untrustedMenu.setAttribute("label", untrustedMenu.getAttribute("label").replace(/ \(\d+\)$/, ""));
-      
+
       with (seps.untrusted) {
         if ((extraNode = nextSibling) != pluginsMenu) {
           for each(node in [pluginsMenu, recentMenu, untrustedMenu]) {
@@ -615,19 +615,19 @@ return noscriptUtil.service ? {
           }
         }
       }
-      
+
       this.populateExternalFilters(pluginsMenu);
-      
+
       extraNode = $("noscript-mi-recent-blocked-reset"); // save reset command
       // descend from menus to popups and clear children
       for each(node in [pluginsMenu = pluginsMenu.firstChild, recentMenu = recentMenu.firstChild, untrustedMenu = untrustedMenu.firstChild])
         while(node.firstChild) node.removeChild(node.firstChild);
-      
+
       recentMenu.appendChild(extraNode);
     }
-    
+
     node = seps.insert.nextSibling;
-    
+
     var remNode;
     while (node && (node != seps.stop)) {
       remNode = node;
@@ -637,25 +637,25 @@ return noscriptUtil.service ? {
     }
 
     sites = sites || this.getSites();
-    
+
     const topSite = sites.topSite;
     {
       let topIdx = sites.indexOf(topSite);
-      let topDown = !/-sep-stop\b/.test(mainMenu.lastChild.className); 
+      let topDown = !/-sep-stop\b/.test(mainMenu.lastChild.className);
       if (topIdx > -1 && topIdx != (topDown ? sites.length - 1 : 0)) {
         sites.splice(topIdx, 1);
         if (topDown) sites.push(topSite);
         else sites.unshift(topSite);
       }
     }
-    
+
     try {
       this.populatePluginsMenu(mainMenu, pluginsMenu, sites.pluginExtras);
     } catch(e) {
       if(ns.consoleDump) ns.dump("Error populating plugins menu: " + e);
       if (e) Components.utils.reportError(e);
     }
-    
+
     const jsPSs = ns.jsPolicySites;
     var site, enabled, isTop, lev;
 
@@ -669,7 +669,7 @@ return noscriptUtil.service ? {
       sites: {},
       check: function(s) (s in this.sites) || (this.sites[s] = false)
     };
-    
+
     const locked = ns.locked;
     const addressOnly = locked;
     const showAddress = addressOnly || ns.getPref("showAddress", false);;
@@ -680,7 +680,7 @@ return noscriptUtil.service ? {
     const showNothing = !(showAddress || showDomain || showBase || showUntrusted);
     let isPrivate = this.isPrivate();
     let volatileOnly = isPrivate && ns.getPref("volatilePrivatePermissions");
-    
+
     let showPermanent = ns.getPref("showPermanent", true);
     const showTemp = !locked && (ns.getPref("showTemp", true) || volatileOnly && showPermanent);
     if (volatileOnly) showPermanent = false;
@@ -689,10 +689,10 @@ return noscriptUtil.service ? {
     var untrustedCount = 0, unknownCount = 0, tempCount = 0;
     const untrustedSites = ns.untrustedSites;
     var docJSBlocked = false;
-    
+
     const ignorePorts = ns.ignorePorts;
     const portRx = /:\d+$/;
-    
+
     const hideUntrustedPlaceholder = !ns.showUntrustedPlaceholder;
     var embedOnlySites = null;
     if (ns.contentBlocker && !ns.alwaysShowObjectSources &&
@@ -703,21 +703,21 @@ return noscriptUtil.service ? {
       });
       sites.push.apply(sites, embedOnlySites);
     }
-    
+
     menuGroups = [];
     for (let j = 0; j < sites.length; j++) {
       site = sites[j];
-      
+
       matchingSite = jsPSs.matches(site);
       untrusted = untrustedSites.matches(site);
       let hasPort = portRx.test(site);
-      
+
       isTop = site == topSite;
-      
+
       if (untrusted) {
         matchingSite = null;
       } else if (!matchingSite) {
-        
+
         if (ignorePorts && hasPort) {
           matchingSite =  jsPSs.matches(site.replace(portRx, ''));
           if (matchingSite) {
@@ -725,22 +725,22 @@ return noscriptUtil.service ? {
             hasPort = false;
           }
         }
-        
+
         if (blockUntrusted)
           matchingSite = site;
       }
-      
+
 
       enabled = !!(matchingSite ||
                    globalHttps && ns.isGlobalHttps(content, site) && (matchingSite = site)
                 );
-      
+
       let showInMain = embedOnlySites
         ? embedOnlySites.indexOf(site) === -1 || hideUntrustedPlaceholder && enabled : true;
-      
+
       docJSBlocked = enabled && isTop && !ns.dom.getDocShellForWindow(content).allowJavascript;
       if (docJSBlocked) enabled = false;
-      
+
       if (enabled && !global || (matchingSite = untrusted)) {
         if (ignorePorts && hasPort) {
           site = jsPSs.matches(site.replace(portRx, ''));
@@ -748,33 +748,33 @@ return noscriptUtil.service ? {
         }
         if (dupeChecker.check(matchingSite)) continue;
         menuSites = [matchingSite];
-        
+
       } else {
         domain = !ns.isForbiddenByHttpsStatus(site) && ns.getDomain(site);
         let dp = ns.getPublicSuffix(domain);
-        
+
         if (dp == domain || // exclude TLDs
             ns.isJSEnabled(domain) != enabled || // exclude ancestors with different permissions
             hasPort && !ignorePorts // or any ancestor if this is a non-standard port
           ) {
-          domain = null; 
+          domain = null;
         }
-        
-        
+
+
         if (hasPort && ignorePorts) {
           site = site.replace(portRx, '');
           if (jsPSs.matches(site))
             continue;
         }
-        
+
         if (dupeChecker.check(site)) continue;
-        
+
         menuSites = (showAddress || showNothing || !domain) ? [site] : [];
-        
+
         if (domain && (showDomain || showBase)) {
           baseLen = domain.length;
-          if (dp) 
-            baseLen -= (domain.lastIndexOf(".", baseLen - dp.length - 2) + 1); 
+          if (dp)
+            baseLen -= (domain.lastIndexOf(".", baseLen - dp.length - 2) + 1);
           if (baseLen == domain.length) {
             // IP or 2nd level domain
             if (!dupeChecker.check(domain)) {
@@ -794,27 +794,27 @@ return noscriptUtil.service ? {
               if (baseLen == dp.length) break;
             }
           }
-        }  
+        }
       }
       menuSites.isTop = isTop;
       menuSites.showInMain = showInMain;
       menuSites.enabled = enabled;
       menuGroups.push(menuSites);
     }
-    
-    
+
+
     const untrustedFrag = showUntrusted ? document.createDocumentFragment() : null;
     const mainFrag = document.createDocumentFragment();
     const sep = document.createElement("menuseparator");
-    
+
     let mgCount = menuGroups.length;
-    
+
     var refMI = document.createElement("menuitem");
     refMI.setAttribute("oncommand", "noscriptOverlay.menuCmd(event)");
     if (sticky && (this.liveReload || mgCount > 1 || enabled)) {
       refMI.setAttribute("closemenu", "none");
     }
-    
+
     recentMenu.parentNode.hidden = true;
     if (recentMenu && ns.getPref("showRecentlyBlocked")) {
       let level = ns.getPref("recentlyBlockedLevel") || ns.preferredSiteLevel;
@@ -823,42 +823,42 @@ return noscriptUtil.service ? {
           count = 0,
           recent = this.recentlyBlocked,
           current = false;
-      
+
       let tooltip = this.getSiteTooltip(false, !!ns.getPref("siteInfoProvider"));
-      
+
       for (let j = recent.length; j-- > 0;) {
-        
+
         let r = recent[j];
         let s = r.site;
-        
+
         if (!s || sites.indexOf(s) > -1) continue;
-        
+
         let ghEnabled = globalHttps && ns.isGlobalHttps(content, s);
         let jsEnabled = ghEnabled || ns.isJSEnabled(s);
-        
+
         if (jsEnabled && (!ns.contentBlocker || ns.isAllowedObject("!", "*", s)))
           continue;
-        
+
         s = ns.getQuickSite(s, level);
         if (dejaVu.indexOf(s) > -1)
           continue;
-        
+
         dejaVu.push(s);
 
         recentMenu.appendChild(sep.cloneNode(false));
-        
+
         let node = refMI.cloneNode(false);
         let cssClass = "noscript-cmd menuitem-iconic noscript-allow-from";
-        
+
         node.setAttribute("tooltiptext", tooltip);
         node.setAttribute("statustext", s);
         if (locked || ns.isForbiddenByHttpsStatus(s)) node.setAttribute("disabled", "true");
-        
+
         if (r.origins.indexOf(topSite) > -1) {
           cssClass += " noscript-toplevel";
           current = true;
         }
-        
+
         if (jsEnabled) {
           cssClass += " noscript-embed";
         } else {
@@ -866,12 +866,12 @@ return noscriptUtil.service ? {
           node.setAttribute("label", ns.getString("allowFrom", [s]));
           recentMenu.appendChild(node);
           node = node.cloneNode(false);
-        } 
-        
+        }
+
         node.setAttribute("class", cssClass + " noscript-temp");
         node.setAttribute("label", ns.getString("allowTempFrom", [s]));
         recentMenu.appendChild(node);
-        
+
         if (++count >= max) break;
       }
       if (count) {
@@ -880,56 +880,56 @@ return noscriptUtil.service ? {
         ns.dom.toggleClass(menuItem, "noscript-toplevel", current);
       }
     }
-    
+
     if (mgCount > 0 && seps.stop.previousSibling.nodeName != "menuseparator")
       mainFrag.appendChild(sep.cloneNode(false));
-    
+
     const fullTip = !!ns.getPref("siteInfoProvider");
-    
+
     while (mgCount-- > 0) {
-      
+
       menuSites = menuGroups[mgCount];
       isTop = menuSites.isTop;
       enabled = menuSites.enabled;
-     
+
       let showInMain = menuSites.showInMain;
-      
+
       if (untrustedFrag && untrustedFrag.firstChild) {
         untrustedFrag.appendChild(sep.cloneNode(false));
       }
-      
+
       scount = menuSites.length;
       if (scount > 0 && mainFrag.lastChild && mainFrag.lastChild.tagName != "menuseparator")
         mainFrag.appendChild(sep.cloneNode(false));
-        
+
       while (scount-- > 0) {
         menuSite = menuSites[scount];
         let ghEnabled = globalHttps && ns.isGlobalHttps(content, menuSite);
-        
+
         untrusted = !enabled && (blockUntrusted || ns.isUntrusted(menuSite));
-        
+
         let cascaded = cascadePermissions && !isTop;
-        
+
         if (untrusted) {
           untrustedCount++;
           showInMain = true;
         }
         else if (!enabled)
           unknownCount++;
-        
+
         parent = showUntrusted && untrusted ? untrustedFrag : mainFrag;
         if (!parent) continue;
-                
+
         domain = isTop && docJSBlocked ? "[ " + menuSite + " ]" : menuSite;
-        
+
         node = refMI.cloneNode(false);
         if (isTop) {
           cssClass = "noscript-toplevel noscript-cmd";
           // can we make it default here?
         }
         else cssClass = "noscript-cmd";
-        
-        
+
+
         let blurred = false;
         let disabled = locked || (enabled ? ns.isMandatory(menuSite) : blurred = ns.isForbiddenByHttpsStatus(menuSite));
         if (disabled) {
@@ -941,18 +941,18 @@ return noscriptUtil.service ? {
             tempCount++;
           }
         }
-         
-        
+
+
         node.setAttribute("label", this.getString((enabled ? "forbidLocal" : "allowLocal"), [domain]));
         node.setAttribute("statustext", menuSite);
         node.setAttribute("tooltiptext", this.getSiteTooltip(enabled, fullTip));
-    
+
         node.setAttribute("class", cssClass + (enabled ? " noscript-forbid" : " noscript-allow"));
-        
+
         if ((showPermanent || enabled) && !((global || cascaded || ghEnabled) && enabled) &&
-            showInMain && !(cascaded && parent !== untrustedFrag)) 
+            showInMain && !(cascaded && parent !== untrustedFrag))
           parent.appendChild(node);
-      
+
         if (!disabled) {
           if (showTemp && !(enabled || blurred || cascaded) && showInMain) {
             extraNode = node.cloneNode(false);
@@ -960,12 +960,12 @@ return noscriptUtil.service ? {
             extraNode.setAttribute("class", cssClass + " noscript-temp noscript-allow");
             parent.appendChild(extraNode);
           }
-          if (((showUntrusted && untrustedMenu || showDistrust) && 
+          if (((showUntrusted && untrustedMenu || showDistrust) &&
                 (cascaded || ghEnabled || !(domain in jsPSs.sitesMap)) ||
                 blockUntrusted && (showUntrusted || showDistrust)
                 ) && !untrusted) {
             parent = (showUntrusted && !blockUntrusted ? untrustedFrag : mainFrag);
-            
+
             extraNode = refMI.cloneNode(false);
             extraNode.setAttribute("label", this.getString("distrust", [menuSite]));
             extraNode.setAttribute("statustext", menuSite);
@@ -977,16 +977,16 @@ return noscriptUtil.service ? {
       }
     }
     if (untrustedFrag && untrustedFrag.firstChild) {
-      if (untrustedCount > 0) 
+      if (untrustedCount > 0)
         with (untrustedMenu.parentNode)
           setAttribute("label", getAttribute("label") +
             " (" + untrustedCount + ")"); // see above for cleanup
-          
+
       untrustedMenu.appendChild(untrustedFrag);
     }
 
     mainMenu.insertBefore(mainFrag, seps.stop);
-    
+
     // temp allow all this page
     if (!(allowPageMenuItem.hidden = !(unknownCount && ns.getPref("showTempAllowPage", true)))) {
       let allowable = this.allowPage(false, true, sites);
@@ -994,7 +994,7 @@ return noscriptUtil.service ? {
       else allowPageMenuItem.hidden = true;
     }
 
-    
+
     // allow all this page
     node = $("noscript-allow-page-mi");
     if (node.nextSibling !== allowPageMenuItem) {
@@ -1005,17 +1005,17 @@ return noscriptUtil.service ? {
       if (allowable.length) node.setAttribute("tooltiptext", allowable.join(", "));
       else node.hidden = true;
     }
-    
+
     // "allow page" accelerators
     {
       let accel = ns.getPref("menuAccelerators");
-      for each(let el in [node, allowPageMenuItem]) 
+      for each(let el in [node, allowPageMenuItem])
         if (accel)
           el.setAttribute("accesskey", el.getAttribute("noaccesskey"));
         else
           el.removeAttribute("acesskey");
     }
-    
+
     // make permanent
     node = $("noscript-temp2perm-mi");
     if (allowPageMenuItem.nextSibling != node) {
@@ -1027,7 +1027,7 @@ return noscriptUtil.service ? {
 
     this.normalizeMenu(untrustedMenu, true);
     this.normalizeMenu(mainMenu, false);
-    
+
     if (mustReverse) this.reverse(popup);
     window.setTimeout(function() site = sites.pluginExtras = sites.pluginSites = null, 0);
   },
@@ -1042,30 +1042,30 @@ return noscriptUtil.service ? {
       m.appendChild(mi);
     }
   },
-  
- 
-  
+
+
+
   populateExternalFilters: function(anchor) {
     const ns = this.ns;
     const externalFilters = ns.externalFilters;
-    
+
     var parent = anchor.parentNode;
     Array.slice(parent.getElementsByClassName("noscript-ef"), 0)
       .forEach(function(node) { parent.removeChild(node); });
-    
+
     if (!(externalFilters.enabled && ns.getPref("showExternalFilters"))) return;
-    
+
     var menus = {};
     var domains = [];
     var filterNames = [];
     var info = externalFilters.getFiltersInfo(content);
     var f, menu, domain, whitelisted, item;
-    
+
     for (var url in info) {
       domain = ns.getBaseDomain(ns.getDomain(url));
       if (domains.indexOf(domain) !== -1) continue;
       domains.push(domain);
-      
+
       f = info[url];
       if (f.name in menus) {
         menu = menus[f.name];
@@ -1073,23 +1073,23 @@ return noscriptUtil.service ? {
         menu = menus[f.name] = { active: false, filter: f, items: [] };
         filterNames.push(f.name);
       }
-      
+
       item = { domain: domain };
-      
+
       whitelisted = f.whitelist && f.whitelist.test("https://" + domain);
-      
+
       item.disabled = whitelisted &&
         !f.isDomainException(domain); // we cannot reliably un-whitelist custom rules
-      
+
       if ((item.active = !whitelisted)) menu.active = true;
-      
+
       menu.items.push(item);
     }
-    
+
     if (!domains.length) return;
-      
+
     filterNames.sort();
-    
+
     var df = document.createDocumentFragment();
     var node;
     for each(var filterName in filterNames) {
@@ -1098,7 +1098,7 @@ return noscriptUtil.service ? {
       node = df.appendChild(document.createElement("menu"));
       node.setAttribute("label", filterName);
       node.setAttribute("class", "menu-iconic noscript-ef" + (menu.active ? '' : ' inactive'));
-      
+
       parent = node.appendChild(document.createElement("menupopup"));
       parent.__ef__ = menu.filter;
       for each(item in menu.items) {
@@ -1112,12 +1112,12 @@ return noscriptUtil.service ? {
          if (item.disabled)
           node.setAttribute("disabled", "true");
       }
-      
+
     }
-    
+
     anchor.parentNode.insertBefore(df, anchor);
   },
-  
+
   onFilterSwitch: function(ev) {
     const ns = this.ns;
     var node = ev.target;
@@ -1127,44 +1127,44 @@ return noscriptUtil.service ? {
     var domain = node.getAttribute("statustext");
     ns.switchExternalFilter(f.name, domain, enabled);
   },
-  
+
   onMenuHiddenWithPlugins: function(ev) {
     if (ev.currentTarget != ev.target) return;
     ev.currentTarget.removeEventListener(ev.type, arguments.callee, false);
-    noscriptOverlay.menuPluginExtras = 
+    noscriptOverlay.menuPluginExtras =
       noscriptOverlay.menuPluginSites = null;
   },
   populatePluginsMenu: function(mainMenu, menu, extras) {
     if (!menu) return;
-    
+
     menu.parentNode.hidden = true;
     const ns = this.ns;
-  
+
     if (!(extras && ns.getPref("showBlockedObjects")))
       return;
-  
+
     var pluginExtras = [],
         seen = [];
     var i = 0;
     for each(let egroup in extras) {
       for (let j = egroup.length; j-- > 0;) {
         let e = egroup[j];
-        
+
         if (ns.isAllowedObject(e.url, e.mime, e.site, e.originSite) && !(e.placeholder && e.placeholder.parentNode) ||
             typeof(e) != "object" || (e.tag && !e.placeholder)
           )
           continue;
-        
+
         let key = e.mime + "@" + ns.objectKey(e.url, e.originSite);
         if (seen.indexOf(key) > -1) continue;
-        
+
         seen.push(key);
-        
+
         let node = document.createElement("menuitem");
-        
+
         e.label = e.label || ((/<I?FRAME>/.test(e.tag) ? e.tag : ns.mimeEssentials(e.mime)) + "@" + ns.urlEssentials(e.url));
         e.title = e.title || e.label.split("@")[0] + "@" + e.url + "\n(" + e.originSite + ")";
- 
+
         node.setAttribute("label", this.getString("allowTemp", [e.label]));
         node.setAttribute("tooltiptext", e.title);
         node.setAttribute("oncommand", "noscriptOverlay.allowObject(" + i + ")");
@@ -1174,7 +1174,7 @@ return noscriptUtil.service ? {
         pluginExtras[i++] = e;
       }
     }
-    
+
     if (pluginExtras.length) {
       mainMenu.addEventListener("popuphidden", this.onMenuHiddenWithPlugins, false);
       noscriptOverlay.menuPluginExtras = pluginExtras;
@@ -1183,20 +1183,20 @@ return noscriptUtil.service ? {
       for each(let e in pluginExtras) {
         if(!(e.site && e.mime) || ns.isAllowedObject(e.site, e.mime, e.site, e.originSite))
           continue;
-        
+
         let objectKey = ns.objectKey(e.site, e.originSite);
         let key = e.mime + "@" + objectKey;
         if (seen.indexOf(key) !== -1) continue;
-        
+
         if (!(e.site in pluginSites)) {
           pluginSites[e.site] = [{mime: "*", site: e.site}];
         }
-        
+
         if (seen.indexOf(objectKey) === -1) {
           pluginSites[e.site].push({mime: "*", site: e.site, originSite: e.originSite});
           seen.push(objectKey);
         }
-        
+
         pluginSites[e.site].push(e, {mime: e.mime, site: e.site});
         seen.push(key);
       }
@@ -1209,7 +1209,7 @@ return noscriptUtil.service ? {
             let where = e.site;
             if (e.originSite) where += " (" + e.originSite + ")";
             let mime = e.mime;
-            
+
             let node = document.createElement("menuitem");
             node.setAttribute("label", this.getString("allowTemp", [ns.mimeEssentials(mime) + "@" + where]));
             node.setAttribute("tooltiptext", mime + "@" + where);
@@ -1226,7 +1226,7 @@ return noscriptUtil.service ? {
       menu.parentNode.hidden = false;
     }
   },
-  
+
   allowPage: function(permanent, justTell, sites) {
     const ns = this.ns;
     sites = sites || this.getSites();
@@ -1234,10 +1234,10 @@ return noscriptUtil.service ? {
     const level = ns.getPref("allowPageLevel", 0) || ns.preferredSiteLevel;
     const trusted = ns.jsPolicySites;
     const tempToPerm = permanent === -1;
-    
+
     const topSite = sites.topSite;
     const cascade = topSite && ns.cascadePermissions;
-    
+
     for (let j = sites.length; j-- > 0;) {
       let site = sites[j];
       if (cascade && topSite !== site)  continue;
@@ -1259,11 +1259,11 @@ return noscriptUtil.service ? {
     }
     return unknown;
   },
-  
+
   tempToPerm: function(justTell, sites) {
     return this.allowPage(-1, justTell, sites);
   },
-  
+
   allowObject: function(i) {
     if(this.menuPluginExtras && this.menuPluginExtras[i]) {
       var e = this.menuPluginExtras[i];
@@ -1272,7 +1272,7 @@ return noscriptUtil.service ? {
       }
     }
   },
-  
+
   allowObjectSite: function(i) {
     if(this.menuPluginSites && this.menuPluginSites[i]) {
       this.allowObjectURL(this.menuPluginSites[i].site, this.menuPluginSites[i].mime, this.menuPluginSites[i].originSite);
@@ -1282,7 +1282,7 @@ return noscriptUtil.service ? {
     this.ns.allowObject(url, mime, originSite);
     this.ns.reloadAllowedObjects(this.currentBrowser, mime);
   },
-  
+
   normalizeMenu: function(menu, hideParentIfEmpty) {
     if (!menu) return;
     var prev = null;
@@ -1300,7 +1300,7 @@ return noscriptUtil.service ? {
         }
       }
     }
-    
+
     if (prev && wasSep) {
       prev.hidden = true;
     }
@@ -1341,11 +1341,11 @@ return noscriptUtil.service ? {
       // local allow/forbid
       site = menuItem.getAttribute("statustext");
       if (!site) return;
-      
+
       if (cmd == "distrust") {
         ns.setUntrusted(site, true);
       }
-      
+
       if (menuItem.getAttribute("closemenu") == "none") {
         menuItem.removeAttribute("statustext"); // prevent double-firing
         // sticky UI feedback
@@ -1355,14 +1355,14 @@ return noscriptUtil.service ? {
         this._reloadDirty = true;
         reloadPolicy = this.liveReload ? ns.RELOAD_CURRENT : ns.RELOAD_NO;
       }
-      
+
       if (enabled && /\ballow-from\b/.test(cl)) {
-        
+
         ns.allowObject(site, "*");
         if (ns.isJSEnabled(site)) return;
         reloadPolicy = ns.RELOAD_NO;
       }
-      
+
     }
     this.safeAllow(site, enabled, temp, reloadPolicy);
   }
@@ -1370,27 +1370,27 @@ return noscriptUtil.service ? {
   safeAllow: function(site, enabled, temp, reloadPolicy) {
     const ns = this.ns;
     var docShell = ns.dom.getDocShellForWindow(content);
-    
+
     if (!reloadPolicy && (site instanceof Array) &&
           !ns.getPref("autoReload.allTabsOnPageAction", true)) {
       reloadPolicy = 1 // current tab only, for multiple items
     }
     var allowTemp = enabled && temp;
-    
-    
+
+
     function op(ns) {
-      if (site) {    
+      if (site) {
         ns.setTemp(site, allowTemp);
         ns.setJSEnabled(site, enabled, false, ns.mustCascadeTrust(site, temp));
-        
+
         if (enabled && !docShell.allowJavascript) {
           var curSite = ns.getSite(docShell.currentURI.spec);
           if (ns.isJSEnabled(curSite)) {
             // force reload
             if (ns.jsEnabled) {
-              ns._lastSnapshot.trusted.add(curSite); 
+              ns._lastSnapshot.trusted.add(curSite);
             } else {
-              ns._lastSnapshot.trusted.remove(curSite); 
+              ns._lastSnapshot.trusted.remove(curSite);
             }
           }
           docShell.allowJavascript = true;
@@ -1398,15 +1398,15 @@ return noscriptUtil.service ? {
       } else {
         ns.jsEnabled = enabled;
       }
-      
+
       if (reloadPolicy == ns.RELOAD_NO) {
         noscriptOverlay._syncUINow();
         if (!allowTemp) ns.savePrefs();
       }
       else noscriptOverlay.syncUI();
-      
+
     }
-    
+
     if (reloadPolicy == ns.RELOAD_NO) {
       op(ns);
     } else {
@@ -1414,23 +1414,23 @@ return noscriptUtil.service ? {
       ns.setExpando(content.document, "contentLoaded", false);
       ns.safeCapsOp(op, reloadPolicy, allowTemp);
     }
-  
+
   },
-  
+
   _savePrefsTimeout: 0,
   savePrefs: function(now) {
     if (now) {
       noscriptOverlay.ns.savePrefs();
       return;
     }
-    
+
     if (this._savePrefsTimeout) {
       window.clearTimeout(this._savePrefsTimeout);
     }
     window.setTimeout(arguments.callee, 5000, true);
   },
 
-  
+
   get statusIcon() {
     var statusIcon = $("noscript-statusIcon") || $("noscript-tbb");
     if (!statusIcon) return null; // avoid mess with early calls
@@ -1443,7 +1443,7 @@ return noscriptUtil.service ? {
     return node.ownerDocument.defaultView.getComputedStyle(node, null)
             .listStyleImage.replace(/.*url\s*\(\s*"?([^"\s\)]*).*/g, '$1');
   },
-  
+
   getStatusClass: function(lev, inactive, currentClass) {
     return "noscript-" + (inactive ? "inactive-" : "") + lev;
   },
@@ -1473,13 +1473,13 @@ return noscriptUtil.service ? {
       w = content;
     }
 
-    
+
     this._syncTimeout = window.setTimeout(function() {
       noscriptOverlay._syncTimeout = 0;
       noscriptOverlay._syncUINow();
     }, 400);
   },
-  
+
 
   syncXssWidget: function(widget) {
     if (!widget) widget = $("noscript-statusXss");
@@ -1490,13 +1490,13 @@ return noscriptUtil.service ? {
     if (unsafeRequest && !unsafeRequest.issued) {
       widget.removeAttribute("hidden");
       widget.setAttribute("tooltiptext", "XSS [" +
-                  ns.getSite(unsafeRequest.origin) + "]->[" + 
+                  ns.getSite(unsafeRequest.origin) + "]->[" +
                   ns.getSite(unsafeRequest.URI.spec) + "]");
     return;
     }
     widget.setAttribute("hidden", "true");
   },
-  
+
   syncRedirectWidget: function() {
     var widget = $("noscript-statusRedirect");
     if (!widget) return;
@@ -1507,9 +1507,9 @@ return noscriptUtil.service ? {
     }
     widget.removeAttribute("hidden");
     widget.setAttribute("tooltiptext",
-        this.getString("metaRefresh.notify.follow") + " [" + info.uri + "]"); 
+        this.getString("metaRefresh.notify.follow") + " [" + info.uri + "]");
   },
-  
+
   get stickyUI() {
     var ui = $("noscript-sticky-ui");
     if (ui == null) return null;
@@ -1521,16 +1521,16 @@ return noscriptUtil.service ? {
     }
     return this.stickyUI = ui;
   },
-  
+
   get useStickyUI() {
     return this.ns.getPref("stickyUI");
   },
-  
+
   hoverUI: true,
-  
+
   showUI: function(toggle) {
     var popup = null;
-    
+
     var useSticky = this.stickyUI && this.ns.getPref("stickyUI.onKeyboard");
 
     popup =  (useSticky && (popup = this.stickyUI)) ||
@@ -1542,7 +1542,7 @@ return noscriptUtil.service ? {
       popup.hidePopup();
     }
   }
-  
+
 ,
   get notificationPos() {
     return this.notifyBottom ? "bottom" : "top";
@@ -1550,35 +1550,35 @@ return noscriptUtil.service ? {
   get altNotificationPos() {
     return this.notificationPos == "top" ? "bottom" : "top";
   }
-, 
+,
   getNotificationBox: function(pos, browser) {
     // this won't get any notification for Fennec, which is good.
-    
+
     var gb = getBrowser();
-    
+
     if (!(gb && gb.getNotificationBox)) return null; // SeaMonkey, Fennec...
-    
+
     browser = browser || gb.selectedBrowser;
     if (!pos) pos = this.notificationPos;
 
     var nb = gb.getNotificationBox(browser);
-    
-    if (nb) 
+
+    if (nb)
       this.patchNotificationBox(nb, pos);
-   
+
     return nb;
   },
-  
+
   patchNotificationBox: function(nb, pos) {
     if (nb._noscriptPatched) return;
-    
+
     nb._noscriptPatched = true;
-    
+
     nb.__defineGetter__("_closedNotification", function() {
       var cn = this.__ns__closedNotification;
       return (cn && cn.parentNode ? cn : null);
     });
-    
+
     nb.__defineSetter__("_closedNotification", function(cn) {
       this.__ns__closedNotification = cn;
     });
@@ -1613,14 +1613,14 @@ return noscriptUtil.service ? {
     }
     nb._noscriptBottomStack_ = stack;
   },
-  
+
   notificationBoxPatch: {
     insertBefore: function(n, ref) {
-      if (n.localName == "notification" && 
+      if (n.localName == "notification" &&
           n.getAttribute("value") == "noscript"
           && noscriptOverlay.notificationPos == "bottom") {
         const stack = this._noscriptBottomStack_;
-        
+
         stack.insertBefore(n, null);
         var hbox = n.ownerDocument.getAnonymousElementByAttribute(
                       n, "class", "notification-inner outset");
@@ -1640,7 +1640,7 @@ return noscriptUtil.service ? {
       }
       if(ref && ref.parentNode != this) {
         var priority = ref.priority;
-        ref = null; 
+        ref = null;
         var notifications = this.allNotifications;
         var j = notifications.length;
         while (j-- > 0) {
@@ -1652,10 +1652,10 @@ return noscriptUtil.service ? {
       return this._dom_.insertBefore.apply(this, [n, ref]);
     },
     removeChild: function(n) {
-      return (n.parentNode == this) ? this._dom_.removeChild.apply(this, arguments) : n.parentNode && n.parentNode.removeChild(n); 
+      return (n.parentNode == this) ? this._dom_.removeChild.apply(this, arguments) : n.parentNode && n.parentNode.removeChild(n);
     }
   },
-  
+
   getNsNotification: function(widget) {
     if (widget == null) return null;
     if (widget.localName == "notificationbox") return widget.getNotificationWithValue("noscript");
@@ -1664,17 +1664,17 @@ return noscriptUtil.service ? {
   isNsNotification: function(widget) {
     return widget && widget.getAttribute("value") == "noscript" || widget.popup == "noscript-notify-popup";
   },
-  
-  
+
+
   notificationShow: function(label, icon, canAppend) {
     var box = this.getNotificationBox();
     if (box == null) return false;
-    
+
     var pos = this.notificationPos;
-    
+
     const gb = getBrowser();
     const browser = gb.selectedBrowser;
-    
+
     const popup = "noscript-notify-popup";
 
     var widget = this.getNsNotification(box);
@@ -1687,22 +1687,22 @@ return noscriptUtil.service ? {
        widget.image = icon;
        if (canAppend) widget.removeAttribute("hidden");
      }
-    
+
     } else {
-     
+
       if (!canAppend) return false;
-     
+
       var buttonLabel, buttonAccesskey;
-      
+
       const refWidget = $("noscript-options-menuitem");
       buttonLabel = refWidget.getAttribute("label");
       buttonAccesskey = refWidget.getAttribute("accesskey");
-      
+
       widget = box.appendNotification(label, "noscript", icon, box.PRIORITY_WARNING_MEDIUM,
                   [ {label: buttonLabel, accessKey: buttonAccesskey,  popup: popup} ]);
     }
     if (!widget) return false;
-    
+
     const delay = this.notifyHide && this.notifyHideDelay || 0;
     if (delay) {
      if (this.notifyHideTimeout) window.clearTimeout(this.notifyHideTimeout);
@@ -1720,18 +1720,18 @@ return noscriptUtil.service ? {
     }
     return true;
   },
-  
+
   getAltNotificationBox: function(browser, value, canAppend) {
-    
+
     const box = (("Browser" in window) && Browser.getNotificationBox)
       ? Browser.getNotificationBox()
       : this.getNotificationBox(this.altNotificationPos, browser);
-    if (canAppend || (box && 
+    if (canAppend || (box &&
         box.getNotificationWithValue &&
         box.getNotificationWithValue(value))) return null;
     return box;
   },
-  
+
   notifyXSSOnLoad: function(requestInfo) {
     requestInfo.browser.addEventListener("DOMContentLoaded", function(ev) {
       requestInfo.browser.removeEventListener(ev.type, arguments.callee, false);
@@ -1739,9 +1739,9 @@ return noscriptUtil.service ? {
       noscriptOverlay.notifyXSS(requestInfo);
     }, false);
   },
-  
+
   notifyXSS: function(requestInfo) {
-    const notificationValue = "noscript-xss-notification"; 
+    const notificationValue = "noscript-xss-notification";
     const box = this.getAltNotificationBox(requestInfo.browser, notificationValue);
     if (!box) return;
 
@@ -1749,17 +1749,17 @@ return noscriptUtil.service ? {
     origin = (origin && "[" + origin + "]") || this.getString("untrustedOrigin");
     var label = this.getString("xss.notify.generic", [origin]);
     var icon = this.getIcon("noscript-statusXss");
-    
+
     const refWidget = $("noscript-options-menuitem");
     var buttonLabel = refWidget.getAttribute("label");
     var buttonAccesskey = refWidget.getAttribute("accesskey");
     var popup = $("noscript-xss-popup");
     if ("Browser" in window) popup.className = "noscript-menu";
-    
+
     box.appendNotification(
-      label, 
-      notificationValue, 
-      icon, 
+      label,
+      notificationValue,
+      icon,
       box.PRIORITY_WARNING_HIGH,
       [{
         label: buttonLabel,
@@ -1768,28 +1768,28 @@ return noscriptUtil.service ? {
        }]
       );
   },
-  
+
   notifyMetaRefreshCallback: function(info) {
     noscriptOverlay.notifyMetaRefresh(info);
   },
   notifyMetaRefresh: function(info) {
     var browser = this.ns.dom.findBrowser(window, info.document.defaultView);
     if (!browser) return;
-    
+
     const notificationValue = "noscript-metaRefresh-notification";
     const box = this.getAltNotificationBox(browser, notificationValue);
     var notification = null;
-    
+
     if (box && this.ns.getPref("forbidMetaRefresh.notify", true)) {
       var urlForLabel = info.uri;
       if (urlForLabel.length > 30) urlForLabel = urlForLabel.substring(0, 30) + "...";
       var label = this.getString("metaRefresh.notify", [urlForLabel, info.timeout])
       var icon = this.getIcon("noscript-statusRedirect");
-        
+
       notification = box.appendNotification(
-        label, 
-        notificationValue, 
-        icon, 
+        label,
+        notificationValue,
+        icon,
         box.PRIORITY_INFO_HIGH,
         [{
             label: this.getString("metaRefresh.notify.follow"),
@@ -1799,7 +1799,7 @@ return noscriptUtil.service ? {
             }
          }]
         );
-      
+
       browser.addEventListener("beforeunload", function(ev) {
         if (ev.originalTarget == info.document || ev.originalTarget == browser) {
           browser.removeEventListener(ev.type, arguments.callee, false);
@@ -1812,10 +1812,10 @@ return noscriptUtil.service ? {
         }
       }, false);
     }
-    
+
     this.setMetaRefreshInfo(info, browser);
   },
-  
+
   setMetaRefreshInfo: function(value, browser) {
     return this.ns.setExpando(browser || this.currentBrowser, "metaRefreshInfo", value);
   },
@@ -1825,20 +1825,20 @@ return noscriptUtil.service ? {
   followMetaRefresh: function(event) {
     this.ns.doFollowMetaRefresh(this.getMetaRefreshInfo(), event.shiftKey);
   },
-  
+
   get supportsNotifications() {
     delete this.supportsNotification;
     return this.supportsNotification = !!document.getElementsByTagName("notificationbox").length;
   },
-  
+
   notifyABE: function(info) {
     var browser = info.browser;
-    
+
     const notificationValue = "noscript-abe-notification";
     const box = this.getAltNotificationBox(browser, notificationValue);
-    
+
     var label =  this.ns.Strings.wrap(this.getString("ABE.notify", [info.request, info.lastRule.destinations, info.lastPredicate]));
-    
+
     if (!(box && box.appendNotification)) {
       if (!this.supportsNotifications && this.ns.getPref("ABE.legacyPrompt")) {
         var prompter = noscriptUtil.prompter;
@@ -1855,14 +1855,14 @@ return noscriptUtil.service ? {
       return false;
     }
     var notification = null;
-    
-    
+
+
     var icon = this.getIcon("noscript-abe-opts");
 
     notification = box.appendNotification(
-      label, 
-      notificationValue, 
-      icon, 
+      label,
+      notificationValue,
+      icon,
       box.PRIORITY_WARNING_HIGH,
       [
        this.fennec
@@ -1886,15 +1886,15 @@ return noscriptUtil.service ? {
         browser.removeEventListener(ev.type, arguments.callee, false);
         if (notification && notification == box.currentNotification) {
           box.removeCurrentNotification();
-        } 
+        }
         info = browser = notification = null;
       }
     }, false);
-    
+
     return true;
   },
-  
-  
+
+
   unsafeReload: function() {
     const browser = this.currentBrowser;
     const ns = this.ns;
@@ -1911,8 +1911,8 @@ return noscriptUtil.service ? {
       method = (unsafeRequest.postData ? "POST" : "GET");
     }
     var msg = noscriptUtil.getString("unsafeReload.warning",
-      [ method, 
-        ns.siteUtils.crop(unsafeRequest.URI.spec), 
+      [ method,
+        ns.siteUtils.crop(unsafeRequest.URI.spec),
         ns.siteUtils.crop(unsafeRequest.origin || unsafeRequest.referrer && unsafeRequest.referrer.spec || '?')
       ]);
     msg += noscriptUtil.getString("confirm");
@@ -1923,7 +1923,7 @@ return noscriptUtil.service ? {
       rw.unsafeReload(browser, true);
     }
   },
-  
+
   notificationHide: function(browser) { // Modified by Higmmer
     var box = this.getNotificationBox(null, browser);
     var widget = this.getNsNotification(box); // Modified by Higmmer
@@ -1949,19 +1949,19 @@ return noscriptUtil.service ? {
     }
     return false;
   },
-  
+
   get _oldStylePartial() {
     delete this._oldStylePartial;
     return this._oldStylePartial = this.ns.getPref("oldStylePartial", false);
   },
-  
+
   _syncUINow: function() {
-    
+
     if (this._syncTimeout) {
       window.clearTimeout(this._syncTimeout);
       this._syncTimeout = 0;
     }
-    
+
     const ns = this.ns;
     const global = ns.jsEnabled;
     const cascadePermissions = ns.cascadePermissions;
@@ -1969,23 +1969,23 @@ return noscriptUtil.service ? {
     const jsPSs = ns.jsPolicySites;
     const untrustedSites = ns.untrustedSites;
 
-    
+
     this.syncRedirectWidget();
-    
+
     const sites = this.getSites();
-    
+
     const oldStylePartial = this._oldStylePartial;
-    
+
     if (this._currentPopup && this._currentPopup.getAttribute("sticky") == "true" && this._currentPopup.state == "open") {
       this.prepareMenu(this._currentPopup, sites);
     }
-    
-    var lev; 
+
+    var lev;
     var totalScripts = sites.scriptCount;
     var totalPlugins = sites.pluginCount;
     var totalAnnoyances = totalScripts + totalPlugins;
     var notificationNeeded = false;
-    
+
     var allowedSites = [];
     var activeSites = sites.pluginSites.concat(sites.docSites);
     var allowed = 0;
@@ -1993,16 +1993,16 @@ return noscriptUtil.service ? {
     var active = 0;
     var blockedObjects = 0;
     var total = 0;
-        
+
     var topTrusted = false;
     var topUntrusted = false;
 
     let win = content;
-    
+
     if (global && !ns.alwaysBlockUntrustedContent) {
       lev = "glb";
     } else {
-      
+
       let pes = sites.pluginExtras;
       if (pes) {
         for (let j = pes.length; j-- > 0;) {
@@ -2022,7 +2022,7 @@ return noscriptUtil.service ? {
         let url = sites[s];
         let isUntrusted = untrustedSites.matches(url);
         let site = !isUntrusted && (global || globalHttps && ns.isGlobalHttps(win, url) ? url : jsPSs.matches(url));
-        
+
         if (url == sites.topSite) {
           if (site && (!ns.httpStarted || ns.dom.getDocShellForWindow(win).allowJavascript)) topTrusted = true;
           else {
@@ -2030,7 +2030,7 @@ return noscriptUtil.service ? {
             if (isUntrusted) topUntrusted = true;
           }
         }
-        
+
         if (site) {
           if (oldStylePartial || activeSites.indexOf(url) > -1) active++;
           if (ns.isMandatory(site) || allowedSites.indexOf(site) > -1) {
@@ -2045,20 +2045,20 @@ return noscriptUtil.service ? {
           }
         }
       }
-      
+
       if (!untrusted && sites.pluginSites.some(untrustedSites.matches, untrustedSites)) {
         untrusted = 1;
       }
-      
+
       allowed = allowedSites.length;
       lev = (allowed === total && sites.length > 0 && !untrusted) ? (global ? "glb" : "yes")
             : (allowed === 0 || active === 0) ? (global
                                               ? "untrusted-glb" :
                                                 topUntrusted
                                                   ? "untrusted" :
-                                                    blockedObjects ? "no-emb" : "no") 
+                                                    blockedObjects ? "no-emb" : "no")
             : (untrusted > 0 && !notificationNeeded
-                ? (blockedObjects ? (global ? "glb-emb" : "yu-emb") : global ? "yu-glb" : "yu") 
+                ? (blockedObjects ? (global ? "glb-emb" : "yu-emb") : global ? "yu-glb" : "yu")
                 : topTrusted
                   ? allowed === total - blockedObjects
                       ? (global ? "glb-emb" : "emb")
@@ -2072,45 +2072,45 @@ return noscriptUtil.service ? {
           (!cascadePermissions || !topTrusted || blockedObjects)
         );
     }
-    
+
     let message = this.getString(
       "allowed." +
         (lev == "yu" || lev == "subprt" || lev == "emb" || lev == "yu-emb"
          ? "prt"
          : (lev == "untrusted" || lev == "no-emb") ? "no" : lev)
       );
-    
+
     let shortMessage = message.replace("JavaScript", "JS");
-    
-    if (notificationNeeded && active) 
+
+    if (notificationNeeded && active)
       message += ", " + allowed + "/" + total + " (" + allowedSites.join(", ") + ")";
-    
+
     let countsMessage = " | <SCRIPT>: " + totalScripts + " | <OBJECT>: " + totalPlugins;
     message += countsMessage;
     shortMessage += countsMessage;
-    
-    
-    const className = this.getStatusClass(lev, !(totalScripts || topUntrusted) /* inactive */ );  
+
+
+    const className = this.getStatusClass(lev, !(totalScripts || topUntrusted) /* inactive */ );
     let widget = this.statusIcon;
     const hoverUI = this.hoverUI;
     for (let wg = widget; wg;) {
       if (hoverUI) wg.removeAttribute("tooltiptext");
       else wg.setAttribute("tooltiptext", shortMessage);
       this.updateStatusClass(wg, className);
-      
+
       if (wg.id === "noscript-tbb") break;
       wg = $("noscript-tbb");
     }
-    
+
     if (notificationNeeded) { // notifications
-      
+
       if (this.notify) {
         this.notificationShow(message,
-          this.getIcon(widget), 
+          this.getIcon(widget),
           !(ns.getExpando(win, "messageShown") && this.notifyHidePermanent));
         ns.setExpando(win, "messageShown", true);
       } else {
-        this.notificationHide(); 
+        this.notificationHide();
       }
       if (!ns.getExpando(win, "soundPlayed")) {
         ns.soundNotify(content.location.href);
@@ -2120,13 +2120,13 @@ return noscriptUtil.service ? {
       this.notificationHide();
       message = shortMessage = "";
     }
-    
+
     widget = $("noscript-statusLabelValue");
     if (widget) {
       widget.setAttribute("value", shortMessage);
       widget.parentNode.style.display = message ? "" : "none";
     }
-    
+
     widget =  $("noscript-tbb-revoke-temp");
     if (widget) {
       if (ns.gTempSites.sitesString || ns.tempSites.sitesString || ns.objectWhitelistLen || ns.clearClickHandler && ns.clearClickHandler.whitelistLen) {
@@ -2135,7 +2135,7 @@ return noscriptUtil.service ? {
         widget.setAttribute("disabled", "true");
       }
     }
-    
+
     widget =  $("noscript-tbb-temp-page");
     if (widget) {
       if (allowed < total) {
@@ -2148,30 +2148,30 @@ return noscriptUtil.service ? {
 ,
   notifyHideTimeout: 0,
   liveReload: false,
-  
+
   initContentWindow: function(window) {
     window.addEventListener("pagehide", this.listeners.onPageHide, true);
   },
-  
+
   cleanupDocument: function(doc, browser) {
-    
+
     if (!(doc.defaultView && doc.defaultView == doc.defaultView.top)) return;
-    
+
     const ns = this.ns;
     browser = browser || ns.dom.findBrowserForNode(doc);
     if (browser) {
       ns.setExpando(browser, "pe", null);
     }
   },
-  
+
   presetChanged: function(menulist) {
     this.ns.applyPreset(menulist.selectedItem.value);
   },
-  
+
   observer: {
     ns: noscriptUtil.service,
     QueryInterface: noscriptUtil.service.generateQI([
-        Ci.nsIObserver, 
+        Ci.nsIObserver,
         Ci.nsISupportsWeakReference])
   ,
     observe: function(subject, topic, data) {
@@ -2179,7 +2179,7 @@ return noscriptUtil.service ? {
          noscriptOverlay.syncUI();
          return;
       }
-      
+
       switch(topic) {
         case "noscript:sync-ui":
           noscriptOverlay.syncUI(subject);
@@ -2188,9 +2188,9 @@ return noscriptUtil.service ? {
           noscriptOverlay.recentlyBlocked = [];
           return;
       }
-      
+
       // prefs
-      
+
       switch (data) {
         case "preset":
           if (data == "off") noscriptOverlay.statusIcon.setAttribute("hidden", "true");
@@ -2205,37 +2205,37 @@ return noscriptUtil.service ? {
               }
             }, 0);
         break;
-        
+
         case "notify":
         case "notify.bottom":
           noscriptOverlay[data.replace(/\.b/, 'B')] = this.ns.getPref(data);
           if (this._registered) noscriptOverlay.notificationHide();
         break;
-        
+
         case "keys.ui":
         case "keys.toggle":
         case "keys.tempAllowPage":
         case "keys.revokeTemp":
           noscriptOverlay.shortcutKeys.setup(data.replace(/^keys\./, ""), this.ns.getPref(data, ""));
         break;
-        
+
         case "notify.hidePermanent":
         case "notify.hideDelay":
         case "notify.hide":
           noscriptOverlay[data.replace(/\.h/, 'H')] = this.ns.getPref(data);
         break;
-        
+
         case "stickyUI.liveReload":
           noscriptOverlay.liveReload = this.ns.getPref(data);
         break;
-        
+
         case "hoverUI":
         case "toolbarToggle":
           noscriptOverlay[data] = this.ns.getPref(data);
           noscriptOverlay.initPopups();
-          
+
         break;
-        
+
       }
     },
     _registered: false,
@@ -2271,13 +2271,13 @@ return noscriptUtil.service ? {
       ns.caps.removeObserver("", this);
     }
   },
-  
-  
-  
-  
-  
+
+
+
+
+
   shortcutKeys: {
-    
+
     execute: function(cmd, ev) {
       switch (cmd) {
         case 'toggle':
@@ -2294,15 +2294,15 @@ return noscriptUtil.service ? {
         break;
       }
     },
-    
+
     keys: {},
-    setup: function(name, values) { 
+    setup: function(name, values) {
       values = values.toLowerCase().replace(/^\s*(.*?)\s*$/g, "$1").split(/\s+/);
       var vpos = values.length;
       if (vpos) {
-        
+
         var mods = { shiftKey: false, altKey: false, metaKey: false, ctrlKey: false };
-        
+
         var keyVal = values[--vpos];
         for (var value; vpos-- > 0;) {
           value = values[vpos] + "Key";
@@ -2310,9 +2310,9 @@ return noscriptUtil.service ? {
             mods[value] = true;
           }
         }
-        
+
         var key = { modifiers: mods, charCode: 0, keyCode: 0 };
-        
+
         if (keyVal.length > 3) {
           var pos = keyVal.indexOf('.');
           if (pos > 3) {
@@ -2323,13 +2323,13 @@ return noscriptUtil.service ? {
         } else {
           key.charCode = (key.modifiers.shiftKey ? keyVal.toUpperCase() : keyVal).charCodeAt(0) || 0;
         }
-        
+
         this.keys[name] = key;
       } else {
         delete(this.keys[name]);
       }
     },
-    
+
     listener: function(ev) {
       const binding = arguments.callee.binding;
       const skk = binding.keys;
@@ -2338,7 +2338,7 @@ return noscriptUtil.service ? {
         cmd = k;
         sk = skk[k];
         var which = ev.which;
-         
+
         if (ev.charCode && ev.charCode == sk.charCode || ev.keyCode && ev.keyCode == sk.keyCode) {
           mods = sk.modifiers;
           for (p in mods) {
@@ -2347,8 +2347,8 @@ return noscriptUtil.service ? {
               break;
             }
           }
-          
-          
+
+
           if (cmd) {
             ev.preventDefault();
             binding.execute(cmd, ev);
@@ -2357,9 +2357,9 @@ return noscriptUtil.service ? {
         }
       }
     },
-    
-    
-    
+
+
+
     register: function() {
       this.listener.binding = this;
       window.addEventListener("keypress", this.listener, true);
@@ -2368,10 +2368,10 @@ return noscriptUtil.service ? {
       window.removeEventListener("keypress", this.listener, true);
     }
   },
-  
+
   hideObject: function(p, o) {
     if (!p.mimeRx.test(o.type)) return;
-    
+
     var r = p.document.createElement("object");
     r.style.width = o.offsetWidth + "px";
     r.style.height = o.offsetHeight + "px";
@@ -2379,7 +2379,7 @@ return noscriptUtil.service ? {
     o.className += " " + p.className;
     o.parentNode.insertBefore(r, o);
   },
-  
+
   showObject: function(p, o) {
     var cs = o.className;
     cs = cs.replace(p.classRx, '');
@@ -2391,7 +2391,7 @@ return noscriptUtil.service ? {
       }
     }
   },
-  
+
   _tags: ["object", "embed"],
   toggleObjectsVisibility: function(d, v) {
     var ns = noscriptOverlay.ns;
@@ -2422,14 +2422,14 @@ return noscriptUtil.service ? {
       }
     }
   },
-  
+
   listeners: {
-    
+
     onTabClose: function(ev) {
       try {
         var browser = ev.target.linkedBrowser;
         noscriptOverlay.ns.cleanupBrowser(browser);
-        
+
         var tabbrowser = getBrowser();
         if (tabbrowser._browsers) tabbrowser._browsers = null;
         if (tabbrowser.getNotificationBox) {
@@ -2437,7 +2437,7 @@ return noscriptUtil.service ? {
         }
       } catch(e) {}
     },
-    
+
     webProgressListener: {
       QueryInterface: noscriptUtil.service.generateQI([Ci.nsIWebProgressListener]),
       STATE_STOP: Ci.nsIWebProgressListener.STATE_STOP,
@@ -2447,29 +2447,29 @@ return noscriptUtil.service ? {
           noscriptOverlay.syncUI(domWindow);
         }
       },
-      onStatusChange: function() {}, 
+      onStatusChange: function() {},
       onStateChange: function(aWebProgress, aRequest, stateFlags, status) {
         if (stateFlags & this.STATE_STOP) {
           const domWindow = aWebProgress.DOMWindow;
           if (domWindow == domWindow.top) {
             noscriptOverlay.syncUI(domWindow);
           }
-        } 
-      }, 
-      onSecurityChange: function() {}, 
+        }
+      },
+      onSecurityChange: function() {},
       onProgressChange: function() {}
     },
-    
+
     onContentLoad: function(ev) {
 
       var doc = ev.originalTarget;
-      
+
       if (doc instanceof HTMLDocument) {
         let w = doc.defaultView;
         if (w) {
           const ns = noscriptOverlay.ns;
-          
-          
+
+
           ns.setExpando(doc, "contentLoaded", true);
           if (w == w.top) {
             let url = doc.URL;
@@ -2479,7 +2479,7 @@ return noscriptUtil.service ? {
               ns.processMetaRefresh(doc, noscriptOverlay.notifyMetaRefreshCallback);
               w.addEventListener("load", noscriptOverlay.listeners.onDocumentLoad, false);
             }
-            
+
             if (w == content) {
               noscriptOverlay.syncUI(w);
             } else {
@@ -2489,10 +2489,10 @@ return noscriptUtil.service ? {
           } else {
             ns.frameContentLoaded(w);
             noscriptOverlay.syncUI(w.top);
-          } 
+          }
         }
       }
-      
+
     },
     onDocumentLoad: function(ev) {
       if (ev.originalTarget instanceof HTMLDocument) {
@@ -2503,7 +2503,7 @@ return noscriptUtil.service ? {
         }, 50);
       }
     },
-    
+
     onPageShow: function(ev) {
       try {
         if (ev.persisted && (ev.target instanceof HTMLDocument)) {
@@ -2513,7 +2513,7 @@ return noscriptUtil.service ? {
       } catch(e) {}
       noscriptOverlay._syncUIReal();
     },
-    
+
     onPageHide: function(ev) {
       var d = ev.target;
       if (d instanceof HTMLDocument) {
@@ -2521,17 +2521,17 @@ return noscriptUtil.service ? {
         noscriptOverlay.toggleObjectsVisibility(d, false);
       }
     },
-    
+
     onMainContextMenu:  function(ev) { noscriptOverlay.prepareContextMenu(ev) },
-    
+
     onLoad: function(ev) {
-      
+
       let winType = document.documentElement.getAttribute("windowtype");
       if (winType !== "navigator:browser") noscriptOverlay.ns.dom.browserWinType = winType;
-      
+
       window.removeEventListener("load", arguments.callee, false);
       window.addEventListener("unload", noscriptOverlay.listeners.onUnload, false);
-    
+
       try {
         noscriptOverlay.listeners.setup();
         noscriptOverlay.wrapBrowserAccess();
@@ -2544,26 +2544,26 @@ return noscriptUtil.service ? {
             .loadSubScript("chrome://noscript/content/noscriptBM.js");
           noscriptBM.init();
         }, 1500);
-        
-        
+
+
         if (window.messageManager) {
           window.messageManager.loadFrameScript("chrome://noscript/content/fs/pasteHandler.js", true);
         }
       } catch(e) {
-        let msg = "[NoScript] Error initializing new window " + e + "\n" + e.stack; 
+        let msg = "[NoScript] Error initializing new window " + e + "\n" + e.stack;
         noscriptOverlay.ns.log(msg);
         noscriptOverlay.ns.dump(msg);
       }
-    
+
     },
     onUnload: function(ev) {
       window.removeEventListener("unload", arguments.callee, false);
-      
+
       noscriptOverlay.listeners.teardown();
       window.browserDOMWindow = null;
       noscriptOverlay.dispose();
     },
-    
+
     onAddonOptionsLoad: function(ev) {
       var presetUI = $("noscript-preset-menu");
       if (presetUI) {
@@ -2581,11 +2581,11 @@ return noscriptUtil.service ? {
         } catch(e) { ns.log(e) }
       }
     },
-    
+
     onActivation: function() {
       noscriptOverlay.syncUI();
     },
-    
+
     customizableUIListener: {
       onWidgetAfterDOMChange: function(aWidget) {
         for each(let b in ['noscript-tbb', 'noscript-statusLabel']) {
@@ -2596,14 +2596,14 @@ return noscriptUtil.service ? {
         }
       }
     },
-    
+
     setup: function(delayed) {
-      
+
       if (!delayed) {
         window.addEventListener("pageshow", this.onPageShow, true);
         window.addEventListener("pagehide", this.onPageHide, true);
       }
-      
+
       var b = getBrowser();
       if (!b) {
         setTimeout(function() noscriptOverlay.listeners.setup(true), 100);
@@ -2613,7 +2613,7 @@ return noscriptUtil.service ? {
       if (tabs) {
         tabs.addEventListener("TabClose", this.onTabClose, false);
       }
-      
+
       var addonsList = $("addons-list");
       if (addonsList) {
         // Fennec
@@ -2621,22 +2621,22 @@ return noscriptUtil.service ? {
         $("browsers").addEventListener("load", this.onContentLoad, true);
         tabs.addEventListener("TabSelect", this.onActivation, true);
       } else {
-      
+
         var context = $("contentAreaContextMenu");
         if (!context) return; // not a browser window?
-      
+
         context.addEventListener("popupshowing", this.onMainContextMenu, false);
         window.addEventListener("DOMContentLoaded", this.onContentLoad, false);
         b.addProgressListener(this.webProgressListener);
-        
+
       }
 
-     
+
       noscriptOverlay.shortcutKeys.register();
       noscriptOverlay.observer.register();
-      
+
       let self = this;
-      
+
       window.addEventListener("keyup", function(ev) {
         if (self.tapped && ev.keyCode === 46 &&
             noscriptOverlay.ns.getPref("eraseFloatingElements")
@@ -2658,7 +2658,7 @@ return noscriptUtil.service ? {
           }
         }
       }, true);
-      
+
       window.addEventListener("mousedown", function(ev) {
         if (ev.button === 0) {
           let ns = noscriptOverlay.ns;
@@ -2669,7 +2669,7 @@ return noscriptUtil.service ? {
           self.delKey = false;
         }
       }, true);
-      
+
       window.addEventListener("mouseup", function(ev) {
         if (self.delKey) {
           self.delKey = false;
@@ -2680,45 +2680,45 @@ return noscriptUtil.service ? {
         }
         self.tapped = null;
       }, true);
-      
+
       if ("CustomizableUI" in window) {
         CustomizableUI.addListener(this.customizableUIListener);
       }
-      
+
     },
-    
-    
-   
+
+
+
     teardown: function() {
 
       if ("CustomizableUI" in window) {
         CustomizableUI.removeListener(this.customizableUIListener);
       }
-      
+
       var b = getBrowser();
       if (b) {
         b.removeEventListener("click", this.onBrowserClick, true);
         if (b.tabContainer) {
           b.tabContainer.removeEventListener("TabClose", this.onTabClose, false);
         }
-        
+
         b.removeProgressListener(this.webProgressListener);
       }
-      
+
       window.removeEventListener("pagehide", this.onPageHide, true);
       window.removeEventListener("pageshow", this.onPageShow, true);
       window.removeEventListener("DOMContentLoaded", this.onContentLoad, false);
 
       noscriptOverlay.observer.remove();
       noscriptOverlay.shortcutKeys.remove();
-      
+
      $("contentAreaContextMenu").removeEventListener("popupshowing", this.onMainContextMenu, false);
-      
+
     }
-    
+
   }, // END listeners
-  
-  
+
+
   get _browserReady() {
     return ("gBrowser" in window) && window.gBrowser ||
           ("Browser" in window) && window.Browser &&
@@ -2734,44 +2734,44 @@ return noscriptUtil.service ? {
     );
     return this.currentBrowser;
   },
-  
+
   get fennec() {
     if (!this._browserReady) return false;
     delete this.fennec;
     return this.fennec = "Browser" in window;
   },
-  
+
   get browsers() {
     if (!this._browserReady) return [];
     delete this.browsers;
     var browsersContainer = window.Browser // Fennec
-        ? ("browsers" in Browser) && Browser || Browser._canvasBrowser || Browser._content  
+        ? ("browsers" in Browser) && Browser || Browser._canvasBrowser || Browser._content
         : window.gBrowser; // desktop Firefox
 
     this.__defineGetter__("browsers", function() { return browsersContainer.browsers; });
-     
+
     if ("Browser" in window && window.Browser._content) { // Fennec Alpha 1
       getBrowserForDisplay = function() { Browser._content.getBrowserForDisplay.apply(Browser._content, arguments); };
     }
     return this.browsers;
   },
-  
+
   isBrowserEnabled: function(browser) {
     browser = browser || this.currentBrowser;
     return browser.docShell.allowJavascript;
   },
- 
-  
+
+
   wrapBrowserAccess: function() { // called onload
     if (!window.nsBrowserAccess) {
       noscriptOverlay.ns.log("[NoScript] nsBrowserAccess not found?!");
       return;
     }
-  
+
     if (!nsBrowserAccess.prototype.wrappedJSObject) {
       nsBrowserAccess.prototype.__defineGetter__("wrappedJSObject", noscriptOverlay.browserAccess.self);
     }
-    
+
     if (!(window.browserDOMWindow && browserDOMWindow.wrappedJSObject && (browserDOMWindow.wrappedJSObject instanceof nsBrowserAccess))) {
       if (!'retryCount' in arguments.callee) {
         arguments.callee.retryCount = 10;
@@ -2782,13 +2782,13 @@ return noscriptUtil.service ? {
       window.setTimeout(arguments.callee, 0);
       return;
     }
-    
+
     browserDOMWindow.wrappedJSObject.openURI = noscriptOverlay.browserAccess.openURI;
-    
-    if(noscriptOverlay.ns.consoleDump) 
+
+    if(noscriptOverlay.ns.consoleDump)
       noscriptOverlay.ns.dump("browserDOMWindow wrapped for external load interception");
   },
-  
+
   browserAccess: {
     self: function() { return this; },
     openURI: function(aURI, aOpener, aWhere, aContext) {
@@ -2808,11 +2808,11 @@ return noscriptUtil.service ? {
            }
         }
       }
-      
+
       if (aURI && ns.extraCapturedProtocols && ns.extraCapturedProtocols.indexOf(aURI.scheme) > -1) {
         return aOpener || content;
       }
-      
+
       var w = null;
       try {
         w = nsBrowserAccess.prototype.openURI.apply(this, arguments);
@@ -2823,12 +2823,12 @@ return noscriptUtil.service ? {
       return w;
     }
   },
-  
+
   Hacks: {
     allowLocalLinks: function() {
       let ns = noscriptOverlay.ns;
       if (ns.geckoVersionCheck("30") >= 0) return;
-      
+
       if ("urlSecurityCheck" in window) {
         let usc = window.urlSecurityCheck;
         window.urlSecurityCheck = function(aURL, aPrincipal, aFlags) {
@@ -2861,7 +2861,7 @@ return noscriptUtil.service ? {
       tb.removeEventListener("click", mouseClick, true);
       tb.addEventListener("click", mouseClick, false);
     },
-  
+
     torButton: function() {
       if ("torbutton_update_tags" in window && typeof(window.torbutton_update_tags) == "function") {
         // we make TorButton aware that we could have a part in suppressing JavaScript on the browser
@@ -2873,7 +2873,7 @@ return noscriptUtil.service ? {
       }
     }
   },
-  
+
   install: function() {
     // this.ns.dump("*** OVERLAY INSTALL ***\n");
     this.ns.setPref("badInstall", false);
@@ -2896,7 +2896,7 @@ return noscriptUtil.service ? {
 : {
     install: function() {
       window.addEventListener("load", function(ev) {
-        ev.currentTarget.removeEventListener("load", arguments.callee, false); 
+        ev.currentTarget.removeEventListener("load", arguments.callee, false);
         var node = null;
         for each(var id in ["noscript-context-menu", "noscript-tbb", "noscript-statusIcon"]) {
           node = $(id);
@@ -2911,10 +2911,10 @@ return noscriptUtil.service ? {
         prefs.setBoolPref("badInstall", true);
         prefs = null;
         window.setTimeout(function() {
-          alert("NoScript is not properly installed and cannot operate correctly.\n" + 
+          alert("NoScript is not properly installed and cannot operate correctly.\n" +
                 "Please install it again and check the Install FAQ section on http://noscript.net/faq if this problem persists.");
           noscriptUtil.browse("https://noscript.net/faq#faqsec2", null);
-            
+
         },10);
       }, false);
   }
diff --git a/chrome/noscript.jar!/locale/bg-BG/noscript/noscript.dtd b/chrome/noscript.jar!/locale/bg-BG/noscript/noscript.dtd
index 0444fde..2252158 100644
--- a/chrome/noscript.jar!/locale/bg-BG/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/bg-BG/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Настройки…">
 <!ENTITY noscriptOptions.accesskey "Н">
 <!ENTITY noscriptOptionsLong "Настройки на NoScript">
-<!ENTITY noscriptAbout "За NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "За NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Можете да зададете в кои уеб-сайтове е позволено да се използват скриптовете. Напишете адреса или домейна (например "http://www.site.com" или "site.com") на сайта, който искате да разрешите и натиснете Разреши.">
 <!ENTITY noscriptWebAddress "Адрес на уеб-сайта:">
 <!ENTITY noscriptAllow "Разреши">
diff --git a/chrome/noscript.jar!/locale/ca-AD/noscript/noscript.dtd b/chrome/noscript.jar!/locale/ca-AD/noscript/noscript.dtd
index 96d9453..fde539d 100644
--- a/chrome/noscript.jar!/locale/ca-AD/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/ca-AD/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Opcions...">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "Opcions de NoScript">
-<!ENTITY noscriptAbout "Quant a NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "Quant a NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Podeu especificar quins llocs web poden executar seqüències. El tipus d'adreça o el domini (p.ex. "http://www.site.com" o "site.com") del lloc al qual voleu donar permissos i feu clic a Permet.">
 <!ENTITY noscriptWebAddress "Adreça del lloc web:">
 <!ENTITY noscriptAllow "Permet">
diff --git a/chrome/noscript.jar!/locale/cs-CZ/noscript/noscript.dtd b/chrome/noscript.jar!/locale/cs-CZ/noscript/noscript.dtd
index f3fa03a..33553be 100644
--- a/chrome/noscript.jar!/locale/cs-CZ/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/cs-CZ/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Nastavení...">
 <!ENTITY noscriptOptions.accesskey "N">
 <!ENTITY noscriptOptionsLong "Nastavení NoScript">
-<!ENTITY noscriptAbout "O rozšíření NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "O rozšíření NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Můžete si zvolit, které webové stránky mají povoleno spouštět skripty. Zadejte adresu (např. http://www.site.com nebo site.com) na které se nachází stránka, pro kterou chcete skripty povolit a klepněte na Povolit.">
 <!ENTITY noscriptWebAddress "Adresa webové stránky:">
 <!ENTITY noscriptAllow "Povolit">
diff --git a/chrome/noscript.jar!/locale/cy-GB/noscript/noscript.dtd b/chrome/noscript.jar!/locale/cy-GB/noscript/noscript.dtd
index 11a296e..bf65e44 100644
--- a/chrome/noscript.jar!/locale/cy-GB/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/cy-GB/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Opsiynau">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "Opsiynau NoScript">
-<!ENTITY noscriptAbout "Yngylch NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "Yngylch NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Cewch enwi pa wefannau sy'n cael rhedeg sgriptiau. Teipiwch gyfeiriad neu barth (e.e. "http://www.site.com" neu "site.com") y safle rydych eisiau ei ganiatau ac wedyn cliciwch Caniatau.">
 <!ENTITY noscriptWebAddress "Cyfeiriad wefan">
 <!ENTITY noscriptAllow "Caniatau">
diff --git a/chrome/noscript.jar!/locale/da/noscript/noscript.dtd b/chrome/noscript.jar!/locale/da/noscript/noscript.dtd
index 8c6057e..d3d71f2 100644
--- a/chrome/noscript.jar!/locale/da/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/da/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Indstillinger…">
 <!ENTITY noscriptOptions.accesskey "I">
 <!ENTITY noscriptOptionsLong "NoScript Indstillinger">
-<!ENTITY noscriptAbout "Om NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "Om NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Du kan angive hvilke websteder der må udføre scripts. Indtast adresse eller domæne (f.eks. "http://www.site.com" eller "site.com") på det websted du ønsker at tillade og klik på Tillad.">
 <!ENTITY noscriptWebAddress "Webstedets adresse:">
 <!ENTITY noscriptAllow "Tillad">
diff --git a/chrome/noscript.jar!/locale/de/noscript/noscript.dtd b/chrome/noscript.jar!/locale/de/noscript/noscript.dtd
index 3ce9d4b..bb9a483 100644
--- a/chrome/noscript.jar!/locale/de/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/de/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Einstellungen…">
 <!ENTITY noscriptOptions.accesskey "E">
 <!ENTITY noscriptOptionsLong "NoScript - Einstellungen">
-<!ENTITY noscriptAbout "Über NoScript 2.6.9.23rc2…">
+<!ENTITY noscriptAbout "Über NoScript 2.6.9.23rc3…">
 <!ENTITY noscriptPermissionsText "Sie können festlegen, welchen Websites Sie das Ausführen von Skripten erlauben möchten. Geben Sie bitte die exakte Adresse oder die Domain der Website ein (z.B. "http://www.site.com" oder "site.com"), für die Sie dies zulassen möchten, und klicken Sie dann auf "Erlauben".">
 <!ENTITY noscriptWebAddress "Adresse der Website:">
 <!ENTITY noscriptAllow "Erlauben">
diff --git a/chrome/noscript.jar!/locale/el/noscript/noscript.dtd b/chrome/noscript.jar!/locale/el/noscript/noscript.dtd
index 84b76e3..4819dec 100644
--- a/chrome/noscript.jar!/locale/el/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/el/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Επιλογές">
 <!ENTITY noscriptOptions.accesskey "Ε">
 <!ENTITY noscriptOptionsLong "Επιλογές NoScript">
-<!ENTITY noscriptAbout "Περί NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "Περί NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Μπορείτε να καθορίσετε για ποιους ιστότοπους θα επιτρέπεται η εκτέλεση σεναρίων εντολών. Πληκτρολογήστε τη διεύθυνση τομέα (πχ. "http://www.site.com" or "site.com") του ιστότοπου που θέλετε και μετά κάντε κλικ στο «Να επιτρέπεται»">
 <!ENTITY noscriptWebAddress "Διεύθυνση ιστότοπου">
 <!ENTITY noscriptAllow "Να επιτρέπεται">
diff --git a/chrome/noscript.jar!/locale/en-GB/noscript/noscript.dtd b/chrome/noscript.jar!/locale/en-GB/noscript/noscript.dtd
index 07b8c91..655fe7d 100644
--- a/chrome/noscript.jar!/locale/en-GB/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/en-GB/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Options…">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "NoScript Options">
-<!ENTITY noscriptAbout "About NoScript 2.6.9.23rc2…">
+<!ENTITY noscriptAbout "About NoScript 2.6.9.23rc3…">
 <!ENTITY noscriptPermissionsText "You can specify which web sites are allowed to execute scripts. Type the address or the domain (e.g. "http://www.site.com" or "site.com") of the site you want to allow and then click Allow.">
 <!ENTITY noscriptWebAddress "Address of web site:">
 <!ENTITY noscriptAllow "Allow">
diff --git a/chrome/noscript.jar!/locale/en-US/noscript/noscript.dtd b/chrome/noscript.jar!/locale/en-US/noscript/noscript.dtd
index 1eb0ed4..f699898 100644
--- a/chrome/noscript.jar!/locale/en-US/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/en-US/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Options…">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "NoScript Options">
-<!ENTITY noscriptAbout "About NoScript 2.6.9.23rc2…">
+<!ENTITY noscriptAbout "About NoScript 2.6.9.23rc3…">
 <!ENTITY noscriptPermissionsText "You can specify which web sites are allowed to execute scripts. Type the address or the domain (e.g. "http://www.site.com" or "site.com") of the site you want to allow and then click Allow.">
 <!ENTITY noscriptWebAddress "Address of web site:">
 <!ENTITY noscriptAllow "Allow">
diff --git a/chrome/noscript.jar!/locale/eo/noscript/noscript.dtd b/chrome/noscript.jar!/locale/eo/noscript/noscript.dtd
index dfdf14e..c792383 100644
--- a/chrome/noscript.jar!/locale/eo/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/eo/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Opcioj…">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "Opcioj de NoScript">
-<!ENTITY noscriptAbout "Pri NoScript 2.6.9.23rc2…">
+<!ENTITY noscriptAbout "Pri NoScript 2.6.9.23rc3…">
 <!ENTITY noscriptPermissionsText "Vi povas specifi, kiuj ttt-ejoj rajtu plenumigi skriptojn. Entajpu la adreson aŭ la domajnonomon (ekz. “http://www.retejo.org” aŭ “retejo.org”) de la ttt-ejo, kiun vi volas rajtigi, kaj poste alklaku “Rajtigi”.">
 <!ENTITY noscriptWebAddress "Adreso de retpaĝaro:">
 <!ENTITY noscriptAllow "Rajtigi">
diff --git a/chrome/noscript.jar!/locale/es-AR/noscript/noscript.dtd b/chrome/noscript.jar!/locale/es-AR/noscript/noscript.dtd
index b6704c5..d4e15b9 100644
--- a/chrome/noscript.jar!/locale/es-AR/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/es-AR/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Opciones…">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "Opciones de NoScript">
-<!ENTITY noscriptAbout "Acerca de NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "Acerca de NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Puede especificar a cuáles sitios web le permitirá ejecutar scripts. Escriba la dirección o el dominio (por ejemplo, "http://www.sitio.com" o "sitio.com") del sitio y luego haga clic en Permitir.">
 <!ENTITY noscriptWebAddress "Dirección del sitio web:">
 <!ENTITY noscriptAllow "Permitir">
diff --git a/chrome/noscript.jar!/locale/es-CL/noscript/noscript.dtd b/chrome/noscript.jar!/locale/es-CL/noscript/noscript.dtd
index dd359fc..41316aa 100644
--- a/chrome/noscript.jar!/locale/es-CL/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/es-CL/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Options…">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "Opciones de NoScript">
-<!ENTITY noscriptAbout "About NoScript 2.6.9.23rc2…">
+<!ENTITY noscriptAbout "About NoScript 2.6.9.23rc3…">
 <!ENTITY noscriptPermissionsText "You can specify which web sites are allowed to execute scripts. Type the address or the domain (e.g. "http://www.site.com" or "site.com") of the site you want to allow and then click Allow.">
 <!ENTITY noscriptWebAddress "Address of web site:">
 <!ENTITY noscriptAllow "Allow">
diff --git a/chrome/noscript.jar!/locale/es-ES/noscript/noscript.dtd b/chrome/noscript.jar!/locale/es-ES/noscript/noscript.dtd
index 60a931a..0d438ce 100644
--- a/chrome/noscript.jar!/locale/es-ES/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/es-ES/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Opciones…">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "Configuración de NoScript">
-<!ENTITY noscriptAbout "Acerca de NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "Acerca de NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Aquí puede especificar las páginas web a las que va a permitir ejecutar código JavaScript. Escriba la dirección de la web que quiera incluir (ej. "http://www.paginaweb.com" o "paginaweb.com") y después pulse "Permitir".">
 <!ENTITY noscriptWebAddress "Dirección de la página web:">
 <!ENTITY noscriptAllow "Permitir">
diff --git a/chrome/noscript.jar!/locale/et-EE/noscript/noscript.dtd b/chrome/noscript.jar!/locale/et-EE/noscript/noscript.dtd
index efbd4fc..64d898a 100644
--- a/chrome/noscript.jar!/locale/et-EE/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/et-EE/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Sätted…">
 <!ENTITY noscriptOptions.accesskey "S">
 <!ENTITY noscriptOptionsLong "NoScripti sätted">
-<!ENTITY noscriptAbout "Täpsemalt lisast NoScript 2.6.9.23rc2…">
+<!ENTITY noscriptAbout "Täpsemalt lisast NoScript 2.6.9.23rc3…">
 <!ENTITY noscriptPermissionsText "Sa saad määrata, millistel veebilehtedel lubatakse skripte käivitada. Kirjuta veebilehe aadress või domeeni, mida soovid lubada (nt "http://www.site.com" või "site.com") ja klõpsa Luba nuppu">
 <!ENTITY noscriptWebAddress "Veebilehe aadress:">
 <!ENTITY noscriptAllow "Luba">
diff --git a/chrome/noscript.jar!/locale/eu/noscript/noscript.dtd b/chrome/noscript.jar!/locale/eu/noscript/noscript.dtd
index b8c2ce7..a80988a 100644
--- a/chrome/noscript.jar!/locale/eu/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/eu/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Aukerak:">
 <!ENTITY noscriptOptions.accesskey "A">
 <!ENTITY noscriptOptionsLong "NoScript aukerak">
-<!ENTITY noscriptAbout "NoScript 2.6.9.23rc2-eri buruz:">
+<!ENTITY noscriptAbout "NoScript 2.6.9.23rc3-eri buruz:">
 <!ENTITY noscriptPermissionsText "Zein webgunek script-ak exekuta ditzakeen zehaztu dezakezu. Idatzi script-ak erabiltzea onartzea nahi duzun domeinuaren izena (adib. "http://www.gunea.org" or "gunea.org") eta Onartu sakatu.">
 <!ENTITY noscriptWebAddress "Webgunearen helbidea:">
 <!ENTITY noscriptAllow "Onartu">
diff --git a/chrome/noscript.jar!/locale/fa-IR/noscript/noscript.dtd b/chrome/noscript.jar!/locale/fa-IR/noscript/noscript.dtd
index 304772e..579a558 100644
--- a/chrome/noscript.jar!/locale/fa-IR/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/fa-IR/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "تنظیمات...">
 <!ENTITY noscriptOptions.accesskey "ت">
 <!ENTITY noscriptOptionsLong "تنظیمات NoScript">
-<!ENTITY noscriptAbout "درباره NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "درباره NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "شما می توانید سایت هایی را که اجازه اجرای اسکریپت دارند را مشخص کنید.آدرس سایت یا نام دامنه را وارد کنید.(به عنوان مثال "http://www.site.com" یا "site.com")">
 <!ENTITY noscriptWebAddress "آدرس وب سایت :">
 <!ENTITY noscriptAllow "اجازه دادن">
diff --git a/chrome/noscript.jar!/locale/fi/noscript/noscript.dtd b/chrome/noscript.jar!/locale/fi/noscript/noscript.dtd
index 03abcec..6fe4dc3 100644
--- a/chrome/noscript.jar!/locale/fi/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/fi/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Asetukset…">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "NoScript asetukset">
-<!ENTITY noscriptAbout "Tietoja NoScript 2.6.9.23rc2istä…">
+<!ENTITY noscriptAbout "Tietoja NoScript 2.6.9.23rc3istä…">
 <!ENTITY noscriptPermissionsText "Voit määrittää verkkosivut joiden sallitaan suorittaa scriptejä. Kirjoita verkko-osoite tai verkkonimi (esim. "http://www.site.com" tai "site.com") jonka haluat sallia ja paina Salli.">
 <!ENTITY noscriptWebAddress "Verkkosivun osoite:">
 <!ENTITY noscriptAllow "Salli">
diff --git a/chrome/noscript.jar!/locale/fr/noscript/noscript.dtd b/chrome/noscript.jar!/locale/fr/noscript/noscript.dtd
index 38dd0a4..fa4b668 100644
--- a/chrome/noscript.jar!/locale/fr/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/fr/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Options">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "Options de NoScript">
-<!ENTITY noscriptAbout "À propos de NoScript 2.6.9.23rc2…">
+<!ENTITY noscriptAbout "À propos de NoScript 2.6.9.23rc3…">
 <!ENTITY noscriptPermissionsText "Il est possible de spécifier quels sites Web sont autorisés à exécuter des scripts. Saisissez l'adresse exacte du site que vous désirez autoriser puis cliquez sur Autoriser.">
 <!ENTITY noscriptWebAddress "Adresse du site Web :">
 <!ENTITY noscriptAllow "Autoriser">
diff --git a/chrome/noscript.jar!/locale/gl-ES/noscript/noscript.dtd b/chrome/noscript.jar!/locale/gl-ES/noscript/noscript.dtd
index 9ba8202..0ac1058 100644
--- a/chrome/noscript.jar!/locale/gl-ES/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/gl-ES/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Opcións...">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "Opcións de NoScript">
-<!ENTITY noscriptAbout "Acerca de NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "Acerca de NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Podes especificar que páxinas web poden executar scripts. Teclea o enderezo ou o dominio (por exemplo "http://www.paxina.com" ou "paxina.com") do sitio que queres autorizar e despois preme en "Permitir".">
 <!ENTITY noscriptWebAddress "Enderezo web:">
 <!ENTITY noscriptAllow "Permitir">
diff --git a/chrome/noscript.jar!/locale/he-IL/noscript/noscript.dtd b/chrome/noscript.jar!/locale/he-IL/noscript/noscript.dtd
index 9024ecd..0b4b1ff 100644
--- a/chrome/noscript.jar!/locale/he-IL/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/he-IL/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "הגדרות...">
 <!ENTITY noscriptOptions.accesskey "">
 <!ENTITY noscriptOptionsLong "NoScript הגדרות של">
-<!ENTITY noscriptAbout "אודות NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "אודות NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "ציין אילו אתרים יכולים לקבל היתר להפעלת קבצי Script. הקלד את כתובת האתר או את שם התחום (כגון: "http://www.site.com" או "site.com") ולאחר מכן לחץ על התר.">
 <!ENTITY noscriptWebAddress "כתובת/תחום:">
 <!ENTITY noscriptAllow "התר">
diff --git a/chrome/noscript.jar!/locale/hr-HR/noscript/noscript.dtd b/chrome/noscript.jar!/locale/hr-HR/noscript/noscript.dtd
index e2847b4..43a94cb 100644
--- a/chrome/noscript.jar!/locale/hr-HR/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/hr-HR/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Opcije...">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "NoScript Opcije">
-<!ENTITY noscriptAbout "O NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "O NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Možete odrediti koje web stranice imaju dopuštenje za izvođenje skripti. Upišite adresu ili domenu (npr. "http://www.stranica.hr" ili "stranica.hr") stranice kojoj želite dopustiti i kliknite na Dopusti.">
 <!ENTITY noscriptWebAddress "Adresa web stranice:">
 <!ENTITY noscriptAllow "Dopusti">
diff --git a/chrome/noscript.jar!/locale/hsb/noscript/noscript.dtd b/chrome/noscript.jar!/locale/hsb/noscript/noscript.dtd
index 54ff5eb..fee23d6 100644
--- a/chrome/noscript.jar!/locale/hsb/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/hsb/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Opcije…">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "Opcije NoScript">
-<!ENTITY noscriptAbout "Wo NoScript 2.6.9.23rc2…">
+<!ENTITY noscriptAbout "Wo NoScript 2.6.9.23rc3…">
 <!ENTITY noscriptPermissionsText "Móžeće podać, kotre websydła smědźa skripty wuwjesć. Zapisajće adresu abo domenu  (na př. "http://www.site.com" abo "site.com") websydła, kotremuž chceće to dowolić a klikńće potom na "Dowolić".">
 <!ENTITY noscriptWebAddress "Adresa websydła:">
 <!ENTITY noscriptAllow "Dowolić">
diff --git a/chrome/noscript.jar!/locale/hu-HU/noscript/noscript.dtd b/chrome/noscript.jar!/locale/hu-HU/noscript/noscript.dtd
index e3bab12..f1c4098 100644
--- a/chrome/noscript.jar!/locale/hu-HU/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/hu-HU/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Beállítások…">
 <!ENTITY noscriptOptions.accesskey "B">
 <!ENTITY noscriptOptionsLong "A NoScript beállításai">
-<!ENTITY noscriptAbout "A NoScript 2.6.9.23rc2 névjegye">
+<!ENTITY noscriptAbout "A NoScript 2.6.9.23rc3 névjegye">
 <!ENTITY noscriptPermissionsText "Megadhatja, hogy mely webhelyek számára engedélyezi a parancsfájlok futtatását. Írja be az engedélyezni kívánt webhely címét vagy tartomány nevét (pl. "http://www.webhely.hu" vagy "webhely.hu"), majd kattintson az Engedélyezés gombra.">
 <!ENTITY noscriptWebAddress "A webhely címe:">
 <!ENTITY noscriptAllow "Engedélyezés">
diff --git a/chrome/noscript.jar!/locale/id-ID/noscript/noscript.dtd b/chrome/noscript.jar!/locale/id-ID/noscript/noscript.dtd
index 92956d8..52877a5 100644
--- a/chrome/noscript.jar!/locale/id-ID/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/id-ID/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Pilihan...">
 <!ENTITY noscriptOptions.accesskey "P">
 <!ENTITY noscriptOptionsLong "Pilihan NoScript">
-<!ENTITY noscriptAbout "Tentang NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "Tentang NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Anda dapat menentukan situs web mana yang diijinkan menjalankan naskah. Masukkan alamat atau domain (contoh: "http://www.site.com" atau "site.com") yang akan diberi ijin kemudian klik Ijinkan.">
 <!ENTITY noscriptWebAddress "Alamat situs web:">
 <!ENTITY noscriptAllow "Ijinkan">
diff --git a/chrome/noscript.jar!/locale/it/noscript/noscript.dtd b/chrome/noscript.jar!/locale/it/noscript/noscript.dtd
index d353659..48466f4 100644
--- a/chrome/noscript.jar!/locale/it/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/it/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Opzioni…">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "Opzioni NoScript">
-<!ENTITY noscriptAbout "Informazioni su NoScript 2.6.9.23rc2…">
+<!ENTITY noscriptAbout "Informazioni su NoScript 2.6.9.23rc3…">
 <!ENTITY noscriptPermissionsText "Qui si possono indicare i siti per i quali l'esecuzione degli script è consentita. Digitare l'indirizzo o il dominio (es. "http://www.sito.com" oppure "sito.com")  e fare clic su Permetti.">
 <!ENTITY noscriptWebAddress "Indirizzo del sito:">
 <!ENTITY noscriptAllow "Permetti">
diff --git a/chrome/noscript.jar!/locale/ja-JP/noscript/noscript.dtd b/chrome/noscript.jar!/locale/ja-JP/noscript/noscript.dtd
index 2909cfb..a7fffeb 100644
--- a/chrome/noscript.jar!/locale/ja-JP/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/ja-JP/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "オプション...">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "NoScript オプション">
-<!ENTITY noscriptAbout "NoScript 2.6.9.23rc2について...">
+<!ENTITY noscriptAbout "NoScript 2.6.9.23rc3について...">
 <!ENTITY noscriptPermissionsText "JavaScriptを許可するサイトを指定する事ができます。許可したいサイトのアドレスかドメインを入力して、ボタンを押してください。(例: "http://www.site.com" または "site.com")">
 <!ENTITY noscriptWebAddress "ウェブサイトのアドレス:">
 <!ENTITY noscriptAllow "許可する">
diff --git a/chrome/noscript.jar!/locale/kk-KZ/noscript/noscript.dtd b/chrome/noscript.jar!/locale/kk-KZ/noscript/noscript.dtd
index 1c68f35..38085ae 100644
--- a/chrome/noscript.jar!/locale/kk-KZ/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/kk-KZ/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Баптаулары">
 <!ENTITY noscriptOptions.accesskey "Б">
 <!ENTITY noscriptOptionsLong "NoScript баптаулары">
-<!ENTITY noscriptAbout "NoScript 2.6.9.23rc2 туралы...">
+<!ENTITY noscriptAbout "NoScript 2.6.9.23rc3 туралы...">
 <!ENTITY noscriptPermissionsText "Қай сайттарға JavaScript орындауға рұқсат екенін көрсете аласыз. Рұқсат етілетін сайттың домен адресін енгізіңіз (мысалы, "http://www.site.com" немесе "site.com"), содан кейін Рұқсат ету басыңыз.">
 <!ENTITY noscriptWebAddress "Веб-сайт адресі:">
 <!ENTITY noscriptAllow "Рұқсат ету">
diff --git a/chrome/noscript.jar!/locale/km-KH/noscript/noscript.dtd b/chrome/noscript.jar!/locale/km-KH/noscript/noscript.dtd
index 00bc49c..5c7586e 100644
--- a/chrome/noscript.jar!/locale/km-KH/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/km-KH/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Options...">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "NoScript Options">
-<!ENTITY noscriptAbout "About NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "About NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "You can specify which web sites are allowed to execute scripts. Type the address or the domain (e.g. "http://www.site.com" or "site.com") of the site you want to allow and then click Allow.">
 <!ENTITY noscriptWebAddress "Address of web site:">
 <!ENTITY noscriptAllow "Allow">
diff --git a/chrome/noscript.jar!/locale/ko-KR/noscript/noscript.dtd b/chrome/noscript.jar!/locale/ko-KR/noscript/noscript.dtd
index 8ec9b93..03243fe 100644
--- a/chrome/noscript.jar!/locale/ko-KR/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/ko-KR/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "옵션...">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "NoScript 옵션">
-<!ENTITY noscriptAbout "NoScript 2.6.9.23rc2 정보...">
+<!ENTITY noscriptAbout "NoScript 2.6.9.23rc3 정보...">
 <!ENTITY noscriptPermissionsText "스크립트 실행을 허용할 웹 사이트를 지정할 수 있습니다. 스크립트를 허용할 사이트의 주소나 도메인 (예를 들면, "http://www.site.com" 또는 "site.com")을 입력한 후 [허용] 버튼을 클릭합니다.">
 <!ENTITY noscriptWebAddress "웹 사이트 주소">
 <!ENTITY noscriptAllow "허용">
diff --git a/chrome/noscript.jar!/locale/lt/noscript/noscript.dtd b/chrome/noscript.jar!/locale/lt/noscript/noscript.dtd
index 4235037..56fe2e7 100644
--- a/chrome/noscript.jar!/locale/lt/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/lt/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Nuostatos...">
 <!ENTITY noscriptOptions.accesskey "N">
 <!ENTITY noscriptOptionsLong "NoScript nuostatos">
-<!ENTITY noscriptAbout "Apie NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "Apie NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Jūs galite nurodyti, kurioms interneto svetainėms suteikiamas leidimas vykdyti programinius kodus. Įveskite adresą arba domeną (pvz., "http://www.svetaine.lt" arba "svetaine.lt") svetainės, kuriai norite suteikti leidimą ir spauskite Leisti.">
 <!ENTITY noscriptWebAddress "Interneto svetainės adresas:">
 <!ENTITY noscriptAllow "Leisti">
diff --git a/chrome/noscript.jar!/locale/mk-MK/noscript/noscript.dtd b/chrome/noscript.jar!/locale/mk-MK/noscript/noscript.dtd
index 4457cb7..52e7cf4 100644
--- a/chrome/noscript.jar!/locale/mk-MK/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/mk-MK/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Опции...">
 <!ENTITY noscriptOptions.accesskey "О">
 <!ENTITY noscriptOptionsLong "NoScript Опции">
-<!ENTITY noscriptAbout "За NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "За NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Можете да ги назначите страните, на кои што скриптите ќе бидат дозволени. Напишете ја дозволената адреса (на пример http://www.site.com или site.com) и кликнете „Дозволи“">
 <!ENTITY noscriptWebAddress "Адреса на дозволената веб страна:">
 <!ENTITY noscriptAllow "Дозволи">
diff --git a/chrome/noscript.jar!/locale/ms-MY/noscript/noscript.dtd b/chrome/noscript.jar!/locale/ms-MY/noscript/noscript.dtd
index 17ab6d0..0d17055 100644
--- a/chrome/noscript.jar!/locale/ms-MY/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/ms-MY/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Tetapan...">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "Tetapan NoScript">
-<!ENTITY noscriptAbout "Tentang NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "Tentang NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Anda boleh menentukan laman web yang anda benarkan skripnya diproses. Taipkan alamat atau domain(contoh:"http://www.tapak.com" atau "tapak.com") laman web yang diingini dan klik Benarkan">
 <!ENTITY noscriptWebAddress "Alamat laman web:">
 <!ENTITY noscriptAllow "Benarkan">
diff --git a/chrome/noscript.jar!/locale/nb-NO/noscript/noscript.dtd b/chrome/noscript.jar!/locale/nb-NO/noscript/noscript.dtd
index d20f678..08495ee 100644
--- a/chrome/noscript.jar!/locale/nb-NO/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/nb-NO/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Innstillinger">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "NoScript Innstillinger">
-<!ENTITY noscriptAbout "Om NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "Om NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Du kan spesifisere hvilke websider som har tillatelse til å kjøre scritper. Skriv inn adresse, eller domene (F.eks: "http://www.side.no", eller &quotside.no") du ønsker å gi tillatelse til, og klikk Tillat.">
 <!ENTITY noscriptWebAddress "Webadresse:">
 <!ENTITY noscriptAllow "Tillat">
diff --git a/chrome/noscript.jar!/locale/nl/noscript/noscript.dtd b/chrome/noscript.jar!/locale/nl/noscript/noscript.dtd
index 63f0729..e7e554a 100644
--- a/chrome/noscript.jar!/locale/nl/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/nl/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Opties...">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "NoScript opties">
-<!ENTITY noscriptAbout "Over NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "Over NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Webadressen in deze lijst hebben toestemming om JavaScript te gebruiken. Type het adres of domein in (bijv. "http://www.site.com" of "site.com") van de door u toegestane site; klik daarna op Toestaan.">
 <!ENTITY noscriptWebAddress "Webadres:">
 <!ENTITY noscriptAllow "Toestaan">
diff --git a/chrome/noscript.jar!/locale/pl/noscript/noscript.dtd b/chrome/noscript.jar!/locale/pl/noscript/noscript.dtd
index a4d6735..fec4e26 100644
--- a/chrome/noscript.jar!/locale/pl/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/pl/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Ustawienia">
 <!ENTITY noscriptOptions.accesskey "U">
 <!ENTITY noscriptOptionsLong "NoScript – ustawienia">
-<!ENTITY noscriptAbout "NoScript 2.6.9.23rc2 – informacje">
+<!ENTITY noscriptAbout "NoScript 2.6.9.23rc3 – informacje">
 <!ENTITY noscriptPermissionsText "Tutaj można określić witryny internetowe, które będą mogły uruchamiać skrypty. Proszę wprowadzić adres lub domenę witryny (np: „http://www.witryna.pl” lub „witryna.pl”) i nacisnąć przycisk Pozwól.">
 <!ENTITY noscriptWebAddress "Adres witryny:">
 <!ENTITY noscriptAllow "Pozwól">
diff --git a/chrome/noscript.jar!/locale/pt-BR/noscript/noscript.dtd b/chrome/noscript.jar!/locale/pt-BR/noscript/noscript.dtd
index 4ff995c..002cdaf 100644
--- a/chrome/noscript.jar!/locale/pt-BR/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/pt-BR/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Opções">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "Opções do NoScript">
-<!ENTITY noscriptAbout "Sobre o NoScript 2.6.9.23rc2…">
+<!ENTITY noscriptAbout "Sobre o NoScript 2.6.9.23rc3…">
 <!ENTITY noscriptPermissionsText "Você pode especificar os sites que podem executar JavaScripts. Escreva o endereço ou o domínio (ex "http://www.site.com" ou "site.com") do site que deseja permitir e depois clique em Permitir.">
 <!ENTITY noscriptWebAddress "Endereço:">
 <!ENTITY noscriptAllow "Permitir">
diff --git a/chrome/noscript.jar!/locale/pt-PT/noscript/noscript.dtd b/chrome/noscript.jar!/locale/pt-PT/noscript/noscript.dtd
index 9b08ac9..39c3690 100644
--- a/chrome/noscript.jar!/locale/pt-PT/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/pt-PT/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Opções">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "Opções do NoScript">
-<!ENTITY noscriptAbout "Sobre o NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "Sobre o NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Pode especificar os sítios que podem executar scripts. Escreva o endereço ou o domínio (ex: "http://www.sitio.com" ou "sitio.com") do sítio que deseja permitir e depois pressione em Permitir.">
 <!ENTITY noscriptWebAddress "Endereço:">
 <!ENTITY noscriptAllow "Permitir">
diff --git a/chrome/noscript.jar!/locale/ro/noscript/noscript.dtd b/chrome/noscript.jar!/locale/ro/noscript/noscript.dtd
index cbb2d07..0e3f593 100644
--- a/chrome/noscript.jar!/locale/ro/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/ro/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Opțiuni...">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "Opțiuni NoScript">
-<!ENTITY noscriptAbout "Despre NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "Despre NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Puteți specifica saiturile cărora li se permite să execute scripturi. Scrieți adresa sau domeniul paginii (exemplu: „http://www.sait.ro“ sau „sait.ro“), apoi apăsați pe butonul „Permite“.">
 <!ENTITY noscriptWebAddress "Adresă sait:">
 <!ENTITY noscriptAllow "Permite">
diff --git a/chrome/noscript.jar!/locale/sk-SK/noscript/noscript.dtd b/chrome/noscript.jar!/locale/sk-SK/noscript/noscript.dtd
index fc99326..ea20f3e 100644
--- a/chrome/noscript.jar!/locale/sk-SK/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/sk-SK/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Možnosti...">
 <!ENTITY noscriptOptions.accesskey "M">
 <!ENTITY noscriptOptionsLong "NoScript – Možnosti">
-<!ENTITY noscriptAbout "O rozšírení NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "O rozšírení NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Môžete určiť, ktoré webové stránky majú povolené spúšťať JavaScript. Zadajte adresu alebo doménu (napríklad "http://www.site.com" alebo "site.com") stránky, ktorú chcete povoliť, a potom kliknite na tlačidlo Povoliť.">
 <!ENTITY noscriptWebAddress "Adresa webovej stránky:">
 <!ENTITY noscriptAllow "Povoliť">
diff --git a/chrome/noscript.jar!/locale/sl-SI/noscript/noscript.dtd b/chrome/noscript.jar!/locale/sl-SI/noscript/noscript.dtd
index 5d46d27..891094e 100644
--- a/chrome/noscript.jar!/locale/sl-SI/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/sl-SI/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Možnosti...">
 <!ENTITY noscriptOptions.accesskey "M">
 <!ENTITY noscriptOptionsLong "NoScript Možnosti">
-<!ENTITY noscriptAbout "O NoScript 2.6.9.23rc2 programu...">
+<!ENTITY noscriptAbout "O NoScript 2.6.9.23rc3 programu...">
 <!ENTITY noscriptPermissionsText "Določite lahko na katerih straneh bo izvajanje skript dovoljeno. Vnesite naslov ali domeno (pr. "http://www.domena.com" or "domena.com") strani, na kateri želite omogočiti izvajanje skript in kliknite Dovoli.">
 <!ENTITY noscriptWebAddress "Naslov strani:">
 <!ENTITY noscriptAllow "Dovoli">
diff --git a/chrome/noscript.jar!/locale/sr-RS/noscript/noscript.dtd b/chrome/noscript.jar!/locale/sr-RS/noscript/noscript.dtd
index a48e030..76d7bf1 100644
--- a/chrome/noscript.jar!/locale/sr-RS/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/sr-RS/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Подешавања...">
 <!ENTITY noscriptOptions.accesskey "П">
 <!ENTITY noscriptOptionsLong "NoScript подешавања">
-<!ENTITY noscriptAbout "О NoScript 2.6.9.23rc2-у">
+<!ENTITY noscriptAbout "О NoScript 2.6.9.23rc3-у">
 <!ENTITY noscriptPermissionsText "Можете да наведете којим веб странама је дозвољено да извршавају скриптове. Унесите адресу или домен (нпр. "http://www.site.com" или "site.com") стране којој желите да дате дозволу и онда кликните Дозволи.">
 <!ENTITY noscriptWebAddress "Адреса веб стране:">
 <!ENTITY noscriptAllow "Дозволи">
diff --git a/chrome/noscript.jar!/locale/sv-SE/noscript/noscript.dtd b/chrome/noscript.jar!/locale/sv-SE/noscript/noscript.dtd
index ddebe12..c8a2cbe 100644
--- a/chrome/noscript.jar!/locale/sv-SE/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/sv-SE/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Alternativ...">
 <!ENTITY noscriptOptions.accesskey "A">
 <!ENTITY noscriptOptionsLong "NoScript-alternativ">
-<!ENTITY noscriptAbout "Om NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "Om NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Ange vilka webbplatser som får köra skript. Skriv webbadressen eller domänen (t ex. "http://www.webbplats.se" eller "webbplats.se") för den webbplats där skript ska tillåtas. Klicka sedan på "Tillåt".">
 <!ENTITY noscriptWebAddress "Sidans adress:">
 <!ENTITY noscriptAllow "Tillåt">
diff --git a/chrome/noscript.jar!/locale/te-IN/noscript/noscript.dtd b/chrome/noscript.jar!/locale/te-IN/noscript/noscript.dtd
index d71b670..ad3652c 100644
--- a/chrome/noscript.jar!/locale/te-IN/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/te-IN/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Options…">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "NoScript Options">
-<!ENTITY noscriptAbout "About NoScript 2.6.9.23rc2…">
+<!ENTITY noscriptAbout "About NoScript 2.6.9.23rc3…">
 <!ENTITY noscriptPermissionsText "You can specify which web sites are allowed to execute scripts. Type the address or the domain (e.g. "http://www.site.com" or "site.com") of the site you want to allow and then click Allow.">
 <!ENTITY noscriptWebAddress "Address of web site:">
 <!ENTITY noscriptAllow "Allow">
diff --git a/chrome/noscript.jar!/locale/th/noscript/noscript.dtd b/chrome/noscript.jar!/locale/th/noscript/noscript.dtd
index a6632b7..bf885c3 100644
--- a/chrome/noscript.jar!/locale/th/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/th/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "ตัวเลือก...">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "ตัวเลือก NoScript">
-<!ENTITY noscriptAbout "เกี่ยวกับ NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "เกี่ยวกับ NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "คุณสามารถกำหนดเว็บไซต์ที่จะอนุญาตดำเนินการสคริปต์ พิมพ์ที่อยู่หรือโดเมน (เช่น "http://www.site.com" หรือ "site.com") ของไซต์ที่คุณต้องการอนุญาตและคลิกอนุญาต">
 <!ENTITY noscriptWebAddress "ที่อยู่เว็บไซต์:">
 <!ENTITY noscriptAllow "อนุญาต">
diff --git a/chrome/noscript.jar!/locale/tr/noscript/noscript.dtd b/chrome/noscript.jar!/locale/tr/noscript/noscript.dtd
index ee74f38..34d1ee0 100644
--- a/chrome/noscript.jar!/locale/tr/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/tr/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Seçenekler">
 <!ENTITY noscriptOptions.accesskey "S">
 <!ENTITY noscriptOptionsLong "NoScript Seçenekleri">
-<!ENTITY noscriptAbout "NoScript 2.6.9.23rc2 Hakkında">
+<!ENTITY noscriptAbout "NoScript 2.6.9.23rc3 Hakkında">
 <!ENTITY noscriptPermissionsText "Hangi web sayfalarında JavaScript'e izni vereceğinizi kolayca seçebilirsiniz. Lütfen adresi tam olarak girin ve 'İzin ver' düğmesine tıklayarak sayfanın JavaScript kullanmasına izin verin.">
 <!ENTITY noscriptWebAddress "Site adresi:">
 <!ENTITY noscriptAllow "İzin ver">
diff --git a/chrome/noscript.jar!/locale/vi/noscript/noscript.dtd b/chrome/noscript.jar!/locale/vi/noscript/noscript.dtd
index 847668d..65d04f7 100644
--- a/chrome/noscript.jar!/locale/vi/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/vi/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "Tùy chọn">
 <!ENTITY noscriptOptions.accesskey "y">
 <!ENTITY noscriptOptionsLong "Tùy chọn cho NoScript">
-<!ENTITY noscriptAbout "Thông tin về NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "Thông tin về NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "Bạn có thể chỉ định trang web nào được phép chạy script. Gõ địa chỉ hay tên miền (v.d. "http://www.nhaccodien.com" hay "nhaccodien.com") của trang mà bạn muốn cho phép, rồi nhấn Cho phép.">
 <!ENTITY noscriptWebAddress "Địa chỉ của trang web:">
 <!ENTITY noscriptAllow "Cho phép">
diff --git a/chrome/noscript.jar!/locale/zh-CN/noscript/noscript.dtd b/chrome/noscript.jar!/locale/zh-CN/noscript/noscript.dtd
index 8a8201c..d2307c7 100644
--- a/chrome/noscript.jar!/locale/zh-CN/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/zh-CN/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "选项...">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "NoScript 选项">
-<!ENTITY noscriptAbout "关于 NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "关于 NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "您可以指定允许执行脚本的网站。请输入您想要允许的网站地址或域名(例如: “http://www.site.com”或者“site.com”)然后单击“允许”。">
 <!ENTITY noscriptWebAddress "网站地址:">
 <!ENTITY noscriptAllow "允许">
diff --git a/chrome/noscript.jar!/locale/zh-TW/noscript/noscript.dtd b/chrome/noscript.jar!/locale/zh-TW/noscript/noscript.dtd
index ba9c278..a82435e 100644
--- a/chrome/noscript.jar!/locale/zh-TW/noscript/noscript.dtd
+++ b/chrome/noscript.jar!/locale/zh-TW/noscript/noscript.dtd
@@ -1,7 +1,7 @@
 <!ENTITY noscriptOptions "選項…">
 <!ENTITY noscriptOptions.accesskey "O">
 <!ENTITY noscriptOptionsLong "NoScript 選項">
-<!ENTITY noscriptAbout "關於 NoScript 2.6.9.23rc2">
+<!ENTITY noscriptAbout "關於 NoScript 2.6.9.23rc3">
 <!ENTITY noscriptPermissionsText "您可以指定允許執行 JavaScript 的網站。輸入您要允許的網址或網域(例如 "http://www.site.com" 或 "site.com"),然後按下允許.">
 <!ENTITY noscriptWebAddress "網址:">
 <!ENTITY noscriptAllow "允許">
diff --git a/components/noscriptService.js b/components/noscriptService.js
index 2457e67..344eec4 100644
--- a/components/noscriptService.js
+++ b/components/noscriptService.js
@@ -5,7 +5,7 @@ const Cc = Components.classes;
 const Cu = Components.utils;
 const Cr = Components.results;
 
-const VERSION = "2.6.9.23rc2";
+const VERSION = "2.6.9.23rc3";
 const SERVICE_CTRID = "@maone.net/noscript-service;1";
 const SERVICE_ID = "{31aec909-8e86-4397-9380-63a59e0c5ff5}";
 const EXTENSION_ID = "{73a6fe31-595d-460b-a920-fcc0f8843232}";
diff --git a/install.rdf b/install.rdf
index faad9dd..9def159 100644
--- a/install.rdf
+++ b/install.rdf
@@ -5,7 +5,7 @@
  
    <em:id>{73a6fe31-595d-460b-a920-fcc0f8843232}</em:id>
    <em:name>NoScript</em:name>
-   <em:version>2.6.9.23rc2</em:version>
+   <em:version>2.6.9.23rc3</em:version>
    <em:description>Extra protection for your Firefox: NoScript allows JavaScript, Java (and other plugins) only for trusted domains of your choice (e.g. your home-banking web site). This whitelist based pre-emptive blocking approach  prevents exploitation of security vulnerabilities (known and even unknown!) with no loss of functionality... Experts will agree: Firefox is really safer with NoScript :-)</em:description>
    <em:creator>Giorgio Maone</em:creator>
    <em:type>2</em:type>

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/noscript.git



More information about the Pkg-mozext-commits mailing list