Bug 1526591 - Remove devtools.inspector.shapesHighlighter.enabled pref. r=rcaliman
[gecko.git] / netwerk / base / mozIThirdPartyUtil.idl
blob8a5f0dc21e36cb3a21c0eedca7664dfc871cdb51
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #include "nsISupports.idl"
7 interface nsIURI;
8 interface mozIDOMWindowProxy;
9 interface nsIChannel;
11 /**
12 * Utility functions for determining whether a given URI, channel, or window
13 * hierarchy is third party with respect to a known URI.
15 [scriptable, uuid(fd82700e-ffb4-4932-b7d6-08f0b5697dda)]
16 interface mozIThirdPartyUtil : nsISupports
18 /**
19 * isThirdPartyURI
21 * Determine whether two URIs are third party with respect to each other.
22 * This is determined by computing the base domain for both URIs. If they can
23 * be determined, and the base domains match, the request is defined as first
24 * party. If it cannot be determined because one or both URIs do not have a
25 * base domain (for instance, in the case of IP addresses, host aliases such
26 * as 'localhost', or a file:// URI), an exact string comparison on host is
27 * performed.
29 * For example, the URI "http://mail.google.com/" is not third party with
30 * respect to "http://images.google.com/", but "http://mail.yahoo.com/" and
31 * "http://192.168.1.1/" are.
33 * @return true if aFirstURI is third party with respect to aSecondURI.
35 * @throws if either URI is null, has a malformed host, or has an empty host
36 * and is not a file:// URI.
38 boolean isThirdPartyURI(in nsIURI aFirstURI, in nsIURI aSecondURI);
40 /**
41 * isThirdPartyWindow
43 * Determine whether the given window hierarchy is third party. This is done
44 * as follows:
46 * 1) Obtain the URI of the principal associated with 'aWindow'. Call this the
47 * 'bottom URI'.
48 * 2) If 'aURI' is provided, determine if it is third party with respect to
49 * the bottom URI. If so, return.
50 * 3) Find the same-type parent window, if there is one, and its URI.
51 * Determine whether it is third party with respect to the bottom URI. If
52 * so, return.
54 * Therefore, each level in the window hierarchy is tested. (This means that
55 * nested iframes with different base domains, even though the bottommost and
56 * topmost URIs might be equal, will be considered third party.)
58 * @param aWindow
59 * The bottommost window in the hierarchy.
60 * @param aURI
61 * A URI to test against. If null, the URI of the principal
62 * associated with 'aWindow' will be used.
64 * For example, if 'aURI' is "http://mail.google.com/", 'aWindow' has a URI
65 * of "http://google.com/", and its parent is the topmost content window with
66 * a URI of "http://mozilla.com", the result will be true.
68 * @return true if 'aURI' is third party with respect to any of the URIs
69 * associated with aWindow and its same-type parents.
71 * @throws if aWindow is null; the same-type parent of any window in the
72 * hierarchy cannot be determined; or the URI associated with any
73 * window in the hierarchy is null, has a malformed host, or has an
74 * empty host and is not a file:// URI.
76 * @see isThirdPartyURI
78 boolean isThirdPartyWindow(in mozIDOMWindowProxy aWindow, [optional] in nsIURI aURI);
80 /**
81 * isThirdPartyChannel
83 * Determine whether the given channel and its content window hierarchy is
84 * third party. This is done as follows:
86 * 1) If 'aChannel' is an nsIHttpChannel and has the
87 * 'forceAllowThirdPartyCookie' property set, then:
88 * a) If 'aURI' is null, return false.
89 * b) Otherwise, find the URI of the channel, determine whether it is
90 * foreign with respect to 'aURI', and return.
91 * 2) Find the URI of the channel and determine whether it is third party with
92 * respect to the URI of the channel. If so, return.
93 * 3) Obtain the bottommost nsIDOMWindow, and its same-type parent if it
94 * exists, from the channel's notification callbacks. Then:
95 * a) If the parent is the same as the bottommost window, and the channel
96 * has the LOAD_DOCUMENT_URI flag set, return false. This represents the
97 * case where a toplevel load is occurring and the window's URI has not
98 * yet been updated. (We have already checked that 'aURI' is not foreign
99 * with respect to the channel URI.)
100 * b) Otherwise, return the result of isThirdPartyWindow with arguments
101 * of the channel's bottommost window and the channel URI, respectively.
103 * Therefore, both the channel's URI and each level in the window hierarchy
104 * associated with the channel is tested.
106 * @param aChannel
107 * The channel associated with the load.
108 * @param aURI
109 * A URI to test against. If null, the URI of the channel will be used.
111 * For example, if 'aURI' is "http://mail.google.com/", 'aChannel' has a URI
112 * of "http://google.com/", and its parent is the topmost content window with
113 * a URI of "http://mozilla.com", the result will be true.
115 * @return true if aURI is third party with respect to the channel URI or any
116 * of the URIs associated with the same-type window hierarchy of the
117 * channel.
119 * @throws if 'aChannel' is null; the channel has no notification callbacks or
120 * an associated window; or isThirdPartyWindow throws.
122 * @see isThirdPartyWindow
124 boolean isThirdPartyChannel(in nsIChannel aChannel, [optional] in nsIURI aURI);
127 * getBaseDomain
129 * Get the base domain for aHostURI; e.g. for "www.bbc.co.uk", this would be
130 * "bbc.co.uk". Only properly-formed URI's are tolerated, though a trailing
131 * dot may be present. If aHostURI is an IP address, an alias such as
132 * 'localhost', an eTLD such as 'co.uk', or the empty string, aBaseDomain will
133 * be the exact host. The result of this function should only be used in exact
134 * string comparisons, since substring comparisons will not be valid for the
135 * special cases elided above.
137 * @param aHostURI
138 * The URI to analyze.
140 * @return the base domain.
142 AUTF8String getBaseDomain(in nsIURI aHostURI);
145 * getURIFromWindow
147 * Returns the URI associated with the script object principal for the
148 * window.
150 nsIURI getURIFromWindow(in mozIDOMWindowProxy aWindow);
153 * getTopWindowForChannel
155 * Returns the top-level window associated with the given channel.
157 [noscript]
158 mozIDOMWindowProxy getTopWindowForChannel(in nsIChannel aChannel, [optional] in nsIURI aURIBeingLoaded);
161 %{ C++
163 * The mozIThirdPartyUtil implementation is an XPCOM service registered
164 * under the ContractID:
166 #define THIRDPARTYUTIL_CONTRACTID "@mozilla.org/thirdpartyutil;1"