mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
168 lines
7.1 KiB
Plaintext
168 lines
7.1 KiB
Plaintext
|
/* ***** BEGIN LICENSE BLOCK *****
|
||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||
|
*
|
||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||
|
* the License. You may obtain a copy of the License at
|
||
|
* http://www.mozilla.org/MPL/
|
||
|
*
|
||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||
|
* for the specific language governing rights and limitations under the
|
||
|
* License.
|
||
|
*
|
||
|
* The Original Code is third party utility code.
|
||
|
*
|
||
|
* The Initial Developer of the Original Code is
|
||
|
* the Mozilla Foundation.
|
||
|
* Portions created by the Initial Developer are Copyright (C) 2010
|
||
|
* the Initial Developer. All Rights Reserved.
|
||
|
*
|
||
|
* Contributor(s):
|
||
|
* Daniel Witte (dwitte@mozilla.com)
|
||
|
*
|
||
|
* Alternatively, the contents of this file may be used under the terms of
|
||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||
|
* of those above. If you wish to allow use of your version of this file only
|
||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||
|
* use your version of this file under the terms of the MPL, indicate your
|
||
|
* decision by deleting the provisions above and replace them with the notice
|
||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||
|
* the provisions above, a recipient may use your version of this file under
|
||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||
|
*
|
||
|
* ***** END LICENSE BLOCK ***** */
|
||
|
|
||
|
#include "nsISupports.idl"
|
||
|
|
||
|
interface nsIURI;
|
||
|
interface nsIDOMWindow;
|
||
|
interface nsIChannel;
|
||
|
|
||
|
/**
|
||
|
* Utility functions for determining whether a given URI, channel, or window
|
||
|
* hierarchy is third party with respect to a known URI.
|
||
|
*/
|
||
|
[scriptable, uuid(55385caa-1b94-4376-a34c-b47c51ef0837)]
|
||
|
interface mozIThirdPartyUtil : nsISupports
|
||
|
{
|
||
|
/**
|
||
|
* isThirdPartyURI
|
||
|
*
|
||
|
* Determine whether two URIs are third party with respect to each other.
|
||
|
* This is determined by computing the base domain for both URIs. If they can
|
||
|
* be determined, and the base domains match, the request is defined as first
|
||
|
* party. If it cannot be determined because one or both URIs do not have a
|
||
|
* base domain (for instance, in the case of IP addresses, host aliases such
|
||
|
* as 'localhost', or a file:// URI), an exact string comparison on host is
|
||
|
* performed.
|
||
|
*
|
||
|
* For example, the URI "http://mail.google.com/" is not third party with
|
||
|
* respect to "http://images.google.com/", but "http://mail.yahoo.com/" and
|
||
|
* "http://192.168.1.1/" are.
|
||
|
*
|
||
|
* @return true if aFirstURI is third party with respect to aSecondURI.
|
||
|
*
|
||
|
* @throws if either URI is null, has a malformed host, or has an empty host
|
||
|
* and is not a file:// URI.
|
||
|
*/
|
||
|
boolean isThirdPartyURI(in nsIURI aFirstURI, in nsIURI aSecondURI);
|
||
|
|
||
|
/**
|
||
|
* isThirdPartyWindow
|
||
|
*
|
||
|
* Determine whether the given window hierarchy is third party. This is done
|
||
|
* as follows:
|
||
|
*
|
||
|
* 1) Obtain the URI of the principal associated with 'aWindow'. Call this the
|
||
|
* 'bottom URI'.
|
||
|
* 2) If 'aURI' is provided, determine if it is third party with respect to
|
||
|
* the bottom URI. If so, return.
|
||
|
* 3) Find the same-type parent window, if there is one, and its URI.
|
||
|
* Determine whether it is third party with respect to the bottom URI. If
|
||
|
* so, return.
|
||
|
*
|
||
|
* Therefore, each level in the window hierarchy is tested. (This means that
|
||
|
* nested iframes with different base domains, even though the bottommost and
|
||
|
* topmost URIs might be equal, will be considered third party.)
|
||
|
*
|
||
|
* @param aWindow
|
||
|
* The bottommost window in the hierarchy.
|
||
|
* @param aURI
|
||
|
* A URI to test against. If null, the URI of the principal
|
||
|
* associated with 'aWindow' will be used.
|
||
|
*
|
||
|
* For example, if 'aURI' is "http://mail.google.com/", 'aWindow' has a URI
|
||
|
* of "http://google.com/", and its parent is the topmost content window with
|
||
|
* a URI of "http://mozilla.com", the result will be true.
|
||
|
*
|
||
|
* @return true if 'aURI' is third party with respect to any of the URIs
|
||
|
* associated with aWindow and its same-type parents.
|
||
|
*
|
||
|
* @throws if aWindow is null; the same-type parent of any window in the
|
||
|
* hierarchy cannot be determined; or the URI associated with any
|
||
|
* window in the hierarchy is null, has a malformed host, or has an
|
||
|
* empty host and is not a file:// URI.
|
||
|
*
|
||
|
* @see isThirdPartyURI
|
||
|
*/
|
||
|
boolean isThirdPartyWindow(in nsIDOMWindow aWindow, [optional] in nsIURI aURI);
|
||
|
|
||
|
/**
|
||
|
* isThirdPartyChannel
|
||
|
*
|
||
|
* Determine whether the given channel and its content window hierarchy is
|
||
|
* third party. This is done as follows:
|
||
|
*
|
||
|
* 1) If 'aChannel' is an nsIHttpChannel and has the
|
||
|
* 'forceAllowThirdPartyCookie' property set, then:
|
||
|
* a) If 'aURI' is null, return false.
|
||
|
* b) Otherwise, find the URI of the channel, determine whether it is
|
||
|
* foreign with respect to 'aURI', and return.
|
||
|
* 2) Find the URI of the channel and determine whether it is third party with
|
||
|
* respect to the URI of the channel. If so, return.
|
||
|
* 3) Obtain the bottommost nsIDOMWindow, and its same-type parent if it
|
||
|
* exists, from the channel's notification callbacks. Then:
|
||
|
* a) If the parent is the same as the bottommost window, and the channel
|
||
|
* has the LOAD_DOCUMENT_URI flag set, return false. This represents the
|
||
|
* case where a toplevel load is occurring and the window's URI has not
|
||
|
* yet been updated. (We have already checked that 'aURI' is not foreign
|
||
|
* with respect to the channel URI.)
|
||
|
* b) Otherwise, return the result of isThirdPartyWindow with arguments
|
||
|
* of the channel's bottommost window and the channel URI, respectively.
|
||
|
*
|
||
|
* Therefore, both the channel's URI and each level in the window hierarchy
|
||
|
* associated with the channel is tested.
|
||
|
*
|
||
|
* @param aChannel
|
||
|
* The channel associated with the load.
|
||
|
* @param aURI
|
||
|
* A URI to test against. If null, the URI of the channel will be used.
|
||
|
*
|
||
|
* For example, if 'aURI' is "http://mail.google.com/", 'aChannel' has a URI
|
||
|
* of "http://google.com/", and its parent is the topmost content window with
|
||
|
* a URI of "http://mozilla.com", the result will be true.
|
||
|
*
|
||
|
* @return true if aURI is third party with respect to the channel URI or any
|
||
|
* of the URIs associated with the same-type window hierarchy of the
|
||
|
* channel.
|
||
|
*
|
||
|
* @throws if 'aChannel' is null; the channel has no notification callbacks or
|
||
|
* an associated window; or isThirdPartyWindow throws.
|
||
|
*
|
||
|
* @see isThirdPartyWindow
|
||
|
*/
|
||
|
boolean isThirdPartyChannel(in nsIChannel aChannel, [optional] in nsIURI aURI);
|
||
|
};
|
||
|
|
||
|
%{ C++
|
||
|
/**
|
||
|
* The mozIThirdPartyUtil implementation is an XPCOM service registered
|
||
|
* under the ContractID:
|
||
|
*/
|
||
|
#define THIRDPARTYUTIL_CONTRACTID "@mozilla.org/thirdpartyutil;1"
|
||
|
%}
|
||
|
|