/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: NPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Netscape 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/NPL/ * * 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 mozilla.org code. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1998 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Gagan Saksena (original author) * * 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 NPL, 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 NPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include "nsIURI.idl" /** * The nsIURL interface provides convenience methods that further * break down the path portion of nsIURI: * * http://directory/fileBaseName.fileExtension?query * http://directory/fileBaseName.fileExtension#ref * http://directory/fileBaseName.fileExtension;param * \ \ / * \ ----------------------- * \ | / * \ fileName / * ---------------------------- * | * filePath * * @status UNDER_REVIEW */ [scriptable, uuid(d6116970-8034-11d3-9399-00104ba0fd40)] interface nsIURL : nsIURI { //////////////////////////////////////////////////////////////////////////// // The path attribute is broken down into the following attributes: // filePath, param, query, and ref: /** * Returns a path including the directory and file portions of a * URL. E.g. The filePath of "http://foo/bar.html#baz" is * "/foo/bar.html". */ attribute string filePath; /** * Returns the parameters specified after the ; in the URL. * */ attribute string param; /** * Returns the query portion (the part after the "?") of the URL. * If there isn't one, an empty string is returned. */ attribute string query; /** * Returns the reference portion (the part after the "#") of the URL. * If there isn't one, an empty string is returned. */ attribute string ref; //////////////////////////////////////////////////////////////////////////// // The filePath attribute is further broken down into the following // attributes: directory, file: /** * Returns the directory portion of a URL. * If the URL denotes a path to a directory and not a file, * e.g. http://foo/bar/, then the Directory attribute accesses * the complete /foo/bar/ portion, and the FileName is the * empty string. If the trailing slash is omitted, then the * Directory is /foo/ and the file is bar (i.e. this is a * syntactic, not a semantic breakdown of the Path). * And hence dont rely on this for something to be a definitely * be a file. But you can get just the leading directory portion * for sure. */ attribute string directory; /** * Returns the file name portion of a URL. * If the URL denotes a path to a directory and not a file, * e.g. http://foo/bar/, then the Directory attribute accesses * the complete /foo/bar/ portion, and the FileName is the * empty string. Note that this is purely based on searching * for the last trailing slash. And hence dont rely on this to * be a definite file. */ attribute string fileName; //////////////////////////////////////////////////////////////////////////// // The fileName attribute is further broken down into the following // attributes: fileName, fileExtension: attribute string fileBaseName; /** * Returns the file extension portion of a filename in a url. * If a file extension does not exist, the empty string is returned. */ attribute string fileExtension; /** * Returns the query portion (the part after the "?") of the URL * without unescaping the string. * If there isn't one, an empty string is returned. */ readonly attribute string escapedQuery; }; //////////////////////////////////////////////////////////////////////////////// /** * Protocol writers can obtain a default nsIURL implementation by calling the * component manager with NS_STANDARDURL_CID. The implementation returned will * implement only the set of accessors specified by nsIURL. After obtaining the * instance from the component manager, the Init routine must be called on the * new instance to initialize it from the user's URL spec. */ [scriptable, uuid(8793370a-311f-11d4-9876-00c04fa0cf4a)] interface nsIStandardURL : nsISupports { const unsigned long URLTYPE_STANDARD = 1; const unsigned long URLTYPE_AUTHORITY = 2; const unsigned long URLTYPE_NO_AUTHORITY = 3; void init(in unsigned long urlType, in long defaultPort, in string initialSpec, in nsIURI initialBaseURI); };