From 0a8ea58bb7ab203a71509ced62c88cb49efeccb0 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Mon, 16 Jun 2025 15:19:01 -0400 Subject: [PATCH] Improve `remove-cookie` scriptlet Related discussion: https://github.com/uBlockOrigin/uAssets/commit/afc6ff52ff2ac886b55cbd4702149f61d33900ec#commitcomment-160172503 --- src/js/resources/cookie.js | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/js/resources/cookie.js b/src/js/resources/cookie.js index d96f4ab46..21300bc65 100644 --- a/src/js/resources/cookie.js +++ b/src/js/resources/cookie.js @@ -137,8 +137,9 @@ export function setCookieFn( if ( options.domain ) { let domain = options.domain; if ( /^\/.+\//.test(domain) ) { + const baseURL = new URL(document.baseURI); const reDomain = new RegExp(domain.slice(1, -1)); - const match = reDomain.exec(document.location.hostname); + const match = reDomain.exec(baseURL.hostname); domain = match ? match[0] : undefined; } if ( domain ) { @@ -369,6 +370,13 @@ export function removeCookie( fn(); }, ms); }; + const baseURL = new URL(document.baseURI); + let targetDomain = extraArgs.domain; + if ( targetDomain && /^\/.+\//.test(targetDomain) ) { + const reDomain = new RegExp(targetDomain.slice(1, -1)); + const match = reDomain.exec(baseURL.hostname); + targetDomain = match ? match[0] : undefined; + } const remove = ( ) => { safe.String_split.call(document.cookie, ';').forEach(cookieStr => { const pos = cookieStr.indexOf('='); @@ -376,16 +384,19 @@ export function removeCookie( const cookieName = cookieStr.slice(0, pos).trim(); if ( reName.test(cookieName) === false ) { return; } const part1 = cookieName + '='; - const part2a = '; domain=' + document.location.hostname; - const part2b = '; domain=.' + document.location.hostname; + const part2a = `; domain=${baseURL.hostname}`; + const part2b = `; domain=.${baseURL.hostname}`; let part2c, part2d; - const domain = document.domain; - if ( domain ) { - if ( domain !== document.location.hostname ) { - part2c = '; domain=.' + domain; + if ( targetDomain ) { + part2c = `; domain=${targetDomain}`; + part2d = `; domain=.${targetDomain}`; + } else if ( document.domain ) { + const domain = document.domain; + if ( domain !== baseURL.hostname ) { + part2c = `; domain=.${domain}`; } if ( domain.startsWith('www.') ) { - part2d = '; domain=' + domain.replace('www', ''); + part2d = `; domain=${domain.replace('www', '')}`; } } const part3 = '; path=/';