diff --git a/netwerk/cookie/CookieJarSettings.cpp b/netwerk/cookie/CookieJarSettings.cpp index ae078873af1f..b9d6e3c5a216 100644 --- a/netwerk/cookie/CookieJarSettings.cpp +++ b/netwerk/cookie/CookieJarSettings.cpp @@ -137,9 +137,7 @@ NS_IMETHODIMP CookieJarSettings::GetRejectThirdPartyTrackers( bool* aRejectThirdPartyTrackers) { *aRejectThirdPartyTrackers = - mCookieBehavior == nsICookieService::BEHAVIOR_REJECT_TRACKER || - mCookieBehavior == - nsICookieService::BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN; + CookieJarSettings::IsRejectThirdPartyTrackers(mCookieBehavior); return NS_OK; } @@ -407,6 +405,13 @@ void CookieJarSettings::UpdateIsOnContentBlockingAllowList( mIsOnContentBlockingAllowList); } +// static +bool CookieJarSettings::IsRejectThirdPartyTrackers(uint32_t aCookieBehavior) { + return aCookieBehavior == nsICookieService::BEHAVIOR_REJECT_TRACKER || + aCookieBehavior == + nsICookieService::BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN; +} + NS_IMPL_ISUPPORTS(CookieJarSettings, nsICookieJarSettings) } // namespace net diff --git a/netwerk/cookie/CookieJarSettings.h b/netwerk/cookie/CookieJarSettings.h index e16d8af34163..d7cedbaf162d 100644 --- a/netwerk/cookie/CookieJarSettings.h +++ b/netwerk/cookie/CookieJarSettings.h @@ -137,6 +137,10 @@ class CookieJarSettings final : public nsICookieJarSettings { void UpdateIsOnContentBlockingAllowList(nsIChannel* aChannel); + // Utility function to test if the passed cookiebahvior is + // BEHAVIOR_REJECT_TRACKER or BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN; + static bool IsRejectThirdPartyTrackers(uint32_t aCookieBehavior); + private: enum State { // No cookie permissions are allowed to be stored in this object. diff --git a/toolkit/components/antitracking/ContentBlocking.cpp b/toolkit/components/antitracking/ContentBlocking.cpp index 3f591360c49c..5f16b6af0643 100644 --- a/toolkit/components/antitracking/ContentBlocking.cpp +++ b/toolkit/components/antitracking/ContentBlocking.cpp @@ -13,6 +13,8 @@ #include "mozilla/ContentBlockingUserInteraction.h" #include "mozilla/dom/BrowsingContext.h" #include "mozilla/dom/ContentChild.h" +#include "mozilla/dom/WindowContext.h" +#include "mozilla/net/CookieJarSettings.h" #include "mozilla/StaticPrefs_privacy.h" #include "mozIThirdPartyUtil.h" #include "nsContentUtils.h" @@ -287,10 +289,40 @@ ContentBlocking::AllowAccessFor( PromiseFlatCString(origin).get())); } + RefPtr parentWindowContext = + aParentContext->GetCurrentWindowContext(); + if (!parentWindowContext) { + LOG( + ("No window context found for our parent browsing context, bailing out " + "early")); + return StorageAccessGrantPromise::CreateAndReject(false, __func__); + } + + Maybe cookieJarSetting = + parentWindowContext->GetCookieJarSettings(); + if (cookieJarSetting.isNothing()) { + LOG( + ("No cookiejar setting found for our parent window context, bailing " + "out early")); + return StorageAccessGrantPromise::CreateAndReject(false, __func__); + } + + uint32_t behavior = cookieJarSetting->cookieBehavior(); + if (!net::CookieJarSettings::IsRejectThirdPartyTrackers(behavior)) { + LOG( + ("Disabled by network.cookie.cookieBehavior pref (%d), bailing out " + "early", + behavior)); + return StorageAccessGrantPromise::CreateAndResolve(true, __func__); + } + + MOZ_ASSERT( + behavior == nsICookieService::BEHAVIOR_REJECT_TRACKER || + behavior == + nsICookieService::BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN); + nsCOMPtr parentOuter = aParentContext->GetDOMWindow(); if (!parentOuter) { - // TODO: Bug 1616775 should implement the parent version of AllowAccessFor - // here when parent window is NOT in-process. LOG( ("No outer window found for our parent window context, bailing out " "early")); @@ -306,26 +338,6 @@ ContentBlocking::AllowAccessFor( return StorageAccessGrantPromise::CreateAndReject(false, __func__); } - Document* parentDoc = parentInner->GetExtantDoc(); - if (!parentDoc) { - LOG(("No document found for our parent inner window, bailing out early")); - return StorageAccessGrantPromise::CreateAndReject(false, __func__); - } - int32_t behavior = parentDoc->CookieJarSettings()->GetCookieBehavior(); - - if (!parentDoc->CookieJarSettings()->GetRejectThirdPartyTrackers()) { - LOG( - ("Disabled by network.cookie.cookieBehavior pref (%d), bailing out " - "early", - behavior)); - return StorageAccessGrantPromise::CreateAndResolve(true, __func__); - } - - MOZ_ASSERT( - behavior == nsICookieService::BEHAVIOR_REJECT_TRACKER || - behavior == - nsICookieService::BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN); - if (ContentBlockingAllowList::Check(parentInner)) { return StorageAccessGrantPromise::CreateAndResolve(true, __func__); }