Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
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');
10 function openWebpage(url, enablePrivate) {
11 let { promise, resolve, reject } = defer();
13 if (xulApp.is("Fennec")) {
14 let chromeWindow = getMostRecentBrowserWindow();
15 let rawTab = openTab(chromeWindow, url, {
16 isPrivate: enablePrivate
17 });
19 resolve(function() {
20 closeTab(rawTab)
21 });
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));
35 let tab = getActiveTab(chromeWindow);
36 setTabURL(tab, url);
38 resolve(function(){
39 windowHelpers.close(chromeWindow);
40 });
41 });
43 return promise;
44 }
45 }
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;
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>");
59 let count = 0;
61 openWebpage(uri, setPrivate).then(function(close) {
62 PageMod({
63 include: [uri, frameUri],
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");
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 }
82 if (++count == 2) {
83 this.destroy();
84 close();
85 done();
86 }
87 }
88 });
89 }).then(null, assert.fail);
90 };
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);
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");
105 this.destroy();
106 close();
107 done();
108 }
109 });
110 }).then(null, assert.fail);
111 }