This is an old revision of the document!
Table of Contents
Provenance: privacy:browser_protection
Working log behind Measuring with Browser Tracking Protections On. Corpus-wide caveats: corpus. No bibliography keys beyond the four this sitting appended to the shared bibliography (§8). No ~~DISCUSSION~~: comments belong on the content page, following the convention set by the earlier provenance: pages.
Run: 2026-09-01. Item privacy:browser_protection (new). Creating, not extending: no page with this id existed, and neither privacy:browser_extensions nor any other page covered browser-shipped protections as a treatment. contributing uses “Browser protection” as its worked example of a page that does not exist yet; it now does.
1. What this page is backing, and what it is not
The item asked for Firefox ETP, Safari ITP, Brave Shields and Edge Tracking Prevention as a treatment — paired crawls with the protection on versus off. The page keeps that scope and pushes three neighbours away explicitly:
| Boundary | Where it goes instead |
|---|---|
| the filter list as an instrument, and its ground-truth circularity | filter_lists |
| what you do with the requests once collected | requests, fingerprinting |
| privacy of extensions (what an extension leaks) | not written; distinct topic, not created here |
| extension-side blockers as arms (uBlock, AdGuard, MV3) | covered on the page only as an adjacent verdict class, pointing at filter_lists |
Overlap check. privacy_sandbox carries the Chrome half of “the browser is a variable”; this page cross-links to it rather than restating it. browser_storage owns partitioning as a storage question; this page owns it as an arm. stateful_stateless owns statefulness; this page names it as a thing to hold constant. No figure is duplicated across those pages.
2. Populations and denominators
Every figure on the content page comes from one of these. Nothing is a share of “all 5,859 papers”.
| # | Query | Population | N | Result |
|---|---|---|---|---|
| Q1 | corpus size, structured extraction | — | — | 5,859 papers, 7 venues, 2010–2026 |
| Q2 | corpus size, rendered full text (paper.cols.txt) | — | — | 5,869 |
| Q3 | ran a crawl: crawlConfig != null OR studyTypes has automated-web-crawl | all | 5,859 | 1,120 |
| Q4 | Q3 AND platforms has web | crawled | 1,120 | 857 |
| Q5 | names >=1 of six browser-shipped protections (full-text sweep) | full text | 5,869 | 121 (2.1%) |
| Q6 | per-mechanism paper counts | full text | 5,869 | Brave Shields 78, Safari ITP 41, Firefox ETP 27, Total Cookie Protection 17, bounce-tracking 12, Chrome Tracking Protection 1, Edge Tracking Prevention 0 |
| Q7 | per-year counts of Q5 | full text | per year | table on the page; 2010–2016 all zero |
| Q8 | crawled AND Q5 | crawled | 1,120 | 84 (7.5%) |
| Q9 | web-crawled AND Q5 | webCrawled | 857 | 84 (9.8%) |
| Q10 | web crawls 2019–2022 naming a protection | webCrawled 2019–2022 | 266 | 43 (16.2%) |
| Q11 | web crawls 2023–2026 naming a protection | webCrawled 2023–2026 | 332 | 37 (11.1%) |
| Q12 | web crawls 2024–2026 naming a protection | webCrawled 2024–2026 | 235 | 24 (10.2%) |
| Q13 | states >=1 browser in crawlConfig.browsers | crawled | 1,120 | 529 (47.2%) |
| Q14 | folded browser families, paper-counted | stating a browser | 529 | table on the page; Chrome 217, Firefox 154, Chromium 101, Tor Browser 37, Edge 15, Safari 11, Brave 10, DuckDuckGo 2, Firefox Focus 1 |
| Q15 | >=2 distinct real browser families | stating a browser | 529 | 80 (15.1%); also 7.1% of all 1,120 crawling |
| Q16 | >=3 distinct real browser families | stating a browser | 529 | 25 (4.7%) |
| Q17 | any used/produced tool of category browser | all | 5,859 | 747 papers |
| Q18 | of Q17, >=1 such tool carries a version string | Q17 | 747 | 276 (36.9%) |
| Q19 | Q18 restricted to the crawling population | crawled ∩ Q17 | 465 | 170 (36.6%) |
| Q20 | hand audit of the Q8 candidate pool | Q8 | 84 | 15 in, 3 in-baseline, 1 in-instrument, 2 spoof, 1 control-only, 4 adjacent, 58 out-background |
| Q21 | distinct papers naming Chrome or Chromium | stating a browser | 529 | 304 (57.5%) |
| Q22 | distinct papers naming a privacy-branded browser (Tor Browser, Brave, DuckDuckGo, Firefox Focus, LibreWolf/Mullvad) | stating a browser | 529 | 46 (8.7%), of which Tor Browser 37 |
| Q23 | Q21 and not Q22 | stating a browser | 529 | 291 (55.0%) |
Q8 and Q9 share their numerator, and the report asserts it. All 84 papers in the Q8 candidate pool also carry platforms containing web, so 7.5%-of-1,120 and 9.8%-of-857 are the same 84 papers against two legitimate denominators. That looks like a copy-paste error and is not one, so bp_report.mjs computes the set difference and prints it; it is empty.
Distinct-paper roll-ups, added after a self-check. A first draft said “60.1% of the stating papers drove Chrome or Chromium”, computed as (217 + 101) / 529 from the family table. That is a sum of multi-valued rows and double-counts any paper naming both Chrome and Chromium. The report now computes the roll-ups directly and the page carries those instead: Chrome or Chromium, 304 of 529 (57.5%); a privacy-branded browser (Tor Browser, Brave, DuckDuckGo, Firefox Focus, LibreWolf/Mullvad), 46 of 529 (8.7%); Chrome or Chromium and no privacy-branded browser, 291 (55.0%). Firefox, Safari and Edge are deliberately outside “privacy-branded”: they are mainstream browsers that acquired a default protection on a datable year (2019, 2017, 2019), and folding them in would make a sixteen-year count read as if the protection had always been there. A first draft of the same sentence also said “the entire protective-browser column is 60 papers”, which was an unlabelled partial sum (Tor 37 + Safari 11 + Brave 10 + DuckDuckGo 2) that silently omitted Edge and Firefox. Both were wrong before publication of the final revision; recorded because a summed multi-valued column is the easiest error on this page to make and the hardest to see.
2.1 The full-text sweep, and why it is case-sensitive
The mechanism regexes are in scripts/bp_report.mjs. Two rules, both learned the hard way elsewhere on this wiki:
- Whitespace is collapsed before matching. A PDF line break inside “Enhanced Tracking\nProtection” silently undercounts otherwise.
- Acronyms with ordinary-English homographs are matched case-sensitively.
/\bETP\b/and/\bITP\b/are case-sensitive; the descriptive phrases (tracking protection,content blocking) are not. A case-insensitive/\bitp\b/ipicks up nothing extra here, but the general failure mode — a hyphen satisfying\b— is why the rule is applied.
The regexes, exactly as run:
Firefox ETP /Enhanced\s+Tracking\s+Protection|\bETP\b/ Firefox Total Cookie Prot. /Total\s+Cookie\s+Protection|\bdFPI\b|dynamic\s+first[-\s]party\s+isolation/ Safari ITP /Intelligent\s+Tracking\s+Prevention|\bITP\b/ Brave Shields /Brave(?:['’]s)?\s+(?:Shields|shields|browser|Browser|ad[-\s]?block)|\bShields\s*(?:up|down|enabled|disabled)\b/ Edge Tracking Prevention /(?:Microsoft\s+)?Edge(?:['’]s)?\s+[Tt]racking\s+[Pp]revention|tracking\s+prevention\s+(?:feature\s+)?(?:in|of)\s+(?:Microsoft\s+)?Edge/ Chrome Tracking Protection /Chrome(?:['’]s)?\s+Tracking\s+Protection|Tracking\s+Protection\s+in\s+Chrome/ bounce-tracking mitigation /bounce[-\s]tracking(?:\s+(?:protection|mitigation))?/i
2.2 The Edge zero is not a probe artefact
“Nobody has measured Edge” is the strongest negative claim on the page, and a narrow regex must never be the source of a “nobody”. So it was widened twice.
- The first widening,
scripts/bp_edge_check.mjs, allowed up to 120 characters between “Edge” and a protection word, in either order, case-insensitively. It matched 176 papers and was almost entirely noise: graph edges, basic blocks, “knowl-edge” hyphenated across a line. Unusable, and recorded here because it is exactly the widening a reader would ask for. - The second,
scripts/bp_edge_check2.mjs, searched the corpus case-sensitively for the exact product nameTracking Prevention, excluding occurrences preceded byIntelligent, and printed every window. It found 18 papers, 20 occurrences. All 20 were read. Sixteen are reference-list entries pointing at WebKit'stracking-preventionpolicy page or Microsoft's Edge documentation. The two substantive body mentions are XSinator (CCS 2021), which calls Firefox's ETP “Enhanced Tracking Prevention” and discusses blocklists, and Double-Edged Shield (USENIX 2025), which lists Edge among browsers with a bundled blocker.
So the claim on the page is stated as named as a mechanism by zero papers, backed by cited in 18 and measured in none, not as a bare regex zero.
3. The hand audit: inclusion rule and all 84 candidates
The rule was written before the table, and is reproduced verbatim on the content page. The candidate pool is Q8 (84 papers). scripts/bp_audit_sheet.mjs printed every candidate's protection mentions as ±320-character windows into out_bp_audit_sheet.md (134 KB); all 84 were read at window level. The 26 that were not obviously background were then read in their methodology and evaluation sections; those 26 verdicts are in scripts/bp_audit.json and printed in §5 below. The remaining 58 are listed in §5 by title.
A triage aid that must not be mistaken for the rule. scripts/bp_audit_assist.mjs ordered the 84 by whether a protection mention sits within 400 characters of first-person methodology language. Only 19 of 84 scored above zero — and the zero bucket contains OmniCrawl, Who Left Open the Cookie Jar, Navigating Murky Waters, Bridges to Self and Browsing without Third-Party Cookies, all of which are in. The assist is a reading order. Using it as a filter would have thrown away a third of the result set, and it is recorded here so nobody later mistakes its output for a finding.
4. Running it
cd /workspace/artifacts/wiki node scripts/bp_report.mjs > scripts/bp_report-output.txt # every figure, with denominators node scripts/bp_quotecheck.mjs > scripts/bp_quotecheck-output.txt # every paper quote vs paper.cols.txt PLAYWRIGHT_BROWSERS_PATH=/workspace/.playwright \ node sandbox/bp_arms_probe.mjs > scripts/bp_arms_probe-output.txt # the Chromium arm probe node scripts/bp_edge_check2.mjs # the Edge zero, printed in full node scripts/bp_audit_sheet.mjs # rebuild the 84-candidate worksheet node scripts/check_wrap.mjs pages/privacy_browser_protection.txt
bp_report.mjs reads /workspace/publications_dataset/data directly. browser_fold.mjs is imported by the report; bp_audit.json holds the hand verdicts and is the only non-derived input.
5. Unedited report output
- bp_report-output.txt
corpus (extraction): 5859 papers, 7 venues, 2010-2026 population 'crawled' (crawlConfig != null OR studyTypes has automated-web-crawl): 1120 population 'webCrawled' (crawled AND platforms has web): 857 ===== 1. Full-text sweep: who names a browser-shipped protection ===== papers with rendered full text: 5869 mechanism papers share of 5869 Firefox ETP 27 0.5% Firefox Total Cookie Protection 17 0.3% Safari ITP 41 0.7% Brave Shields 78 1.3% Edge Tracking Prevention 0 0.0% Chrome Tracking Protection 1 0.0% bounce-tracking mitigation 12 0.2% Tor Browser 129 2.2% DuckDuckGo browser 4 0.1% Firefox Focus 10 0.2% private browsing / Incognito 197 3.4% the phrase "tracking protection" 108 1.8% the phrase "tracking prevention" 63 1.1% the phrase "content blocking" 57 1.0% extension-side blocker (kept separate) uBlock Origin 75 1.3% Ghostery 110 1.9% Privacy Badger 63 1.1% Adblock Plus 124 2.1% AdGuard 71 1.2% NoScript 40 0.7% ANY of the six named browser-shipped protections: 121 2.1% ===== 1b. By year (2026 and 2025 are provisional venue-years) ===== year full text any named protection Brave Shields Safari ITP Firefox ETP 2010 118 0 0 0 0 2011 116 0 0 0 0 2012 151 0 0 0 0 2013 125 0 0 0 0 2014 165 0 0 0 0 2015 190 0 0 0 0 2016 182 0 0 0 0 2017 232 1 1 1 0 2018 254 6 4 2 0 2019 402 7 4 3 0 2020 402 16 9 8 3 2021 380 17 11 8 4 2022 546 21 15 7 7 2023 720 17 11 6 3 2024 701 14 9 2 4 2025 770 16 8 3 4 2026 415 6 6 1 2 ===== 2. Which browser did the crawl drive? (population: crawled, N=1120) ===== states at least one browser: 529 47.2% of 1120 folded family papers share of 529 stating Chrome 217 41.0% Firefox 154 29.1% Chromium 101 19.1% automation library named instead of a browser 45 8.5% Tor Browser 37 7.0% headless engine (PhantomJS / HtmlUnit / WebKit port) 29 5.5% Internet Explorer 16 3.0% Edge 15 2.8% Safari 11 2.1% Opera 10 1.9% Brave 10 1.9% HTTP client, not a browser 2 0.4% DuckDuckGo 2 0.4% Yandex 2 0.4% Whale 2 0.4% CocCoc 2 0.4% WebView 2 0.4% Firefox Focus 1 0.2% UNMAPPED RESIDUE of the browser fold (42 distinct strings, printed in full): 4 headless browser 2 browser instances 1 real Web browser 1 custom lightweight web browser 1 graphical web browser 1 regular browser 1 mobile web browser 1 scriptable browser instances 1 Android browser 1 Android phone 1 non-headless web browser 1 Android smartphone 1 Nexus tablet 1 Apple iPhone6 1 iPad2 1 WhatsApp Web client 1 Telegram Web client 1 PageGraph-instrumented browser 1 default browser 1 Spartacus browser 1 automated web browser library 1 Ghostery 1 mobile-emulated browser 1 Vivaldi 1 Samsung 1 Dolphin 1 Mint 1 Kiwi 1 QQ 1 UC International 1 headless Python crawler 1 Tor 1 WeChat Windows client 1 UC 1 360 1 QQ browser 1 Instabridge 1 Xunlei 1 local browser 1 default Android browser 1 Foxhound 1 basic HTTP fetcher papers naming >= 2 distinct real browser families: 80 15.1% of 529 stating, 7.1% of 1120 crawling DISTINCT PAPERS (not a sum of family rows): name Chrome or Chromium: 304 57.5% of 529 stating name a privacy-branded browser 46 8.7% of 529 stating (Tor Browser, Brave, DuckDuckGo, Firefox Focus, LibreWolf/Mullvad) Chrome/Chromium and no privacy-branded browser 291 55.0% of 529 stating name Brave, DuckDuckGo, Firefox Focus or LibreWolf (i.e. not Tor): 10 2020 IMC Hiding in Plain Site: Detecting JavaScript Obfuscation through Concealed Browser API Usage. Chromium, Brave 2020 NDSS Deceptive Previews: A Study of the Link Preview Trustworthiness in Social Platforms Firefox, Chrome, Brave 2021 PETS Domain name encryption is not enough: privacy leakage via IP-based website fingerprinting Chrome, Brave 2022 PETS How Can and Would People Protect From Online Tracking? Chrome, Firefox, Brave 2022 PETS OmniCrawl: Comprehensive Measurement of Web Tracking With Real Desktop and Mobile Browsers Chrome, Firefox, Brave, Tor Browser, Firefox Focus, DuckDuckGo 2022 WWW Measuring the Privacy vs. Compatibility Trade-off in Preventing Third-Party Stateful Tracking. Chromium, Brave 2023 IMC Not only E.T. Phones Home: Analysing the Native User Tracking of Mobile Browsers. Chrome, Edge, Opera, Yandex, Brave, DuckDuckGo, Whale, CocCoc 2023 NDSS Navigating Murky Waters: Automated Browser Feature Testing for Uncovering Tracking Vectors Brave, Chrome, Edge, Firefox, Safari, Opera 2025 CCS Lock the Door But Keep the Window Open: Extracting App-Protected Accessibility Information from Browser-Rendered Websites. Chrome, Firefox, Brave, Edge 2025 PETS Beyond the Request: Harnessing HTTP Response Headers for Cross-Browser Web Tracker Detection in an Imbalanced Setting Chrome, Brave, Firefox papers naming >= 3 distinct real browser families: 25 4.7% of 529 stating the >=3-family papers (this is where a cross-browser design actually lives): 2025 CCS — Lock the Door But Keep the Window Open: Extracting App-Protected Accessibility Information from Browser-Rendered Websites. Chrome, Firefox, Brave, Edge 2014 IEEE-SP — Stealing Webpages Rendered on Your Browser by Exploiting GPU Vulnerabilities. Chromium, Firefox, headless engine (PhantomJS / HtmlUnit / WebKit port) 2015 IEEE-SP — Ad Injection at Scale: Assessing Deceptive Advertisement Modifications. Chrome, Firefox, Internet Explorer 2018 IEEE-SP — Surveylance: Automatically Detecting Online Survey Scams. Chrome, Firefox, Internet Explorer 2019 IEEE-SP — PhishFarm: A Scalable Framework for Measuring the Effectiveness of Evasion Techniques against Browser Phishing Blacklists. Chrome, Safari, Firefox, Opera, Edge, Internet Explorer 2023 IEEE-SP — The Leaky Web: Automated Discovery of Cross-Site Information Leaks in Browsers and the Web. Chromium, Firefox, headless engine (PhantomJS / HtmlUnit / WebKit port) 2019 IMC — What You See is NOT What You Get: Discovering and Tracking Social Engineering Attack Campaigns. Chromium, Chrome, Internet Explorer, Edge 2023 IMC — Not only E.T. Phones Home: Analysing the Native User Tracking of Mobile Browsers. Chrome, Edge, Opera, Yandex, Brave, DuckDuckGo, Whale, CocCoc 2020 NDSS — Cross-Origin State Inference (COSI) Attacks: Leaking Web Site States through XS-Leaks Chrome, Firefox, Edge 2020 NDSS — Deceptive Previews: A Study of the Link Preview Trustworthiness in Social Platforms Firefox, Chrome, Brave 2023 NDSS — Navigating Murky Waters: Automated Browser Feature Testing for Uncovering Tracking Vectors Brave, Chrome, Edge, Firefox, Safari, Opera 2025 NDSS — Cross-Origin Web Attacks via HTTP/2 Server Push and Signed HTTP Exchange Chrome, Safari, Edge, Firefox, Opera, Internet Explorer, Yandex, CocCoc, Whale 2019 PETS — 4 Years of EU Cookie Law: Results and Lessons Learned Chrome, Internet Explorer, Firefox 2022 PETS — How Can and Would People Protect From Online Tracking? Chrome, Firefox, Brave 2022 PETS — OmniCrawl: Comprehensive Measurement of Web Tracking With Real Desktop and Mobile Browsers Chrome, Firefox, Brave, Tor Browser, Firefox Focus, DuckDuckGo 2025 PETS — Beyond the Request: Harnessing HTTP Response Headers for Cross-Browser Web Tracker Detection in an Imbalanced Setting Chrome, Brave, Firefox 2026 PETS — Clicking into Exposure: Uncovering Privacy Risks of Google Click Identifier in YouTube Ads Chrome, Firefox, Edge 2020 USENIX — PhishTime: Continuous Longitudinal Measurement of the Effectiveness of Anti-phishing Blacklists Chrome, Safari, Firefox, Internet Explorer, Edge, Opera 2021 USENIX — PhishPrint: Evading Phishing Detection Crawlers by Prior Profiling Chrome, Internet Explorer, Opera 2022 USENIX — The Security Lottery: Measuring Client-Side Web Security Inconsistencies Chrome, Firefox, Edge, Opera, Safari 2023 USENIX — A Study of Multi-Factor and Risk-Based Authentication Availability Chrome, Firefox, Safari 2025 USENIX — DNS FLaRE: A Flush-Reload Attack on DNS Forwarders Chrome, Edge, Opera, Chromium, Firefox 2013 WWW — Two years of short URLs internet measurement: security threats and countermeasures. Chrome, Firefox, Opera, automation library named instead of a browser 2020 WWW — Apophanies or Epiphanies? How Crawlers Impact Our Understanding of the Web. Firefox, Chromium, Tor Browser, headless engine (PhantomJS / HtmlUnit / WebKit port) 2023 WWW — Efficient and Low Overhead Website Fingerprinting Attacks and Defenses based on TCP/IP Traffic. Edge, Chrome, Firefox ===== 3. Did the paper pin a browser version? ===== papers with >=1 used/produced tool of category "browser": 747 of those, >=1 such tool carries a version string: 276 36.9% restricted to the crawled population: 465 papers, 170 with a version 36.6% ===== 4. Crawling papers that name a browser-shipped protection ===== crawled papers with full text: 1120 crawled AND names a protection: 84 7.5% of 1120 web-crawled AND names a protection: 84 9.8% of 857 crawled AND names a protection but NOT platforms:web: 0 (so both rows share the numerator) web crawls 2019-2022: 266, naming a protection: 43 16.2% web crawls 2023-2026: 332, naming a protection: 37 11.1% web crawls 2024-2026: 235, naming a protection: 24 10.2% ===== 5. Hand-audited set: what the protection was actually doing in the paper ===== candidate pool (crawled AND names a browser-shipped protection): 84 every candidate's protection mentions were read as +/-320-char windows (scripts/bp_audit_sheet.mjs); the ones below were then read in their methodology/evaluation sections. audited rows: 26 rows outside the candidate pool: 0 15 in 4 adjacent 3 in-baseline 2 spoof 1 in-instrument 1 control-only 58 out-background (protection named only in background, related work or the reference list) --- in --- 2018 USENIX Who Left Open the Cookie Jar? A Comprehensive Evaluation of Third-Party Cookie Policies arms: 7 browsers x their built-in third-party cookie policies, plus 31 ad-blocking and 15 anti-tracking extensions, driven through a test-case generator and an intercepting proxy why: the policy is the thing varied 2019 WWW Evaluating Anti-Fingerprinting Privacy Enhancing Technologies arms: 15 anti-fingerprinting PETs incl. Brave and the Tor Browser Bundle, against unmodified Chrome and Firefox baselines why: explicit no-PET baseline 2020 PETS In-Depth Evaluation of Redirect Tracking and Link Usage arms: OpenWPM Firefox under several browser settings, plus Ghostery, plus Safari ITP 2.3 driven by hand because Safari could not be automated why: protection varied across settings 2021 NDSS Tales of Favicons and Caches: Persistent Tracking in Modern Browsers arms: Brave in strict mode against four anti-fingerprinting extensions and an unprotected baseline why: protection evaluated against a control 2021 PETS Domain name encryption is not enough: privacy leakage via IP-based website fingerprinting arms: the same website set crawled twice: Chrome without blocking, then Brave desktop 1.6.30, at the same time why: clean two-arm design, same sites, overlapping window 2022 WWW Measuring the Privacy vs. Compatibility Trade-off in Preventing Third-Party Stateful Tracking arms: 4 third-party storage policies (permissive / blocking / site-keyed / page-length) x 2 instances each = 8 stateful crawls in parallel over 3,419 page URLs spidered from the Tranco 1k why: the flagship paired-crawl design in this corpus 2022 PETS OmniCrawl: Comprehensive Measurement of Web Tracking With Real Desktop and Mobile Browsers arms: 42 browser instances in parallel - Chrome and Firefox plus Brave, Tor, Firefox Focus, DuckDuckGo and Ghostery - on 4 desktops and 18 Android phones in two locations, over 20,000 Tranco sites why: largest cross-browser arm set in the corpus 2023 NDSS Navigating Murky Waters: Automated Browser Feature Testing for Uncovering Tracking Vectors arms: 21 browser mechanisms read/written across 126 versions of 7 browsers (Brave, Chrome, Edge, Firefox, Safari, Opera, Tor) over a two-year period why: browser version is the treatment 2024 IMC Browsing without Third-Party Cookies: What Do You See? arms: three Firefox profiles per domain - baseline, control, experimental - where only the experimental arm has third-party cookies disabled; 7,490 of the Tranco top 10,000 crawled successfully why: has a same-condition control arm as well as the treatment 2025 CCS Local Frames: Exploiting Inherited Origins to Bypass Content Blockers arms: Brave (macOS 1.68.141, iOS 1.68, Android 1.68.137), the Safari Content Blocker API, DuckDuckGo, uBlock Origin Lite, AdBlock Plus and AdGuard, against a purpose-built test site why: per-product, per-platform arms 2025 IMC FP-Inconsistent: Measurement and Analysis of Fingerprint Inconsistencies in Evasive Bot Traffic arms: Brave 1.69.160 and Tor 13.5.2, plus uBlock Origin 1.59.0 and AdBlock Plus 4.5.1 on Chrome 128, across macOS, Linux, iOS and Android why: protections run to check they are not misread as bots 2025 NDSS Cascading Spy Sheets: Exploiting the Complexity of Modern CSS for Email and Browser Fingerprinting arms: Tor and Brave among 1,176 OS-browser combinations; Brave excluded from the font test because its randomisation would produce false positives why: names the arm it had to drop, and why 2025 PETS Beyond the Request: Harnessing HTTP Response Headers for Cross-Browser Web Tracker Detection in an Imbalanced Setting arms: Chrome, Firefox and Brave data from the T.EX extension; models trained on Chrome and tested on all three, plus a Chrome set from a year later why: cross-browser generalisation is the research question 2026 PETS Clicking into Exposure: Uncovering Privacy Risks of Google Click Identifier in YouTube Ads arms: Chrome, Firefox and Edge why: per-browser tracking incidence is reported 2026 USENIX Bridges to Self: Silent Web-to-App Tracking on Mobile via Localhost arms: Brave, Firefox ETP in Standard and in Strict, and DuckDuckGo, each tested against the localhost bridge why: the ETP Standard-vs-Strict split is the finding --- in-baseline --- 2022 USENIX Khaleesi: Breaker of Advertising and Tracking Request Chains arms: Safari's ITP is one of four comparison classifiers for the authors' own detector why: the protection is a baseline, not an arm 2023 USENIX TRIDENT: Towards Detecting and Mitigating Web-based Social Engineering Attacks arms: Brave Shields set up locally and fed script/frame URL pairs, as the industry comparison against TRIDENT why: Shields run as a library, not as a browser 2023 CCS CookieGraph: Understanding and Detecting First-Party Tracking Cookies arms: compares its own detector against ITP's cap on first-party cookie expiry as an existing countermeasure why: policy compared analytically, not run --- in-instrument --- 2025 USENIX Websites' Global Privacy Control Compliance at Scale and over Time arms: Selenium + Firefox Nightly, with Firefox's own ETP used as the tracker classifier through its categorisation API why: the protection is the measuring instrument --- spoof --- 2021 PETS The CNAME of the Game: Large-scale Analysis of DNS-based Tracking Evasion arms: the crawl was run twice, once with Chrome's User-Agent and once with Safari's, in headless Chrome both times why: Safari was impersonated, not run - and it still found Criteo treating Safari differently 2022 IMC Measuring UID smuggling in the wild arms: Chrome, and Chrome with a spoofed Safari User-Agent why: same design, same caveat --- control-only --- 2024 USENIX PURL: Safe and Effective Sanitization of Link Decoration arms: one arm: Firefox v102 with ETP explicitly turned off, stateless, 20K Tranco sample, March-April 2023 why: the exemplar of stating the protection state of a single-arm crawl --- adjacent --- 2021 CCS SugarCoat: Programmatically Generating Privacy-Preserving, Web-Compatible Resource Replacements for Content Blocking arms: 902 pages under three conditions, instrumented vs stock Chromium; output targets Brave's adblock-rust engine and uBlock Origin why: blocking-tool arms rather than browser-shipped protection arms 2023 PETS Blocking JavaScript Without Breaking the Web: An Empirical Investigation arms: levels of JavaScript blocking in Chrome why: the treatment is a blocking policy the authors imposed, not one a browser ships 2025 USENIX Double-Edged Shield: On the Fingerprintability of Customized Ad Blockers arms: user-customised ad-blocker configurations harvested from public forums; Brave Shields is tabulated but left out of the configuration analysis because its community-forum posts do not carry the detailed filter-list configurations why: extension configuration is the treatment 2026 PETS Privacy vs. Profit: The Impact of Google's Manifest Version 3 (MV3) Update on Ad Blocker Effectiveness arms: MV3 vs MV2 instances of four ad blockers over a main sample of 924 ad-supported websites x five measurement runs, plus 191- and 185-site stratified samples, in Chrome and Firefox why: extension platform, not browser protection - but it is the corpus's best-powered blocker experiment --- out-background: every candidate not audited above --- 2017 IMC The ad wars: retrospective measurement and analysis of anti-adblock filter lists. 2018 CCS The Web's Sixth Sense: A Study of Scripts Accessing Smartphone Sensors. 2018 WWW Hiding in the Crowd: an Analysis of the Effectiveness of Browser Fingerprinting at Large Scale. 2019 CCS AdVersarial: Perceptual Ad Blocking meets Adversarial Machine Learning. 2019 CCS Oh, the Places You've Been! User Reactions to Longitudinal Transparency About Third-Party Web Tracking and Inferencing. 2020 IMC Hiding in Plain Site: Detecting JavaScript Obfuscation through Concealed Browser API Usage. 2020 IMC Reading In-Between the Lines: An Analysis of Dissenter. 2020 IMC When Push Comes to Ads: Measuring the Rise of (Malicious) Push Advertising. 2020 NDSS Deceptive Previews: A Study of the Link Preview Trustworthiness in Social Platforms 2020 NDSS Melting Pot of Origins: Compromising the Intermediary Web Services that Rehost Websites 2020 PETS A Comparative Measurement Study of Web Tracking on Mobile and Desktop Environments 2020 PETS Inferring Tracker-Advertiser Relationships in the Online Advertising Ecosystem using Header Bidding 2020 PETS Missed by Filter Lists: Detecting Unknown Third-Party Trackers with Invisible Pixels 2020 WWW Beyond the Front Page: Measuring Third Party Dynamics in the Field. 2020 WWW Dirty Clicks: A Study of the Usability and Security Implications of Click-related Behaviors on the Web. 2020 WWW Stop tracking me Bro! Differential Tracking of User Demographics on Hyper-Partisan Websites. 2020 WWW The Representativeness of Automated Web Crawls as a Surrogate for Human Browsing. 2020 IEEE-SP AdGraph: A Graph-Based Approach to Ad and Tracker Blocking. 2020 CCS You've Changed: Detecting Malicious Browser Extensions through their Update Deltas. 2021 IEEE-SP Fingerprinting the Fingerprinters: Learning to Detect Browser Fingerprinting Behaviors. 2021 IMC TrackerSift: untangling mixed tracking and functional web resources. 2021 NDSS CV-Inspector: Towards Automating Detection of Adblock Circumvention 2021 PETS Privacy Preference Signals: Past, Present and Future 2021 USENIX PhishPrint: Evading Phishing Detection Crawlers by Prior Profiling 2021 WWW Cookie Swap Party: Abusing First-Party Cookies for Web Tracking. 2021 WWW User Tracking in the Post-cookie Era: How Websites Bypass GDPR Consent to Track Users. 2022 IMC Muzeel: assessing the impact of JavaScript dead code elimination on mobile web performance. 2022 NDSS HARPO: Learning to Subvert Online Behavioral Advertising 2022 PETS How Can and Would People Protect From Online Tracking? 2022 PETS How Not to Handle Keys: Timing Attacks on FIDO Authenticator Privacy 2022 PETS My Cookie is a phoenix: detection, measurement, and lawfulness of cookie respawning with browser fingerprinting 2022 USENIX Automating Cookie Consent and GDPR Violation Detection 2022 USENIX Leaky Forms: A Study of Email and Password Exfiltration Before Form Submission 2022 USENIX The Dangers of Human Touch: Fingerprinting Browser Extensions through User Actions 2022 WWW Investigating Advertisers' Domain-changing Behaviors and Their Impacts on Ad-blocker Filter Lists. 2022 IEEE-SP WTAGRAPH: Web Tracking and Advertising Detection using Graph Neural Networks. 2023 CCS iLeakage: Browser-based Timerless Speculative Execution Attacks on Apple Devices. 2023 CCS Read Between the Lines: Detecting Tracking JavaScript with Bytecode Classification. 2023 PETS A Utility-Preserving Obfuscation Approach for YouTube Recommendations 2023 IMC Reviving Dead Links on the Web with Fable. 2023 USENIX Defining "Broken": User Experiences and Remediation Tactics When Ad-Blocking or Tracking-Protection Tools Break a Website’s User Experience 2023 USENIX Rods with Laser Beams: Understanding Browser Fingerprinting on Phishing Pages 2023 WWW Who Funds Misinformation? A Systematic Analysis of the Ad-related Profit Routines of Fake News Sites. 2023 IEEE-SP Fashion Faux Pas: Implicit Stylistic Fingerprints for Bypassing Browsers' Anti-Fingerprinting Defenses. 2023 IEEE-SP The Leaky Web: Automated Discovery of Cross-Site Information Leaks in Browsers and the Web. 2024 CCS Blocking Tracking JavaScript at the Function Granularity. 2024 PETS The Devil is in the Details: Detection, Measurement and Lawfulness of Server-Side Tracking on the Web 2024 PETS Website Data Transparency in the Browser 2024 NDSS FP-Fed: Privacy-Preserving Federated Detection of Browser Fingerprinting 2024 USENIX FV8: A Forced Execution JavaScript Engine for Detecting Evasive Techniques 2024 PETS Opted Out, Yet Tracked: Are Regulations Enough to Protect Your Privacy? 2024 WWW AdFlush: A Real-World Deployable Machine Learning Solution for Effective Advertisement and Web Tracker Prevention. 2024 WWW The Double Edged Sword: Identifying Authentication Pages and their Fingerprinting Behavior. 2025 IMC $CookieGuard: $ Characterizing and Isolating the First-Party Cookie Jar. 2025 PETS Onion-Location Measurements and Fingerprinting 2025 PETS Intractable Cookie Crumbs: Unveiling the Nexus of Stateful Banner Interaction and Tracking Cookies 2025 CCS Exploiting the Shared Storage API. 2026 NDSS PhishLang: A Real-Time, Fully Client-Side Phishing Detection Framework Using MobileBERT
6. The browser fold, and its residue in full
scripts/browser_fold.mjs maps free-text crawlConfig.browsers strings to product families by an ordered regex list — the more specific product wins over its engine, so “Tor Browser” is not folded into Firefox and “Brave” is not folded into Chromium. The fold is deliberately product-level, not version-level: this page's question is which browser's protections were in the crawl, and “Firefox 52” and “Firefox Nightly” answer that the same way. Version reporting is counted separately, from the tools[].version field (Q18, Q19).
The rules, in order:
/tor\s*browser|tor\s*bundle|\btbb\b/i -> Tor Browser /brave/i -> Brave /duckduckgo|\bddg\b/i -> DuckDuckGo /firefox\s*focus/i -> Firefox Focus /librewolf|mullvad\s*browser/i -> LibreWolf / Mullvad /\bedge\b|edgehtml/i -> Edge /\bopera\b|\bop2\b/i -> Opera /yandex/i -> Yandex /\bwhale\b/i -> Whale /coccoc/i -> CocCoc /\bsafari\b/i -> Safari /internet\s*explorer|\bie\b\s*\d*|\bie\b/i -> Internet Explorer /firefox|mozilla|gecko|\bnightly\b/i -> Firefox /chromium/i -> Chromium /chrome/i -> Chrome /webkit|slimerjs|phantomjs|htmlunit/i -> headless engine (PhantomJS / HtmlUnit / WebKit port) /webview/i -> WebView /selenium|puppeteer|playwright|webdriver|mechanize/i -> automation library named instead of a browser /wget|curl|python\s*requests|http\s*client/i -> HTTP client, not a browser
226 distinct strings in, 18 families out, 42 strings unmapped. The residue is printed by the report and reproduced in §5; it is dominated by “headless browser”, “regular browser”, device names (“Nexus tablet”, “Apple iPhone6”) and CJK-market browsers the fold has no family for (UC, QQ, 360, Xunlei, Kiwi, Dolphin, Vivaldi, Samsung, CocCoc is mapped but Whale's siblings are not). One residue entry is a category error in the source data — “Ghostery” appears in crawlConfig.browsers although Ghostery is an extension in every context except its own mobile browser; the fold leaves it in the residue rather than guessing.
Two folding decisions a reasonable person would make differently:
- “automation library named instead of a browser” (45 papers) is kept as a family rather than dropped. It is a finding — 8.5% of the papers that answered “which browser” answered with “Selenium” — and hiding it in the residue would make the browser shares look better than they are. It is excluded from the >=2- and >=3-family counts (Q15, Q16) along with “HTTP client, not a browser”, because neither is a browser.
- Chrome and Chromium are separate families. Merging them would raise the “no default protection” share to a cleaner single row, but they are different builds with different default flag sets, which is precisely this page's subject.
7. Quotes checked against the source
scripts/bp_quotecheck.mjs checks every verbatim quote the page takes from a corpus paper against data/fulltext/<year>/<venue>/<slug>/paper.cols.txt, whitespace collapsed on both sides and smart quotes normalised, nothing else. 41 of 41 spans pass. It started at 32 spans; the citations review (§15.3) found two quotes on the page that the checker did not cover at all, which is the failure mode a passing checker hides, and the coverage was extended rather than the finding waved through.
- bp_quotecheck-output.txt
OK 2022 WWW deployed two instances of each tested policy to verify behavioral consistency and provid OK 2022 WWW produced 3,419 total deduplicated page URLs to visit OK 2022 PETS use two identical Chrome instances to measure the OK 2022 PETS baseline variability between visits to the same website OK 2022 PETS We visit 20,000 websites with a total of 42 browser instances running in parallel across OK 2021 PETS from 91% to 76% OK 2024 IMC more than 90% of domains exhibit less than a 10% screenshot difference when cookies are OK 2024 IMC we arrive at a final list of 7,490 successfully crawled domains OK 2025 NDSS would induce false positives in our evaluation OK 2026 USENIX Our measurements show that ETP blocks the Meta Pixel only in Strict mode OK 2024 USENIX We turn off all built-in tracking protections provided by Firefox (Enhanced Tracking Pro OK 2025 USENIX We identify trackers with Firefox's built-in Enhanced Tracking Protection [54], which id OK 2021 PETS performed the experiment twice: once with the Chrome User-Agent string, and once with Sa OK 2021 PETS would only resort to first-party tracking for Safari users OK 2020 PETS Ghostery could only block 11 out of 30 top redirect domain cookies, whereas Safari block OK 2019 WWW to be most effective, revealing under 3 bits of entropy OK 2019 WWW reveal over 11 bits of entropy and hence are marginally better than OK 2019 WWW not using any AFPET at all OK 2019 WWW The original fingerprints reveal 13.002 and 12.359 bits of entropy OK 2026 PETS no statistically significant reduction in ad-blocking or anti-tracking effectiveness for OK 2026 PETS a main sample of 924 websites across five separate measurement runs OK 2026 PETS does not strip URL parameters like gclid or fbclid OK 2025 CCS 73.7% of the requests made by these local frames should be blocked by popular filter lis OK 2025 CCS We disclosed each of the 19 vulnerabilities we found to the relevant organization OK 2018 USENIX By applying the framework to 7 browsers, 31 ad blocking and 15 anti-tracking extensions OK 2018 USENIX We performed a crawl on the Alexa top 10,000, visiting 160,059 web pages OK 2023 NDSS a total of 126 versions of seven major browsers OK 2023 NDSS we test 21 browser mechanisms and uncover a slew of tracking vectors, including 13 OK 2021 NDSS In our analysis, we use Brave's strict mode OK 2021 PETS strumented the Brave browser (desktop version 1.6.30) OK 2021 PETS to crawl these websites a second time OK 2023 USENIX we compared T RIDENT with two stateof-the-art tools: Brave Shields OK 2022 PETS We study privacy-focused browsers and find their pro OK 2022 PETS tections differ significantly and in general are less for OK 2021 PETS at the same time with crawling the OK 2022 IMC unless the user has loaded the site as a first party in the previous 45 days OK 2025 USENIX These posts do not include the detailed browser filter-list configurations OK 2019 WWW Brave Browser spoofs the User-Agent to appear like Chrome, OK 2019 WWW but modifies the Accept-Language header, language and OK 2019 WWW plugins differently than baseline Chrome OK 2019 WWW Brave users stand out from other Chrome users 41 verbatim, 0 not found in the .cols rendering (of 41)
7.1 What the check caught, and what was changed
The first run had three FAILs, all of them two-column splices in the .cols rendering rather than misquotations of the paper. A fourth splice turned up later, in [1Datta, Amit; Lu, Jianan; Tschantz, Michael Carl (2019): "Evaluating Anti-Fingerprinting Privacy Enhancing Technologies", in: Proceedings of the ACM Web Conference. (DOI)]'s Brave sentence, only because the citations reviewer noticed that sentence was not in the checker at all; it is marked with [...] on the page and both halves are now checked. All three were on the page as continuous quoted sentences, which is a misquotation of the rendering even where it is faithful to the PDF. Fixed before publication:
| Quote | What .cols actually has | Fix |
|---|---|---|
| OmniCrawl, “use two identical Chrome instances to measure the baseline variability between visits to the same website” | ...to measure the added unsafe-inline to the CSP headers of only three. baseline variability between visits... — a sentence from the adjacent column spliced in | quoted with an explicit [...] marker and a note pointing here |
| OmniCrawl, “protections differ significantly and in general are less for lower-ranked sites” | broken as their pro / tections differ across a column boundary | de-quoted; the page now paraphrases |
| TRIDENT, “set up its ad-blocking component locally” | set up its ad-blocking component [49] locally — a reference marker inside the span | de-quoted; the page now describes it |
One further near-miss worth recording: we instrumented the Brave browser (desktop version 1.6.30) fails as written because the rendering hyphenates it as we in-strumented. The version number itself is correct and is stated, not quoted, on the page.
Caveat this check cannot clear. It verifies the page against the .cols rendering, not against the PDF. Column-reading-order repair is imperfect, and the corpus README reports that 57.9% of extraction quotes match their source exactly, 37% via an 8-word run, and 0.9% cannot be located at all. A quote that passes here is faithful to the text this project reads; if a figure is load-bearing for your own work, open the PDF.
8. Bibliography entries added
Four keys appended to bibliography before the closing tag, taking it from 724 to 728 entries. Checked first for key collisions (none) and for DOI collisions (10.2478/popets-2021-0078 absent), and after the append for duplicate keys across the whole file (none: 728 entries, 728 distinct keys).
| Key | Paper | Metadata source |
|---|---|---|
hoang2021_domain | Hoang et al., Domain name encryption is not enough, PoPETs 2021 | bibgen.mjs failed loudly: PETS index records carry no authors. Authors and pages read off the PoPETs landing page with curl and a browser User-Agent; DOI derived as 10.2478/popets-2021-0078 and matched against the landing page |
trampert2025_cascading | Trampert et al., Cascading Spy Sheets, NDSS 2025 | bibgen.mjs, clean |
yang2023_trident | Yang, Allen, Landen, Perdisci, Lee, TRIDENT, USENIX Security 2023 | bibgen.mjs emitted TODO-AUTHORS; authors read from the USENIX presentation page with curl (WebFetch gets 403 from usenix.org) |
elhajjchehade2025_double | El Hajj Chehade, Stock, Troncoso, Double-Edged Shield, USENIX Security 2025 | as above. Key uses the full surname elhajjchehade rather than bibgen`s auto-derived el2025_double, which would have implied a surname of “El” |
Cache purge required and performed. The first published render showed the four new keys as unresolved: 22 of 26 inline indices rendered and the reference list stopped short. ?purge=true on bibliography and then on the content page fixed it. Re-verified: 50 inline markers, 26 distinct indices 1–26, 26 reference entries, and the only remaining red link on the page is the one to this page.
9. Browser measurements: what was measured, and what was not
| Claim on the page | How it was established | Status |
|---|---|---|
The six-arm Chromium result (setCookieControls works, four other knobs do not) | sandbox/bp_arms_probe.mjs, run 2026-09-01, Chromium 151.0.7922.34 + Playwright 1.62.1, local HTTPS origins, output in §10 | measured, first-hand |
--test-third-party-cookie-phaseout is a real switch; --block-third-party-cookies is not | strings -a on the Chromium binary: the first appears twice, the second not at all | measured, first-hand |
Storage.setThirdPartyCookieBlocking does not exist; Network.setCookieControls does, and is experimental | the browser's own /json/protocol descriptor, enumerated over --remote-debugging-port | measured, first-hand |
Playwright 1.62.1 sets browser.contentblocking.features.standard | read from node_modules/playwright-core/lib/coreBundle.js; the whole 86-preference default object was dumped and filtered | source-level |
| That pref is dead in Firefox 153.0 | the string features.standard appears in neither browser/omni.ja nor omni.ja nor libxul.so. Firefox's own ContentBlockingPrefs.sys.mjs names only PREF_STRICT_DEF: “browser.contentblocking.features.strict” and comments that the standard category “is defined as expecting default values of the listed prefs” | source-level |
That build ships network.cookie.cookieBehavior = 5 | browser/defaults/preferences/firefox.js inside browser/omni.ja | source-level |
5 is BEHAVIOR_PARTITION_FOREIGN | the same build's applyCategoryPref mapping, case “cookieBehavior5” | source-level |
Firefox's bounce-tracking “off” is MODE_ENABLED_DRY_RUN | ContentBlockingPrefs.sys.mjs, case “-btp”, with the source comment quoted on the page | source-level |
| Playwright's Firefox is 153.0; stable is 155.0 | application.ini in the build (Version=153.0, BuildID=20260722045016) and product-details.mozilla.org | measured / fetched |
Firefox could not be launched in this container. Playwright's Firefox 153.0 dies at startup with RenderCompositorSWGL failed mapping default framebuffer, no dt, headless, headless with software-rendering prefs, and headful under a manually started Xvfb :99 (xvfb-run itself is unusable here: xauth is not installed). So no runtime pref value was read back, and the page says so in three places rather than implying a measurement. Brave, Edge, Safari, Tor Browser and DuckDuckGo were not available in this environment at all.
10. Unedited arm-probe output
- bp_arms_probe-output.txt
browser: Chromium 151.0.7922.34 playwright: 1.62.1 ARM default (no extra flags), run 1 third-party cookies in the jar: ["tp_http","tp"] document.cookie inside the frame: "tp_http=set-from-header; tp=set-from-js" Cookie header the 3p then saw: ["tp_http=set-from-header; tp=set-from-js"] ARM default (no extra flags), run 2 third-party cookies in the jar: ["tp_http","tp"] document.cookie inside the frame: "tp_http=set-from-header; tp=set-from-js" Cookie header the 3p then saw: ["tp_http=set-from-header; tp=set-from-js"] ARM --test-third-party-cookie-phaseout third-party cookies in the jar: ["tp_http","tp"] document.cookie inside the frame: "tp_http=set-from-header; tp=set-from-js" Cookie header the 3p then saw: ["tp_http=set-from-header; tp=set-from-js"] ARM --block-third-party-cookies (no such switch) third-party cookies in the jar: ["tp_http","tp"] document.cookie inside the frame: "tp_http=set-from-header; tp=set-from-js" Cookie header the 3p then saw: ["tp_http=set-from-header; tp=set-from-js"] ARM --incognito third-party cookies in the jar: ["tp_http","tp"] document.cookie inside the frame: "tp_http=set-from-header; tp=set-from-js" Cookie header the 3p then saw: ["tp_http=set-from-header; tp=set-from-js"] ARM CDP Network.setCookieControls(true) third-party cookies in the jar: [] document.cookie inside the frame: "" Cookie header the 3p then saw: [null] ARM CDP Storage.setThirdPartyCookieBlocking CDP error: cdpSession.send: Protocol error (Storage.setThirdPartyCookieBlocking): 'Storage.setThirdPartyCookieBlocking' wasn't found third-party cookies in the jar: ["tp_http","tp"] document.cookie inside the frame: "tp_http=set-from-header; tp=set-from-js" Cookie header the 3p then saw: ["tp_http=set-from-header; tp=set-from-js"]
The two default rows are the same condition run twice, and match exactly. That is what makes the setCookieControls row readable as an effect rather than as noise, and it is the same discipline the page recommends for a real paired crawl.
11. External sources, and how each was verified
All fetched 2026-09-01. Everything on the content page's browser table is quoted from a vendor primary source, never from recall.
| Source | How verified | Used for |
|---|---|---|
| WebKit, "Tracking Prevention in WebKit" | fetched; ITP behaviours quoted verbatim | Safari row |
| WebKit blog, "Full Third-Party Cookie Blocking and More" | fetched; date 2020-03-24, Safari 13.1 / iOS 13.4, sentence quoted verbatim | Safari shipping date |
| Microsoft Learn, "Tracking prevention in Microsoft Edge" | fetched with its front-matter; ms.date 2021-01-07, updated_at 2026-06-12. Levels, the Basic/Balanced/Strict enforcement matrix, the Disconnect lists, the site-engagement threshold of 4.1 and the CompatExceptions list all quoted verbatim | Edge row and two of the three pitfalls |
| Mozilla blog, 2019-09-03 | fetched; Firefox 69, sentence quoted verbatim | ETP default-on date |
| Mozilla blog, 2022-06-14 | fetched; page carries “updated August 28, 2024”; cookie-jar sentence quoted verbatim | Total Cookie Protection date |
product-details.mozilla.org/1.0/firefox_versions.json | fetched; LATEST_FIREFOX_VERSION 155.0, LAST_RELEASE_DATE 2026-09-01, FIREFOX_ESR 140.15.0esr | Firefox current version |
| Brave Help Center, Shields and the Shields-while-browsing article | fetched through Playwright Chromium (both are behind a JS/CDN gate that curl and WebFetch do not clear); Standard-versus-Aggressive wording quoted | Brave row |
api.github.com/repos/brave/brave-browser/releases | JSON API, not releases.atom; stable v1.94.118, published 2026-09-01T07:05:48Z, Chromium 152.0.7977.64 | Brave version |
aus1.torproject.org/torbrowser/update_3/release/downloads.json | fetched; Tor Browser 15.0.21 | Tor Browser version |
| DuckDuckGo, "Web Tracking Protections" | fetched; the protection list quoted; the page carries no dates or versions and the row says so | DuckDuckGo row |
versionhistory.googleapis.com Chrome stable | fetched; 152.0.7977.75, serving from 2026-09-01 | context for “Playwright ships Chromium 151” |
registry.npmjs.org for adblock-rs, adblock-rust, @ghostery/adblocker, @cliqz/adblocker | fetched | the “driving each browser” row on Brave's engine |
api.github.com/repos/webfp/tor-browser-selenium + PyPI tbselenium | fetched; 0.9.0 2024-10-23, last commit 2025-07-26, CI pinned to TB 14.5.5, repo not archived | the Tor Browser row and an Open Question |
11.1 Checked and rejected
support.mozilla.orgETP articles. The obvious source for the ETP row.WebFetchreturns a JS-shell error page, and driving it with Playwright Chromium hits a CAPTCHA (“Enter the characters seen in the image below”). Rejected as unfetchable; the ETP row is built from the two Mozilla blog posts, which are datable, plus the shipped preference files of the build itself, which are better evidence than documentation anyway.- A web-search summary of Firefox Bounce Tracking Protection's default level. A search snippet asserted that BTP is Strict-only. That is consistent with the build's own category table, but a search summary is not a source. The page instead states what the build's
ContentBlockingPrefs.sys.mjsshows — thatbtpappears in the strict rule set and that the “off” state isMODE_ENABLED_DRY_RUN— and makes no claim about the Standard default, which was not established. firefox-source-docs.mozilla.orgbounce-tracking page. Fetched; it names the pref and says “0 is fully disabled and 1 is fully enabled” but gives neither the default nor the ETP level. Kept as background, not cited for a figure.- The npm package
adblock-rust(9.0.0, February 2021, no repository field). Not Brave's engine despite the name matching Brave's GitHub repository. Rejected, and named on the page as a trap, because the correct package isadblock-rs. releases.atomfor Brave versions. Not used: its element order pairs each version with the wrong date. The JSON API was used instead.- Any SEO listicle or “best privacy browsers 2026” page. None consulted; every browser-behaviour claim traces to a vendor page, a shipped binary or a paper.
12. Judgement calls
- Creating a page rather than broadening a neighbour. requests and fingerprinting both assume the default browser; folding “the browser is a treatment” into either would have buried it under a classification topic. filter_lists owns the list, not the browser that ships it. A reasonable person could have made this a section of crawler instead; that was rejected because the content is a study-design question, not an instrument-comparison question.
- Extension-side blockers are
adjacent, notin. uBlock Origin, AdGuard, Privacy Badger and the MV3 work are the neighbouring literature and a reader will want them, so they are named with their figures — but counting them as browser-shipped protections would have doubled the “in” set with a different treatment. The verdict class makes the choice visible instead of silent. - User-Agent spoofing gets its own verdict class rather than being excluded. Two corpus papers ran a “Safari” arm this way. Excluding them would hide a common and easily-misread design; including them as
inwould endorse it.spoofsays both things. - Tor Browser is counted in the browser fold but not treated as a tracking-protection arm. It is the most-named protective browser in the corpus (37 papers) and almost all of that is anonymity work. Treating those 37 as tracking-protection arms would have quadrupled the headline and been wrong.
- The page dates every protection and refuses to rank them. The corpus can say what the field did (Brave 78 papers, ITP 41, ETP 27). It cannot say which protection a 2026 student should use as a treatment, and the page does not pretend otherwise: the browser table is dated, the per-year table is given, and the recommendation is about design (duplicate arms, verified state, pinned versions) rather than about which vendor to pick.
- Chromium was measured and the others were not, and the page is lopsided because of it. A reasonable person would have found a way to run Brave or Firefox. This environment could not, and the page marks every unmeasured claim rather than levelling the tone.
13. What could not be established
- Why
--test-third-party-cookie-phaseouthad no effect in Chromium 151 on the Playwright path, given that the switch exists in the binary. Not investigated beyond confirming the effect and the switch's existence. Candidate explanations not tested: it may gate a field-trial state rather than the cookie setting directly, or Playwright's default flag set may override it. - The runtime value of
network.cookie.cookieBehaviorin a Playwright-driven Firefox. Source-level evidence says 5; the browser would not launch. One line of work for anyone with a working Firefox, and listed as an Open Question. - Whether Firefox Bounce Tracking Protection is on in Standard. See §11.1.
- Brave, Edge, Safari, Tor Browser and DuckDuckGo behaviour, first-hand. None available here.
- The distance between a crawler profile and a real profile under Edge's site-engagement relaxation, Safari's interaction-based storage grants and Firefox's 45-day first-party exemption. The page raises it as an Open Question; nothing in the corpus measures it.
- Whether the 58
out-backgroundpapers are all really background. They were read at window level, not in full. A paper that discusses a protection only in a section the window sampler did not reach would be misfiled. The window count per paper is inout_bp_candidates.jsonand the full worksheet is regenerable.
14. The run itself
- Date: 2026-09-01. Corpus at the time: 5,859 extracted papers, 5,869 with rendered full text, 7 venues, 2010–2026.
- Browser environment: Chromium 151.0.7922.34 and Firefox 153.0 as shipped with Playwright 1.62.1, Linux container, no GPU. Firefox does not start (§9).
- Model: the page, the report scripts, the folds and the hand audit were produced by Claude (Opus 5) in one sitting. Four review passes were run as sub-agents; see §15.
- Mistakes caught in review of my own work, before any reviewer saw it: (a) three quotes published as continuous sentences that are column splices in the rendering (§7.1); (b) an initial
browser_fold.mjsthat exported a flatPROTECTS_BY_DEFAULTset — deleted before use, because “protects by default” is time-dependent (Firefox did not before 2019, Safari did not before 2017) and a flat set would have produced a confidently wrong count; © the first Edge widening that matched 176 papers of graph edges (§2.2). - No accidental exposure. Credentials live in
.env, gitignored, and are never logged byscripts/dw.mjs. No content was sent to any external LLM provider.
15. Review log
Four review passes, all told explicitly that the author's context may not be exhaustive and all handed the page text, the report script, its unedited output and this log. The three focused passes ran in parallel; the generic pass ran after their findings were applied.
15.1 External currency (Sonnet)
Told to fetch, not recall, every dated or versioned claim. Verdict: the browser table, all seven version numbers, four of the five dates and both CDP claims verified correct against primary sources fetched on 2026-09-01.
| Finding | Action |
|---|---|
Brave's help centre has migrated: the two cited support.brave.com article URLs now 301 to support.brave.app. Content unchanged | accepted. Both citations repointed, with a note that the old paths still resolve and that both are CDN-gated against curl |
| The 2019-06-27 Edge Tracking Prevention preview date rested on prior knowledge: Microsoft's current documentation does not carry it | accepted, and closed. The Microsoft Edge Team blog post of that date was fetched (blogs.windows.com/msedgedev/2019/06/27/…), and the row now cites it and quotes it, including “The default tracking prevention setting is Balanced” — which strengthens the Edge row rather than only dating it |
Storage.runBounceTrackingMitigations and Storage.getRelatedWebsiteSets exist at devtools-protocol tip-of-tree and are topically adjacent but unmentioned | accepted. Added to the bounce-tracking paragraph, with the point that unlike the Privacy Sandbox commands beside them these two survive at tip-of-tree, and that forcing the purge is what an arm wants |
| Several 2026 SEO pages claim Chrome now shows a third-party-cookie prompt, contradicting Google's own blog | noted, no change. The reviewer rejected them as unreliable and confirmed Google's April 2025 position is still current. The page already cites the primary source through privacy_sandbox |
safaridriver, msedgedriver and Appium not independently re-verified against a vendor changelog | noted, no change. No contradicting evidence; the page does not attach a version or a date to any of the three, so there is no figure to go stale |
15.2 Figures versus the script (Sonnet)
Re-ran bp_report.mjs, bp_arms_probe.mjs and bp_edge_check2.mjs and diffed against the committed outputs: byte-identical, no drift. Independently re-derived the 84/1,120 versus 84/857 identity (0 discrepancy either way), the 226 distinct browser strings and 42-string residue, the arms counts, the version-pinning figures and the audit verdict arithmetic (15+3+1+2+1+4+58 = 84). Confirmed the usedOrMentioned filter keeps only used/produced and that no query counts tuples.
Mutation-tested the published probe, which was the point of the pass: inverting enableThirdPartyCookieRestriction to false flips the working arm back to an unblocked control, and making the “third party” same-site as the first party flips the CDP-block arm from blocked to unblocked. The probe is sensitive, not vacuous.
| Finding | Action |
|---|---|
| The Edge evidence cited a paper from the rejected widening. The provenance page named Double-Edged Shield as one of two substantive body mentions in the 18-paper scan. It is not in those 18 at all: its Edge sentence is nowhere near the literal string “Tracking Prevention”, and it only surfaced in the 176-paper noisy widening this log itself calls unusable. The real 18 contain three body occurrences, not two — XSinator, PURL and a 2020 CCS survey's coding-category label — and none of the three is about Edge | accepted, medium-high. The section was rebuilt. The page now says 17 of 20 occurrences are reference-list entries, names all three body occurrences and states that none concerns Edge, and adds a second, committed sweep (scripts/bp_edge_cite.mjs) counting the 5 papers that cite Microsoft's Edge tracking-prevention documentation. The headline zero was never in doubt; the evidence behind it now matches the data |
ukani2025_local: “five products found vulnerable” undercounts. The paper also says “We apply our tests to six popular Web privacy and security tools—identifying at least one vulnerability in each for a total of 19” | already fixed before this arrived, from the parallel citations pass, which found the same tension from the other side. The row now says five products whose bugs expose users, plus a sixth non-exposing bug in DuckDuckGo, 19 vulnerabilities disclosed to six parties, and that AdGuard's patch is partial. Both reviewers were right about different sentences in the same paper |
datta2019_evaluating framing inverted. The page read “13 of the 15 PETs moved that from about 13 bits to about 11”, which sounds like an achieved reduction. The paper's own sentence is that all AFPETs but Brave and Tor BB “reveal over 11 bits of entropy and hence are marginally better than not using any AFPET at all” | accepted, medium. Rewritten to the paper's framing, quoted, and turned into the page's point: a protection arm can move your metric hardly at all, and that is a finding |
Latent bug in browser_fold.mjs: \bie\b cannot match the no-space form IE11. No string in the current 226 takes that form, so no published figure is affected | accepted, low. Rule changed to \bie\s*\d alternation and unit-checked against IE11, IE 11, IE, Internet Explorer 8, pie and tie. Re-ran the report: no drift |
15.3 Citations and quotes (Sonnet)
Verified all 26 citekeys resolve, no key collisions in the 728-entry bibliography, and checked the four new keys author-by-author against the papers and the venue landing pages. Independently re-read all 15 in rows plus the baseline, instrument, spoof and adjacent classifications against the paper text, and confirmed the rendered page: 50 inline markers, 26 distinct keys, 26 reference entries, one expected red link.
| Finding | Action |
|---|---|
The Brave version was a prerelease. The page said stable 1.94.118 on 2026-09-01, taken from the unfiltered releases list. That release object carries prerelease: true; /releases/latest, which excludes prereleases, returns v1.94.117, published 2026-08-26 | accepted, moderate — and independently re-confirmed twice before changing: the API's prerelease flag, and Brave's own release-notes page, which is headed “Release Notes v1.94.117 (Aug 27, 2026)”. Fixed, with the trap written into the footnote. The Chromium figure (152.0.7977.64) was right either way |
| “Firefox's Disconnect-based blocking has a 45-day first-party-visit exemption” had no source anywhere, on a page whose own stated standard is that every browser-behaviour claim traces to a vendor page, a binary or a paper | accepted, moderate. It does have a source — [2Randall, Audrey; Snyder, Peter; Ukani, Alisha; Snoeren, Alex C.; Voelker, Geoffrey M.; Savage, Stefan; Schulman, Aaron (2022): "Measuring UID smuggling in the wild", in: Proceedings of the ACM Internet Measurement Conference. (DOI)], “Firefox clears all storage from sites on the Disconnect tracking list after 24 hours, unless the user has loaded the site as a first party in the previous 45 days” — which was in the reading and not in the citation. Both occurrences now cite it, and the quote is in the checker |
A reference marker silently dropped mid-quote. The [3Hausladen, Katherine; Wang, Oliver; Eng, Sophie; Wang, Jocelyn; Wijaya, Francisca; May, Matthew; Zimmeck, Sebastian (2025): "Websites' Global Privacy Control Compliance at Scale and over Time", in: Proceedings of the USENIX Security Symposium. (Link)] quote omitted the source's [54] with no [...], which is exactly the defect §7.1 caught for TRIDENT and fixed | accepted, minor but embarrassing. The marker is restored inside the quote. The general lesson is now enforced by the checker rather than by care: see the next row |
| Two quotes on the page were not in the checker at all — [4Hoang, Nguyen Phong; Niaki, Arian Akhavan; Gill, Phillipa; Polychronakis, Michalis (2021): "Domain name encryption is not enough: privacy leakage via IP-based website fingerprinting", Proceedings on Privacy Enhancing Technologies 2021(4):420-440. (DOI)]'s “at the same time” and [1Datta, Amit; Lu, Jianan; Tschantz, Michael Carl (2019): "Evaluating Anti-Fingerprinting Privacy Enhancing Technologies", in: Proceedings of the ACM Web Conference. (DOI)]'s Brave User-Agent sentence — so “32 verbatim, 0 not found” undercounted the page's real quote surface | accepted. Both added, plus the Double-Edged Shield forum sentence and the datta2019 halves. The checker now covers 41 spans, all passing. Checking the datta2019 sentence exposed a fourth two-column splice, now marked with [...] on the page |
elhajjchehade2025_double: wrong reason for excluding Brave. The page said Brave's forum “is not public”; the paper's Appendix B says the posts “do not include the detailed browser filter-list configurations” | accepted, moderate. Reworded on the page and in bp_audit.json, and the paper's sentence added to the quote checker |
| “Announced for new installs on 2019-06-04” was not supported by the cited September post, which says only “June 2019” | accepted, minor. The June post was in the reading; it is now cited by URL and quoted directly |
Three DOI collisions elsewhere in the 728-entry bibliography (fouad2022my/fouad2022_cookie; two boettger2025_regional-type entries; ahmad2026_ipfp/ahmad2026_more): the same paper twice under two keys, which a key-collision check cannot see | accepted as real, deferred, not touched. None of the six keys is cited by this page. Merging them means repointing every page that cites the losing key, and a half-merged bibliography breaks every page that cites a deleted key — so it is a sitting of its own. Filed as a work item on wiki-measuretheweb rather than done here |
| §15 of this log was an empty header while §14 promised four review passes | accepted; you are reading the fix |
15.4 What the focused reviewers did not catch
Two errors were found by the author, before and between the review passes, and neither reviewer flagged either:
- The summed multi-valued column (60.1%, and a “60 papers” partial sum) described in §2. The figures reviewer re-derived 60.1% from the table and confirmed the arithmetic — which was correct arithmetic on the wrong quantity. An arithmetic check cannot catch a category error, and this is the clearest illustration on the page of why the number guard is not enough.
- The three column-spliced quotes in §7.1, caught by writing the quote checker rather than by reading. The fourth splice was caught only when the citations reviewer pointed out the two quotes the checker did not cover — so the tool and the reviewer each found what the other missed.
15.5 Generic pass (Fable)
Pending: this section is filled after the generic reviewer runs against the published page.
References
- [1]
- Datta, Amit; Lu, Jianan; Tschantz, Michael Carl (2019): "Evaluating Anti-Fingerprinting Privacy Enhancing Technologies", in: Proceedings of the ACM Web Conference. (DOI)
- [2]
- Randall, Audrey; Snyder, Peter; Ukani, Alisha; Snoeren, Alex C.; Voelker, Geoffrey M.; Savage, Stefan; Schulman, Aaron (2022): "Measuring UID smuggling in the wild", in: Proceedings of the ACM Internet Measurement Conference. (DOI)
- [3]
- Hausladen, Katherine; Wang, Oliver; Eng, Sophie; Wang, Jocelyn; Wijaya, Francisca; May, Matthew; Zimmeck, Sebastian (2025): "Websites' Global Privacy Control Compliance at Scale and over Time", in: Proceedings of the USENIX Security Symposium. (Link)
- [4]
- Hoang, Nguyen Phong; Niaki, Arian Akhavan; Gill, Phillipa; Polychronakis, Michalis (2021): "Domain name encryption is not enough: privacy leakage via IP-based website fingerprinting", Proceedings on Privacy Enhancing Technologies 2021(4):420-440. (DOI)
