home *** CD-ROM | disk | FTP | other *** search
/ Minami 81 / MINAMI81.ISO / Extra / DivXInstaller.exe / $PLUGINSDIR / GoogleToolbarFirefox.msi / xpi / amulet-jslib / trtable.js < prev    next >
Text File  |  2006-05-15  |  4KB  |  121 lines

  1. function PROT_TRTable(name) {
  2. this.debugZone = "trtable";
  3. this.enchashDecrypter_ = new PROT_EnchashDecrypter();
  4. var components = name.split("-");
  5. if (components.length != 3)
  6. throw new Error("TRTables have names like name-function-type");
  7. var handlerTable = {
  8. "domain" : this.lookupDomain_,
  9. "enchash" : this.lookupEnchash_,
  10. "url" : this.lookupURL_,
  11. "text" : this.lookupText_
  12. };
  13. this.find = handlerTable[components[2]];
  14. if (!this.find)
  15. throw new Error("Unknown table type: " + components[2]);
  16. this.name_ = name;
  17. this.dbTable_ = Cc["@google.com/tableservice;1"]
  18. .getService(Ci.GTBITableService);
  19. }
  20. PROT_TRTable.prototype.find_ = function(key) {
  21. return this.dbTable_.exists(this.name_, key);
  22. }
  23. PROT_TRTable.prototype.insert = function(key, value) {
  24. return this.dbTable_.insert(this.name_, key, value);
  25. }
  26. PROT_TRTable.prototype.erase = function(key) {
  27. return this.dbTable_.remove(this.name_, key);
  28. }
  29. PROT_TRTable.prototype.lookupText_ = function(key) {
  30. G_Debug(this, "looking up " + key + " in " + this.name_);
  31. return this.find_(key);
  32. }
  33. PROT_TRTable.prototype.lookupURL_ = function(url) {
  34. var canonicalized = PROT_URLCanonicalizer.canonicalizeURL_(url);
  35. return this.find_(canonicalized);
  36. }
  37. PROT_TRTable.prototype.lookupDomain_ = function(url) {
  38. var canonicalized = PROT_URLCanonicalizer.canonicalizeURL_(url);
  39. var urlObj = Cc["@mozilla.org/network/standard-url;1"]
  40. .createInstance(Ci.nsIURL);
  41. urlObj.spec = canonicalized;
  42. var host = urlObj.host;
  43. var hostComponents = host.split(".");
  44. var path = urlObj.filePath;
  45. var pathComponents = path.split("/");
  46. for (var i = 0; i < hostComponents.length - 1; i++) {
  47. host = hostComponents.slice(i).join(".");
  48. var val = this.find_(host);
  49. if (val)
  50. return val;
  51. if (pathComponents.length >= 2 && pathComponents[1].length > 0) {
  52. host = host + "/" + pathComponents[1];
  53. var val = this.find_(host);
  54. if (val)
  55. return val;
  56. }
  57. }
  58. return undefined;
  59. }
  60. PROT_TRTable.prototype.lookupEnchash_ = function(url) {
  61. var host = this.enchashDecrypter_.getCanonicalHost(url);
  62. for (var i = 0; i < PROT_EnchashDecrypter.MAX_DOTS + 1; i++) {
  63. var key = this.enchashDecrypter_.getLookupKey(host);
  64. var encrypted = this.find_(key);
  65. if (encrypted && encrypted.length) {
  66. G_Debug(this, "Enchash DB has host " + host + " (key: " + key + ")");
  67. var decrypted = this.enchashDecrypter_.decryptData(encrypted, host);
  68. var res = this.enchashDecrypter_.parseRegExps(decrypted);
  69. for (var j = 0; j < res.length; j++) {
  70. if (res[j].test(url))
  71. return true;
  72. }
  73. }
  74. var index = host.indexOf(".");
  75. if (index == -1)
  76. break;
  77. host = host.substring(index + 1);
  78. }
  79. return undefined;
  80. }
  81. function TEST_PROT_TRTable() {
  82. if (G_GDEBUG) {
  83. var z = "trtable UNITTEST";
  84. G_debugService.enableZone(z);
  85. G_Debug(z, "Starting");
  86. var url = "http://www.yahoo.com?foo=bar";
  87. var url2 = "http://168.188.99.26/.secure/www.ebay.com/";
  88. var urlTable = new PROT_TRTable("test-foo-url");
  89. urlTable.insert(url, "1");
  90. urlTable.insert(url2, "1");
  91. G_Assert(z, urlTable.find(url) == "1", "URL lookups broken");
  92. G_Assert(z, urlTable.find(url2) == "1", "URL lookups broken");
  93. G_Assert(z, 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/")
  94. == "1", "Canonicalized URL lookup broken");
  95. G_Assert(z, !urlTable.find("about:config"), "about:config breaks domlook");
  96. var dom1 = "bar.com";
  97. var dom2 = "amazon.co.uk";
  98. var dom3 = "127.0.0.1";
  99. var domainTable = new PROT_TRTable("test-foo-domain");
  100. domainTable.insert(dom1, "1");
  101. domainTable.insert(dom2, "1");
  102. domainTable.insert(dom3, "1");
  103. G_Assert(z, domainTable.find("http://www.bar.com/?zaz=asdf#url") == "1",
  104. "Domain lookups broken (single dot)");
  105. G_Assert(z, domainTable.find("http://www.amazon.co.uk/?z=af#url") == "1",
  106. "Domain lookups broken (two dots)");
  107. G_Assert(z, domainTable.find("http://127.0.0.1/?z=af#url") == "1",
  108. "Domain lookups broken (IP)");
  109. G_Assert(z, domainTable.find("http://%31%32%37%2e%30%2e%30%2e%31/?z=af#url") == "1",
  110. "Canonicalized domain lookups broken (IP)");
  111. domainTable.insert("foo.com/path", "1");
  112. G_Assert(z, !domainTable.find("http://www.foo.com/?zaz=asdf#url"),
  113. "Domain lookups broken (path mismatch)");
  114. G_Assert(z, domainTable.find("http://www.foo.com/path?zaz=asdf#url") == "1",
  115. "Domain lookups broken (path match)");
  116. G_Assert(z, domainTable.find("http://www.foo.com/path/more?zaz=asdf#url") == "1",
  117. "Domain lookups broken (long path match)");
  118. G_Debug(z, "PASSED");
  119. }
  120. }
  121.