Files
tubestation/addon-sdk/source/lib/sdk/private-browsing/utils.js
Kris Maglione 803885db85 Bug 1314861: Lazily load most SDK module imports. r=rpl
MozReview-Commit-ID: 3mneEkzljiU
2017-04-07 18:11:32 -07:00

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;