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 |