Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(151)

Unified Diff: third_party/WebKit/Source/core/css/FontFaceSet.cpp

Issue 1615133002: Implement API for accessing fonts installed locally on the system. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressing Nasko. Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/css/FontFaceSet.cpp
diff --git a/third_party/WebKit/Source/core/css/FontFaceSet.cpp b/third_party/WebKit/Source/core/css/FontFaceSet.cpp
index e0c6c7f57d5db04227694db60bbc390c76f22fb3..3de2ed2322c448c2cf6620d60fd22ea4a043bfb8 100644
--- a/third_party/WebKit/Source/core/css/FontFaceSet.cpp
+++ b/third_party/WebKit/Source/core/css/FontFaceSet.cpp
@@ -25,13 +25,16 @@
#include "core/css/FontFaceSet.h"
+#include "bindings/core/v8/CallbackPromiseAdapter.h"
#include "bindings/core/v8/Dictionary.h"
#include "bindings/core/v8/ScriptPromiseResolver.h"
#include "bindings/core/v8/ScriptState.h"
#include "core/css/CSSFontSelector.h"
#include "core/css/CSSSegmentedFontFace.h"
#include "core/css/FontFaceCache.h"
+#include "core/css/FontFaceDescriptors.h"
#include "core/css/FontFaceSetLoadEvent.h"
+#include "core/css/LocalFontFace.h"
#include "core/css/StylePropertySet.h"
#include "core/css/parser/CSSParser.h"
#include "core/css/resolver/StyleResolver.h"
@@ -41,6 +44,9 @@
#include "core/frame/LocalFrame.h"
#include "core/style/StyleInheritedData.h"
#include "platform/Histogram.h"
+#include "public/platform/Platform.h"
+#include "public/platform/modules/font_access/WebFontAccess.h"
+#include "public/platform/modules/font_access/WebFontAccessDescription.h"
namespace blink {
@@ -536,6 +542,54 @@ bool FontFaceSet::IterationSource::next(ScriptState*, RefPtrWillBeMember<FontFac
return true;
}
+class FontAccessDescriptionCallback final : public FontAccessCallbacks {
+public:
+ FontAccessDescriptionCallback(ScriptPromiseResolver* resolver, ScriptState* scriptState)
+ : m_resolver(resolver)
+ , m_executionContext(scriptState->executionContext())
+ {
+ }
+
+ void onSuccess(WebPassOwnPtr<WebVector<WebFontAccessDescription>> description) override
+ {
+ WillBeHeapVector<RefPtrWillBeMember<FontFace>> fonts;
+ OwnPtr<WebVector<WebFontAccessDescription>> webFonts = description.release();
+ blink::FontFaceDescriptors faceDecsription;
+ for (const auto webFont : *webFonts) {
+ StringOrArrayBufferOrArrayBufferView cssString;
+ StringBuilder result;
+ result.append("local('");
+ result.append(webFont.fullName);
+ result.append(')');
+ cssString.setString(result.toString());
+ RefPtrWillBeMember<LocalFontFace> ff = LocalFontFace::create(m_executionContext.get(), webFont.family, webFont.style, webFont.fullName, cssString, faceDecsription);
+ fonts.append(ff);
+ }
+
+ m_resolver->resolve(fonts);
+ }
+ void onError() override
+ {
+ }
+
+private:
+ Persistent<ScriptPromiseResolver> m_resolver;
+ RefPtrWillBePersistent<ExecutionContext> m_executionContext;
+};
+
+ScriptPromise FontFaceSet::systemFonts(ScriptState* scriptState)
+{
+ WebFontAccess* webfontaccess = Platform::current()->fontAccess();
+ if (!webfontaccess)
+ return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(NotSupportedError));
+
+ ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
+ ScriptPromise promise = resolver->promise();
+
+ webfontaccess->getFonts(new FontAccessDescriptionCallback(resolver, scriptState));
+ return promise;
+}
+
DEFINE_TRACE(FontFaceSet)
{
#if ENABLE(OILPAN)
« no previous file with comments | « third_party/WebKit/Source/core/css/FontFaceSet.h ('k') | third_party/WebKit/Source/core/css/FontFaceSet.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698