diff --git a/request-cluster.ts b/request-cluster.ts index 0b698c4..ea920d0 100644 --- a/request-cluster.ts +++ b/request-cluster.ts @@ -63,8 +63,16 @@ export class RequestCluster extends EventEmitter { return -1; } else if (indexA > indexB) { return 1; + } else if (entry1.value.length > entry2.value.length) { + return -1; + } else if (entry1.value.length < entry2.value.length) { + return 1; + } else if (entry1.isMarked && !entry2.isMarked) { + return -1; + } else if (!entry1.isMarked && entry2.isMarked) { + return 1; } else { - return entry1.value.length > entry2.value.length ? -1 : 1; + return 0; } } }) @@ -155,4 +163,10 @@ export class RequestCluster extends EventEmitter { exposesOrigin() { return this.requests.some((request) => request.exposesOrigin()); } + + autoMark() { + this.getRepresentativeStolenData().forEach((entry) => { + entry.autoMark(); + }); + } } diff --git a/sidebar/stolen-data.tsx b/sidebar/stolen-data.tsx index cc6d094..58c5048 100644 --- a/sidebar/stolen-data.tsx +++ b/sidebar/stolen-data.tsx @@ -23,9 +23,13 @@ export function StolenData({ if (!origin) { return
; } - const clusters = Object.values(getMemory().getClustersForOrigin(origin)).sort( - RequestCluster.sortCompare - ); + const clusters = Object.values(getMemory().getClustersForOrigin(origin)) + .sort(RequestCluster.sortCompare) + .filter((cluster) => !cookiesOnly || cluster.hasCookies()) + .filter( + (cluster) => + !cookiesOrOriginOnly || cluster.hasCookies() || cluster.exposesOrigin() + ); return (
{" "} @@ -53,6 +57,12 @@ export function StolenData({ Wyczyść pamięć + - {clusters - .filter((cluster) => !cookiesOnly || cluster.hasCookies()) - .filter( - (cluster) => - !cookiesOrOriginOnly || - cluster.hasCookies() || - cluster.exposesOrigin() - ) - .map((cluster) => { - return ( - - ); - })} + {clusters.map((cluster) => { + return ( + + ); + })}
); diff --git a/stolen-data-entry.ts b/stolen-data-entry.ts index fb3e1ea..c495b8a 100644 --- a/stolen-data-entry.ts +++ b/stolen-data-entry.ts @@ -21,6 +21,7 @@ export const Classifications = { }; const ID_PREVIEW_MAX_LENGTH = 20; +const MIN_COOKIE_LENGTH_FOR_AUTO_MARK = 15; const id = (function* id() { let i = 0; @@ -147,13 +148,19 @@ export class StolenDataEntry extends EventEmitter { } mark() { + const had_been_marked_before = this.marked; this.marked = true; - this.emit("change"); + if (!had_been_marked_before) { + this.emit("change"); + } } unmark() { + const had_been_marked_before = this.marked; this.marked = false; - this.emit("change"); + if (had_been_marked_before) { + this.emit("change"); + } } toggleMark() { @@ -171,6 +178,7 @@ export class StolenDataEntry extends EventEmitter { [ this.request.origin, this.request.originalURL, + this.request.originalPathname, getshorthost(this.request.origin), ].some((needle) => haystack.includes(needle)) ) @@ -215,6 +223,26 @@ export class StolenDataEntry extends EventEmitter { } exposesOrigin(): boolean { - return this.value.includes(getshorthost(this.request.origin)); + return ( + this.value.includes(getshorthost(this.request.origin)) || + this.value.includes(this.request.originalPathname) + ); + } + + autoMark() { + if ( + this.classification == "history" || + ((this.source === "cookie" || + this.name.toLowerCase().includes("id") || + this.name.toLowerCase().includes("cookie") || + this.name.toLowerCase().includes("ga") || + this.name.toLowerCase().includes("fb")) && + this.value.length > MIN_COOKIE_LENGTH_FOR_AUTO_MARK) + ) { + if (this.request.shorthost.includes("google") && this.name == "CONSENT") { + return; + } + this.mark(); + } } }