56 lines
1.9 KiB
JavaScript
56 lines
1.9 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';
|
|
|
|
module.metadata = {
|
|
"stability": "unstable"
|
|
};
|
|
|
|
const { Cc, Ci, Cu } = require('chrome');
|
|
const { is } = require('../system/xul-app');
|
|
const { dispatcher } = require("../util/dispatcher");
|
|
|
|
lazyRequire(this, '../window/utils', "isWindowPrivate");
|
|
lazyRequire(this, '../self', "isPrivateBrowsingSupported");
|
|
|
|
var PrivateBrowsingUtils;
|
|
|
|
// Private browsing is only supported in Fx
|
|
try {
|
|
PrivateBrowsingUtils = Cu.import('resource://gre/modules/PrivateBrowsingUtils.jsm', {}).PrivateBrowsingUtils;
|
|
}
|
|
catch (e) {}
|
|
|
|
exports.isGlobalPBSupported = false;
|
|
|
|
// checks that per-window private browsing is implemented
|
|
var isWindowPBSupported = exports.isWindowPBSupported =
|
|
!!PrivateBrowsingUtils && is('Firefox');
|
|
|
|
// checks that per-tab private browsing is implemented
|
|
var isTabPBSupported = exports.isTabPBSupported =
|
|
!!PrivateBrowsingUtils && is('Fennec');
|
|
|
|
function isPermanentPrivateBrowsing() {
|
|
return !!(PrivateBrowsingUtils && PrivateBrowsingUtils.permanentPrivateBrowsing);
|
|
}
|
|
exports.isPermanentPrivateBrowsing = isPermanentPrivateBrowsing;
|
|
|
|
function ignoreWindow(window) {
|
|
return !isPrivateBrowsingSupported && isWindowPrivate(window);
|
|
}
|
|
exports.ignoreWindow = ignoreWindow;
|
|
|
|
var getMode = function getMode(chromeWin) {
|
|
return (chromeWin !== undefined && isWindowPrivate(chromeWin));
|
|
};
|
|
exports.getMode = getMode;
|
|
|
|
const isPrivate = dispatcher("isPrivate");
|
|
isPrivate.when(isPermanentPrivateBrowsing, _ => true);
|
|
isPrivate.when(x => x instanceof Ci.nsIDOMWindow, isWindowPrivate);
|
|
isPrivate.when(x => Ci.nsIPrivateBrowsingChannel && x instanceof Ci.nsIPrivateBrowsingChannel, x => x.isChannelPrivate);
|
|
isPrivate.define(() => false);
|
|
exports.isPrivate = isPrivate;
|