Every extension WebGL hands out is one it advertises
No extension that getExtension() returns is missing from getSupportedExtensions(). Prefixed aliases and flag-gated drafts are not asked for (severity: warn).
What a detector infers
In Chrome, getSupportedExtensions() and getExtension() read the same set: an extension the context can hand out is one it lists, and one it does not list returns null. A spoof that makes a context look like a different GPU usually does it by trimming the advertised list, because removing names is easy and adding real capability is not. But getExtension still reaches the real backend, so the hidden extensions stay one call away.
The probe asks for every name in the WebGL extension registry and counts those that come back non-null while missing from the advertised list. Measured on stock Chrome on Windows (Direct3D 11) and on Linux (SwiftShader): none. A list-filtering spoof written for the test left three extensions gettable but unlisted — the failing side is simulated rather than a captured tool. Vendor-prefixed aliases and draft extensions gated behind flags are not asked for.
This is the mirror of webgl-extensions-vs-driver: that row fails an advertised extension the driver cannot back (a padded list), this one fails a working extension the list hides (a trimmed one).
How to resolve it
Advertise exactly what the context can do. Trimming getSupportedExtensions() to imitate another GPU leaves getExtension() answering for the real one; present a GPU whose own driver has the extension set being shown.
Nearby checks in Render & GPU
- A fully transparent canvas pixel reads back as zero
canvas-alpha-zero-reads-blackA 2D canvas stores its pixels premultiplied: each colour channel is kept already multiplied by alpha. - Grey drawing reads back as grey
canvas-grey-stays-greyText, arcs and gradients drawn in a neutral grey on a transparent canvas read back with the three colour channels equal. - A Direct3D renderer only appears under a Windows claim
d3d-renderer-only-on-windowsDirect3D is a Windows API. ANGLE, the layer Chromium renders WebGL through, only names it in the unmasked renderer string when it is running… - A Direct3D 11 renderer reports the caps ANGLE's D3D11 backend fixes
webgl-d3d11-fixed-capsWhen ANGLE runs WebGL on Direct3D 11 at feature level 11 — the renderer string reads Direct3D11 vs_5_0 ps_5_0 — it does not ask the driver… - WebGL state reads back what the page just set
webgl-state-reads-backSome WebGL parameters are not capabilities but state the page itself controls. - readPixels writes only the pixels it was asked to read
webgl-readpixels-sentinelreadPixels writes into an array the page supplies, and the WebGL specification is precise about the edges: when the requested rectangle… - A worker OffscreenCanvas encodes the pixels it reads back
offscreen-canvas-exits-agreeA canvas has more than one way out. getImageData hands pixels straight to script; convertToBlob encodes the same pixels into a file, and… - WebGPU's preferred canvas format belongs to the claimed OS
webgpu-canvas-format-vs-osnavigator.gpu.getPreferredCanvasFormat() returns the texture format the platform's compositor wants to be handed, and Chrome on Windows and…
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 Render & GPU 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 Render & GPU — the family webgl-gettable-is-advertised belongs to.
