diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
commit | 43a97878ce14b72f0981164f87f2e35e14151312 (patch) | |
tree | 620249daf56c0258faa40cbdcf9cfba06de2a846 /toolkit/components/DefaultCLH.jsm | |
parent | Initial commit. (diff) | |
download | firefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip |
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/components/DefaultCLH.jsm')
-rw-r--r-- | toolkit/components/DefaultCLH.jsm | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/toolkit/components/DefaultCLH.jsm b/toolkit/components/DefaultCLH.jsm new file mode 100644 index 0000000000..d4b104b1b9 --- /dev/null +++ b/toolkit/components/DefaultCLH.jsm @@ -0,0 +1,115 @@ +/* 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/. */ + +const nsICommandLineHandler = Ci.nsICommandLineHandler; +const nsIPrefBranch = Ci.nsIPrefBranch; +const nsIWindowWatcher = Ci.nsIWindowWatcher; +const nsIProperties = Ci.nsIProperties; +const nsIFile = Ci.nsIFile; +const nsISimpleEnumerator = Ci.nsISimpleEnumerator; + +/** + * This file provides a generic default command-line handler. + * + * It opens the chrome window specified by the pref "toolkit.defaultChromeURI" + * with the flags specified by the pref "toolkit.defaultChromeFeatures" + * or "chrome,dialog=no,all" is it is not available. + * The arguments passed to the window are the nsICommandLine instance. + * + * It doesn't do anything if the pref "toolkit.defaultChromeURI" is unset. + */ + +function getDirectoryService() { + return Cc["@mozilla.org/file/directory_service;1"].getService(nsIProperties); +} + +function nsDefaultCLH() {} +nsDefaultCLH.prototype = { + classID: Components.ID("{6ebc941a-f2ff-4d56-b3b6-f7d0b9d73344}"), + + /* nsISupports */ + + QueryInterface: ChromeUtils.generateQI([nsICommandLineHandler]), + + /* nsICommandLineHandler */ + + handle: function clh_handle(cmdLine) { + var printDir; + while ((printDir = cmdLine.handleFlagWithParam("print-xpcom-dir", false))) { + var out = 'print-xpcom-dir("' + printDir + '"): '; + try { + out += getDirectoryService().get(printDir, nsIFile).path; + } catch (e) { + out += "<Not Provided>"; + } + + dump(out + "\n"); + Cu.reportError(out); + } + + var printDirList; + while ( + (printDirList = cmdLine.handleFlagWithParam("print-xpcom-dirlist", false)) + ) { + out = 'print-xpcom-dirlist("' + printDirList + '"): '; + try { + for (let file of getDirectoryService().get( + printDirList, + nsISimpleEnumerator + )) { + out += file.path + ";"; + } + } catch (e) { + out += "<Not Provided>"; + } + + dump(out + "\n"); + Cu.reportError(out); + } + + if (cmdLine.handleFlag("silent", false)) { + cmdLine.preventDefault = true; + } + + if (cmdLine.preventDefault) { + return; + } + + var prefs = Cc["@mozilla.org/preferences-service;1"].getService( + nsIPrefBranch + ); + + try { + var singletonWindowType = prefs.getCharPref( + "toolkit.singletonWindowType" + ); + + var win = Services.wm.getMostRecentWindow(singletonWindowType); + if (win) { + win.focus(); + cmdLine.preventDefault = true; + return; + } + } catch (e) {} + + // if the pref is missing, ignore the exception + try { + var chromeURI = prefs.getCharPref("toolkit.defaultChromeURI"); + + var flags = prefs.getCharPref( + "toolkit.defaultChromeFeatures", + "chrome,dialog=no,all" + ); + + var wwatch = Cc["@mozilla.org/embedcomp/window-watcher;1"].getService( + nsIWindowWatcher + ); + wwatch.openWindow(null, chromeURI, "_blank", flags, cmdLine); + } catch (e) {} + }, + + helpInfo: "", +}; + +var EXPORTED_SYMBOLS = ["nsDefaultCLH"]; |