Index: chrome/content/tests/policy.js |
=================================================================== |
--- a/chrome/content/tests/policy.js |
+++ b/chrome/content/tests/policy.js |
@@ -9,22 +9,23 @@ |
setup: function() |
{ |
prepareFilterComponents.call(this); |
preparePrefs.call(this); |
server = new nsHttpServer(); |
server.start(1234); |
- frame = document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "iframe"); |
+ frame = document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "browser"); |
frame.setAttribute("type", "content"); |
+ frame.setAttribute("disablehistory", "true"); |
frame.style.visibility = "collapse"; |
document.body.appendChild(frame); |
- requestNotifier = new RequestNotifier(frame.contentWindow, onPolicyHit); |
+ requestNotifier = new RequestNotifier(frame.outerWindowID, onPolicyHit); |
httpProtocol = Utils.httpProtocol; |
Utils.httpProtocol = {userAgent: "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0"}; |
}, |
teardown: function() |
{ |
restoreFilterComponents.call(this); |
restorePrefs.call(this); |
@@ -265,37 +266,37 @@ |
[ |
"HTML object (Java)", |
'<object type="application/x-java-applet" data="test.class"></object>', |
"http://127.0.0.1:1234/test.class", "object", false, false |
]); |
} |
let policyHits = []; |
- function onPolicyHit(wnd, node, item, scanComplete) |
+ function onPolicyHit(item, scanComplete) |
{ |
if (!item) |
return; |
if (item.location == "http://127.0.0.1:1234/test" || |
item.location == "http://127.0.0.1:1234/redirect.gif" || |
item.location == "http://127.0.0.1:1234/redirect2.gif") |
{ |
return; |
} |
- if (item.filter instanceof WhitelistFilter) |
+ if (item.filter && item.filter.substr(0, 2) == "@@") |
return; |
if (policyHits.length > 0) |
{ |
// Ignore duplicate policy calls (possible due to prefetching) |
- let [prevWnd, prevNode, prevItem] = policyHits[policyHits.length - 1]; |
- if (prevWnd == wnd && prevItem.location == item.location && prevItem.type == item.type && prevItem.docDomain == item.docDomain) |
+ let prevItem = policyHits[policyHits.length - 1]; |
+ if (prevItem.location == item.location && prevItem.type == item.type && prevItem.docDomain == item.docDomain) |
policyHits.pop(); |
} |
- policyHits.push([wnd, node, item]); |
+ policyHits.push(item); |
} |
function runTest([name, body, expectedURL, expectedType, expectedThirdParty, explicitEvent], stage) |
{ |
defaultMatcher.clear(); |
if (stage == 7) |
defaultMatcher.add(Filter.fromText(expectedURL + "$domain=127.0.0.1")); |
@@ -362,49 +363,57 @@ |
response.setHeader("Content-Type", "text/html"); |
// Work around weird Firefox behavior, where worker scripts succesfully load with empty 404 pages. |
var error = "<b>Not found...<b>"; |
response.bodyOutputStream.write(error, error.length); |
}); |
policyHits = []; |
- var callback = function() |
+ let callback = function() |
{ |
+ frame.messageManager.removeMessageListener("ready", callback); |
+ |
let expectedStatus = "allowed"; |
if (stage == 3) |
equal(policyHits.length, 0, "Number of policy hits"); |
// We cannot rely on the correctness of policy hits for sitekey filters due to blocking |
// filter hits being counted even if the resource doesn't end up getting blocked |
else if (stage != 5 && stage != 6 && stage != 8) |
{ |
equal(policyHits.length, 1, "Number of policy hits"); |
if (policyHits.length == 1) |
{ |
- let [wnd, node, item] = policyHits[0]; |
+ let item = policyHits[0]; |
equal(item.location, expectedURL, "Request URL"); |
expectedStatus = (stage == 1 ? "allowed" : "blocked"); |
let actualStatus = (item.filter ? "blocked" : "allowed"); |
equal(actualStatus, expectedStatus, "Request blocked"); |
equal(item.type.toLowerCase(), expectedType, "Request type"); |
equal(item.thirdParty, expectedThirdParty, "Third-party flag"); |
equal(item.docDomain, "127.0.0.1", "Document domain"); |
} |
} |
server.registerPathHandler(expectedURL.replace(/http:\/\/[^\/]+/, ""), null); |
equal(serverHit, expectedStatus == "allowed", "Request received by server"); |
- frame.removeEventListener("abp:frameready", callback, false); |
- |
start(); |
}; |
- frame.addEventListener("abp:frameready", callback, false, true); |
+ let callback2 = function() |
+ { |
+ // The frame will report hits asynchronously so make the frame send us a |
+ // message and only process the results after it is received. |
+ frame.removeEventListener("abp:frameready", callback2, false); |
+ frame.messageManager.addMessageListener("ready", callback); |
+ frame.messageManager.loadFrameScript("data:text/javascript,sendAsyncMessage('ready')", false); |
+ }; |
+ frame.addEventListener("abp:frameready", callback2, false, true); |
frame.setAttribute("src", "http://127.0.0.1:1234/test"); |
} |
let stageDescriptions = { |
1: "running without filters", |
2: "running with filter %S", |
3: "running with filter %S and site exception", |
4: "running with filter %S and exception not applicable to sites", |