If we're going with exposing byte-by-byte representation of the fonts on the user's filesystem, we should make that slightly more explicit. Maybe add a note to https://wicg.github.io/local-font-access/#font-representation-data-bytes clarifying that point?
I *think* that lack of normalization should resolve the issues Anne was concerned about in https://github.com/WICG/local-font-access/issues/20, where different normalization algorithms result in compatibility issues. I also *think* it should resolve Tess' concerns RE user assumptions of the fonts being Open-Type. Can you clarify those points with them? On Monday, April 25, 2022 at 6:12:00 PM UTC+2 Alex Russell wrote: > Normalisation isn't usually a goal for users that want the actual bytes of > the local font in order to do the rendering themselves and can be an active > non-goal given the ways that folks want to do custom grouping, enumeration, > and rendering. Partners have consistently asked us not to remove > information and I've never heard of a request for normalisation from a > partner. > > This is in line with not adding OTS sanitisation for these files (we > don't need to when the OS rendering pipeline isn't at potential risk), and > highlights the way that the current design is isomorphic with local file > access. > > I've LGTM'd it in the tool as a result. > > Thanks to everyone at Google for continuing to push this forward. > > Best Regards, > > Alex > > On Thursday, April 21, 2022 at 9:46:15 AM UTC-7 Joshua Bell wrote: > >> On Wed, Apr 20, 2022 at 4:21 AM Yoav Weiss <yoavwe...@chromium.org> >> wrote: >> >>> >>> >>> On Wed, Apr 13, 2022 at 6:46 PM Joshua Bell <jsb...@google.com> wrote: >>> >>>> On Wed, Apr 13, 2022 at 6:36 AM Yoav Weiss <yoavwe...@chromium.org> >>>> wrote: >>>> >>>>> Also, any learnings/feedback from the Origin Trial? >>>>> >>>>> >>>> Not distinct from the dev trial (i.e. developers trying the API behind >>>> a flag). There was a feature request for additional metadata which was >>>> implemented, then the request was withdrawn so that code was backed out. >>>> Other requests are marked as "enhancements" in the issue tracker, e.g. >>>> font >>>> modification timestamps. >>>> >>>> >>>>> On Wednesday, April 13, 2022 at 3:35:02 PM UTC+2 Yoav Weiss wrote: >>>>> >>>>>> On Friday, April 8, 2022 at 8:15:42 PM UTC+2 Ajay Rahatekar wrote: >>>>>> >>>>>>> Contact emails >>>>>>> >>>>>>> ds...@chromium.org, jsb...@chromium.org >>>>>>> >>>>>>> Explainer >>>>>>> >>>>>>> https://github.com/WICG/local-font-access >>>>>>> >>>>>>> Specification >>>>>>> >>>>>>> https://wicg.github.io/local-font-access/ >>>>>>> >>>>>>> Design docsDesign Doc: https://bit.ly/2HWBOLi >>>>>>> <https://chromestatus.com/admin/features/launch/6234451761692672/Design%20Doc:%20https://bit.ly/2HWBOLi> >>>>>>> >>>>>>> Blog: https://web.dev/local-fonts/ >>>>>>> >>>>>>> >>>>>>> Summary >>>>>>> >>>>>>> Gives web applications the ability to enumerate local fonts and some >>>>>>> metadata about each. Today, no API exists to provide a list of local >>>>>>> fonts >>>>>>> to web applications. >>>>>>> >>>>>>> Also gives web applications access to the font data as a binary >>>>>>> blob, allowing those fonts to be rendered within their applications >>>>>>> using >>>>>>> custom text stacks. >>>>>>> >>>>>>> Blink component >>>>>>> >>>>>>> Blink>Fonts >>>>>>> <https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3EFonts> >>>>>>> >>>>>>> TAG review >>>>>>> >>>>>>> https://github.com/w3ctag/design-reviews/issues/400 >>>>>>> >>>>>>> TAG review status >>>>>>> >>>>>>> Pending >>>>>>> >>>>>>> RisksInteroperability and Compatibility >>>>>>> >>>>>>> This API has been designed to support feature detection to allow >>>>>>> applications to gracefully degrade based on the capabilities different >>>>>>> user >>>>>>> agents offer. >>>>>>> >>>>>>> We expect developers using this API to design their web applications >>>>>>> to use web-based fonts as the primary set of font choices, but allow >>>>>>> users >>>>>>> to opt-in to take advantage of their local fonts for specific design >>>>>>> needs. >>>>>>> >>>>>>> If this feature were removed from the platform, web applications >>>>>>> would lose the ability to enumerate local fonts and retrieve font data >>>>>>> but >>>>>>> otherwise are expected to continue to function. >>>>>>> >>>>>>> Gecko: https://github.com/mozilla/standards-positions/issues/401 >>>>>>> >>>>>> >>>>>> https://github.com/WICG/local-font-access/issues/20 and >>>>>> https://github.com/WICG/local-font-access/issues/19 are still open >>>>>> and seem to be increasing the interop risk here. Can you expand on plans >>>>>> to >>>>>> resolve them? >>>>>> >>>>> >>>> https://github.com/WICG/local-font-access/issues/81 is also related >>>> and comes down to: how much do we shield the web app from the contents of >>>> font files? At one extreme, the data is normalized into some strict >>>> subset, >>>> stripping features. At the other, they are treated like files. When we >>>> started exploring the API we started in the middle exposing the font data >>>> in a more structured way (e.g. tables), but this (1) would lock the API >>>> into current font formats/concepts and (2) all sites planning to use the >>>> API are using common libraries that consume entire files, which already >>>> have robust parsing. So we lean heavily into the "treat them like files" - >>>> provide the data and get out of the way of the sites/libraries to use the >>>> rich data, similar to uploading images. >>>> >>> >>> So, no normalization happens on the font files? Is that reflected in the >>> spec? Did you get any feedback on that approach from the folks that chimed >>> in on the issues? >>> >> >> That is correct. The spec text is currently agnostic about what happens. >> It could be made more forceful, e.g. that UAs are not required to normalize >> data, and that consumers of the API should code defensively. >> >> Folks that chimed in on the issues represented the spread of thoughts, >> from not wanting to assume anything about fonts (which would preclude >> future innovation) to considering a lack of normalization a flaw, even for >> image uploads. I haven't had a chance to respond in detail. "Normalization" >> could imply many things, from rearranging elements within general container >> formats (e.g. JFIF marker segments for images, SNFT tables for fonts, MP4 >> data streams and captioning for audio/video) to dropping elements (e.g. >> EXIF metadata in images, COLRv1 or Variable support in fonts, text captions >> from video) attempting to transcode (e.g. lossily converting an SVG image >> to a PNG, or SVG font to OTF). The consumers of the API, on behalf of >> users, expressly do not want to lose fidelity of the fonts, so that >> designers creating content have access to tools as powerful as native. >> >> >>> >>> >>>> >>>> The API shape takes an options object, which would allow adding a >>>> filter for font file formats in the future, e.g. {accept: ["font/ttf", >>>> "font/off", "font/woff", "font/woff2"]}, so that sites could limit what >>>> types are provided. I could imagine us adding that and providing a default >>>> like the above if new formats become supported by the web but that might >>>> "surprise" sites. >>>> >>>> >>>>> >>>>>> >>>>>>> WebKit: >>>>>>> https://lists.webkit.org/pipermail/webkit-dev/2022-April/032176.html >>>>>>> >>>>>>> Web developers: Strongly positive (https://crbug.com/535764#c2) >>>>>>> Very positive support from web applications that interact with local >>>>>>> fonts, >>>>>>> such as Figma. >>>>>>> >>>>>>> Adopted by: Boxy SVG <https://boxy-svg.com/app> >>>>>>> >>>>>>> >>>>>>> Other signals: >>>>>>> >>>>>>> Ergonomics >>>>>>> >>>>>>> The feature builds both enumeration and data access into the same >>>>>>> new API. Separation was considered but rejected. (See the Explainer for >>>>>>> more details.) That may limit use. >>>>>>> >>>>>>> Activation >>>>>>> >>>>>>> Developers will be able to take advantage of this feature >>>>>>> immediately since it uses the same available local fonts that other >>>>>>> native >>>>>>> applications have access to. The API makes it possible for web >>>>>>> developers >>>>>>> to implement a font picker (either UI-driven or algorithmic) and API >>>>>>> usage >>>>>>> will see more traction once popular UI libraries build font pickers on >>>>>>> top >>>>>>> of it. >>>>>>> >>>>>>> Content for this API is available immediately since the API uses >>>>>>> locally-installed fonts that are already present on the user's system. >>>>>>> Usage of this API by an average web developer will require additional >>>>>>> text >>>>>>> shaping software that would render fonts based on data returned by this >>>>>>> API. (eg. a Harfbuzz-in-WASM library) >>>>>>> >>>>>>> The API is designed to support additional functionality in the >>>>>>> future. Several such additions are under consideration: >>>>>>> >>>>>>> >>>>>>> - >>>>>>> >>>>>>> Querying for a "system UI" font, for web applications that >>>>>>> render text with their own text stack and need access to the full >>>>>>> font >>>>>>> data, but wish to match the local system appearance. This would be >>>>>>> equivalent to the CSS "system-ui" generic font family >>>>>>> <https://chromestatus.com/feature/5640395337760768>. >>>>>>> - >>>>>>> >>>>>>> Querying for only "low entropy" fonts, i.e. fonts that are part >>>>>>> of the operating system base installation. >>>>>>> - >>>>>>> >>>>>>> Querying font metadata in specific languages. Fonts often >>>>>>> contain metadata with language tags, but OS APIs for enumerating >>>>>>> fonts >>>>>>> typically return only the metadata for the active language. >>>>>>> - >>>>>>> >>>>>>> Providing additional metadata or events to notify web apps of >>>>>>> changes to fonts, to refresh caches. >>>>>>> >>>>>>> >>>>>>> >>>>>>> Security >>>>>>> >>>>>>> The API provides access to full font data in local fonts which can >>>>>>> expose additional information about a user's installed configuration to >>>>>>> a >>>>>>> web application. >>>>>>> >>>>>>> This new API is behind a permission prompt, making this an active >>>>>>> fingerprinting target. See the TAG review's security and privacy >>>>>>> questionnaire for more info: >>>>>>> https://github.com/wicg/local-font-access/blob/master/security-privacy.md >>>>>>> >>>>>> >>>>>> Are we planning to monitor potential abuse of the API? (e.g. random >>>>>> sites requesting access-to-fonts permissions) >>>>>> >>>>>> >>>>>>> Mitigations to existing passive fingerprinting vectors using local >>>>>>> fonts (i.e. via CSS and Canvas) >>>>>>> >>>>>> >>>>>> Aside, but I don't know that I'd consider those passive. >>>>>> >>>>>> >>>>>>> have been considered in non-Chromium-based browsers, and should be >>>>>>> considered for Chrome as well, but are outside the scope of this I2S. >>>>>>> In >>>>>>> light of those existing vectors, we do not believe this new API >>>>>>> contributes >>>>>>> meaningfully to new fingerprintability, and we assert that future >>>>>>> privacy >>>>>>> enhancements should be applied equally across all font-based vectors. >>>>>>> >>>>>>> WebView Application Risks >>>>>>> >>>>>>> Does this intent deprecate or change behavior of existing APIs, such >>>>>>> that it has potentially high risk for Android WebView-based >>>>>>> applications? >>>>>>> >>>>>>> This API does not change the behavior of any other existing APIs. >>>>>>> >>>>>>> Debuggability >>>>>>> >>>>>>> No special considerations. >>>>>>> >>>>>>> Is this feature fully tested by web-platform-tests >>>>>>> <https://chromium.googlesource.com/chromium/src/+/master/docs/testing/web_platform_tests.md> >>>>>>> ? >>>>>>> >>>>>>> No >>>>>>> >>>>>>> Flag name >>>>>>> >>>>>>> font-access >>>>>>> >>>>>>> Requires code in //chrome? >>>>>>> >>>>>>> False >>>>>>> >>>>>>> Tracking bug >>>>>>> >>>>>>> https://crbug.com/535764 >>>>>>> >>>>>>> Estimated milestones >>>>>>> OriginTrial desktop last 90 >>>>>>> OriginTrial desktop first 87 >>>>>>> >>>>>>> We aim to ship in 102 >>>>>>> Link to entry on the Chrome Platform Status >>>>>>> >>>>>>> https://chromestatus.com/feature/6234451761692672 >>>>>>> >>>>>>> Links to previous Intent discussions >>>>>>> >>>>>>> Intent to Experiment: >>>>>>> https://groups.google.com/a/chromium.org/g/blink-dev/c/3MW3ngOsUOk/m/iE0Bvg-6AwAJ >>>>>>> >>>>>>> This intent message was generated by Chrome Platform Status >>>>>>> <https://chromestatus.com/>. >>>>>>> >>>>>>> -- >>>>>>> Ajay Rahatekar | Technical Program Manager | >>>>>>> ajayrahate...@google.com | 650-797-1279 <(650)%20650-797-1279> >>>>>>> >>>>>> -- You received this message because you are subscribed to the Google Groups "blink-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+unsubscr...@chromium.org. To view this discussion on the web visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/b1b45b66-677d-4d02-bc81-94b9d5c7b57en%40chromium.org.