зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
70cc6039b1
Коммит
0a5f211268
|
@ -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__);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче