From d0b8a022bca356f8c2b079a51bf93edf75dbf85c Mon Sep 17 00:00:00 2001 From: Kershaw Chang Date: Tue, 2 Jun 2026 07:13:53 +0000 Subject: [PATCH] Bug 2034944 - Filter cookieStore change events by per-host domain-match in CookieStoreNotifier, r=necko-reviewers,valentin,baku Differential Revision: https://phabricator.services.mozilla.com/D297135 --- dom/cookiestore/CookieStoreNotifier.cpp | 14 ++++++++++++-- dom/cookiestore/CookieStoreNotifier.h | 2 ++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/dom/cookiestore/CookieStoreNotifier.cpp b/dom/cookiestore/CookieStoreNotifier.cpp index 73f2b3e96173..1a6561fea357 100644 --- a/dom/cookiestore/CookieStoreNotifier.cpp +++ b/dom/cookiestore/CookieStoreNotifier.cpp @@ -47,13 +47,18 @@ already_AddRefed CookieStoreNotifier::Create( return nullptr; } + nsCString host; + if (NS_WARN_IF(NS_FAILED(principal->GetAsciiHost(host))) || host.IsEmpty()) { + return nullptr; + } + nsCOMPtr os = mozilla::services::GetObserverService(); if (NS_WARN_IF(!os)) { return nullptr; } RefPtr notifier = new CookieStoreNotifier( - aCookieStore, baseDomain, principal->OriginAttributesRef()); + aCookieStore, baseDomain, host, principal->OriginAttributesRef()); nsresult rv = os->AddObserver(notifier, @@ -68,9 +73,10 @@ already_AddRefed CookieStoreNotifier::Create( CookieStoreNotifier::CookieStoreNotifier( CookieStore* aCookieStore, const nsACString& aBaseDomain, - const OriginAttributes& aOriginAttributes) + const nsACString& aHost, const OriginAttributes& aOriginAttributes) : mCookieStore(aCookieStore), mBaseDomain(aBaseDomain), + mHost(aHost), mOriginAttributes(aOriginAttributes) { MOZ_ASSERT(NS_IsMainThread()); MOZ_ASSERT(aCookieStore); @@ -129,6 +135,10 @@ CookieStoreNotifier::Observe(nsISupports* aSubject, const char* aTopic, return NS_OK; } + if (!net::CookieCommons::DomainMatches(net::Cookie::Cast(cookie), mHost)) { + return NS_OK; + } + bool isHttpOnly; rv = cookie->GetIsHttpOnly(&isHttpOnly); if (NS_WARN_IF(NS_FAILED(rv))) { diff --git a/dom/cookiestore/CookieStoreNotifier.h b/dom/cookiestore/CookieStoreNotifier.h index 7eefee65b353..b064293fc3e1 100644 --- a/dom/cookiestore/CookieStoreNotifier.h +++ b/dom/cookiestore/CookieStoreNotifier.h @@ -30,6 +30,7 @@ class CookieStoreNotifier final : public nsIObserver { private: CookieStoreNotifier(CookieStore* aCookieStore, const nsACString& aBaseDomain, + const nsACString& aHost, const OriginAttributes& aOriginAttributes); ~CookieStoreNotifier(); @@ -39,6 +40,7 @@ class CookieStoreNotifier final : public nsIObserver { CookieStore* mCookieStore; nsCString mBaseDomain; + nsCString mHost; OriginAttributes mOriginAttributes; nsTArray> mDelayedDOMEvents;