"use strict"; this.EXPORTED_SYMBOLS = ["ShellService"]; const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "WindowsRegistry", "resource://gre/modules/WindowsRegistry.jsm"); /** * Internal functionality to save and restore the docShell.allow* properties. */ var ShellServiceInternal = { /** * Used to determine whether or not to offer "Set as desktop background" * functionality. Even if shell service is available it is not * guaranteed that it is able to set the background for every desktop * which is especially true for Linux with its many different desktop * environments. */ get canSetDesktopBackground() { #ifdef XP_LINUX if (this.shellService) { let linuxShellService = this.shellService .QueryInterface(Ci.nsIGNOMEShellService); return linuxShellService.canSetDesktopBackground; } #else return false; #endif }, /** * Used to determine whether or not to show a "Set Default Browser" * query dialog. This attribute is true if the application is starting * up and "browser.shell.checkDefaultBrowser" is true, otherwise it * is false. I am open to removing this entirely. It's really not the * browser's bussiness what the XDG or mailcap(5) preferences are. * This is most likely legacy browser-wars marketing crap. */ _checkedThisSession: false, get shouldCheckDefaultBrowser() { // If we've already checked, the browser has been started and this is a // new window open, and we don't want to check again. if (this._checkedThisSession) { return false; } if (!Services.prefs.getBoolPref("browser.shell.checkDefaultBrowser")) { return false; } return true; }, set shouldCheckDefaultBrowser(shouldCheck) { Services.prefs.setBoolPref("browser.shell.checkDefaultBrowser", !!shouldCheck); }, isDefaultBrowser(startupCheck, forAllTypes) { // If this is the first browser window, maintain internal state that we've // checked this session (so that subsequent window opens don't show the // default browser dialog). if (startupCheck) { this._checkedThisSession = true; } if (this.shellService) { return this.shellService.isDefaultBrowser(startupCheck, forAllTypes); } return false; } }; XPCOMUtils.defineLazyServiceGetter(ShellServiceInternal, "shellService", "@mozilla.org/browser/shell-service;1", Ci.nsIShellService); /** * The external API exported by this module. */ this.ShellService = new Proxy(ShellServiceInternal, { get(target, name) { if (name in target) { return target[name]; } if (target.shellService) { return target.shellService[name]; } Services.console.logStringMessage(`${name} not found in ShellService: ${target.shellService}`); return undefined; } });