diff options
Diffstat (limited to 'tools/addon-sdk-1.12/lib/sdk/private-browsing/utils.js')
-rw-r--r-- | tools/addon-sdk-1.12/lib/sdk/private-browsing/utils.js | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/tools/addon-sdk-1.12/lib/sdk/private-browsing/utils.js b/tools/addon-sdk-1.12/lib/sdk/private-browsing/utils.js new file mode 100644 index 0000000..1f57ca0 --- /dev/null +++ b/tools/addon-sdk-1.12/lib/sdk/private-browsing/utils.js @@ -0,0 +1,74 @@ +/* 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 } = require('chrome'); +const { defer } = require('../lang/functional'); +const observers = require('../deprecated/observer-service'); +const { emit, on, once, off } = require('../event/core'); +const { when: unload } = require('../system/unload'); +const { getWindowLoadingContext } = require('../window/utils'); +const { deprecateFunction } = require('../util/deprecate'); + +let deferredEmit = defer(emit); + +let pbService; + +// Currently, only Firefox implements the private browsing service. +if (require("../system/xul-app").is("Firefox")) { + pbService = Cc["@mozilla.org/privatebrowsing;1"]. + getService(Ci.nsIPrivateBrowsingService); + + // set up an observer for private browsing switches. + observers.add('private-browsing-transition-complete', function onChange() { + // Emit event with in next turn of event loop. + deferredEmit(exports, pbService.privateBrowsingEnabled ? 'start' : 'stop'); + }); +} + +// checks that per-window private browsing implemented +let isWindowPBEnabled = function isWindowPBEnabled(chromeWin) { + return !!(chromeWin && + 'gPrivateBrowsingUI' in chromeWin && + 'privateWindow' in chromeWin.gPrivateBrowsingUI); +} +exports.isWindowPBEnabled = isWindowPBEnabled; + +// We toggle private browsing mode asynchronously in order to work around +// bug 659629. Since private browsing transitions are asynchronous +// anyway, this doesn't significantly change the behavior of the API. +// Note: this method should not be used with `chromeWin` argument until +// the UI has been implemented. Bug 729865 +let setMode = defer(function setMode(value, chromeWin) { + value = !!value; // Cast to boolean. + + if (isWindowPBEnabled(chromeWin)) + return getWindowLoadingContext(chromeWin).usePrivateBrowsing = value; + + // default + return pbService && (pbService.privateBrowsingEnabled = value); +}); +exports.setMode = deprecateFunction( + setMode, + 'require("private-browsing").activate and require("private-browsing").deactivate ' + + 'is deprecated.' +); + +let getMode = function getMode(chromeWin) { + if (isWindowPBEnabled(chromeWin)) + return getWindowLoadingContext(chromeWin).usePrivateBrowsing; + + // default + return pbService ? pbService.privateBrowsingEnabled : false; +}; +exports.getMode = getMode; + +exports.on = on.bind(null, exports); + +// Make sure listeners are cleaned up. +unload(function() off(exports)); |