 Issue 6612283790721024:
  Issue 698 - Added tests for $sitekey option  (Closed)
    
  
    Issue 6612283790721024:
  Issue 698 - Added tests for $sitekey option  (Closed) 
  | Left: | ||
| Right: | 
| OLD | NEW | 
|---|---|
| 1 (function() | 1 (function() | 
| 2 { | 2 { | 
| 3 let server = null; | 3 let server = null; | 
| 4 let frame = null; | 4 let frame = null; | 
| 5 let requestNotifier = null; | 5 let requestNotifier = null; | 
| 6 let httpProtocol = null; | |
| 6 | 7 | 
| 7 module("Content policy", { | 8 module("Content policy", { | 
| 8 setup: function() | 9 setup: function() | 
| 9 { | 10 { | 
| 10 prepareFilterComponents.call(this); | 11 prepareFilterComponents.call(this); | 
| 11 preparePrefs.call(this); | 12 preparePrefs.call(this); | 
| 12 | 13 | 
| 13 server = new nsHttpServer(); | 14 server = new nsHttpServer(); | 
| 14 server.start(1234); | 15 server.start(1234); | 
| 15 | 16 | 
| 16 frame = document.createElement("iframe"); | 17 frame = document.createElement("iframe"); | 
| 17 frame.style.visibility = "collapse"; | 18 frame.style.visibility = "collapse"; | 
| 18 document.body.appendChild(frame); | 19 document.body.appendChild(frame); | 
| 19 | 20 | 
| 20 requestNotifier = new RequestNotifier(window, onPolicyHit); | 21 requestNotifier = new RequestNotifier(window, onPolicyHit); | 
| 22 | |
| 23 httpProtocol = Utils.httpProtocol; | |
| 24 Utils.httpProtocol = {userAgent: "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0"}; | |
| 21 }, | 25 }, | 
| 22 teardown: function() | 26 teardown: function() | 
| 23 { | 27 { | 
| 24 restoreFilterComponents.call(this); | 28 restoreFilterComponents.call(this); | 
| 25 restorePrefs.call(this); | 29 restorePrefs.call(this); | 
| 26 | 30 | 
| 27 stop(); | 31 stop(); | 
| 28 server.stop(function() | 32 server.stop(function() | 
| 29 { | 33 { | 
| 30 frame.parentElement.removeChild(frame); | 34 frame.parentElement.removeChild(frame); | 
| 31 requestNotifier.shutdown(); | 35 requestNotifier.shutdown(); | 
| 32 | 36 | 
| 33 server = null; | 37 server = null; | 
| 34 frame = null; | 38 frame = null; | 
| 35 requestNotifier = null; | 39 requestNotifier = null; | 
| 36 | 40 | 
| 37 start(); | 41 start(); | 
| 38 }); | 42 }); | 
| 43 | |
| 44 Utils.httpProtocol = httpProtocol; | |
| 39 } | 45 } | 
| 40 }); | 46 }); | 
| 41 | 47 | 
| 48 /* | |
| 49 -----BEGIN RSA PRIVATE KEY----- | |
| 50 MIIBOgIBAAJBANLNgMGCl6kc3QE/73/ESBsuhzCNQWApqWS1nKVWf+RjDTiF80LD | |
| 51 2TiTdQhlW9mlWsDDbttsDlEcCmPVz6H3OUMCAwEAAQJBALo/ZSYTqsl4ve7vvTwG | |
| 52 gKq7ZihIdV1wEcDwELGoBiESo87zl//7q2q9/7VE3dB3Qp6uZMLtxVvXzF8bh074 | |
| 53 OuECIQDzzenwgPVMtg6OjMtZBAB95oKaTzd+x/8JienKW4edEQIhAN1Y+vlB/waB | |
| 54 miRjGMrsOQDHhUbxyL6NXaPfxYlosYETAiBg0M9qgztl+BH1x7FkqvMrC+OnNXf7 | |
| 55 L552gj7F7ez/kQIgOBNhyaHxlNlijpNYZZhAvLTPS/DXFYdE0M5RAgW26mcCIDrR | |
| 56 fi2xaM2NqJQCmyshtNmDxW2FCrtrQn1n0211WCEe | |
| 57 -----END RSA PRIVATE KEY----- | |
| 58 */ | |
| 59 let publickey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANLNgMGCl6kc3QE/73/ESBsuhzCNQ WApqWS1nKVWf+RjDTiF80LD2TiTdQhlW9mlWsDDbttsDlEcCmPVz6H3OUMCAwEAAQ"; | |
| 
Wladimir Palant
2014/09/10 21:55:06
There are some RSA keys in https://hg.adblockplus.
 
Thomas Greiner
2014/12/11 14:33:55
Done.
 | |
| 60 | |
| 61 /** | |
| 62 * Content: | |
| 63 * /test\0127.0.0.1:1234\0Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:30.0) Gec ko/20100101 Firefox/30.0 | |
| 64 */ | |
| 65 let sitekey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANLNgMGCl6kc3QE/73/ESBsuhzCNQWA pqWS1nKVWf+RjDTiF80LD2TiTdQhlW9mlWsDDbttsDlEcCmPVz6H3OUMCAwEAAQ==_peQ1CvuHieDHAX URwy9K8VQFaPWHHU0oDGT3pnIoQ6Nm7DUvCPw6FsnqfpdoIcq+kwqtkgWIcxM95gytuphvzQ=="; | |
| 
Wladimir Palant
2014/09/10 21:55:06
Call this variable "signature"?
 
Thomas Greiner
2014/12/11 14:33:55
Technically, it's a concatentation of public key a
 | |
| 66 | |
| 42 let tests = [ | 67 let tests = [ | 
| 43 [ | 68 [ | 
| 44 "HTML image with relative URL", | 69 "HTML image with relative URL", | 
| 45 '<img src="test.gif">', | 70 '<img src="test.gif">', | 
| 46 "http://127.0.0.1:1234/test.gif", "image", false, false | 71 "http://127.0.0.1:1234/test.gif", "image", false, false | 
| 47 ], | 72 ], | 
| 48 [ | 73 [ | 
| 49 "HTML image with absolute URL", | 74 "HTML image with absolute URL", | 
| 50 '<img src="http://localhost:1234/test.gif">', | 75 '<img src="http://localhost:1234/test.gif">', | 
| 51 "http://localhost:1234/test.gif", "image", true, false | 76 "http://localhost:1234/test.gif", "image", true, false | 
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 210 { | 235 { | 
| 211 return; | 236 return; | 
| 212 } | 237 } | 
| 213 if (item.filter instanceof WhitelistFilter) | 238 if (item.filter instanceof WhitelistFilter) | 
| 214 return; | 239 return; | 
| 215 | 240 | 
| 216 if (policyHits.length > 0) | 241 if (policyHits.length > 0) | 
| 217 { | 242 { | 
| 218 // Ignore duplicate policy calls (possible due to prefetching) | 243 // Ignore duplicate policy calls (possible due to prefetching) | 
| 219 let [prevWnd, prevNode, prevItem] = policyHits[policyHits.length - 1]; | 244 let [prevWnd, prevNode, prevItem] = policyHits[policyHits.length - 1]; | 
| 220 if (prevWnd == wnd && prevItem.location == item.location && prevItem.type == item.type && prevItem.docDomain == item.docDomain) | 245 if (prevWnd == wnd && prevItem.location == item.location && prevItem.type == item.type && prevItem.docDomain == item.docDomain) | 
| 221 policyHits.pop(); | 246 policyHits.pop(); | 
| 222 } | 247 } | 
| 223 policyHits.push([wnd, node, item]); | 248 policyHits.push([wnd, node, item]); | 
| 224 } | 249 } | 
| 225 | 250 | 
| 226 function runTest([name, body, expectedURL, expectedType, expectedThirdParty, w aitForMessage], stage) | 251 function runTest([name, body, expectedURL, expectedType, expectedThirdParty, w aitForMessage], stage) | 
| 227 { | 252 { | 
| 228 defaultMatcher.clear(); | 253 defaultMatcher.clear(); | 
| 229 | 254 | 
| 230 if (stage > 1) | 255 if (stage > 1) | 
| 231 defaultMatcher.add(Filter.fromText(expectedURL)); | 256 defaultMatcher.add(Filter.fromText(expectedURL)); | 
| 232 if (stage == 3) | 257 if (stage == 3) | 
| 233 defaultMatcher.add(Filter.fromText("@@||127.0.0.1:1234/test|$document")); | 258 defaultMatcher.add(Filter.fromText("@@||127.0.0.1:1234/test|$document")); | 
| 234 if (stage == 4) | 259 if (stage == 4) | 
| 235 defaultMatcher.add(Filter.fromText("@@||127.0.0.1:1234/test|$~document")); | 260 defaultMatcher.add(Filter.fromText("@@||127.0.0.1:1234/test|$~document")); | 
| 261 if (stage == 5) | |
| 262 defaultMatcher.add(Filter.fromText("@@||127.0.0.1:1234/test|$document,site key=" + publickey)); | |
| 236 | 263 | 
| 237 let serverHit = false; | 264 let serverHit = false; | 
| 238 server.registerPathHandler("/test", function(metadata, response) | 265 server.registerPathHandler("/test", function(metadata, response) | 
| 239 { | 266 { | 
| 240 response.setStatusLine("1.1", "200", "OK"); | 267 response.setStatusLine("1.1", "200", "OK"); | 
| 241 | 268 | 
| 242 let contentType = "text/html"; | 269 let contentType = "text/html"; | 
| 243 if (body.indexOf("2000/svg") >= 0) | 270 if (body.indexOf("2000/svg") >= 0) | 
| 271 { | |
| 244 contentType = "image/svg+xml"; | 272 contentType = "image/svg+xml"; | 
| 273 body = body.replace(/^<svg/, "<svg data-adblockkey='" + sitekey + "'"); | |
| 274 } | |
| 275 else | |
| 276 body = "<html data-adblockkey='" + sitekey + "'>" + body + "</html>"; | |
| 245 response.setHeader("Content-Type", contentType + "; charset=utf-8"); | 277 response.setHeader("Content-Type", contentType + "; charset=utf-8"); | 
| 246 | 278 | 
| 247 response.bodyOutputStream.write(body, body.length); | 279 response.bodyOutputStream.write(body, body.length); | 
| 248 }); | 280 }); | 
| 249 server.registerPathHandler("/redirect.gif", function(metadata, response) | 281 server.registerPathHandler("/redirect.gif", function(metadata, response) | 
| 250 { | 282 { | 
| 251 response.setStatusLine("1.1", "302", "Moved Temporarily"); | 283 response.setStatusLine("1.1", "302", "Moved Temporarily"); | 
| 252 response.setHeader("Location", "http://127.0.0.1:1234/test.gif"); | 284 response.setHeader("Location", "http://127.0.0.1:1234/test.gif"); | 
| 253 }); | 285 }); | 
| 254 server.registerPathHandler("/redirect2.gif", function(metadata, response) | 286 server.registerPathHandler("/redirect2.gif", function(metadata, response) | 
| (...skipping 11 matching lines...) Expand all Loading... | |
| 266 var error = "<b>Not found...<b>"; | 298 var error = "<b>Not found...<b>"; | 
| 267 response.bodyOutputStream.write(error, error.length); | 299 response.bodyOutputStream.write(error, error.length); | 
| 268 }); | 300 }); | 
| 269 | 301 | 
| 270 policyHits = []; | 302 policyHits = []; | 
| 271 var callback = function() | 303 var callback = function() | 
| 272 { | 304 { | 
| 273 let expectedStatus = "allowed"; | 305 let expectedStatus = "allowed"; | 
| 274 if (stage == 3) | 306 if (stage == 3) | 
| 275 equal(policyHits.length, 0, "Number of policy hits"); | 307 equal(policyHits.length, 0, "Number of policy hits"); | 
| 276 else | 308 // We cannot rely on the correctness of policy hits for sitekey filters du e to blocking | 
| 309 // filter hits being counted even if the resource doesn't end up getting b locked | |
| 310 else if (stage != 5) | |
| 277 { | 311 { | 
| 278 equal(policyHits.length, 1, "Number of policy hits"); | 312 equal(policyHits.length, 1, "Number of policy hits"); | 
| 279 if (policyHits.length == 1) | 313 if (policyHits.length == 1) | 
| 280 { | 314 { | 
| 281 let [wnd, node, item] = policyHits[0]; | 315 let [wnd, node, item] = policyHits[0]; | 
| 282 | 316 | 
| 283 equal(item.location, expectedURL, "Request URL"); | 317 equal(item.location, expectedURL, "Request URL"); | 
| 284 | 318 | 
| 285 expectedStatus = (stage == 1 ? "allowed" : "blocked"); | 319 expectedStatus = (stage == 1 ? "allowed" : "blocked"); | 
| 286 let actualStatus = (item.filter ? "blocked" : "allowed"); | 320 let actualStatus = (item.filter ? "blocked" : "allowed"); | 
| (...skipping 18 matching lines...) Expand all Loading... | |
| 305 window.addEventListener("message", callback, false, true); | 339 window.addEventListener("message", callback, false, true); | 
| 306 else | 340 else | 
| 307 frame.addEventListener("load", callback, false); | 341 frame.addEventListener("load", callback, false); | 
| 308 } | 342 } | 
| 309 | 343 | 
| 310 let stageDescriptions = { | 344 let stageDescriptions = { | 
| 311 1: "running without filters", | 345 1: "running without filters", | 
| 312 2: "running with filter %S", | 346 2: "running with filter %S", | 
| 313 3: "running with filter %S and site exception", | 347 3: "running with filter %S and site exception", | 
| 314 4: "running with filter %S and exception not applicable to sites", | 348 4: "running with filter %S and exception not applicable to sites", | 
| 349 5: "running with filter %S and sitekey exception" | |
| 315 }; | 350 }; | 
| 316 | 351 | 
| 317 for (let test = 0; test < tests.length; test++) | 352 for (let test = 0; test < tests.length; test++) | 
| 318 { | 353 { | 
| 319 let [name, body, expectedURL, expectedType, expectedDomain, expectedThirdPar ty] = tests[test]; | 354 let [name, body, expectedURL, expectedType, expectedDomain, expectedThirdPar ty] = tests[test]; | 
| 320 for (let stage = 1; stage in stageDescriptions; stage++) | 355 for (let stage = 1; stage in stageDescriptions; stage++) | 
| 321 { | 356 { | 
| 322 let stageDescription = stageDescriptions[stage]; | 357 let stageDescription = stageDescriptions[stage]; | 
| 323 if (stageDescription.indexOf("%S") >= 0) | 358 if (stageDescription.indexOf("%S") >= 0) | 
| 324 stageDescription = stageDescription.replace("%S", expectedURL); | 359 stageDescription = stageDescription.replace("%S", expectedURL); | 
| 325 | 360 | 
| 326 asyncTest(name + " (" + stageDescription + ")", runTest.bind(null, tests[t est], stage)); | 361 asyncTest(name + " (" + stageDescription + ")", runTest.bind(null, tests[t est], stage)); | 
| 327 } | 362 } | 
| 328 } | 363 } | 
| 329 })(); | 364 })(); | 
| OLD | NEW |