Index: chrome/content/tests/policy.js |
=================================================================== |
--- a/chrome/content/tests/policy.js |
+++ b/chrome/content/tests/policy.js |
@@ -60,16 +60,18 @@ |
let publickey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALZc50pEXnz9TSRozwM04rryuaXl/wgUFqV9FHq8HDlkdKvRU0hXhb/AKrSpCJ0NCxHtal1l/kHYlHG9e7Ev6+MCAwEAAQ"; |
/** |
* Content: |
* /test\0127.0.0.1:1234\0Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0 |
*/ |
let adblockkey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALZc50pEXnz9TSRozwM04rryuaXl/wgUFqV9FHq8HDlkdKvRU0hXhb/AKrSpCJ0NCxHtal1l/kHYlHG9e7Ev6+MCAwEAAQ==_gM4C/j8KkD2byPeP+THXk1GbLTUm5y+5jbdhcMtnzPMgImIfge0dGCtfU9cxLpe8BnqnEGNhTxpuu4pZxjOHYQ=="; |
+ let dispatchReadyEvent = "document.dispatchEvent(new CustomEvent('abp:frameready', {bubbles: true}));"; |
+ |
let tests = [ |
[ |
"HTML image with relative URL", |
'<img src="test.gif">', |
"http://127.0.0.1:1234/test.gif", "image", false, false |
], |
[ |
"HTML image with absolute URL", |
@@ -97,17 +99,17 @@ |
'<script>' + |
'window.addEventListener("DOMContentLoaded", function()' + |
'{' + |
'var div = document.getElementById("insert");' + |
'div.innerHTML = \'<input type="image" id="image" src="test.gif">\';' + |
'var image = document.getElementById("image");' + |
'image.onload = image.onerror = function ()' + |
'{' + |
- 'document.dispatchEvent(new CustomEvent("abp:frameready", {bubbles: true}));' + |
+ dispatchReadyEvent + |
'};' + |
'}, false);' + |
'</script>', |
"http://127.0.0.1:1234/test.gif", "image", false, true |
], |
[ |
"CSS background-image", |
'<div style="background-image: url(test.gif)"></div>', |
@@ -212,29 +214,28 @@ |
'}' + |
'catch(e){}' + |
'</script>', |
"http://127.0.0.1:1234/test.xml", "xmlhttprequest", false, false |
], |
[ |
"Web worker", |
'<script>' + |
- 'var e = new CustomEvent(\'abp:frameready\', {bubbles: true});' + |
'try' + |
'{' + |
'var worker = new Worker("test.js");' + |
'worker.onerror = function(event)' + |
'{' + |
'event.preventDefault();' + |
- 'document.dispatchEvent(e);' + |
+ dispatchReadyEvent + |
'};' + |
'}' + |
- 'catch (x)' + |
+ 'catch (e)' + |
'{' + |
- 'document.dispatchEvent(e);' + |
+ dispatchReadyEvent + |
'}' + |
'</script>', |
"http://127.0.0.1:1234/test.js", "script", false, true |
], |
]; |
if (window.navigator.mimeTypes["application/x-shockwave-flash"] && window.navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin) |
{ |
@@ -304,23 +305,24 @@ |
defaultMatcher.add(Filter.fromText("@@||127.0.0.1:1234/test|$~document")); |
if (stage == 5) |
defaultMatcher.add(Filter.fromText("@@||127.0.0.1:1234/test|$document,sitekey=" + publickey)); |
if (!explicitEvent) |
{ |
if (body.indexOf("2000/svg") >= 0) |
{ |
- // SVG image: add an onload attribute to the document element |
- body = body.replace(/(<svg\b)/, '$1 onload="this.dispatchEvent(new CustomEvent(\'abp:frameready\', {bubbles: true}));"'); |
+ // SVG image: add an onload attribute to the document element and keep |
+ // polling until the document is really loaded. |
+ body = body.replace(/(<svg\b)/, '$1 onload="if (document.readyState != \'complete\') setTimeout(arguments.callee.bind(this), 0); else ' + dispatchReadyEvent + '"'); |
} |
else |
{ |
// HTML data: wrap it into a <body> tag |
- body = '<body onload="this.dispatchEvent(new CustomEvent(\'abp:frameready\', {bubbles: true}));">' + body + '</body>'; |
+ body = '<body onload="' + dispatchReadyEvent + '">' + body + '</body>'; |
} |
} |
let serverHit = false; |
server.registerPathHandler("/test", function(metadata, response) |
{ |
response.setStatusLine("1.1", "200", "OK"); |