Index: chrome/content/tests/popupBlocker.js |
=================================================================== |
--- a/chrome/content/tests/popupBlocker.js |
+++ b/chrome/content/tests/popupBlocker.js |
@@ -1,11 +1,12 @@ |
(function() |
{ |
+ let tabs = SDK.require("sdk/tabs"); |
+ let modelFor = SDK.require("sdk/model/core").modelFor; |
Wladimir Palant
2016/01/06 12:54:36
So, do you want to remove this? ;)
|
let server = null; |
- let wnd = null; |
let tab = null; |
module("Pop-up blocker", { |
- setup: function() |
+ beforeEach: function() |
{ |
prepareFilterComponents.call(this, true); |
preparePrefs.call(this); |
@@ -13,22 +14,27 @@ |
server = new nsHttpServer(); |
server.start(1234); |
+ // '/test' serves an html page with a single link |
server.registerPathHandler("/test", function(metadata, response) |
{ |
response.setStatusLine("1.1", "200", "OK"); |
response.setHeader("Content-Type", "text/html; charset=utf-8"); |
let body = |
- '<body onload="document.dispatchEvent(new CustomEvent(\'abp:frameready\', {bubbles: true}));">' + |
+ '<body>' + |
'<a id="link" href="/redirect" target="_blank">link</a>' + |
'</body>'; |
response.bodyOutputStream.write(body, body.length); |
}); |
+ |
+ // redirects '/redirect' to '/target' |
server.registerPathHandler("/redirect", function(metadata, response) |
{ |
response.setStatusLine("1.1", "302", "Moved Temporarily"); |
response.setHeader("Location", "http://127.0.0.1:1234/target"); |
}); |
+ |
+ // '/target' serves an html page with 'OK' message |
server.registerPathHandler("/target", function(metadata, response) |
{ |
response.setHeader("Content-Type", "text/html; charset=utf-8"); |
@@ -37,16 +43,27 @@ |
response.bodyOutputStream.write(body, body.length); |
}); |
- wnd = UI.currentWindow; |
- tab = wnd.gBrowser.loadOneTab("http://127.0.0.1:1234/test", {inBackground: false}); |
- wnd.gBrowser.getBrowserForTab(tab).addEventListener("abp:frameready", function(event) |
- { |
- start(); |
- }, false, true); |
+ tabs.open({ |
+ url: "http://127.0.0.1:1234/test", |
+ inBackground: false, |
+ onReady: function(aTab) |
+ { |
+ tab = aTab; |
+ var worker = tab.attach({ |
+ contentScript: "(" + function() |
+ { |
+ if (document.getElementById("link")) |
+ self.port.emit("done"); |
+ } + ")()" |
+ }); |
Wladimir Palant
2016/01/06 12:54:36
As mentioned before, I don't think that clicking t
|
+ |
+ worker.port.once("done", start) |
Wladimir Palant
2016/01/06 12:54:36
Nit: Missing semicolon here.
|
+ } |
+ }); |
stop(); |
}, |
- teardown: function() |
+ afterEach: function() |
{ |
restoreFilterComponents.call(this); |
restorePrefs.call(this); |
@@ -54,12 +71,11 @@ |
stop(); |
server.stop(function() |
{ |
- wnd.gBrowser.removeTab(tab); |
- |
- server = null; |
- frame = null; |
- |
- start(); |
+ tab.close(function() |
+ { |
+ server = null; |
+ start(); |
+ }); |
}); |
} |
}); |
@@ -81,42 +97,54 @@ |
let successful = false; |
- function onTabOpen(event) |
+ function onTabOpen(tab) |
{ |
+ tabs.off("ready", onTabOpen); |
+ |
+ // link in '/test' was clicked |
+ tab.on("close", onTabClose); |
window.clearTimeout(timeout); |
- wnd.gBrowser.tabContainer.removeEventListener("TabOpen", onTabOpen, false); |
- let tab = event.target; |
- let browser = wnd.gBrowser.getBrowserForTab(tab); |
- Utils.runAsync(function() |
+ var worker = tab.attach({ |
+ contentScriptWhen: "ready", |
+ contentScript: "self.port.emit('done', document.body.textContent);" |
+ }); |
+ |
+ worker.port.once("done", function(bodyText) |
{ |
- browser.contentWindow.addEventListener("load", function(event) |
- { |
- if (browser.contentDocument.body.textContent.indexOf("OK") >= 0) |
- successful = true; |
+ if (bodyText.indexOf("OK") >= 0) |
+ successful = true; |
- browser.contentWindow.close(); |
- }, false); |
+ // pop-up was not blocked so close it |
+ tab.close(); |
}); |
} |
+ tabs.on("ready", onTabOpen); |
- function onTabClose(event) |
+ function onTabClose(tab) |
{ |
- wnd.gBrowser.tabContainer.removeEventListener("TabClose", onTabClose, false); |
+ tabs.off("ready", onTabOpen); |
+ if (tab) |
+ tab.off("close", onTabClose); |
+ |
ok(result == successful, "Opening tab with filter " + filter.text); |
- var keys = []; |
- for (let key in defaultMatcher.blacklist.keywordByFilter) |
- keys.push(key); |
FilterStorage.removeFilter(filter); |
+ |
start(); |
} |
- wnd.gBrowser.tabContainer.addEventListener("TabOpen", onTabOpen, false); |
- wnd.gBrowser.tabContainer.addEventListener("TabClose", onTabClose, false); |
- let timeout = window.setTimeout(onTabClose, 1000); // In case the tab isn't opened |
+ // In case the tab isn't opened |
+ let timeout = window.setTimeout(onTabClose, 1000, null); |
- wnd.gBrowser.getBrowserForTab(tab).contentDocument.getElementById("link").click(); |
+ // click the link in the '/test' tab opened before the test |
+ var worker = tab.attach({ |
+ contentScriptWhen: "ready", |
+ contentScript: "(" + function() |
+ { |
+ document.getElementById('link').click(); |
+ } + ")()" |
+ }); |
} |
for (let [filter, result] of tests) |