summaryrefslogtreecommitdiffstats
path: root/addon-sdk/source/test/private-browsing/windows.js
blob: e6f9c53b565839fcd222644469fb87dfff9a8bb1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';

const { onFocus, openDialog, open } = require('sdk/window/utils');
const { open: openPromise, close, focus, promise } = require('sdk/window/helpers');
const { isPrivate } = require('sdk/private-browsing');
const { getMode } = require('sdk/private-browsing/utils');
const { browserWindows: windows } = require('sdk/windows');
const { defer } = require('sdk/core/promise');
const tabs = require('sdk/tabs');
const { getMostRecentBrowserWindow } = require('sdk/window/utils');
const { cleanUI } = require("sdk/test/utils");

// test openDialog() from window/utils with private option
// test isActive state in pwpb case
// test isPrivate on ChromeWindow
exports.testPerWindowPrivateBrowsingGetter = function*(assert) {
  let win = openDialog({ private: true });

  yield promise(win, 'DOMContentLoaded');

  assert.equal(getMode(win), true, 'Newly opened window is in PB mode');
  assert.ok(isPrivate(win), 'isPrivate(window) is true');

  yield close(win);
}

// test open() from window/utils with private feature
// test isActive state in pwpb case
// test isPrivate on ChromeWindow
exports.testPerWindowPrivateBrowsingGetter = function*(assert) {
  let win = open('chrome://browser/content/browser.xul', {
    features: {
      private: true
    }
  });

  yield promise(win, 'DOMContentLoaded');
  assert.equal(getMode(win), true, 'Newly opened window is in PB mode');
  assert.ok(isPrivate(win), 'isPrivate(window) is true');
  yield close(win)
}

exports.testIsPrivateOnWindowOpen = function*(assert) {
  let window = yield new Promise(resolve => {
    windows.open({
      isPrivate: true,
      onOpen: resolve
    });
  });

  assert.equal(isPrivate(window), false, 'isPrivate for a window is true when it should be');
  assert.equal(isPrivate(window.tabs[0]), false, 'isPrivate for a tab is false when it should be');

  yield cleanUI();
}

exports.testIsPrivateOnWindowOpenFromPrivate = function(assert, done) {
    // open a private window
    openPromise(null, {
      features: {
        private: true,
        chrome: true,
        titlebar: true,
        toolbar: true
      }
    }).then(focus).then(function(window) {
      let { promise, resolve } = defer();

      assert.equal(isPrivate(window), true, 'the only open window is private');

      windows.open({
        url: 'about:blank',
        onOpen: function(w) {
          assert.equal(isPrivate(w), false, 'new test window is not private');
          w.close(() => resolve(window));
        }
      });

      return promise;
    }).then(close).
       then(done, assert.fail);
};

exports.testOpenTabWithPrivateWindow = function*(assert) {
  let window = getMostRecentBrowserWindow().OpenBrowserWindow({ private: true });

  assert.pass("loading new private window");

  yield promise(window, 'load').then(focus);

  assert.equal(isPrivate(window), true, 'the focused window is private');

  yield new Promise(resolve => tabs.open({
    url: 'about:blank',
    onOpen: (tab) => {
      assert.equal(isPrivate(tab), false, 'the opened tab is not private');
      tab.close(resolve);
    }
  }));

  yield close(window);
};

exports.testIsPrivateOnWindowOff = function(assert, done) {
  windows.open({
    onOpen: function(window) {
      assert.equal(isPrivate(window), false, 'isPrivate for a window is false when it should be');
      assert.equal(isPrivate(window.tabs[0]), false, 'isPrivate for a tab is false when it should be');
      window.close(done);
    }
  })
}