mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
232 lines
7.1 KiB
JavaScript
232 lines
7.1 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';
|
|
|
|
let { Cc, Ci } = require("chrome");
|
|
const timer = require("sdk/timers");
|
|
const { LoaderWithHookedConsole, pb, pbUtils, activate, deactivate } = require("./helper");
|
|
const tabs = require("sdk/tabs");
|
|
|
|
exports["test activate private mode via handler"] = function(test) {
|
|
test.waitUntilDone();
|
|
|
|
function onReady(tab) {
|
|
if (tab.url == "about:robots")
|
|
tab.close(function() pb.activate());
|
|
}
|
|
function cleanup(tab) {
|
|
if (tab.url == "about:") {
|
|
tabs.removeListener("ready", cleanup);
|
|
tab.close(function onClose() {
|
|
test.done();
|
|
});
|
|
}
|
|
}
|
|
|
|
tabs.on("ready", onReady);
|
|
pb.once("start", function onStart() {
|
|
test.pass("private mode was activated");
|
|
pb.deactivate();
|
|
});
|
|
pb.once("stop", function onStop() {
|
|
test.pass("private mode was deactivated");
|
|
tabs.removeListener("ready", onReady);
|
|
tabs.on("ready", cleanup);
|
|
});
|
|
tabs.once("open", function onOpen() {
|
|
tabs.open("about:robots");
|
|
});
|
|
tabs.open("about:");
|
|
};
|
|
|
|
// tests that isActive has the same value as the private browsing service
|
|
// expects
|
|
exports.testGetIsActive = function (test) {
|
|
test.waitUntilDone();
|
|
|
|
test.assertEqual(pb.isActive, false,
|
|
"private-browsing.isActive is correct without modifying PB service");
|
|
test.assertEqual(pb.isPrivate(), false,
|
|
"private-browsing.sPrivate() is correct without modifying PB service");
|
|
|
|
pb.once("start", function() {
|
|
test.assert(pb.isActive,
|
|
"private-browsing.isActive is correct after modifying PB service");
|
|
test.assert(pb.isPrivate(),
|
|
"private-browsing.sPrivate() is correct after modifying PB service");
|
|
// Switch back to normal mode.
|
|
pb.deactivate();
|
|
});
|
|
pb.activate();
|
|
|
|
pb.once("stop", function() {
|
|
test.assert(!pb.isActive,
|
|
"private-browsing.isActive is correct after modifying PB service");
|
|
test.assert(!pb.isPrivate(),
|
|
"private-browsing.sPrivate() is correct after modifying PB service");
|
|
test.done();
|
|
});
|
|
};
|
|
|
|
exports.testStart = function(test) {
|
|
test.waitUntilDone();
|
|
|
|
pb.on("start", function onStart() {
|
|
test.assertEqual(this, pb, "`this` should be private-browsing module");
|
|
test.assert(pbUtils.getMode(),
|
|
'private mode is active when "start" event is emitted');
|
|
test.assert(pb.isActive,
|
|
'`isActive` is `true` when "start" event is emitted');
|
|
test.assert(pb.isPrivate(),
|
|
'`isPrivate` is `true` when "start" event is emitted');
|
|
pb.removeListener("start", onStart);
|
|
deactivate(function() test.done());
|
|
});
|
|
pb.activate();
|
|
};
|
|
|
|
exports.testStop = function(test) {
|
|
test.waitUntilDone();
|
|
pb.once("stop", function onStop() {
|
|
test.assertEqual(this, pb, "`this` should be private-browsing module");
|
|
test.assertEqual(pbUtils.getMode(), false,
|
|
"private mode is disabled when stop event is emitted");
|
|
test.assertEqual(pb.isActive, false,
|
|
"`isActive` is `false` when stop event is emitted");
|
|
test.assertEqual(pb.isPrivate(), false,
|
|
"`isPrivate()` is `false` when stop event is emitted");
|
|
test.done();
|
|
});
|
|
pb.activate();
|
|
pb.once("start", function() {
|
|
pb.deactivate();
|
|
});
|
|
};
|
|
|
|
exports.testBothListeners = function(test) {
|
|
test.waitUntilDone();
|
|
let stop = false;
|
|
let start = false;
|
|
|
|
function onStop() {
|
|
test.assertEqual(stop, false,
|
|
"stop callback must be called only once");
|
|
test.assertEqual(pbUtils.getMode(), false,
|
|
"private mode is disabled when stop event is emitted");
|
|
test.assertEqual(pb.isActive, false,
|
|
"`isActive` is `false` when stop event is emitted");
|
|
test.assertEqual(pb.isPrivate(), false,
|
|
"`isPrivate()` is `false` when stop event is emitted");
|
|
|
|
pb.on("start", finish);
|
|
pb.removeListener("start", onStart);
|
|
pb.removeListener("start", onStart2);
|
|
pb.activate();
|
|
stop = true;
|
|
}
|
|
|
|
function onStart() {
|
|
test.assertEqual(false, start,
|
|
"stop callback must be called only once");
|
|
test.assert(pbUtils.getMode(),
|
|
"private mode is active when start event is emitted");
|
|
test.assert(pb.isActive,
|
|
"`isActive` is `true` when start event is emitted");
|
|
test.assert(pb.isPrivate(),
|
|
"`isPrivate()` is `true` when start event is emitted");
|
|
|
|
pb.on("stop", onStop);
|
|
pb.deactivate();
|
|
start = true;
|
|
}
|
|
|
|
function onStart2() {
|
|
test.assert(start, "start listener must be called already");
|
|
test.assertEqual(false, stop, "stop callback must not be called yet");
|
|
}
|
|
|
|
function finish() {
|
|
test.assert(pbUtils.getMode(), true,
|
|
"private mode is active when start event is emitted");
|
|
test.assert(pb.isActive,
|
|
"`isActive` is `true` when start event is emitted");
|
|
test.assert(pb.isPrivate(),
|
|
"`isPrivate()` is `true` when start event is emitted");
|
|
|
|
pb.removeListener("start", finish);
|
|
pb.removeListener("stop", onStop);
|
|
|
|
pb.deactivate();
|
|
pb.once("stop", function () {
|
|
test.assertEqual(pbUtils.getMode(), false);
|
|
test.assertEqual(pb.isActive, false);
|
|
test.assertEqual(pb.isPrivate(), false);
|
|
|
|
test.done();
|
|
});
|
|
}
|
|
|
|
pb.on("start", onStart);
|
|
pb.on("start", onStart2);
|
|
pb.activate();
|
|
};
|
|
|
|
exports.testAutomaticUnload = function(test) {
|
|
test.waitUntilDone();
|
|
|
|
// Create another private browsing instance and unload it
|
|
let { loader, errors } = LoaderWithHookedConsole();
|
|
let pb2 = loader.require("sdk/private-browsing");
|
|
let called = false;
|
|
pb2.on("start", function onStart() {
|
|
called = true;
|
|
test.fail("should not be called:x");
|
|
});
|
|
loader.unload();
|
|
|
|
// Then switch to private mode in order to check that the previous instance
|
|
// is correctly destroyed
|
|
pb.once("start", function onStart() {
|
|
timer.setTimeout(function () {
|
|
test.assert(!called,
|
|
"First private browsing instance is destroyed and inactive");
|
|
// Must reset to normal mode, so that next test starts with it.
|
|
deactivate(function() test.done());
|
|
}, 0);
|
|
});
|
|
|
|
pb.activate();
|
|
};
|
|
|
|
exports.testUnloadWhileActive = function(test) {
|
|
test.waitUntilDone();
|
|
|
|
let called = false;
|
|
let { loader, errors } = LoaderWithHookedConsole();
|
|
let pb2 = loader.require("sdk/private-browsing");
|
|
let ul = loader.require("sdk/system/unload");
|
|
|
|
let unloadHappened = false;
|
|
ul.when(function() {
|
|
unloadHappened = true;
|
|
timer.setTimeout(function() {
|
|
pb.deactivate();
|
|
});
|
|
});
|
|
pb2.once("start", function() {
|
|
loader.unload();
|
|
});
|
|
pb2.once("stop", function() {
|
|
called = true;
|
|
test.assert(unloadHappened, "the unload event should have already occurred.");
|
|
test.fail("stop should not have been fired");
|
|
});
|
|
pb.once("stop", function() {
|
|
test.assert(!called, "stop was not called on unload")
|
|
test.done();
|
|
});
|
|
|
|
pb.activate();
|
|
};
|