Internal test pages for verifying Adblock end-to-end blocking behaviour in Chrome.
googletagmanager.com/gtag/js. Expected: blocked.google-analytics.com/collect. Expected: blocked.doubleclick.net ad iframe (iframe navigation block). Expected: blocked.googletagmanager.com (CSS request block). Expected: blocked.navigator.sendBeacon POST to google-analytics.com/collect (POST beacon path). Expected: blocked.fetch with mode: 'cors' to google-analytics.com/collect (XHR/fetch path). Expected: blocked.WebSocket upgrade to stats.g.doubleclick.net (WS upgrade block). Expected: blocked.Worker sourced from googletagmanager.com (worker-script fetch). Expected: blocked.<video> source from googleads.g.doubleclick.net (video-element URL block). Expected: blocked.preconnect/dns-prefetch to doubleclick.net with verification fetch (preconnect/DNS suppression). Expected: blocked.<meta name="referrer" content="no-referrer">; forces the proxy's ResolveTopLevelUrl heuristic to fall through to the request URL. Expected: blocked (rule has no $domain modifier), with host-level source-URL divergence in source-url-diff.summary.json.<div class="banner-ad">. EasyList's generic-hide rule ##.banner-ad should resolve the element to display: none. Expected: document loads, .banner-ad hidden.<div class="ad-wrapper"> (##.ad-wrapper). Expected: .ad-wrapper hidden.<div class="ad-slot"> (##.ad-slot). Expected: .ad-slot hidden.<div class="ad-unit"> (##.ad-unit). Expected: .ad-unit hidden.<div class="ad-zone"> (##.ad-zone). Expected: .ad-zone hidden.<div id="AdBanner"> (###AdBanner); exercises the ID-selector branch. Expected: #AdBanner hidden.<div class="article-body"> not in any filter list. Expected: stays visible ("everything is hidden" over-blocking canary).:has() rule. Expected under Standard: plain marker hidden; procedural marker and real content visible.Curated list of real-world sites the release-tests crawler can visit. Served as JSON from /phase4-sites (parsed from pages/phase4-sites.yaml).
$tag= unbreak (ENG-1000 / ENG-1006)Over-blocking canaries for the social-embed $tag= set shipped in
enabledFilterTags. Each loads a provider's canonical widget script
and reports loaded=true only if the script actually executed (defined
its global) — an empty-200 stub fires onload but can't define the
global, so a silent over-block is caught. Requires a build whose
proxysettings.json enables the corresponding tag.
connect.facebook.net/en_US/sdk.js (fb-embeds), expects window.FB. Expected: NOT blocked.platform.twitter.com/widgets.js (twitter-embeds), expects window.twttr. Expected: NOT blocked.platform.linkedin.com/in.js (linked-in-embeds), expects window.IN. Expected: NOT blocked (ENG-1006 prod canary).Pages whose expected verdict flips with the user's
filter_encrypted_traffic setting. The runner drives
them once with the toggle on and once with it off, asserting opposite
verdicts.
gtm.js subresource as third-party-script, named to signal it's the HTTPS-on/off canary. Expected: blocked when HTTPS filtering is on; loaded (and served from real upstream) when off..banner-ad (EasyList ##.banner-ad) to exercise generic-hide cosmetic filtering. Expected: hidden when HTTPS filtering is on; visible when off (proxy can't inject styles on a stream it doesn't decrypt).BlockingRecorder in Adblock.ReleaseTests. They report verdicts via window.__adblockTestResult and are evaluated against CDP Network.loadingFailed events. Manual visits are fine for sanity checks; meaningful pass/fail comes from the automated runner. See Linear ENG-682 (page suite), ENG-697 (cosmetic phase 3), ENG-698 (phase 4 real-site list), ENG-848 (HTTPS toggle canaries).