123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- /* 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 { Loader } = require('sdk/test/loader');
- const { loader } = LoaderWithHookedConsole(module);
- const pb = loader.require('sdk/private-browsing');
- const pbUtils = loader.require('sdk/private-browsing/utils');
- const xulApp = require("sdk/system/xul-app");
- const { open: openWindow, getMostRecentBrowserWindow } = require('sdk/window/utils');
- const { openTab, getTabContentWindow, getActiveTab, setTabURL, closeTab } = require('sdk/tabs/utils');
- const promise = require("sdk/core/promise");
- const windowHelpers = require('sdk/window/helpers');
- const events = require("sdk/system/events");
- function LoaderWithHookedConsole(module) {
- let globals = {};
- let errors = [];
- globals.console = Object.create(console, {
- error: {
- value: function(e) {
- errors.push(e);
- if (!/DEPRECATED:/.test(e)) {
- console.error(e);
- }
- }
- }
- });
- let loader = Loader(module, globals);
- return {
- loader: loader,
- errors: errors
- }
- }
- function deactivate(callback) {
- if (pbUtils.isGlobalPBSupported) {
- if (callback)
- pb.once('stop', callback);
- pb.deactivate();
- }
- }
- exports.deactivate = deactivate;
- exports.pb = pb;
- exports.pbUtils = pbUtils;
- exports.LoaderWithHookedConsole = LoaderWithHookedConsole;
- exports.openWebpage = function openWebpage(url, enablePrivate) {
- if (xulApp.is("Fennec")) {
- let chromeWindow = getMostRecentBrowserWindow();
- let rawTab = openTab(chromeWindow, url, {
- isPrivate: enablePrivate
- });
- return {
- ready: promise.resolve(getTabContentWindow(rawTab)),
- close: function () {
- closeTab(rawTab);
- // Returns a resolved promise as there is no need to wait
- return promise.resolve();
- }
- };
- }
- else {
- let win = openWindow(null, {
- features: {
- private: enablePrivate
- }
- });
- let deferred = promise.defer();
- // Wait for delayed startup code to be executed, in order to ensure
- // that the window is really ready
- events.on("browser-delayed-startup-finished", function onReady({subject}) {
- if (subject == win) {
- events.off("browser-delayed-startup-finished", onReady);
- deferred.resolve(win);
- let rawTab = getActiveTab(win);
- setTabURL(rawTab, url);
- deferred.resolve(getTabContentWindow(rawTab));
- }
- }, true);
- return {
- ready: deferred.promise,
- close: function () {
- return windowHelpers.close(win);
- }
- };
- }
- return null;
- }
|