summaryrefslogtreecommitdiffstats
path: root/netwerk/base/nsIURL.idl
blob: 11a9fa0f47cce2d54ed83657405f6e6213055775 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* 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/. */

#include "nsIURI.idl"
interface nsIURIMutator;

/**
 * The nsIURL interface provides convenience methods that further
 * break down the path portion of nsIURI:
 *
 * http://host/directory/fileBaseName.fileExtension?query
 * http://host/directory/fileBaseName.fileExtension#ref
 *            \          \                       /
 *             \          -----------------------
 *              \                   |          /
 *               \               fileName     /
 *                ----------------------------
 *                            |
 *                        filePath
 */
[scriptable, builtinclass, uuid(86adcd89-0b70-47a2-b0fe-5bb2c5f37e31)]
interface nsIURL : nsIURI
{
    /*************************************************************************
     * The URL path is broken down into the following principal components:
     *
     * attribute AUTF8String filePath;
     * attribute AUTF8String query;
     *
     * These are inherited from nsIURI.
     */

    /*************************************************************************
     * The URL filepath is broken down into the following sub-components:
     */

    /**
     * Returns the directory portion of a URL.  If the URL denotes a path to a
     * directory and not a file, e.g. http://host/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 don't rely on this for something to
     * be a definitely be a file. But you can get just the leading directory
     * portion for sure.
     *
     * Some characters may be escaped.
     */
    readonly attribute AUTF8String 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://host/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 don't rely on this to be a definite file.
     *
     * Some characters may be escaped.
     */
    readonly attribute AUTF8String fileName;

    /*************************************************************************
     * The URL filename is broken down even further:
     */

    /**
     * Returns the file basename portion of a filename in a url.
     *
     * Some characters may be escaped.
     */
    readonly attribute AUTF8String fileBaseName;

    /**
     * Returns the file extension portion of a filename in a url.  If a file
     * extension does not exist, the empty string is returned.
     *
     * Some characters may be escaped.
     */
    readonly attribute AUTF8String fileExtension;

    /**
     * This method takes a uri and compares the two.  The common uri portion
     * is returned as a string.  The minimum common uri portion is the
     * protocol, and any of these if present:  login, password, host and port
     * If no commonality is found, "" is returned.  If they are identical, the
     * whole path with file/ref/etc. is returned.  For file uris, it is
     * expected that the common spec would be at least "file:///" since '/' is
     * a shared common root.
     *
     * Examples:
     *    this.spec               aURIToCompare.spec        result
     * 1) http://mozilla.org/     http://www.mozilla.org/   ""
     * 2) http://foo.com/bar/     ftp://foo.com/bar/        ""
     * 3) http://foo.com:8080/    http://foo.com/bar/       ""
     * 4) ftp://user@foo.com/     ftp://user:pw@foo.com/    ""
     * 5) ftp://foo.com/bar/      ftp://foo.com/bar         ftp://foo.com/
     * 6) ftp://foo.com/bar/      ftp://foo.com/bar/b.html  ftp://foo.com/bar/
     * 7) http://foo.com/a.htm#i  http://foo.com/b.htm      http://foo.com/
     * 8) ftp://foo.com/c.htm#i   ftp://foo.com/c.htm       ftp://foo.com/c.htm
     * 9) file:///a/b/c.html      file:///d/e/c.html        file:///
     */
    AUTF8String getCommonBaseSpec(in nsIURI aURIToCompare);

    /**
     * This method tries to create a string which specifies the location of the
     * argument relative to |this|.  If the argument and |this| are equal, the
     * method returns "".  If any of the URIs' scheme, host, userpass, or port
     * don't match, the method returns the full spec of the argument.
     *
     * Examples:
     *    this.spec               aURIToCompare.spec        result
     * 1) http://mozilla.org/     http://www.mozilla.org/   http://www.mozilla.org/
     * 2) http://mozilla.org/     http://www.mozilla.org    http://www.mozilla.org/
     * 3) http://foo.com/bar/     http://foo.com:80/bar/    ""
     * 4) http://foo.com/         http://foo.com/a.htm#b    a.html#b
     * 5) http://foo.com/a/b/     http://foo.com/c          ../../c
     */
    AUTF8String getRelativeSpec(in nsIURI aURIToCompare);

};

[scriptable, builtinclass, uuid(25072eb8-f1e6-482f-9ca9-eddd3d65169a)]
interface nsIURLMutator : nsISupports
{
    [must_use] nsIURIMutator setFileName(in AUTF8String aFileName);
    [must_use] nsIURIMutator setFileBaseName(in AUTF8String aFileBaseName);
    [must_use] nsIURIMutator setFileExtension(in AUTF8String aFileExtension);
};