A frame reports the browser window's outer size, not its own
A same-origin iframe reports the same outerWidth, outerHeight, screenX and screenY as the top page. N/A on Brave (severity: warn).
What a detector infers
outerWidth, outerHeight, screenX and screenY describe the browser window — frame and all — not the document asking. A same-origin iframe therefore reports exactly the same four values as the top-level page, whatever the iframe's own size: the frame lives inside the window and has no outer size of its own. An override that computes these values in each frame from that frame's own viewport gives every frame a different window.
The 'window.outerdimensions' module of puppeteer-extra-plugin-stealth does exactly that, setting outerWidth to innerWidth and outerHeight to innerHeight plus 85. The probe compares the top page with a same-origin frame. Every stock browser tested reported identical values; with that override in place, the frame claimed 300×235 against the top page's 764×570.
Only a simulation of the failure was measured, because that module only switches itself on in the old headless mode, which was not among the arms tested. Brave varies window geometry as a privacy feature and is N/A. It complements iframe-coherence, which compares navigator values across realms; this row compares the window geometry every realm shares.
How to resolve it
Size the real window instead of overriding window geometry per frame. If outer dimensions are overridden at all, they describe the one window and have to be the same in every frame.
Nearby checks in Native function integrity
- Function.toString not proxied (native code)
tostring-nativeThe check stringifies two functions and requires both to match /\{\s*\[native code\]\s*\}/: Function.prototype.toString itself (read as… - Navigator props resolve via native prototype getters
navigator-descriptorsFor deviceMemory, hardwareConcurrency, language, languages and platform, the check reads the property descriptor twice. - Every navigator accessor and method is native, not just the well-known ones
navigator-prototype-fully-nativenavigator-descriptors asks whether seven named properties resolve through native prototype getters. - Key native functions are untampered (toString + no prototype)
native-integrityThis runs a battery over roughly forty engine-owned callables — canvas, WebGL, navigator, iframe, shadow-DOM and fetch natives, plus the JS… - A fresh iframe (contentWindow) matches the main realm
iframe-coherenceThe check appends a hidden same-origin iframe to documentElement and reads its contentWindow — a brand-new JavaScript realm with its own… - Worker navigator matches the main thread
worker-navigator-coherenceA Blob-URL Worker is spawned and reports its own navigator.platform, navigator.hardwareConcurrency, navigator.webdriver and… - Page-world natives that extensions commonly wrap
page-world-wrappersThis probe stringifies window.fetch and window.Request and asks whether each still renders as native code, then checks whether document… - Nonexistent navigator properties return undefined
navigator-proxy-honeypotThis reads five navigator property names that exist on no browser — rml, ln, rnd, webdriverPatched and __clearcoteProbe — and additionally…
Clearcote is a browser built for fingerprint coherence
It is a Chromium fork, maintained by the same people who wrote this reference. It ships as a compiled browser rather than as a stealth script injected into someone else's — which is a description of how it is built, and is not an argument about how it behaves on this check.
This audit takes no position on how Clearcote scores on Native function integrity checks, on this one, or anywhere else. It has no baseline corpus of other people's fingerprints to rank you against and no vendor scoreboard — nearly every check is self-referential, asking one browser the same question through two independent APIs and reporting whether both answers can be true at once. It runs identically on any browser, including ours. Run it on yours and read the result yourself.
See the other checks in Native function integrity — the family iframe-outer-geometry belongs to.
