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

`}

`