home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Minami 83
/
MINAMI83.iso
/
Extra
/
DivXInstaller.exe
/
$PLUGINSDIR
/
GoogleToolbarFirefox.msi
/
xpi
/
amulet-jslib
/
trtable.js
< prev
next >
Wrap
Text File
|
2006-08-07
|
5KB
|
138 lines
function PROT_TRTable(name) {
this.debugZone = "trtable";
this.enchashDecrypter_ = new PROT_EnchashDecrypter();
var components = name.split("-");
if (components.length != 3)
throw new Error("TRTables have names like name-function-type");
var handlerTable = {
"domain" : this.lookupDomain_,
"enchash" : this.lookupEnchash_,
"url" : this.lookupURL_,
"text" : this.lookupText_
};
this.find = handlerTable[components[2]];
if (!this.find)
throw new Error("Unknown table type: " + components[2]);
this.name_ = name;
}
PROT_TRTable.prototype.find_ = function(key, callback) {
var dbservice_ = Cc["@google.com/dbupdateservice;1"]
.getService(Ci.GTBIDbUpdateService);
dbservice_.exists(this.name_, key, callback);
}
PROT_TRTable.prototype.lookupText_ = function(key, callback) {
G_Debug(this, "looking up " + key + " in " + this.name_);
this.find_(key, callback);
}
PROT_TRTable.prototype.lookupURL_ = function(url, callback) {
var canonicalized = PROT_URLCanonicalizer.canonicalizeURL_(url);
this.find_(canonicalized, callback);
}
PROT_TRTable.prototype.lookupDomain_ = function(url, callback) {
var ioService = Cc["@mozilla.org/network/io-service;1"]
.getService(Ci.nsIIOService);
var canonicalized = PROT_URLCanonicalizer.canonicalizeURL_(url);
var urlObj = ioService.newURI(canonicalized, null, null);
var host = '';
try {
host = urlObj.host;
} catch (e) { }
var hostComponents = host.split(".");
var path = ""
try {
urlObj.QueryInterface(Ci.nsIURL);
path = urlObj.filePath;
} catch (e) { }
var pathComponents = path.split("/");
var possible = [];
for (var i = 0; i < hostComponents.length - 1; i++) {
host = hostComponents.slice(i).join(".");
possible.push(host);
if (pathComponents.length >= 2 && pathComponents[1].length > 0) {
host = host + "/" + pathComponents[1];
possible.push(host);
}
}
(new PROT_ExistsMultiQuerier(possible, this.name_, callback)).run();
}
PROT_TRTable.prototype.lookupEnchash_ = function(url, callback) {
var host = this.enchashDecrypter_.getCanonicalHost(url);
var possible = [];
for (var i = 0; i < PROT_EnchashDecrypter.MAX_DOTS + 1; i++) {
possible.push(host);
var index = host.indexOf(".");
if (index == -1)
break;
host = host.substring(index + 1);
}
(new PROT_EnchashMultiQuerier(possible, this.name_, callback, url)).run();
}
function TEST_PROT_TRTable() {
if (G_GDEBUG) {
var z = "trtable UNITTEST";
G_debugService.enableZone(z);
G_Debug(z, "Starting");
var dbservice = Cc["@google.com/dbupdateservice;1"]
.getService(Ci.GTBIDbUpdateService);
var url = "http://www.yahoo.com?foo=bar";
var url2 = "http://168.188.99.26/.secure/www.ebay.com/";
var data =
"[test-foo-url 1.1]\n" +
"+" + url + "\t1\n" +
"+" + url2 + "\t1\n" +
"\n[test-foo-domain 1.1]\n" +
"+bar.com\t1\n" +
"+amazon.co.uk\tc\n" +
"+127.0.0.1\t1\n" +
"+foo.com/path\t1\n";
function createTrueCallback(msg) {
return function(s) {
if (!s) {
G_Error(z, msg + " (" + s + ")");
}
}
}
function createFalseCallback(msg) {
return function(s) {
if (s) {
G_Error(z, msg + " (" + s + ")");
}
}
}
function checkTables(version) {
if (version == "[test-foo-url 1.1]") {
G_Debug(z, "got first table callback");
} else if (version == "[test-foo-domain 1.1]") {
G_Debug(z, "checking first table");
var urlTable = new PROT_TRTable("test-foo-url");
urlTable.find(url, createTrueCallback("URL lookups broken"));
urlTable.find(url2, createTrueCallback("URL lookups broken"));
urlTable.find("http://%31%36%38%2e%31%38%38%2e%39%39%2e%32%36/%2E%73%65%63%75%72%65/%77%77%77%2E%65%62%61%79%2E%63%6F%6D/",
createTrueCallback("Canonicalized URL lookups broken"));
urlTable.find("about:config",
createFalseCallback("shouldn't find about:config"));
G_Debug(z, "checking second table");
var domainTable = new PROT_TRTable("test-foo-domain");
domainTable.find("http://www.bar.com/?zaz=asdf#url",
createTrueCallback("Domain lookups broken (single dot)"));
domainTable.find("http://www.amazon.co.uk/?z=af#url",
createTrueCallback("Domain lookups broken (two dots)"));
domainTable.find("http://127.0.0.1/?z=af#url",
createTrueCallback("Domain lookups broken (IP)"));
domainTable.find("http://%31%32%37%2e%30%2e%30%2e%31/?z=af#url",
createTrueCallback("Canonicalized domain lookups broken"));
domainTable.find("http://www.foo.com/?zaz=asdf#url",
createFalseCallback("Domain lookups broken (path mismatch)"));
domainTable.find("http://www.foo.com/path?zaz=asdf#url",
createTrueCallback("Domain lookups broken (path mismatch)"));
domainTable.find("http://www.foo.com/path/more?zaz=asdf#url",
createTrueCallback("Domain lookups broken (long path mismatch)"));
G_Debug(z, "PASSED");
} else {
G_Error(z, 'Unknown version string: ' + version);
}
}
dbservice.updateTables(data, checkTables);
}
}