<!DOCTYPE HTML> | |
<title>document.fonts.ready resolves after layout depending on loaded fonts</title> | |
<link rel="help" href="https://drafts.csswg.org/css-font-loading/#fontfaceset-pending-on-the-environment"> | |
<script src="/resources/testharness.js"></script> | |
<script src="/resources/testharnessreport.js"></script> | |
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> | |
<style> | |
#foo { | |
font: 100px/1 Ahem; | |
} | |
</style> | |
<div id="log"></div> | |
<span id="foo">X</span> | |
<script> | |
// The purpose of this test is to ensure that testharness.js tests can use | |
// `document.fonts.ready` to wait for a web font to load, without having to | |
// wait for the window load event before or requestAnimationFrame after. | |
// | |
// The spec says that a FontFaceSet is "pending on the environment" if "the | |
// document has pending layout operations which might cause the user agent to | |
// request a font, or which depend on recently-loaded fonts", and both are | |
// assumed to hold true in this test. | |
async_test(t => { | |
assert_equals(document.fonts.size, 1, 'one font is pending'); | |
document.fonts.ready.then(t.step_func_done(() => { | |
const span = document.getElementById('foo'); | |
const rect = span.getBoundingClientRect(); | |
// If Ahem has loaded, the X will be 100px wide. | |
assert_equals(rect.width, 100, 'span is 100px wide'); | |
})); | |
}); | |
</script> |