Index: third_party/WebKit/Source/core/css/LocalFontFace.cpp |
diff --git a/third_party/WebKit/Source/core/css/LocalFontFace.cpp b/third_party/WebKit/Source/core/css/LocalFontFace.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..77806a0f2fa5abeb086a7bd9e22e8731431c1893 |
--- /dev/null |
+++ b/third_party/WebKit/Source/core/css/LocalFontFace.cpp |
@@ -0,0 +1,73 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "core/css/LocalFontFace.h" |
+ |
+#include "bindings/core/v8/CallbackPromiseAdapter.h" |
+#include "bindings/core/v8/ScriptPromiseResolver.h" |
+#include "bindings/core/v8/ScriptState.h" |
+#include "core/CSSValueKeywords.h" |
+#include "core/css/FontFaceDescriptors.h" |
+#include "core/css/parser/CSSParser.h" |
+#include "core/dom/DOMArrayBuffer.h" |
+#include "core/dom/DOMException.h" |
+#include "core/dom/Document.h" |
+#include "core/dom/ExceptionCode.h" |
+#include "core/frame/UseCounter.h" |
+#include "public/platform/Platform.h" |
+#include "public/platform/modules/font_access/WebFontAccess.h" |
+ |
+namespace blink { |
+PassRefPtrWillBeRawPtr<LocalFontFace> LocalFontFace::create(ExecutionContext* context, const AtomicString& family, const AtomicString& styleName, const AtomicString& fullName, StringOrArrayBufferOrArrayBufferView& source, const FontFaceDescriptors& descriptors) |
+{ |
+ String sourceString = source.getAsString(); |
+ RefPtrWillBeRawPtr<LocalFontFace> fontFace = adoptRefWillBeNoop(new LocalFontFace(context, family, styleName, fullName, descriptors)); |
+ |
+ Document* document = toDocument(context); |
+ // TODO(dhnishi): Remove code duplication with FontFace. |
+ CSSParserContext parserContext(*document, UseCounter::getFrom(document)); |
+ RefPtrWillBeRawPtr<CSSValue> src = CSSParser::parseFontFaceDescriptor(CSSPropertySrc, sourceString, parserContext); |
+ if (!src || !src->isValueList()) |
+ fontFace->setError(DOMException::create(SyntaxError, "The source provided ('" + sourceString + "') could not be parsed as a value list.")); |
+ |
+ fontFace->initCSSFontFace(toDocument(context), src); |
+ return fontFace.release(); |
+} |
+ |
+class FontBinaryResult { |
+ WTF_MAKE_NONCOPYABLE(FontBinaryResult); |
+ |
+public: |
+ using WebType = OwnPtr<WebData>; |
+ |
+ static PassRefPtr<DOMArrayBuffer> take(ScriptPromiseResolver* resolver, PassOwnPtr<WebData> webBlob) |
+ { |
+ RefPtr<DOMArrayBuffer> domBuffer = DOMArrayBuffer::create(webBlob->data(), webBlob->size()); |
+ return domBuffer; |
+ } |
+ |
+private: |
+ FontBinaryResult() = delete; |
+}; |
+ |
+ScriptPromise LocalFontFace::binaryData(ScriptState* scriptState) const |
+{ |
+ WebFontAccess* webfontaccess = Platform::current()->fontAccess(); |
+ if (!webfontaccess) |
+ return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(NotSupportedError)); |
+ ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); |
+ ScriptPromise promise = resolver->promise(); |
+ |
+ webfontaccess->getFontWebData(family(), styleName(), new CallbackPromiseAdapter<FontBinaryResult, void>(resolver)); |
+ return promise; |
+} |
+ |
+LocalFontFace::LocalFontFace(ExecutionContext* context, const AtomicString& family, const AtomicString& styleName, const AtomicString& fullName, const FontFaceDescriptors& descriptor) |
+ : FontFace(context, family, descriptor) |
+ , m_style(styleName) |
+ , m_fullName(fullName) |
+{ |
+} |
+ |
+} // namespace blink |