in-app browser bridge objects agree with the browser being claimed
Either no bridge object and no wrapper named in the user agent, or a bridge object whose owner is exactly the wrapper the user agent claims.
What a detector infers
A deployed commercial agent enumerates a short list of window globals that are not web platform features at all. Each one is a bridge object injected by a particular wrapper application — Chrome on iOS, Firefox on iOS, UC Browser, Yandex, Edge — so that the native side can communicate with the page it is displaying. They exist to make an embedded web view controllable, and each belongs to exactly one owner.
That single-owner property is what turns them into a coherence pair rather than a readout. A user agent is a string that anything can write; these objects are placed into the page by the host application when it loads, from outside the page's control. So the two describe the same fact from opposite directions, and the check is two-sided.
A page carrying a wrapper's bridge object while presenting itself as an ordinary standalone browser has something rendering it that its user agent does not admit to. The reverse is just as legible: a user agent naming an in-app browser with none of that browser's plumbing present is the string on its own, which is what a profile produces when someone edits the identity and not the environment.
The list is deliberately confined to objects with one documented owner each, so the presence direction can be scored without any population data — nothing here rests on a heuristic about naming, which is the failure mode a list like this would otherwise have.
How to resolve it
These objects come from the application hosting the web view, so no user-agent edit reaches them — and editing the user agent is what produces the mismatch. A profile meant to present as an in-app browser has to actually be one, and a profile meant to present as standalone should not be running inside a wrapper that announces itself.
Nearby checks in Navigator identity
- a worker resolves the same IANA timezone as the main thread
worker-main-timezone-coherenceA browser has one host timezone, and the specification ties both the main-thread global and every worker global to it, so a real browser… - a second browser target resolves the same timezone as the window
timezone-shared-worker-vs-windowThis audit already compares the window's timezone against a dedicated worker. - the keyboard layout maps the OEM keys the way one real Windows layout would
keyboard-layout-single-originA keyboard layout is not a set of independent key mappings — it is one artifact the operating system hands over whole. - navigator.appVersion is the user agent minus its leading token
appversion-vs-useragentnavigator.appVersion is not an independent fact. In Blink and WebKit it is computed from the User-Agent at read time — literally the UA with… - the URL parser follows the specification exactly
url-parser-spec-conformanceThe URL specification pins the exact result of a handful of awkward parses, and it pins them for every engine and every operating system… - Trusted Types hands back the branded object its own type demands
trusted-types-value-invariantTrusted Types is a typed API, not a boolean feature flag, and that is the whole of the check. - the user agent on the wire and the one JavaScript reports describe the same browser
ua-wire-vs-navigatorYour user agent is asserted on two channels built by different layers: the network stack writes the header, and the renderer answers… - a Date's own text agrees with the Date's own offset
date-tostring-coherenceA Date's text is not opaque. ECMA-262 defines toString() as toDateString() + " " + toTimeString(), fixes the weekday and month tables to…
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 Navigator identity 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 Navigator identity — the family webview-wrapper-markers-vs-ua belongs to.
