[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 "side.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