haikuwebkit/LayoutTests/fast/text/font-load-data-partitioned-...

26 lines
36 KiB
HTML
Raw Permalink Normal View History

Data URL fonts split in the middle of an alphabet cause random letters to disappear https://bugs.webkit.org/show_bug.cgi?id=175845 <rdar://problem/33996578> Reviewed by Brent Fulgham. Source/WebCore: It is fairly common practice for a font foundry to split a font up into two files such that a semi-random half of the alphabet is present in one of the files, and the other half is present in the other file. This practice involves representing the files as data URLs, so as to minimize the time it takes to load them. Because resource loading is asynchronous (even for data URLs), it is possible today to get a paint after the first file is loaded but before the second file is loaded. Indeed, because of the way font fallback works, we will never start loading the second file until a layout has occurred with the first font. Because a site usually only uses this pattern for a handful of fonts, and I've never seen this pattern being used for CJK fonts, it isn't very expensive to opportunistically decode these data URLs eagerly. Using this method doesn't actually guarantee that the two fonts will load in between successive paints, but it at least makes this much more likely. This patch implements this strategy, along with a size threshold to make sure that we won't decode any super large data URLs when it isn't necessary. Test: fast/text/font-load-data-partitioned-alphabet.html * css/CSSFontFace.cpp: (WebCore::CSSFontFace::opportunisticallyStartFontDataURLLoading): * css/CSSFontFace.h: * css/CSSFontFaceSource.cpp: (WebCore::CSSFontFaceSource::opportunisticallyStartFontDataURLLoading): * css/CSSFontFaceSource.h: * css/CSSFontSelector.cpp: (WebCore::CSSFontSelector::opportunisticallyStartFontDataURLLoading): * css/CSSFontSelector.h: * platform/graphics/FontCascadeFonts.cpp: (WebCore::opportunisticallyStartFontDataURLLoading): (WebCore::FontCascadeFonts::glyphDataForVariant): * platform/graphics/FontSelector.h: LayoutTests: Make sure that the requests for both fonts are sent before either of the responses are received. * fast/text/font-load-data-partitioned-alphabet-expected.txt: Added. * fast/text/font-load-data-partitioned-alphabet.html: Added. * platform/mac-wk1/fast/text/font-load-data-partitioned-alphabet-expected.txt: Added. Canonical link: https://commits.webkit.org/197482@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@226930 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-01-13 00:45:26 +00:00
<!DOCTYPE html>
<html>
<head>
<script>
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.dumpResourceLoadCallbacks();
}
</script>
<style>
@font-face {
font-family: "Half1";
src: url("data:;base64,AAEAAAALAIAAAwAwT1MvMnNl+esAAAC8AAAAYGNtYXAAhwCDAAABHAAAADxnYXNwABcACQAAAVgAAAAQZ2x5Zs7yyEgAAAFoAAAHXmhlYWTbUM21AAAIyAAAADZoaGVhBwoDbAAACQAAAAAkaG10eCEQAH0AAAkkAAABLGxvY2FC4ETIAAAKUAAAAJhtYXhwAE4ACQAACugAAAAgbmFtZbgpxhkAAAsIAAAponBvc3QEPCueAAA0rAAAAMYAAwPWAZAABQAAArwCigAAAI8CvAKKAAABxQAyAQMAAAIABAAAAAAAAACAAACvEAAgSAAAAAAAAAAAVzNDIABAACAAawMg/zgAAAMgAMj/EPwHAAD//wMgAyAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEACgAAAAGAAQAAQACACYAa///AAAAIAAo////4//iAAEAAAAAAAAAAAADAAgAAgAQAAH//wADAAIAfQAAA2sDIAADAAcAADMRIRElIREhfQLu/Y8B9P4MAyD84H0CJgABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAAABAAAAAYAAskn6wV8PPPUACQPoAAAAALNvX1kAAAAAxN2rJAAA/zgD6AMgAAAAAwAAAAAAAAAAAAEAAAMg/zgAAAPoAAAAAAPoAAEAAAAAAAAAAAAAAAAAAABLA+gAfQAAAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAAAAAFAAUABQAFAAhAC4AOwBIAFUAYgBvAHwAiQCWAKMAsAC9AMoA1wDkAPEA/gELARgBJQEyAT8BTAFZAWYBcwGAAY0BmgGnAbQBwQHOAdsB6AH1AgICDwIcAikCNgJDAlACXQJqAncChAKRAp4CqwK4AsUC0gLfAuwC+QMGAxMDIAMtAzoDRwNUA2EDbgN7A4gDlQOiA68AAQAAAEsACAACAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAACQBtgAAAAAAAAAAAfAAAAAAAAAAAAABAAgB8AAAAAAAAAACAA4B+AAAAAAAAAADACICBgAAAAAAAAAEAAgCKAAAAAAAAAAFABgCMAAAAAAAAAAGAAgCSAAAAAAAAAAKEGgCUAAAAAAAAAALACQSuAAAAAAAAAAOAFIS3AABAAAAAAAAAPgTLgABAAAAAAABAAQUJgABAAAAAAACAAcUKgABAAAAAAADABEUMQABAAAAAAAEAAQUQgABAAAAAAAFAAwURgABAAAAAAAGAAQUUgABAAAAAAAKAAAUVgABAAAA
}
@font-face {
font-family: "Half2";
src: url("data:;base64,AAEAAAALAIAAAwAwT1MvMnNl+fYAAAC8AAAAYGNtYXAAtgEOAAABHAAAAERnYXNwABcACQAAAWAAAAAQZ2x5Zs7yyEgAAAFwAAAHXmhlYWTbUM21AAAI0AAAADZoaGVhBwoDbAAACQgAAAAkaG10eCEQAH0AAAksAAABLGxvY2FC4ETIAAAKWAAAAJhtYXhwAE4ACQAACvAAAAAgbmFtZbgpxhkAAAsQAAAponBvc3QEPCueAAA0tAAAAMYAAwPWAZAABQAAArwCigAAAI8CvAKKAAABxQAyAQMAAAIABAAAAAAAAACAAACvEAAgSAAAAAAAAAAAVzNDIABAACAAdgMg/zgAAAMgAMj/EPwHAAD//wMgAyAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADAAAAAIAAgAAgAAACYAYAB2//8AAAAgACgAbP///+P/4v/XAAEAAAAAAAAAAAAAAAMACAACABAAAf//AAMAAgB9AAADawMgAAMABwAAMxEhESUhESF9Au79jwH0/gwDIPzgfQImAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAABAAD/OAPoAyAAAwAAESERIQPo/BgDIPwYAAEAAP84A+gDIAADAAARIREhA+j8GAMg/BgAAQAA/zgD6AMgAAMAABEhESED6PwYAyD8GAAAAAEAAAABgACx6/lFXw889QAJA+gAAAAAs29fWQAAAADE3askAAD/OAPoAyAAAAADAAAAAAAAAAAAAQAAAyD/OAAAA+gAAAAAA+gAAQAAAAAAAAAAAAAAAAAAAEsD6AB9AAAAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAAAAAUABQAFAAUACEALgA7AEgAVQBiAG8AfACJAJYAowCwAL0AygDXAOQA8QD+AQsBGAElATIBPwFMAVkBZgFzAYABjQGaAacBtAHBAc4B2wHoAfUCAgIPAhwCKQI2AkMCUAJdAmoCdwKEApECngKrArgCxQLSAt8C7AL5AwYDEwMgAy0DOgNHA1QDYQNuA3sDiAOVA6IDrwABAAAASwAIAAIAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAJAG2AAAAAAAAAAAB8AAAAAAAAAAAAAEACAHwAAAAAAAAAAIADgH4AAAAAAAAAAMAIgIGAAAAAAAAAAQACAIoAAAAAAAAAAUAGAIwAAAAAAAAAAYACAJIAAAAAAAAAAoQaAJQAAAAAAAAAAsAJBK4AAAAAAAAAA4AUhLcAAEAAAAAAAAA+BMuAAEAAAAAAAEABBQmAAEAAAAAAAIABxQqAAEAAAAAAAMAERQxAAEAAAAAAAQABBRCAAEAAAAAAAUADBRGAAEAAAAAAAYABBRSAAEAAAAAAAoA
}
</style>
</head>
<body>
<div style="font: 100px 'Half1', 'Half2';">ar</div>
</body>
</html>