no other engine's properties exist on this one, even holding undefined
Check id legacy-engine-props-absent
What an ordinary browser yields
None of the probed Gecko or legacy-IE members exists on a Chromium build — not with a value, and not holding undefined.
What a detector infers
There is a difference between a property that returns undefined and a property that does not exist, and only one of them is what a real browser gives. On Chromium, `'oscpu' in navigator` is false — the member belongs to Gecko and was never compiled in. A persona script that wants to look like Chrome will happily assign `navigator.oscpu = undefined`, or define a getter that returns undefined, and the VALUE then matches a real Chrome exactly. The existence does not: `in` and getOwnPropertyDescriptor both see the assignment, and no amount of returning the right value hides that the property is there. The same holds for the legacy-IE members (cpuClass, appMinorVersion, systemLanguage, userLanguage, msDoNotTrack, document.documentMode), for window.ActiveXObject and window.netscape, and for Gecko's mozRTCPeerConnection and mozInnerScreenX. The row also catches the blunter failure — a foreign member present with a real value behind a Chromium user agent, which is what a persona assembled from another engine's property bag looks like. It reads a Blink build only, since the list is defined as the set of things Blink does not have.
How to resolve it
Never assign a foreign engine's property, not even to undefined: the assignment is what is visible, and a real Chromium answers false to `in`. A property that should be absent must simply never be created, and one that should exist belongs in the engine rather than on the page's navigator.
Read in the wild by
FakeBrowser (collector)
Records a distinct sentinel for 'exists but undefined' (_$obj!_undefined_//+_) separately from absent, over a property list full of Gecko and legacy-IE members — buildID, oscpu, cpuClass, appMinorVersion, systemLanguage, userLanguage, msDoNotTrack, ActiveXObject, netscape, mozRTCPeerConnection, documentMode, layers.
dumpObjProps() sentinels + dumpNavigatorProps/dumpWindowProps/dumpDocumentProps key lists, script/dumpDD.js
kkoooqq/fakebrowser script/dumpDD.js
Every attribution traces to a published artifact. See the sources and their limits.
Nearby checks in Navigator identity
- navigator.productSub === 20030107 (Chromium)
product-subnavigator.productSub is a frozen legacy constant, not a live value: Chrome, Safari and Opera return "20030107" while Firefox returns… - a build branded Google Chrome carries Google's Widevine CDM
widevine-vs-chrome-brandingThe ClearKey row in this suite deliberately refuses to score Widevine, and for the question it asked that is correct: "does a… - a build branded Google Chrome decodes the codecs Google licenses
licensed-codecs-vs-chrome-brandingH.264 and AAC are patent-encumbered. Google licenses them for its branded Chrome; a Chromium compiled without the proprietary_codecs flag… - a Firefox user-agent reports the Gecko productSub constant 20100101
gecko-productsub-hardcodenavigator.productSub is a constant compiled into the engine, and the two families disagree: every Gecko build hardcodes it to "20100101"… - navigator.deviceMemory is a power-of-two spec value
device-memory-boundsnavigator.deviceMemory does not report actual RAM — the spec requires the UA to quantise it to a coarse power-of-two rung before exposing… - navigator.hardwareConcurrency is plausible
hardware-concurrencyThis is an info-severity observation, not a scored failure — it reports navigator.hardwareConcurrency and only notes whether the value is an… - the machine delivers no more parallelism than it claims cores
hardware-concurrency-vs-parallelismThe plain hardwareConcurrency row can only ask whether the number looks sane, because no second API reports a core count. - the Keyboard API's presence matches the claimed engine and form factor
keyboard-api-vs-platformThe Keyboard API — navigator.keyboard, with getLayoutMap and lock — ships in desktop Chromium and nowhere else: not in Gecko, not in WebKit…
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 legacy-engine-props-absent belongs to.