You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
3.6 KiB
110 lines
3.6 KiB
/* 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"; |
|
|
|
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; |
|
} |
|
#elif defined(XP_WIN) |
|
return true; |
|
#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. |
|
*/ |
|
_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; |
|
} |
|
|
|
#ifdef XP_WIN |
|
let optOutValue = WindowsRegistry.readRegKey(Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, |
|
"Software\\Mozilla\\PaleMoon", |
|
"DefaultBrowserOptOut"); |
|
WindowsRegistry.removeRegKey(Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, |
|
"Software\\Mozilla\\PaleMoon", |
|
"DefaultBrowserOptOut"); |
|
if (optOutValue == "True") { |
|
Services.prefs.setBoolPref("browser.shell.checkDefaultBrowser", false); |
|
return false; |
|
} |
|
#endif |
|
|
|
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; |
|
} |
|
});
|
|
|