/* 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/. */ #ifndef mozilla_net_ThirdPartyCookieBlockingExceptions_h #define mozilla_net_ThirdPartyCookieBlockingExceptions_h #include "mozilla/MozPromise.h" #include "nsEffectiveTLDService.h" #include "nsString.h" #include "nsTArray.h" #include "nsTHashSet.h" #include "nsIThirdPartyCookieBlockingExceptionListService.h" class nsIEffectiveTLDService; class nsIURI; class nsIChannel; namespace mozilla { namespace net { class ThirdPartyCookieBlockingExceptions final { public: // Initializes the foreign cookie blocking exception list. void Initialize(); // Check if the given top-level and third-party URIs are in the exception // list. bool CheckExceptionForURIs(nsIURI* aFirstPartyURI, nsIURI* aThirdPartyURI); // Check if the given channel is in the exception list. bool CheckExceptionForChannel(nsIChannel* aChannel); void Insert(const nsACString& aException); void Remove(const nsACString& aException); void GetExceptions(nsTArray& aExceptions); void Shutdown(); bool IsInitialized() const { return mIsInitialized; } private: nsCOMPtr m3PCBExceptionService; // A helper function to create a key for the exception list. static void Create3PCBExceptionKey(const nsACString& aFirstPartySite, const nsACString& aThirdPartySite, nsACString& aKey) { aKey.Truncate(); aKey.Append(aFirstPartySite); aKey.AppendLiteral(","); aKey.Append(aThirdPartySite); } // Check if the given third-party site is in the wildcard exception list. // The wildcard exception list is used to allow third-party cookies under // every top-level site. bool CheckWildcardException(const nsACString& aThirdPartySite); // Check if the given first-party and third-party sites are in the exception // list. bool CheckException(const nsACString& aFirstPartySite, const nsACString& aThirdPartySite); // The flag that indicates if the 3PCB exception service is initialized. bool mIsInitialized = false; nsTHashSet m3PCBExceptionsSet; }; } // namespace net } // namespace mozilla #endif // mozilla_net_ThirdPartyCookieBlockingExceptions_h