1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/addon-sdk/source/test/private-browsing/helper.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,100 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 +'use strict'; 1.8 + 1.9 +const { Loader } = require('sdk/test/loader'); 1.10 + 1.11 +const { loader } = LoaderWithHookedConsole(module); 1.12 + 1.13 +const pb = loader.require('sdk/private-browsing'); 1.14 +const pbUtils = loader.require('sdk/private-browsing/utils'); 1.15 +const xulApp = require("sdk/system/xul-app"); 1.16 +const { open: openWindow, getMostRecentBrowserWindow } = require('sdk/window/utils'); 1.17 +const { openTab, getTabContentWindow, getActiveTab, setTabURL, closeTab } = require('sdk/tabs/utils'); 1.18 +const promise = require("sdk/core/promise"); 1.19 +const windowHelpers = require('sdk/window/helpers'); 1.20 +const events = require("sdk/system/events"); 1.21 + 1.22 +function LoaderWithHookedConsole(module) { 1.23 + let globals = {}; 1.24 + let errors = []; 1.25 + 1.26 + globals.console = Object.create(console, { 1.27 + error: { 1.28 + value: function(e) { 1.29 + errors.push(e); 1.30 + if (!/DEPRECATED:/.test(e)) { 1.31 + console.error(e); 1.32 + } 1.33 + } 1.34 + } 1.35 + }); 1.36 + 1.37 + let loader = Loader(module, globals); 1.38 + 1.39 + return { 1.40 + loader: loader, 1.41 + errors: errors 1.42 + } 1.43 +} 1.44 + 1.45 +function deactivate(callback) { 1.46 + if (pbUtils.isGlobalPBSupported) { 1.47 + if (callback) 1.48 + pb.once('stop', callback); 1.49 + pb.deactivate(); 1.50 + } 1.51 +} 1.52 +exports.deactivate = deactivate; 1.53 + 1.54 +exports.pb = pb; 1.55 +exports.pbUtils = pbUtils; 1.56 +exports.LoaderWithHookedConsole = LoaderWithHookedConsole; 1.57 + 1.58 +exports.openWebpage = function openWebpage(url, enablePrivate) { 1.59 + if (xulApp.is("Fennec")) { 1.60 + let chromeWindow = getMostRecentBrowserWindow(); 1.61 + let rawTab = openTab(chromeWindow, url, { 1.62 + isPrivate: enablePrivate 1.63 + }); 1.64 + 1.65 + return { 1.66 + ready: promise.resolve(getTabContentWindow(rawTab)), 1.67 + close: function () { 1.68 + closeTab(rawTab); 1.69 + // Returns a resolved promise as there is no need to wait 1.70 + return promise.resolve(); 1.71 + } 1.72 + }; 1.73 + } 1.74 + else { 1.75 + let win = openWindow(null, { 1.76 + features: { 1.77 + private: enablePrivate 1.78 + } 1.79 + }); 1.80 + let deferred = promise.defer(); 1.81 + 1.82 + // Wait for delayed startup code to be executed, in order to ensure 1.83 + // that the window is really ready 1.84 + events.on("browser-delayed-startup-finished", function onReady({subject}) { 1.85 + if (subject == win) { 1.86 + events.off("browser-delayed-startup-finished", onReady); 1.87 + deferred.resolve(win); 1.88 + 1.89 + let rawTab = getActiveTab(win); 1.90 + setTabURL(rawTab, url); 1.91 + deferred.resolve(getTabContentWindow(rawTab)); 1.92 + } 1.93 + }, true); 1.94 + 1.95 + return { 1.96 + ready: deferred.promise, 1.97 + close: function () { 1.98 + return windowHelpers.close(win); 1.99 + } 1.100 + }; 1.101 + } 1.102 + return null; 1.103 +}