DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (89b9b3aa3aaf)

VCS Links

Line Code
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 167 168 169 170 171 172 173 174 175 176 177
/* -*- 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. one that has a username and password in
     * it) 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);

    /**
     * Convert load flags from nsIWebNavigation to URI fixup flags for use in
     * createFixupURI or 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 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);
};