summaryrefslogtreecommitdiffstats
path: root/docshell/base/nsIURIFixup.idl
blob: 0145aca00f101d9ec6914dcb0c7313b4753d2633 (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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
/* -*- Mode: IDL; tab-width: 4; 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 "nsISupports.idl"

interface nsIURI;
interface nsIInputStream;

/**
 * Interface indicating what we found/corrected when fixing up a URI
 */
[scriptable, uuid(4819f183-b532-4932-ac09-b309cd853be7)]
interface nsIURIFixupInfo : nsISupports
{
  /**
   * Consumer that asked for fixed up URI.
   */
  attribute nsISupports consumer;

  /**
   * Our best guess as to what URI the consumer will want. Might
   * be null if we couldn't salvage anything (for instance, because
   * the input was invalid as a URI and FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP
   * was not passed)
   */
  readonly attribute nsIURI preferredURI;

  /**
   * The fixed-up original input, *never* using a keyword search.
   * (might be null if the original input was not recoverable as
   * a URL, e.g. "foo bar"!)
   */
  readonly attribute nsIURI fixedURI;

  /**
   * The name of the keyword search provider used to provide a keyword search;
   * empty string if no keyword search was done.
   */
  readonly attribute AString keywordProviderName;

  /**
   * The keyword as used for the search (post trimming etc.)
   * empty string if no keyword search was done.
   */
  readonly attribute AString keywordAsSent;

  /**
   * Whether we changed the protocol instead of using one from the input as-is.
   */
  readonly attribute boolean fixupChangedProtocol;

  /**
   * Whether we created an alternative URI. We might have added a prefix and/or
   * suffix, the contents of which are controlled by the
   * browser.fixup.alternate.prefix and .suffix prefs, with the defaults being
   * "www." and ".com", respectively.
   */
  readonly attribute boolean fixupCreatedAlternateURI;

  /**
   * The original input
   */
  readonly attribute AUTF8String originalInput;
};


/**
 * Interface implemented by objects capable of fixing up strings into URIs
 */
[scriptable, uuid(1da7e9d4-620b-4949-849a-1cd6077b1b2d)]
interface nsIURIFixup : nsISupports
{
    /** No fixup flags. */
    const unsigned long FIXUP_FLAG_NONE = 0;

    /**
     * Allow the fixup to use a keyword lookup service to complete the URI.
     * The fixup object implementer should honour this flag and only perform
     * any lengthy keyword (or search) operation if it is set.
     */
    const unsigned long FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP = 1;

    /**
     * Tell the fixup to make an alternate URI from the input URI, for example
     * to turn foo into www.foo.com.
     */
    const unsigned long FIXUP_FLAGS_MAKE_ALTERNATE_URI = 2;

    /*
     * Fix common scheme typos.
     */
    const unsigned long FIXUP_FLAG_FIX_SCHEME_TYPOS = 8;

    /* NB: If adding an extra flag, 4 is free (again) */

    /**
     * Converts an internal URI (e.g. a wyciwyg URI) into one which we can
     * expose to the user, for example on the URL bar.
     *
     * @param  aURI       The URI to be converted
     * @return nsIURI     The converted, exposable URI
     * @throws NS_ERROR_MALFORMED_URI when the exposable portion of aURI is malformed
     * @throws NS_ERROR_UNKNOWN_PROTOCOL when we can't get a protocol handler service
     *         for the URI scheme.
     */
    nsIURI createExposableURI(in nsIURI aURI);

    /**
     * Converts the specified string into a URI, first attempting
     * to correct any errors in the syntax or other vagaries. Returns
     * a wellformed URI or nullptr if it can't.
     *
     * @param aURIText    Candidate URI.
     * @param aFixupFlags Flags that govern ways the URI may be fixed up.
     * @param aPostData   The POST data to submit with the returned
     *                    URI (see nsISearchSubmission).
     */
    nsIURI createFixupURI(in AUTF8String aURIText, in unsigned long aFixupFlags,
                          [optional] out nsIInputStream aPostData);

    /**
     * Same as createFixupURI, but returns information about what it corrected
     * (e.g. whether we could rescue the URI or "just" generated a keyword
     * search URI instead).
     *
     * @param aURIText    Candidate URI.
     * @param aFixupFlags Flags that govern ways the URI may be fixed up.
     * @param aPostData   The POST data to submit with the returned
     *                    URI (see nsISearchSubmission).
     */
    nsIURIFixupInfo getFixupURIInfo(in AUTF8String aURIText,
                                    in unsigned long aFixupFlags,
                                    [optional] out nsIInputStream aPostData);

    /**
     * Converts the specified keyword string into a URI.  Note that it's the
     * caller's responsibility to check whether keywords are enabled and
     * whether aKeyword is a sensible keyword.
     *
     * @param aKeyword  The keyword string to convert into a URI
     * @param aPostData The POST data to submit to the returned URI
     *                  (see nsISearchSubmission).
     *
     * @throws NS_ERROR_FAILURE if the resulting URI requires submission of POST
     *         data and aPostData is null.
     */
    nsIURIFixupInfo keywordToURI(in AUTF8String aKeyword,
                                 [optional] out nsIInputStream aPostData);

    /**
     * Returns true if the specified domain is whitelisted and false otherwise.
     * A whitelisted domain is relevant when we have a single word and can't be
     * sure whether to treat the word as a host name or should instead be
     * treated as a search term.
     *
     * @param aDomain A domain name to query.
     * @param aDotPos The position of the first '.' character in aDomain, or
     *                -1 if no '.' character exists.
     */
    bool isDomainWhitelisted(in AUTF8String aDomain,
                             in uint32_t aDotPos);
};