gecko-dev/addon-sdk/source/test/test-window-utils-global-pr...

153 строки
4.7 KiB
JavaScript

/* 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 windowUtils = require('sdk/deprecated/window-utils');
const { isWindowPBSupported, isGlobalPBSupported } = require('sdk/private-browsing/utils');
const { getFrames, getWindowTitle, onFocus, isWindowPrivate, windows, isBrowser } = require('sdk/window/utils');
const { open, close, focus } = require('sdk/window/helpers');
const { isPrivate } = require('sdk/private-browsing');
const { pb } = require('./private-browsing/helper');
const { fromIterator: toArray } = require('sdk/util/array');
function makeEmptyBrowserWindow(options) {
options = options || {};
return open('chrome://browser/content/browser.xul', {
features: {
chrome: true,
private: !!options.private,
toolbar: true
}
});
}
exports.testShowPanelAndWidgetOnPrivateWindow = function(assert, done) {
var myPrivateWindow;
var finished = false;
var privateWindow;
var privateWindowClosed = false;
var { Panel } = require('sdk/panel');
var { Widget } = require('sdk/widget');
pb.once('start', function() {
assert.pass('private browsing mode started');
// make a new private window
makeEmptyBrowserWindow().then(function(window) {
myPrivateWindow = window;
let wt = windowUtils.WindowTracker({
onTrack: function(window) {
if (!isBrowser(window) || window !== myPrivateWindow) return;
assert.ok(isWindowPrivate(window), 'window is private onTrack!');
let panel = Panel({
onShow: function() {
assert.ok(this.isShowing, 'the panel is showing on the private window');
let count = 0;
let widget = Widget({
id: "testShowPanelAndWidgetOnPrivateWindow-id",
label: "My Hello Widget",
content: "Hello!",
onAttach: function(mod) {
count++;
if (count == 2) {
panel.destroy();
widget.destroy();
close(window);
}
}
});
}
}).show(window.gBrowser);
},
onUntrack: function(window) {
if (window === myPrivateWindow) {
wt.unload();
pb.once('stop', function() {
assert.pass('private browsing mode end');
done();
});
pb.deactivate();
}
}
});
assert.equal(isWindowPrivate(window), true, 'the opened window is private');
assert.equal(isPrivate(window), true, 'the opened window is private');
assert.ok(getFrames(window).length > 1, 'there are frames for private window');
assert.equal(getWindowTitle(window), window.document.title,
'getWindowTitle works');
});
});
pb.activate();
};
exports.testWindowTrackerDoesNotIgnorePrivateWindows = function(assert, done) {
var myPrivateWindow;
var count = 0;
let wt = windowUtils.WindowTracker({
onTrack: function(window) {
if (!isBrowser(window) || !isWindowPrivate(window)) return;
assert.ok(isWindowPrivate(window), 'window is private onTrack!');
if (++count == 1)
close(window);
},
onUntrack: function(window) {
if (count == 1 && isWindowPrivate(window)) {
wt.unload();
pb.once('stop', function() {
assert.pass('private browsing mode end');
done();
});
pb.deactivate();
}
}
});
pb.once('start', function() {
assert.pass('private browsing mode started');
makeEmptyBrowserWindow();
});
pb.activate();
}
exports.testWindowIteratorDoesNotIgnorePrivateWindows = function(assert, done) {
pb.once('start', function() {
// make a new private window
makeEmptyBrowserWindow().then(function(window) {
assert.ok(isWindowPrivate(window), "window is private");
assert.equal(isPrivate(window), true, 'the opened window is private');
assert.ok(toArray(windowUtils.windowIterator()).indexOf(window) > -1,
"window is in windowIterator()");
assert.ok(windows(null, { includePrivate: true }).indexOf(window) > -1,
"window is in windows()");
close(window).then(function() {
pb.once('stop', function() {
done();
});
pb.deactivate();
});
});
});
pb.activate();
};
if (!isGlobalPBSupported) {
module.exports = {
"test Unsupported Test": function UnsupportedTest (assert) {
assert.pass(
"Skipping global private browsing tests");
}
}
}
require("test").run(exports);