|
1 const { getMostRecentBrowserWindow } = require('sdk/window/utils'); |
|
2 const { PageMod } = require("sdk/page-mod"); |
|
3 const { getActiveTab, setTabURL, openTab, closeTab } = require('sdk/tabs/utils'); |
|
4 const xulApp = require('sdk/system/xul-app'); |
|
5 const windowHelpers = require('sdk/window/helpers'); |
|
6 const { defer } = require("sdk/core/promise"); |
|
7 const { isPrivate } = require('sdk/private-browsing'); |
|
8 const { isTabPBSupported, isWindowPBSupported } = require('sdk/private-browsing/utils'); |
|
9 |
|
10 function openWebpage(url, enablePrivate) { |
|
11 let { promise, resolve, reject } = defer(); |
|
12 |
|
13 if (xulApp.is("Fennec")) { |
|
14 let chromeWindow = getMostRecentBrowserWindow(); |
|
15 let rawTab = openTab(chromeWindow, url, { |
|
16 isPrivate: enablePrivate |
|
17 }); |
|
18 |
|
19 resolve(function() { |
|
20 closeTab(rawTab) |
|
21 }); |
|
22 |
|
23 return promise; |
|
24 } |
|
25 else { |
|
26 windowHelpers.open("", { |
|
27 features: { |
|
28 toolbar: true, |
|
29 private: enablePrivate |
|
30 } |
|
31 }).then(function(chromeWindow) { |
|
32 if (isPrivate(chromeWindow) !== !!enablePrivate) |
|
33 reject(new Error("Window should have Private set to " + !!enablePrivate)); |
|
34 |
|
35 let tab = getActiveTab(chromeWindow); |
|
36 setTabURL(tab, url); |
|
37 |
|
38 resolve(function(){ |
|
39 windowHelpers.close(chromeWindow); |
|
40 }); |
|
41 }); |
|
42 |
|
43 return promise; |
|
44 } |
|
45 } |
|
46 |
|
47 exports["test page-mod on private tab"] = function (assert, done) { |
|
48 // Only set private mode when explicitely supported. |
|
49 // (fennec 19 has some intermediate PB support where isTabPBSupported |
|
50 // will be false, but isPrivate(worker.tab) will be true if we open a private |
|
51 // tab) |
|
52 let setPrivate = isTabPBSupported || isWindowPBSupported; |
|
53 |
|
54 let id = Date.now().toString(36); |
|
55 let frameUri = "data:text/html;charset=utf-8," + id; |
|
56 let uri = "data:text/html;charset=utf-8," + |
|
57 encodeURIComponent(id + "<iframe src='" + frameUri + "'><iframe>"); |
|
58 |
|
59 let count = 0; |
|
60 |
|
61 openWebpage(uri, setPrivate).then(function(close) { |
|
62 PageMod({ |
|
63 include: [uri, frameUri], |
|
64 |
|
65 onAttach: function(worker) { |
|
66 assert.ok(worker.tab.url == uri || worker.tab.url == frameUri, |
|
67 "Got a worker attached to the private window tab"); |
|
68 |
|
69 if (setPrivate) { |
|
70 assert.ok(isPrivate(worker), "The worker is really private"); |
|
71 assert.ok(isPrivate(worker.tab), "The document is really private"); |
|
72 } |
|
73 else { |
|
74 assert.ok(!isPrivate(worker), |
|
75 "private browsing isn't supported, " + |
|
76 "so that the worker isn't private"); |
|
77 assert.ok(!isPrivate(worker.tab), |
|
78 "private browsing isn't supported, " + |
|
79 "so that the document isn't private"); |
|
80 } |
|
81 |
|
82 if (++count == 2) { |
|
83 this.destroy(); |
|
84 close(); |
|
85 done(); |
|
86 } |
|
87 } |
|
88 }); |
|
89 }).then(null, assert.fail); |
|
90 }; |
|
91 |
|
92 exports["test page-mod on non-private tab"] = function (assert, done) { |
|
93 let id = Date.now().toString(36); |
|
94 let url = "data:text/html;charset=utf-8," + encodeURIComponent(id); |
|
95 |
|
96 openWebpage(url, false).then(function(close){ |
|
97 PageMod({ |
|
98 include: url, |
|
99 onAttach: function(worker) { |
|
100 assert.equal(worker.tab.url, url, |
|
101 "Got a worker attached to the private window tab"); |
|
102 assert.ok(!isPrivate(worker), "The worker is really non-private"); |
|
103 assert.ok(!isPrivate(worker.tab), "The document is really non-private"); |
|
104 |
|
105 this.destroy(); |
|
106 close(); |
|
107 done(); |
|
108 } |
|
109 }); |
|
110 }).then(null, assert.fail); |
|
111 } |