/* 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 nsICookie2; interface nsIURI; interface nsIChannel; typedef long nsCookieAccess; /** * An interface to test for cookie permissions */ [scriptable, uuid(4b1a775d-f6d3-4389-be2e-9dfbaf2ab47b)] interface nsICookiePermission : nsISupports { /** * nsCookieAccess values */ const nsCookieAccess ACCESS_DEFAULT = 0; const nsCookieAccess ACCESS_ALLOW = 1; const nsCookieAccess ACCESS_DENY = 2; /** * additional values for nsCookieAccess, which are not directly used by * any methods on this interface, but are nevertheless convenient to define * here. these may be relocated somewhere else if we ever consider freezing * this interface. */ const nsCookieAccess ACCESS_SESSION = 8; /** * setAccess * * this method is called to block cookie access for the given URI. this * may result in other URIs being blocked as well (e.g., URIs which share * the same host name). * * @param aURI * the URI to block * @param aAccess * the new cookie access for the URI. */ void setAccess(in nsIURI aURI, in nsCookieAccess aAccess); /** * canAccess * * this method is called to test whether or not the given URI/channel may * access the cookie database, either to set or get cookies. * * @param aURI * the URI trying to access cookies * @param aChannel * the channel corresponding to aURI * * @return one of the following nsCookieAccess values: * ACCESS_DEFAULT, ACCESS_ALLOW, or ACCESS_DENY */ nsCookieAccess canAccess(in nsIURI aURI, in nsIChannel aChannel); /** * canSetCookie * * this method is called to test whether or not the given URI/channel may * set a specific cookie. this method is always preceded by a call to * canAccess. it may modify the isSession and expiry attributes of the * cookie via the aIsSession and aExpiry parameters, in order to limit * or extend the lifetime of the cookie. this is useful, for instance, to * downgrade a cookie to session-only if it fails to meet certain criteria. * * @param aURI * the URI trying to set the cookie * @param aChannel * the channel corresponding to aURI * @param aCookie * the cookie being added to the cookie database * @param aIsSession * when canSetCookie is invoked, this is the current isSession attribute * of the cookie. canSetCookie may leave this value unchanged to * preserve this attribute of the cookie. * @param aExpiry * when canSetCookie is invoked, this is the current expiry time of * the cookie. canSetCookie may leave this value unchanged to * preserve this attribute of the cookie. * * @return true if the cookie can be set. */ boolean canSetCookie(in nsIURI aURI, in nsIChannel aChannel, in nsICookie2 aCookie, inout boolean aIsSession, inout PRInt64 aExpiry); /** * getOriginatingURI * * determines the originating URI for a load given a channel, for third-party * cookie blocking. this is done by leveraging the loadgroup of the channel to * find the root content docshell, and the URI associated with its principal. * if the root content docshell or its principal's URI cannot be obtained, * this method will throw. * * @param aChannel * the channel for the load trying to get or set cookies * * @return the originating URI. * * @status DEPRECATED -- use mozIThirdPartyUtil instead. */ nsIURI getOriginatingURI(in nsIChannel aChannel); }; %{ C++ /** * The nsICookiePermission implementation is an XPCOM service registered * under the ContractID: */ #define NS_COOKIEPERMISSION_CONTRACTID "@mozilla.org/cookie/permission;1" %}