v150 · platform hygiene
Remove [LegacyNoInterfaceObject] from FontFaceSet IDL
FontFaceSet becomes a real global. Chromium's IDL accidentally carried [LegacyNoInterfaceObject], hiding the interface object on window and dropping constructor from its prototype. Removing the annotation matches the CSS Font Loading spec and what Safari and Firefox have shipped all along.
concepts
-
FontFaceSet Probe
Reports whether
FontFaceSetis present onwindow, whetherdocument.fontsis aninstanceof FontFaceSet, and whether itsconstructor.nameexposes the right value. -
Worker Exposure
The other half of
[Exposed=(Window,Worker)]. Runs the same identity probes inside a dedicated Worker and surfaces the result — the worker-side fix is easy to forget when sanity-checking from window scope only. -
Prototype Inspector
Walks the
FontFaceSetprototype chain and verifies every surface[LegacyNoInterfaceObject]was hiding:window.FontFaceSetpresence,instanceofcheck,constructor.name, own-property list, and a live worker-side probe — all in one page. -
Set-like Iteration Demo
Exercise every Set-like method on
document.fontswith live buttons:.size,.has(),.forEach(),.values(),.keys(),.entries(),for…of, andinstanceof FontFaceSet. Add syntheticFontFaceobjects first to give the iterators something to iterate over. -
Dynamic Font Loader
Add, inspect, and remove
FontFaceobjects fromdocument.fontsvia a form — choose family, weight, and style, then click Add. The live table reflectsdocument.fonts.size, each font'sstatus, and whetherdocument.fonts instanceof FontFaceSetholds in Chrome 150+. Includesdocument.fonts.readyanddocument.fonts.check()test buttons. -
FontFaceSet Migration Guide
Live probe of all
FontFaceSetcapabilities with before/after code panels. Toggles between the legacydocument.fonts.add()pattern and the newnew FontFaceSet([])constructor, shows a full interface comparison table, and runs a real Worker font loading probe to confirm both Window and Worker exposure work in Chrome 150+.
why it shipped
This is one of those tiny interop fixes that has a long tail of real consequences. Libraries that feature-detect FontFaceSet on window would think Chrome didn't support it, and code that walked document.fonts.constructor got undefined. The spec never asked for this and other browsers don't do it; the annotation was a historical accident in Chromium's IDL. Removing it makes FontFaceSet a normal constructible-shaped global like every other DOM interface.
references
implementation reference
Need the exact API surface, compatibility boundaries, errors, lifecycle, and source links? Read the matching gendn reference ↗