Bug 1612350 - Use CookieJarSetting in WindowContext when adding permission. r=timhuang,baku

Differential Revision: https://phabricator.services.mozilla.com/D66375

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Dimi Lee 2020-03-25 22:22:35 +00:00
Родитель 70cc6039b1
Коммит 0a5f211268
3 изменённых файлов: 46 добавлений и 25 удалений

Просмотреть файл

@ -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

Просмотреть файл

@ -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.

Просмотреть файл

@ -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<dom::WindowContext> parentWindowContext =
aParentContext->GetCurrentWindowContext();
if (!parentWindowContext) {
LOG(
("No window context found for our parent browsing context, bailing out "
"early"));
return StorageAccessGrantPromise::CreateAndReject(false, __func__);
}
Maybe<net::CookieJarSettingsArgs> 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<nsPIDOMWindowOuter> 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__);
}