Add ability to trigger cookie removal on specific events · gorhill/uBlock@ef311dd (original) (raw)
`@@ -2703,17 +2703,25 @@ function cookieRemover(
`
2703
2703
`if ( typeof needle !== 'string' ) { return; }
`
2704
2704
`const safe = safeSelf();
`
2705
2705
`const reName = safe.patternToRegex(needle);
`
2706
``
`-
const removeCookie = function() {
`
``
2706
`+
const extraArgs = safe.getExtraArgs(Array.from(arguments), 1);
`
``
2707
`+
const throttle = (fn, ms = 1000) => {
`
``
2708
`+
if ( throttle.timer !== undefined ) { return; }
`
``
2709
`+
throttle.timer = setTimeout(( ) => {
`
``
2710
`+
throttle.timer = undefined;
`
``
2711
`+
fn();
`
``
2712
`+
}, ms);
`
``
2713
`+
};
`
``
2714
`+
const removeCookie = ( ) => {
`
2707
2715
`document.cookie.split(';').forEach(cookieStr => {
`
2708
``
`-
let pos = cookieStr.indexOf('=');
`
``
2716
`+
const pos = cookieStr.indexOf('=');
`
2709
2717
`if ( pos === -1 ) { return; }
`
2710
``
`-
let cookieName = cookieStr.slice(0, pos).trim();
`
2711
``
`-
if ( !reName.test(cookieName) ) { return; }
`
2712
``
`-
let part1 = cookieName + '=';
`
2713
``
`-
let part2a = '; domain=' + document.location.hostname;
`
2714
``
`-
let part2b = '; domain=.' + document.location.hostname;
`
``
2718
`+
const cookieName = cookieStr.slice(0, pos).trim();
`
``
2719
`+
if ( reName.test(cookieName) === false ) { return; }
`
``
2720
`+
const part1 = cookieName + '=';
`
``
2721
`+
const part2a = '; domain=' + document.location.hostname;
`
``
2722
`+
const part2b = '; domain=.' + document.location.hostname;
`
2715
2723
`let part2c, part2d;
`
2716
``
`-
let domain = document.domain;
`
``
2724
`+
const domain = document.domain;
`
2717
2725
`if ( domain ) {
`
2718
2726
`if ( domain !== document.location.hostname ) {
`
2719
2727
`part2c = '; domain=.' + domain;
`
`@@ -2722,8 +2730,8 @@ function cookieRemover(
`
2722
2730
`part2d = '; domain=' + domain.replace('www', '');
`
2723
2731
`}
`
2724
2732
`}
`
2725
``
`-
let part3 = '; path=/';
`
2726
``
`-
let part4 = '; Max-Age=-1000; expires=Thu, 01 Jan 1970 00:00:00 GMT';
`
``
2733
`+
const part3 = '; path=/';
`
``
2734
`+
const part4 = '; Max-Age=-1000; expires=Thu, 01 Jan 1970 00:00:00 GMT';
`
2727
2735
`document.cookie = part1 + part4;
`
2728
2736
`document.cookie = part1 + part2a + part4;
`
2729
2737
`document.cookie = part1 + part2b + part4;
`
`@@ -2738,6 +2746,11 @@ function cookieRemover(
`
2738
2746
`}
`
2739
2747
`});
`
2740
2748
`};
`
``
2749
`+
if ( extraArgs.when === 'scroll' ) {
`
``
2750
`+
document.addEventListener('scroll', ( ) => {
`
``
2751
`+
throttle(removeCookie);
`
``
2752
`+
}, { passive: true });
`
``
2753
`+
}
`
2741
2754
`removeCookie();
`
2742
2755
`window.addEventListener('beforeunload', removeCookie);
`
2743
2756
`}
`