summaryrefslogtreecommitdiffstats
path: root/toolkit/jetpack/sdk/private-browsing/utils.js
blob: 8b012f0ced3f3857e7bb45635f3e6532162e4f43 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/* 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 { isWindowPrivate } = require('../window/utils');
const { isPrivateBrowsingSupported } = require('../self');
const { dispatcher } = require("../util/dispatcher");

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;