Firefox/Gecko UA that still exposes the Chromium-only Battery API (navigator.getBattery)
br.battery_api_vs_gecko_ua · convicts
What it catches
ENGINE-vs-UA leak on a surface real captchas read (the teardown delta). The Battery Status API (navigator.getBattery) is a CHROMIUM-only method: Firefox removed it entirely in 2022 (bug 1313580; Gecko exposes no getBattery) and WebKit/Safari never shipped it. So a session whose UA claims Firefox/Gecko while navigator.getBattery is still a function is a Chromium engine wearing a Firefox UA — the exact incoherence a UA-only anti-detect spoof leaks (it changed the UA string but not the JS engine surface). CONVICTING (w0.6): method PRESENCE is a synchronous read (no getBattery() call, no permission prompt). FP-SAFE by construction — a real Firefox never exposes the method, so a genuine Gecko session is silent; the check is scoped to /Firefox/ UAs (excluding SeaMonkey) so a Chromium UA (which legitimately has the API) is out of scope. The RED counter is deleting navigator.getBattery under a Firefox UA — which then must also satisfy every other Gecko engine tell (the coherent-stack point). GROUNDED: the detector's collector emits battery_api on Chromium and battery_api_vs_gecko_ua only when a Firefox UA co-occurs with the method; a real Firefox reports neither the leak nor fires.
Signals it reads
browser.battery_api_vs_gecko_ua
How it fires
present
Evaders it caught 1
Bypassed by 10
Frontier evaders that reach the detector uncaught (scored only suspicious, defeating every convicting tell) — this check is not one that stops them. The red-team frontier this detection still has to convict.