123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- /* 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 { Cc, Ci } = require('chrome');
- const { isPrivate } = require('sdk/private-browsing');
- const { isWindowPBSupported } = require('sdk/private-browsing/utils');
- const { onFocus, getMostRecentWindow, getWindowTitle,
- getFrames, windows, open: openWindow, isWindowPrivate } = require('sdk/window/utils');
- const { open, close, focus, promise } = require('sdk/window/helpers');
- const { browserWindows } = require("sdk/windows");
- const winUtils = require("sdk/deprecated/window-utils");
- const { fromIterator: toArray } = require('sdk/util/array');
- const tabs = require('sdk/tabs');
- const WM = Cc['@mozilla.org/appshell/window-mediator;1'].getService(Ci.nsIWindowMediator);
- const BROWSER = 'chrome://browser/content/browser.xul';
- function makeEmptyBrowserWindow(options) {
- options = options || {};
- return open(BROWSER, {
- features: {
- chrome: true,
- private: !!options.private
- }
- });
- }
- exports.testWindowTrackerIgnoresPrivateWindows = function(assert, done) {
- var myNonPrivateWindow, myPrivateWindow;
- var finished = false;
- var privateWindow;
- var privateWindowClosed = false;
- var privateWindowOpened = false;
- let wt = winUtils.WindowTracker({
- onTrack: function(window) {
- if (window === myPrivateWindow) {
- assert.equal(isPrivate(window), isWindowPBSupported);
- privateWindowOpened = true;
- }
- },
- onUntrack: function(window) {
- if (window === myPrivateWindow && isWindowPBSupported) {
- privateWindowClosed = true;
- }
- if (window === myNonPrivateWindow) {
- assert.equal(privateWindowClosed, isWindowPBSupported);
- assert.ok(privateWindowOpened);
- wt.unload();
- done();
- }
- }
- });
- // make a new private window
- myPrivateWindow = openWindow(BROWSER, {
- features: {
- private: true
- }
- });
- promise(myPrivateWindow, 'load').then(function(window) {
- assert.equal(isPrivate(window), isWindowPBSupported, 'private window isPrivate');
- assert.equal(isWindowPrivate(window), isWindowPBSupported);
- assert.ok(getFrames(window).length > 1, 'there are frames for private window');
- assert.equal(getWindowTitle(window), window.document.title,
- 'getWindowTitle works');
- close(myPrivateWindow).then(function() {
- assert.pass('private window was closed');
- makeEmptyBrowserWindow().then(function(window) {
- myNonPrivateWindow = window;
- assert.notDeepEqual(myPrivateWindow, myNonPrivateWindow);
- assert.pass('opened new window');
- close(myNonPrivateWindow).then(function() {
- assert.pass('non private window was closed');
- })
- });
- });
- });
- };
- // Test setting activeWIndow and onFocus for private windows
- exports.testSettingActiveWindowDoesNotIgnorePrivateWindow = function(assert, done) {
- let browserWindow = WM.getMostRecentWindow("navigator:browser");
- let testSteps;
- assert.equal(winUtils.activeBrowserWindow, browserWindow,
- "Browser window is the active browser window.");
- assert.ok(!isPrivate(browserWindow), "Browser window is not private.");
- // make a new private window
- makeEmptyBrowserWindow({
- private: true
- }).then(focus).then(function(window) {
- let continueAfterFocus = function(window) onFocus(window).then(nextTest);
- // PWPB case
- if (isWindowPBSupported) {
- assert.ok(isPrivate(window), "window is private");
- assert.notDeepEqual(winUtils.activeBrowserWindow, browserWindow);
- }
- // Global case
- else {
- assert.ok(!isPrivate(window), "window is not private");
- }
- assert.strictEqual(winUtils.activeBrowserWindow, window,
- "Correct active browser window pb supported");
- assert.notStrictEqual(browserWindow, window,
- "The window is not the old browser window");
- testSteps = [
- function() {
- // test setting a non private window
- continueAfterFocus(winUtils.activeWindow = browserWindow);
- },
- function() {
- assert.strictEqual(winUtils.activeWindow, browserWindow,
- "Correct active window [1]");
- assert.strictEqual(winUtils.activeBrowserWindow, browserWindow,
- "Correct active browser window [1]");
- // test focus(window)
- focus(window).then(nextTest);
- },
- function(w) {
- assert.strictEqual(w, window, 'require("sdk/window/helpers").focus on window works');
- assert.strictEqual(winUtils.activeBrowserWindow, window,
- "Correct active browser window [2]");
- assert.strictEqual(winUtils.activeWindow, window,
- "Correct active window [2]");
- // test setting a private window
- continueAfterFocus(winUtils.activeWindow = window);
- },
- function() {
- assert.deepEqual(winUtils.activeBrowserWindow, window,
- "Correct active browser window [3]");
- assert.deepEqual(winUtils.activeWindow, window,
- "Correct active window [3]");
- // just to get back to original state
- continueAfterFocus(winUtils.activeWindow = browserWindow);
- },
- function() {
- assert.deepEqual(winUtils.activeBrowserWindow, browserWindow,
- "Correct active browser window when pb mode is supported [4]");
- assert.deepEqual(winUtils.activeWindow, browserWindow,
- "Correct active window when pb mode is supported [4]");
- close(window).then(done);
- }
- ];
- function nextTest() {
- let args = arguments;
- if (testSteps.length) {
- require('sdk/timers').setTimeout(function() {
- (testSteps.shift()).apply(null, args);
- }, 0);
- }
- }
- nextTest();
- });
- };
- exports.testActiveWindowDoesNotIgnorePrivateWindow = function(assert, done) {
- // make a new private window
- makeEmptyBrowserWindow({
- private: true
- }).then(focus).then(function(window) {
- // PWPB case
- if (isWindowPBSupported) {
- assert.equal(isPrivate(winUtils.activeWindow), true,
- "active window is private");
- assert.equal(isPrivate(winUtils.activeBrowserWindow), true,
- "active browser window is private");
- assert.ok(isWindowPrivate(window), "window is private");
- assert.ok(isPrivate(window), "window is private");
- // pb mode is supported
- assert.ok(
- isWindowPrivate(winUtils.activeWindow),
- "active window is private when pb mode is supported");
- assert.ok(
- isWindowPrivate(winUtils.activeBrowserWindow),
- "active browser window is private when pb mode is supported");
- assert.ok(isPrivate(winUtils.activeWindow),
- "active window is private when pb mode is supported");
- assert.ok(isPrivate(winUtils.activeBrowserWindow),
- "active browser window is private when pb mode is supported");
- }
- // Global case
- else {
- assert.equal(isPrivate(winUtils.activeWindow), false,
- "active window is not private");
- assert.equal(isPrivate(winUtils.activeBrowserWindow), false,
- "active browser window is not private");
- assert.equal(isWindowPrivate(window), false, "window is not private");
- assert.equal(isPrivate(window), false, "window is not private");
- }
- close(window).then(done);
- });
- }
- exports.testWindowIteratorIgnoresPrivateWindows = function(assert, done) {
- // make a new private window
- makeEmptyBrowserWindow({
- private: true
- }).then(focus).then(function(window) {
- assert.equal(isWindowPrivate(window), isWindowPBSupported);
- assert.ok(toArray(winUtils.windowIterator()).indexOf(window) > -1,
- "window is in windowIterator()");
- close(window).then(done);
- });
- };
- // test that it is not possible to find a private window in
- // windows module's iterator
- exports.testWindowIteratorPrivateDefault = function(assert, done) {
- // there should only be one window open here, if not give us the
- // the urls
- if (browserWindows.length > 1) {
- for each (let tab in tabs) {
- assert.fail("TAB URL: " + tab.url);
- }
- }
- else {
- assert.equal(browserWindows.length, 1, 'only one window open');
- }
- open('chrome://browser/content/browser.xul', {
- features: {
- private: true,
- chrome: true
- }
- }).then(focus).then(function(window) {
- // test that there is a private window opened
- assert.equal(isPrivate(window), isWindowPBSupported, 'there is a private window open');
- assert.equal(isPrivate(winUtils.activeWindow), isWindowPBSupported);
- assert.equal(isPrivate(getMostRecentWindow()), isWindowPBSupported);
- assert.equal(isPrivate(browserWindows.activeWindow), isWindowPBSupported);
- assert.equal(browserWindows.length, 2, '2 windows open');
- assert.equal(windows(null, { includePrivate: true }).length, 2);
- close(window).then(done);
- });
- };
|