Source code

Revision control

Copy as Markdown

Other Tools

/* 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/. */
import { AppConstants } from "resource://gre/modules/AppConstants.sys.mjs";
import { nsBrowserContentHandler } from "resource:///modules/BrowserContentHandler.sys.mjs";
/**
* A command line handler for Firefox shortcuts with the flag "-taskbar-tab",
* which will trigger a web app window to be opened
*
*/
export class CommandLineHandler {
static classID = Components.ID("{974fe39b-4584-4cb5-bf62-5c141aedc557}");
static contractID = "@mozilla.org/browser/taskbar-tabs-clh;1";
QueryInterface = ChromeUtils.generateQI([Ci.nsICommandLineHandler]);
handle(cmdLine) {
let taskbartabUrl;
try {
taskbartabUrl = cmdLine.handleFlagWithParam("taskbar-tab", false);
} catch (e) {
console.error(e);
}
if (taskbartabUrl) {
let args = Cc["@mozilla.org/array;1"].createInstance(Ci.nsIMutableArray);
let url = Cc["@mozilla.org/supports-string;1"].createInstance(
Ci.nsISupportsString
);
url.data = taskbartabUrl;
let extraOptions = Cc["@mozilla.org/hash-property-bag;1"].createInstance(
Ci.nsIWritablePropertyBag2
);
extraOptions.setPropertyAsBool("taskbartab", true);
args.appendElement(url);
args.appendElement(extraOptions);
args.appendElement(null);
args.appendElement(null);
args.appendElement(undefined);
args.appendElement(undefined);
args.appendElement(null);
args.appendElement(null);
args.appendElement(Services.scriptSecurityManager.getSystemPrincipal());
const isStartup = cmdLine.state == Ci.nsICommandLine.STATE_INITIAL_LAUNCH;
if (isStartup) {
let contentHandler = new nsBrowserContentHandler();
contentHandler.replaceStartupWindow(args, false);
}
cmdLine.preventDefault = true;
Services.ww.openWindow(
null,
AppConstants.BROWSER_CHROME_URL,
"_blank",
"chrome,dialog=no,titlebar,close,toolbar,location,personalbar=no,status,menubar=no,resizable,minimizable,scrollbars",
args
);
}
}
}