Add "display" to FontFace Javascript object
https://bugs.webkit.org/show_bug.cgi?id=175383
<rdar://problem/33813239>
Reviewed by Simon Fraser.
Source/WebCore:
We already have all the necessary infrastructure. Just hook it up to the .idl file!
Test: fast/text/font-loading-font-display.html
* css/CSSFontFace.h:
* css/CSSPrimitiveValueMappings.h:
* css/FontFace.cpp:
(WebCore::FontFace::create):
(WebCore::FontFace::setDisplay):
(WebCore::FontFace::display const):
* css/FontFace.h:
* css/FontFace.idl:
LayoutTests:
* fast/text/font-loading-font-display-expected.txt: Added.
* fast/text/font-loading-font-display.html: Added.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@222949 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/css/FontFace.cpp b/Source/WebCore/css/FontFace.cpp
index 966b7fa..1f0b012 100644
--- a/Source/WebCore/css/FontFace.cpp
+++ b/Source/WebCore/css/FontFace.cpp
@@ -31,6 +31,7 @@
#include "CSSFontFeatureValue.h"
#include "CSSFontStyleValue.h"
#include "CSSParser.h"
+#include "CSSPrimitiveValueMappings.h"
#include "CSSUnicodeRangeValue.h"
#include "CSSValueList.h"
#include "CSSValuePool.h"
@@ -104,6 +105,9 @@
auto setFeatureSettingsResult = result->setFeatureSettings(descriptors.featureSettings.isEmpty() ? ASCIILiteral("normal") : descriptors.featureSettings);
if (setFeatureSettingsResult.hasException())
return setFeatureSettingsResult.releaseException();
+ auto setDisplayResult = result->setDisplay(descriptors.display.isEmpty() ? ASCIILiteral("auto") : descriptors.display);
+ if (setDisplayResult.hasException())
+ return setDisplayResult.releaseException();
if (!dataRequiresAsynchronousLoading) {
result->backing().load();
@@ -278,6 +282,19 @@
return { };
}
+ExceptionOr<void> FontFace::setDisplay(const String& display)
+{
+ if (display.isEmpty())
+ return Exception { SyntaxError };
+
+ if (auto value = parseString(display, CSSPropertyFontDisplay)) {
+ m_backing->setLoadingBehavior(*value);
+ return { };
+ }
+
+ return Exception { SyntaxError };
+}
+
String FontFace::family() const
{
m_backing->updateStyleIfNeeded();
@@ -384,6 +401,12 @@
return list->cssText();
}
+String FontFace::display() const
+{
+ m_backing->updateStyleIfNeeded();
+ return CSSValuePool::singleton().createValue(m_backing->loadingBehavior())->cssText();
+}
+
auto FontFace::status() const -> LoadStatus
{
switch (m_backing->status()) {