tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 2f8f6d6d07a34d913219438a0411ca78af626d6a
parent 038928d6e58dfb58682c26f3c566e97cb0c69c51
Author: Andrea Marchesini <amarchesini@mozilla.com>
Date:   Thu, 13 Nov 2025 14:34:30 +0000

Bug 1999935 - Remove nsICookieManager.addForAddOn and extensions.cookie.rejectWhenInvalid pref, r=valentin,extension-reviewers,cookie-reviewers,willdurand

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

Diffstat:
Mmodules/libpref/init/all.js | 4----
Mnetwerk/cookie/CookieService.cpp | 48+++++-------------------------------------------
Mnetwerk/cookie/CookieService.h | 1-
Mnetwerk/cookie/nsICookieManager.idl | 18------------------
Mtoolkit/components/extensions/parent/ext-cookies.js | 23++---------------------
Mtoolkit/components/extensions/test/xpcshell/test_ext_cookies_validation.js | 22++++------------------
6 files changed, 11 insertions(+), 105 deletions(-)

diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js @@ -1802,10 +1802,6 @@ pref("extensions.install_origins.enabled", false); pref("extensions.browser_style_mv3.supported", false); pref("extensions.browser_style_mv3.same_as_mv2", false); -// If set to true, browser.cookies.set() will throw exceptions if the cookie is -// invalid. Otherwise, a warning message will be shown in the console. -pref("extensions.cookie.rejectWhenInvalid", true); - // Experimental Inference API pref("extensions.ml.enabled", true); diff --git a/netwerk/cookie/CookieService.cpp b/netwerk/cookie/CookieService.cpp @@ -726,46 +726,10 @@ CookieService::Add(const nsACString& aHost, const nsACString& aPath, } nsCOMPtr<nsICookieValidation> validation; - nsresult rv = - AddInternal(nullptr, aHost, aPath, aName, aValue, aIsSecure, aIsHttpOnly, - aIsSession, aExpiry, &attrs, aSameSite, aSchemeMap, - aIsPartitioned, /* from-http: */ true, nullptr, - /* reject when invalid: */ true, getter_AddRefs(validation)); - if (rv != NS_ERROR_ILLEGAL_VALUE || !validation || - CookieValidation::Cast(validation)->Result() == - nsICookieValidation::eOK) { - validation.forget(aValidation); - return rv; - } - - validation.forget(aValidation); - return NS_OK; -} - -NS_IMETHODIMP -CookieService::AddForAddOn(const nsACString& aHost, const nsACString& aPath, - const nsACString& aName, const nsACString& aValue, - bool aIsSecure, bool aIsHttpOnly, bool aIsSession, - int64_t aExpiry, - JS::Handle<JS::Value> aOriginAttributes, - int32_t aSameSite, nsICookie::schemeType aSchemeMap, - bool aIsPartitioned, JSContext* aCx, - nsICookieValidation** aValidation) { - NS_ENSURE_ARG_POINTER(aCx); - NS_ENSURE_ARG_POINTER(aValidation); - - OriginAttributes attrs; - - if (!aOriginAttributes.isObject() || !attrs.Init(aCx, aOriginAttributes)) { - return NS_ERROR_INVALID_ARG; - } - - nsCOMPtr<nsICookieValidation> validation; nsresult rv = AddInternal(nullptr, aHost, aPath, aName, aValue, aIsSecure, aIsHttpOnly, aIsSession, aExpiry, &attrs, aSameSite, - aSchemeMap, aIsPartitioned, /* from-http: */ - true, nullptr, /* reject when invalid: */ false, - getter_AddRefs(validation)); + aSchemeMap, aIsPartitioned, /* from-http: */ true, + nullptr, getter_AddRefs(validation)); if (rv != NS_ERROR_ILLEGAL_VALUE || !validation || CookieValidation::Cast(validation)->Result() == nsICookieValidation::eOK) { @@ -789,8 +753,7 @@ CookieService::AddNative(nsIURI* aCookieURI, const nsACString& aHost, return AddInternal(aCookieURI, aHost, aPath, aName, aValue, aIsSecure, aIsHttpOnly, aIsSession, aExpiry, aOriginAttributes, aSameSite, aSchemeMap, aIsPartitioned, aFromHttp, - aOperationID, - /* reject when invalid: */ true, aValidation); + aOperationID, aValidation); } nsresult CookieService::AddInternal( @@ -799,8 +762,7 @@ nsresult CookieService::AddInternal( bool aIsHttpOnly, bool aIsSession, int64_t aExpiry, OriginAttributes* aOriginAttributes, int32_t aSameSite, nsICookie::schemeType aSchemeMap, bool aIsPartitioned, bool aFromHttp, - const nsID* aOperationID, bool aRejectWhenInvalid, - nsICookieValidation** aValidation) { + const nsID* aOperationID, nsICookieValidation** aValidation) { NS_ENSURE_ARG_POINTER(aValidation); if (NS_WARN_IF(!aOriginAttributes)) { @@ -834,7 +796,7 @@ nsresult CookieService::AddInternal( RefPtr<CookieValidation> cv = CookieValidation::Validate(cookieData); - if (aRejectWhenInvalid && cv->Result() != nsICookieValidation::eOK) { + if (cv->Result() != nsICookieValidation::eOK) { cv.forget(aValidation); return NS_ERROR_ILLEGAL_VALUE; } diff --git a/netwerk/cookie/CookieService.h b/netwerk/cookie/CookieService.h @@ -150,7 +150,6 @@ class CookieService final : public nsICookieService, OriginAttributes* aOriginAttributes, int32_t aSameSite, nsICookie::schemeType aSchemeMap, bool aIsPartitioned, bool aFromHttp, const nsID* aOperationID, - bool aRejectWhenInvalid, nsICookieValidation** aValidation); }; diff --git a/netwerk/cookie/nsICookieManager.idl b/netwerk/cookie/nsICookieManager.idl @@ -147,24 +147,6 @@ interface nsICookieManager : nsISupports [optional] in boolean aIsPartitioned); /** - * Similar to the previous method but without validation as a blocker. - * This method is a temporary thing. See bug 1976197. - */ - [implicit_jscontext] - nsICookieValidation addForAddOn(in AUTF8String aHost, - in AUTF8String aPath, - in ACString aName, - in AUTF8String aValue, - in boolean aIsSecure, - in boolean aIsHttpOnly, - in boolean aIsSession, - in int64_t aExpiry, - in jsval aOriginAttributes, - in int32_t aSameSite, - in nsICookie_schemeType aSchemeMap, - [optional] in boolean aIsPartitioned); - - /** * This method is the non-xpcom version of add(). In case of an invalid * cookie, it returns a nsICookieValidation object and NS_ERROR_ILLEGAL_VALUE * as error code. diff --git a/toolkit/components/extensions/parent/ext-cookies.js b/toolkit/components/extensions/parent/ext-cookies.js @@ -4,13 +4,6 @@ "use strict"; -XPCOMUtils.defineLazyPreferenceGetter( - this, - "gCookiesRejectWhenInvalid", - "extensions.cookie.rejectWhenInvalid", - false -); - var { ExtensionError } = ExtensionUtils; const SAME_SITE_STATUSES = new Map([ @@ -726,15 +719,9 @@ this.cookies = class extends ExtensionAPIPersistent { let isPartitioned = originAttributes.partitionKey?.length > 0; - // The permission check may have modified the domain, so use - // the new value instead. - let fn = gCookiesRejectWhenInvalid - ? Services.cookies.add - : Services.cookies.addForAddOn; - let cv; try { - cv = fn( + cv = Services.cookies.add( cookieAttrs.host, path, name, @@ -759,13 +746,7 @@ this.cookies = class extends ExtensionAPIPersistent { } if (cv.result !== Ci.nsICookieValidation.eOK) { - if (gCookiesRejectWhenInvalid) { - return Promise.reject({ message: cv.errorString }); - } - - Services.console.logStringMessage( - `Extension ${extension.id} tried to create an invalid cookie: ${cv.errorString}` - ); + return Promise.reject({ message: cv.errorString }); } return self.cookies.get(details); diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_cookies_validation.js b/toolkit/components/extensions/test/xpcshell/test_ext_cookies_validation.js @@ -1,20 +1,6 @@ "use strict"; -add_task( - { pref_set: [["extensions.cookie.rejectWhenInvalid", true]] }, - async function test_no_reject_invalid_cookies() { - await do_test_invalid_cookies({ failure: true }); - } -); - -add_task( - { pref_set: [["extensions.cookie.rejectWhenInvalid", false]] }, - async function test_warn_on_invalid_cookies() { - await do_test_invalid_cookies({ failure: false }); - } -); - -async function do_test_invalid_cookies(options) { +add_task(async function do_test_invalid_cookies() { async function backgroundScript() { browser.test.onMessage.addListener(async message => { let failure = true; @@ -31,7 +17,7 @@ async function do_test_invalid_cookies(options) { `${message.title} - correct exception` ); } finally { - browser.test.assertEq(failure, message.failure, message.title); + browser.test.assertTrue(failure, message.title); browser.test.sendMessage("completed"); } }); @@ -152,10 +138,10 @@ async function do_test_invalid_cookies(options) { ]; for (const test of tests) { - extension.sendMessage({ ...options, ...test }); + extension.sendMessage(test); await extension.awaitMessage("completed"); } await extension.unload(); -} +});