'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");let PrivateBrowsingUtils;try{PrivateBrowsingUtils=Cu.import('resource://gre/modules/PrivateBrowsingUtils.jsm',{}).PrivateBrowsingUtils;}
catch(e){}
exports.isGlobalPBSupported=false;let isWindowPBSupported=exports.isWindowPBSupported=!!PrivateBrowsingUtils&&is('Firefox');let 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;let 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;