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()) {