| /* ***** BEGIN LICENSE BLOCK ***** |
| * Version: MPL 1.1/GPL 2.0/LGPL 2.1 |
| * |
| * The contents of this file are subject to the Mozilla Public License Version |
| * 1.1 (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * http://www.mozilla.org/MPL/ |
| * |
| * Software distributed under the License is distributed on an "AS IS" basis, |
| * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License |
| * for the specific language governing rights and limitations under the |
| * License. |
| * |
| * The Original Code is the Mozilla toolkit. |
| * |
| * The Initial Developer of the Original Code is |
| * Benjamin Smedberg <benjamin@smedbergs.us> |
| * |
| * Portions created by the Initial Developer are Copyright (C) 2004 |
| * the Initial Developer. All Rights Reserved. |
| * |
| * Contributor(s): |
| * |
| * Alternatively, the contents of this file may be used under the terms of |
| * either the GNU General Public License Version 2 or later (the "GPL"), or |
| * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), |
| * in which case the provisions of the GPL or the LGPL are applicable instead |
| * of those above. If you wish to allow use of your version of this file only |
| * under the terms of either the GPL or the LGPL, and not to allow others to |
| * use your version of this file under the terms of the MPL, indicate your |
| * decision by deleting the provisions above and replace them with the notice |
| * and other provisions required by the GPL or the LGPL. If you do not delete |
| * the provisions above, a recipient may use your version of this file under |
| * the terms of any one of the MPL, the GPL or the LGPL. |
| * |
| * ***** END LICENSE BLOCK ***** */ |
| |
| #include "nsISupports.idl" |
| |
| interface nsIFile; |
| interface nsIURI; |
| interface nsIDOMWindow; |
| |
| /** |
| * Represents the command line used to invoke a XUL application. This may be the |
| * original command-line of this instance, or a command line remoted from another |
| * instance of the application. |
| * |
| * DEFINITIONS: |
| * "arguments" are any values found on the command line. |
| * "flags" are switches. In normalized form they are preceded by a single dash. |
| * Some flags may take "parameters", e.g. "-url <param>" or "-install-xpi <param>" |
| * |
| * @status UNDER_REVIEW This interface is intended to be frozen, but isn't frozen |
| * yet. Please use with care. |
| */ |
| |
| [scriptable, uuid(bc3173bd-aa46-46a0-9d25-d9867a9659b6)] |
| interface nsICommandLine : nsISupports |
| { |
| /** |
| * Number of arguments in the command line. The application name is not |
| * part of the command line. |
| */ |
| readonly attribute long length; |
| |
| /** |
| * Get an argument from the array of command-line arguments. |
| * |
| * On windows, flags of the form /flag are normalized to -flag. /flag:param |
| * are normalized to -flag param. |
| * |
| * On *nix and mac flags of the form --flag are normalized to -flag. --flag=param |
| * are normalized to the form -flag param. |
| * |
| * @param aIndex The argument to retrieve. This index is 0-based, and does |
| * not include the application name. |
| * @return The indexth argument. |
| * @throws NS_ERROR_INVALID_ARG if aIndex is out of bounds. |
| */ |
| AString getArgument(in long aIndex); |
| |
| /** |
| * Find a command-line flag. |
| * |
| * @param aFlag The flag name to locate. Do not include the initial |
| * hyphen. |
| * @param aCaseSensitive Whether to do case-sensitive comparisons. |
| * @return The position of the flag in the command line. |
| */ |
| long findFlag(in AString aFlag, in boolean aCaseSensitive); |
| |
| /** |
| * Remove arguments from the command line. This normally occurs after |
| * a handler has processed the arguments. |
| * |
| * @param aStart Index to begin removing. |
| * @param aEnd Index to end removing, inclusive. |
| */ |
| void removeArguments(in long aStart, in long aEnd); |
| |
| /** |
| * A helper method which will find a flag and remove it in one step. |
| * |
| * @param aFlag The flag name to find and remove. |
| * @param aCaseSensitive Whether to do case-sensitive comparisons. |
| * @return Whether the flag was found. |
| */ |
| boolean handleFlag(in AString aFlag, in boolean aCaseSensitive); |
| |
| /** |
| * Find a flag with a parameter and remove both. This is a helper |
| * method that combines "findFlag" and "removeArguments" in one step. |
| * |
| * @return null (a void astring) if the flag is not found. The parameter value |
| * if found. Note that null and the empty string are not the same. |
| * @throws NS_ERROR_INVALID_ARG if the flag exists without a parameter |
| * |
| * @param aFlag The flag name to find and remove. |
| * @param aCaseSensitive Whether to do case-sensitive flag search. |
| */ |
| AString handleFlagWithParam(in AString aFlag, in boolean aCaseSensitive); |
| |
| /** |
| * The type of command line being processed. |
| * |
| * STATE_INITIAL_LAUNCH is the first launch of the application instance. |
| * STATE_REMOTE_AUTO is a remote command line automatically redirected to |
| * this instance. |
| * STATE_REMOTE_EXPLICIT is a remote command line explicitly redirected to |
| * this instance using xremote/windde/appleevents. |
| */ |
| readonly attribute unsigned long state; |
| |
| const unsigned long STATE_INITIAL_LAUNCH = 0; |
| const unsigned long STATE_REMOTE_AUTO = 1; |
| const unsigned long STATE_REMOTE_EXPLICIT = 2; |
| |
| /** |
| * There may be a command-line handler which performs a default action if |
| * there was no explicit action on the command line (open a default browser |
| * window, for example). This flag allows the default action to be prevented. |
| */ |
| attribute boolean preventDefault; |
| |
| /** |
| * The working directory for this command line. Use this property instead |
| * of the working directory for the current process, since a redirected |
| * command line may have had a different working directory. |
| */ |
| readonly attribute nsIFile workingDirectory; |
| |
| /** |
| * A window to be targeted by this command line. In most cases, this will |
| * be null (xremote will sometimes set this attribute). |
| */ |
| readonly attribute nsIDOMWindow windowContext; |
| |
| /** |
| * Resolve a file-path argument into an nsIFile. This method gracefully |
| * handles relative or absolute file paths, according to the working |
| * directory of this command line. |
| * |
| * @param aArgument The command-line argument to resolve. |
| */ |
| nsIFile resolveFile(in AString aArgument); |
| |
| /** |
| * Resolves a URI argument into a URI. This method has platform-specific |
| * logic for converting an absolute URI or a relative file-path into the |
| * appropriate URI object; it gracefully handles win32 C:\ paths which would |
| * confuse the ioservice if passed directly. |
| * |
| * @param aArgument The command-line argument to resolve. |
| */ |
| nsIURI resolveURI(in AString aArgument); |
| }; |