mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
script: Implement the FontFaceSet
DOM API (#32576)
Add a skeleton implementation of FontFaceSet interface with support for resolving the `document.fonts.ready` Promise when the loading of web fonts is completed. This change exposes new failures in the web platform tests. These were ERROR before the change because `document.fonts.ready` caused a `ReferenceError` causing the tests to be aborted and they now FAIL: - /css/CSS2/linebox/vertical-align-top-bottom-001.html - /css/css-flexbox/flex-one-sets-flex-basis-to-zero-px.html - /css/css-fonts/generic-family-keywords-001.html - /css/css-fonts/math-script-level-and-math-style/math-script-level-004.tentative.html - /css/css-fonts/math-script-level-and-math-style/math-script-level-002.tentative.html - /css/css-text/text-autospace/text-autospace-ligature-001.html - /css/css-values/calc-size/calc-size-width.tentative.html These were TIMEOUT before the change because `document.fonts.ready` was a ReferenceError and the tests were asynchronous (reftest-wait). These now FAIL because the assertions are now executed after fonts are loaded: - /css/css-fonts/matching/fixed-stretch-style-over-weight.html - /css/css-fonts/matching/range-descriptor-reversed.html - /css/css-fonts/matching/stretch-distance-over-weight-distance.html - /css/css-fonts/matching/style-ranges-over-weight-direction.html - /css/css-fonts/variations/variable-box-font.html - /css/css-fonts/variations/variable-gpos-m2b.html - /css/css-fonts/variations/variable-gsub.html - /css/css-fonts/variations/variable-opsz-size-adjust.html - /css/css-position/sticky/position-sticky-change-top.html - /css/css-position/sticky/position-sticky-fixed-ancestor.html - /css/css-position/sticky/position-sticky-flexbox.html - /css/css-position/sticky/position-sticky-grid.html - /css/css-position/sticky/position-sticky-inline.html - /css/css-position/sticky/position-sticky-rendering.html - /css/css-position/sticky/position-sticky-stacking-context.html - /css/css-position/sticky/position-sticky-table-td-left.html - /css/css-position/sticky/position-sticky-table-td-right.html - /css/css-position/sticky/position-sticky-table-tfoot-bottom.html - /css/css-position/sticky/position-sticky-table-th-right.html - /css/css-position/sticky/position-sticky-table-thead-top.html - /css/css-position/sticky/position-sticky-table-tr-bottom.html - /css/css-position/sticky/position-sticky-table-tr-top.html - /css/css-position/sticky/position-sticky-writing-modes.html - /css/css-pseudo/marker-intrinsic-contribution-001.html - /css/css-text/hyphens/hyphens-character.html These tests now PASS due to this patch: * FAIL -> PASS - /html/canvas/element/text/2d.text.draw.fill.maxWidth.fontface.html - /html/canvas/element/text/2d.text.measure.width.empty.html * TIMEOUT -> PASS - /css/css-fonts/variations/font-descriptor-range-reversed.html - /css/css-fonts/variations/variable-opsz.html - /css/css-position/sticky/position-sticky-table-th-left.html * ERROR -> PASS - /css/css-fonts/generic-family-keywords-002.html - /css/css-fonts/generic-family-keywords-003.html * These two tests only PASS in Layout 2020: - /css/CSS2/positioning/inline-static-position-001.html - /css/cssom-view/getBoundingClientRect-empty-inline.html These two tests have subtests that PASS intermittenttly: - /fetch/metadata/generated/css-font-face.sub.tentative.html - /css/css-fonts/generic-family-keywords-001.html These tests are new TIMEOUTS that used to FAIL because `documents.fonts.ready` was undefined: - /resource-timing/TAO-match.html - /resource-timing/content-type.html - /resource-timing/nextHopProtocol-is-tao-protected.https.html The failure in `/resize-observer/change-layout-in-error.html` could be due to an issue in the ResizeObserver implementation that is now exposed with this change, but this needs more investigation. Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com> Co-authored-by: Martin Robinson <mrobinson@igalia.com>
This commit is contained in:
parent
7ea894774f
commit
a730469b70
95 changed files with 642 additions and 212 deletions
49
components/script/dom/webidls/FontFaceSet.webidl
Normal file
49
components/script/dom/webidls/FontFaceSet.webidl
Normal file
|
@ -0,0 +1,49 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
/*
|
||||
dictionary FontFaceSetLoadEventInit : EventInit {
|
||||
sequence<FontFace> fontfaces = [];
|
||||
};
|
||||
|
||||
[Exposed=(Window,Worker)]
|
||||
interface FontFaceSetLoadEvent : Event {
|
||||
constructor(DOMString type, optional FontFaceSetLoadEventInit eventInitDict = {});
|
||||
// WebIDL needs to support FrozenArray & SameObject
|
||||
// [SameObject] readonly attribute FrozenArray<FontFace> fontfaces;
|
||||
readonly attribute any fontfaces;
|
||||
};
|
||||
|
||||
enum FontFaceSetLoadStatus { "loading" , "loaded" };
|
||||
*/
|
||||
|
||||
// https://drafts.csswg.org/css-font-loading/#FontFaceSet-interface
|
||||
[Exposed=(Window,Worker)]
|
||||
interface FontFaceSet : EventTarget {
|
||||
// constructor(sequence<FontFace> initialFaces);
|
||||
|
||||
// setlike<FontFace>;
|
||||
// FontFaceSet add(FontFace font);
|
||||
// boolean delete(FontFace font);
|
||||
// undefined clear();
|
||||
|
||||
// events for when loading state changes
|
||||
// attribute EventHandler onloading;
|
||||
// attribute EventHandler onloadingdone;
|
||||
// attribute EventHandler onloadingerror;
|
||||
|
||||
// check and start loads if appropriate
|
||||
// and fulfill promise when all loads complete
|
||||
// Promise<sequence<FontFace>> load(DOMString font, optional DOMString text = " ");
|
||||
|
||||
// return whether all fonts in the fontlist are loaded
|
||||
// (does not initiate load if not available)
|
||||
// boolean check(DOMString font, optional DOMString text = " ");
|
||||
|
||||
// async notification that font loading and layout operations are done
|
||||
readonly attribute Promise<FontFaceSet> ready;
|
||||
|
||||
// loading state, "loading" while one or more fonts loading, "loaded" otherwise
|
||||
// readonly attribute FontFaceSetLoadStatus status;
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue