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 MIIBOQIBAAJBALZc50pEXnz9TSRozwM04rryuaXl/wgUFqV9FHq8HDlkdKvRU0hX |
| 51 hb/AKrSpCJ0NCxHtal1l/kHYlHG9e7Ev6+MCAwEAAQJBALRxYs5irhgAz2b6afOj |
| 52 TcFr0PRtipckwW/IPw5euZKyvswEJt/tWDv4OdmDnRe8FSy6FG2Got3zxvaxYdc3 |
| 53 AXkCIQDfFGcytIVq3sbdF3lmhzcXf29R4Hrxg/eoByAKabxknwIhANFGSNMOGPt6 |
| 54 JRajfB9XmsltQJzbkr2sfHgjMN2FLM49AiAH6tt2yz1o+5snQawHXYkxBk7XIxZ5 |
| 55 9+sURZx3giUzlQIfXF+pxX9zh41i0ZtYLn181WxkGNjS7OY2CtF9wEoIfQIgcHuf |
| 56 shh1qrvuKiXnD9b72PF676laKdzxzX5rX6cZZLA= |
| 57 -----END RSA PRIVATE KEY----- |
| 58 */ |
| 59 let publickey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALZc50pEXnz9TSRozwM04rryuaXl/
wgUFqV9FHq8HDlkdKvRU0hXhb/AKrSpCJ0NCxHtal1l/kHYlHG9e7Ev6+MCAwEAAQ"; |
| 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 adblockkey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALZc50pEXnz9TSRozwM04rryuaXl
/wgUFqV9FHq8HDlkdKvRU0hXhb/AKrSpCJ0NCxHtal1l/kHYlHG9e7Ev6+MCAwEAAQ==_gM4C/j8KkD2
byPeP+THXk1GbLTUm5y+5jbdhcMtnzPMgImIfge0dGCtfU9cxLpe8BnqnEGNhTxpuu4pZxjOHYQ=="; |
| 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='" + adblockkey + "'"
); |
| 274 } |
| 275 else |
| 276 body = "<html data-adblockkey='" + adblockkey + "'>" + 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 |