59 lines
1.8 KiB
JavaScript
59 lines
1.8 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 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");
|
||
|
|
||
|
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;
|
||
|
}
|