summaryrefslogtreecommitdiffstats
path: root/docshell/base/nsIURIFixup.idl
blob: b6d46315e9271a6533f9fcf89c37fbbd2ead5fa0 (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
/* -*- 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;
webidl BrowsingContext;

/**
 * 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 BrowsingContext 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)
   */
  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"!)
   */
  attribute nsIURI fixedURI;

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

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

  /**
   * Whether we changed the protocol instead of using one from the input as-is.
   */
  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.
   */
  attribute boolean fixupCreatedAlternateURI;

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

  /**
   * The POST data to submit with the returned URI (see nsISearchSubmission).
   */
  attribute nsIInputStream postData;
};


/**
 * 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;

    /*
     * Set when the fixup happens in a private context, the used search engine
     * may differ in this case. Not all consumers care about this, because they
     * may not want the url to be transformed in a search.
     */
    const unsigned long FIXUP_FLAG_PRIVATE_CONTEXT = 4;

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

    /**
     * Tries to converts the specified string into a URI, first attempting
     * to correct any errors in the syntax or other vagaries.
     * It 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.
     *                    Defaults to FIXUP_FLAG_NONE.
     */
    nsIURIFixupInfo getFixupURIInfo(in AUTF8String aURIText,
                                    [optional] in unsigned long aFixupFlags);

    /**
     * Convert load flags from nsIWebNavigation to URI fixup flags for use in
     * getFixupURIInfo.
     *
     * @param aURIText       Candidate URI; used for determining whether to
     *                       allow keyword lookups.
     * @param aDocShellFlags Load flags from nsIDocShell to convert.
     */
    unsigned long webNavigationFlagsToFixupFlags(
        in AUTF8String aURIText, in unsigned long aDocShellFlags);

    /**
     * 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 aIsPrivateContext Whether this is invoked from a private context.
     */
    nsIURIFixupInfo keywordToURI(in AUTF8String aKeyword,
                                 [optional] in boolean aIsPrivateContext);

    /**
     * Returns true if the specified domain is known and false otherwise.
     * A known 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.
     */
    bool isDomainKnown(in AUTF8String aDomain);
};