Left: | ||
Right: |
LEFT | RIGHT |
---|---|
1 (function() | 1 (function() |
2 { | 2 { |
3 let tabs = SDK.require("sdk/tabs"); | 3 let tabs = SDK.require("sdk/tabs"); |
4 let modelFor = SDK.require("sdk/model/core").modelFor; | |
Erik
2015/12/04 20:58:33
oh I should remove this.
| |
5 let server = null; | 4 let server = null; |
6 let tab = null; | 5 let tab = null; |
7 | 6 |
8 module("Pop-up blocker", { | 7 module("Pop-up blocker", { |
9 beforeEach: function() | 8 beforeEach: function() |
10 { | 9 { |
11 prepareFilterComponents.call(this, true); | 10 prepareFilterComponents.call(this, true); |
12 preparePrefs.call(this); | 11 preparePrefs.call(this); |
13 | 12 |
14 server = new nsHttpServer(); | 13 server = new nsHttpServer(); |
(...skipping 27 matching lines...) Expand all Loading... | |
42 let body = '<html><body>OK</body></html>'; | 41 let body = '<html><body>OK</body></html>'; |
43 response.bodyOutputStream.write(body, body.length); | 42 response.bodyOutputStream.write(body, body.length); |
44 }); | 43 }); |
45 | 44 |
46 tabs.open({ | 45 tabs.open({ |
47 url: "http://127.0.0.1:1234/test", | 46 url: "http://127.0.0.1:1234/test", |
48 inBackground: false, | 47 inBackground: false, |
49 onReady: function(aTab) | 48 onReady: function(aTab) |
50 { | 49 { |
51 tab = aTab; | 50 tab = aTab; |
52 var worker = tab.attach({ | 51 start(); |
53 contentScript: "(" + function() | |
54 { | |
55 if (document.getElementById("link")) | |
56 self.port.emit("done"); | |
57 } + ")()" | |
58 }); | |
Wladimir Palant
2015/12/14 11:28:53
I don't think that clicking the link should be par
| |
59 | |
60 worker.port.once("done", function() | |
61 { | |
62 start(); | |
63 }) | |
Wladimir Palant
2015/12/14 11:28:53
Nit: No need to wrap the callback here, this will
| |
64 } | 52 } |
65 }); | 53 }); |
66 | 54 |
67 stop(); | 55 stop(); |
68 }, | 56 }, |
69 afterEach: function() | 57 afterEach: function() |
70 { | 58 { |
71 restoreFilterComponents.call(this); | 59 restoreFilterComponents.call(this); |
72 restorePrefs.call(this); | 60 restorePrefs.call(this); |
73 | 61 |
74 stop(); | 62 stop(); |
75 server.stop(function() | 63 server.stop(function() |
76 { | 64 { |
77 tab.close(function() | 65 tab.close(function() |
78 { | 66 { |
79 server = null; | 67 server = null; |
80 start(); | 68 start(); |
81 }); | 69 }); |
82 }); | 70 }); |
83 } | 71 } |
84 }); | 72 }); |
85 | 73 |
86 let tests = [ | 74 let tests = [ |
87 // filter says '/target' as a popup should be blocked | 75 ["||127.0.0.1:1234/target$popup", false], |
88 // expect no opened tab | |
Wladimir Palant
2015/12/14 11:28:52
Frankly, I think that this is overdocumenting. I w
Erik
2015/12/29 22:49:40
We can leave this for another issue, I'll take it
| |
89 //["||127.0.0.1:1234/target$popup", false], | |
Wladimir Palant
2015/12/14 11:28:53
Why is this test commented out, isn't it working c
Erik
2015/12/29 22:49:40
oh I didn't notice that I did that, iirc I comment
| |
90 // filter says '/target' as a subdoc should be blocked | |
91 // expect to find OK message in opened tab (b/c popup is not blocked) | |
92 ["||127.0.0.1:1234/target$~subdocument", true], | 76 ["||127.0.0.1:1234/target$~subdocument", true], |
93 // filter says '/target' as a popup should be blocked from domain 127.0.0.1 | |
94 // expect no opened tab | |
95 ["||127.0.0.1:1234/target$popup,domain=127.0.0.1", false], | 77 ["||127.0.0.1:1234/target$popup,domain=127.0.0.1", false], |
96 // filter says '/target' as a popup should be blocked from domain 128.0.0.1 | |
97 // expect to find OK message in opened tab (b/c popup is not blocked) | |
98 ["||127.0.0.1:1234/target$popup,domain=128.0.0.1", true], | 78 ["||127.0.0.1:1234/target$popup,domain=128.0.0.1", true], |
99 // filter says '/redirect' as a popup should be blocked | |
100 // expect no opened tab | |
101 ["||127.0.0.1:1234/redirect$popup", false], | 79 ["||127.0.0.1:1234/redirect$popup", false], |
102 // filter says '/redirect' as a subdocument should be blocked | |
103 // expect to find OK message in opened tab (b/c popup is not blocked) | |
104 ["||127.0.0.1:1234/redirect$~subdocument", true], | 80 ["||127.0.0.1:1234/redirect$~subdocument", true], |
105 // filter says '/redirect' as a popup should be blocked from domain 127.0.0. 1 | |
106 // expect no opened tab | |
107 ["||127.0.0.1:1234/redirect$popup,domain=127.0.0.1", false], | 81 ["||127.0.0.1:1234/redirect$popup,domain=127.0.0.1", false], |
108 // filter says '/redirect' as a popup should be blocked from domain 128.0.0. 1 | |
109 // expect to find OK message in opened tab (b/c popup is not blocked) | |
110 ["||127.0.0.1:1234/redirect$popup,domain=128.0.0.1", true], | 82 ["||127.0.0.1:1234/redirect$popup,domain=128.0.0.1", true], |
111 ]; | 83 ]; |
112 var testCount = 0; | |
Wladimir Palant
2015/12/14 11:28:52
This variable seems unused.
| |
113 | 84 |
114 function runTest(filter, result) | 85 function runTest(filter, result) |
115 { | 86 { |
116 tabs.off("ready", onTabOpen); | |
Wladimir Palant
2015/12/14 11:28:53
This seems pointless, why would there be an existi
Erik
2015/12/29 22:49:40
This should be in `onTabOpen`.
| |
117 FilterStorage.addFilter(filter); | 87 FilterStorage.addFilter(filter); |
118 | 88 |
119 let successful = false; | 89 let successful = false; |
120 | 90 |
121 function onTabOpen(tab) { | 91 function onTabOpen(tab) |
Wladimir Palant
2015/12/14 11:28:52
Style nit: Bracket on the next line please.
| |
92 { | |
93 tabs.off("ready", onTabOpen); | |
94 | |
122 // link in '/test' was clicked | 95 // link in '/test' was clicked |
123 tab.on("close", onTabClose); | 96 tab.on("close", onTabClose); |
124 window.clearTimeout(timeout); | 97 window.clearTimeout(timeout); |
125 | 98 |
126 var worker = tab.attach({ | 99 var worker = tab.attach({ |
127 contentScriptWhen: "ready", | 100 contentScriptWhen: "ready", |
128 contentScript: "self.port.emit('done', document.body.innerHTML.toString( ));" | 101 contentScript: "self.port.emit('done', document.body.textContent);" |
Wladimir Palant
2015/12/14 11:28:52
No point calling toString() here - innerHTML is al
Erik
2015/12/29 22:49:40
good point.
| |
129 }); | 102 }); |
130 | 103 |
131 worker.port.once("done", function(bodyText) | 104 worker.port.once("done", function(bodyText) |
132 { | 105 { |
133 if (bodyText.indexOf("OK") >= 0) | 106 if (bodyText.indexOf("OK") >= 0) |
134 successful = true; | 107 successful = true; |
135 | 108 |
136 // pop-up was not blocked so close it | 109 // pop-up was not blocked so close it |
137 tab.close(); | 110 tab.close(); |
138 }); | 111 }); |
139 } | 112 } |
140 tabs.on("ready", onTabOpen); | 113 tabs.on("ready", onTabOpen); |
141 | 114 |
142 function onTabClose(tab) | 115 function onTabClose(tab) |
143 { | 116 { |
144 tabs.off("ready", onTabOpen); | 117 tabs.off("ready", onTabOpen); |
145 if (tab) | 118 if (tab) |
146 tab.off("close", onTabClose); | 119 tab.off("close", onTabClose); |
147 | 120 |
148 ok(result == successful, "Opening tab with filter " + filter.text); | 121 ok(result == successful, "Opening tab with filter " + filter.text); |
149 | 122 |
150 var keys = []; | |
151 for (let key in defaultMatcher.blacklist.keywordByFilter) | |
152 keys.push(key); | |
Wladimir Palant
2015/12/14 11:28:52
I have no idea why this code is here, it isn't bei
Erik
2015/12/29 22:49:40
alright it doesn't seem to be used to me either.
| |
153 | |
154 FilterStorage.removeFilter(filter); | 123 FilterStorage.removeFilter(filter); |
155 | 124 |
156 start(); | 125 start(); |
157 } | 126 } |
158 | 127 |
159 // In case the tab isn't opened | 128 // In case the tab isn't opened |
160 var timeout = window.setTimeout(function() | 129 let timeout = window.setTimeout(onTabClose, 1000, null); |
161 { | |
162 onTabClose(); | |
163 }, 1000); | |
Wladimir Palant
2015/12/14 11:28:52
Nit: no point wrapping the callback here either. T
| |
164 | 130 |
165 // click the link in the '/test' tab opened before the test | 131 // click the link in the '/test' tab opened before the test |
166 var worker = tab.attach({ | 132 var worker = tab.attach({ |
167 contentScriptWhen: "ready", | 133 contentScriptWhen: "ready", |
168 contentScriptOptions: { | |
169 filter: filter.toString() | |
170 }, | |
Wladimir Palant
2015/12/14 11:28:52
The content script doesn't need any options...
| |
171 contentScript: "(" + function() | 134 contentScript: "(" + function() |
172 { | 135 { |
173 document.getElementById('link').click(); | 136 document.getElementById('link').click(); |
174 } + ")()" | 137 } + ")()" |
175 //contentScript: "document.getElementById('link').click();" | |
Wladimir Palant
2015/12/14 11:28:52
Please remove this line.
| |
176 }); | 138 }); |
177 } | 139 } |
178 | 140 |
179 // create async qunit tests | |
Wladimir Palant
2015/12/14 11:28:52
This is stating the obvious again.
| |
180 for (let [filter, result] of tests) | 141 for (let [filter, result] of tests) |
181 asyncTest(filter, runTest.bind(null, Filter.fromText(filter), result)); | 142 asyncTest(filter, runTest.bind(null, Filter.fromText(filter), result)); |
182 })(); | 143 })(); |
LEFT | RIGHT |