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

Side by Side 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 Mounir's comments. Created 4 years, 11 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met: 5 * modification, are permitted provided that the following conditions are met:
6 * 6 *
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution. 11 * documentation and/or other materials provided with the distribution.
12 * 12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 * ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE 16 * ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE
17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 19 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
20 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 20 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
23 * DAMAGE. 23 * DAMAGE.
24 */ 24 */
25 25
26 #include "core/css/FontFaceSet.h" 26 #include "core/css/FontFaceSet.h"
27 27
28 #include "bindings/core/v8/CallbackPromiseAdapter.h"
28 #include "bindings/core/v8/Dictionary.h" 29 #include "bindings/core/v8/Dictionary.h"
29 #include "bindings/core/v8/ScriptPromiseResolver.h" 30 #include "bindings/core/v8/ScriptPromiseResolver.h"
30 #include "bindings/core/v8/ScriptState.h" 31 #include "bindings/core/v8/ScriptState.h"
31 #include "core/css/CSSFontSelector.h" 32 #include "core/css/CSSFontSelector.h"
32 #include "core/css/CSSSegmentedFontFace.h" 33 #include "core/css/CSSSegmentedFontFace.h"
33 #include "core/css/FontFaceCache.h" 34 #include "core/css/FontFaceCache.h"
35 #include "core/css/FontFaceDescriptors.h"
34 #include "core/css/FontFaceSetLoadEvent.h" 36 #include "core/css/FontFaceSetLoadEvent.h"
37 #include "core/css/LocalFontFace.h"
35 #include "core/css/StylePropertySet.h" 38 #include "core/css/StylePropertySet.h"
36 #include "core/css/parser/CSSParser.h" 39 #include "core/css/parser/CSSParser.h"
37 #include "core/css/resolver/StyleResolver.h" 40 #include "core/css/resolver/StyleResolver.h"
38 #include "core/dom/Document.h" 41 #include "core/dom/Document.h"
39 #include "core/dom/StyleEngine.h" 42 #include "core/dom/StyleEngine.h"
40 #include "core/frame/FrameView.h" 43 #include "core/frame/FrameView.h"
41 #include "core/frame/LocalFrame.h" 44 #include "core/frame/LocalFrame.h"
42 #include "core/style/StyleInheritedData.h" 45 #include "core/style/StyleInheritedData.h"
43 #include "public/platform/Platform.h" 46 #include "public/platform/Platform.h"
47 #include "public/platform/modules/font_access/WebFontAccess.h"
48 #include "public/platform/modules/font_access/WebFontAccessDescription.h"
44 49
45 namespace blink { 50 namespace blink {
46 51
47 static const int defaultFontSize = 10; 52 static const int defaultFontSize = 10;
48 static const char defaultFontFamily[] = "sans-serif"; 53 static const char defaultFontFamily[] = "sans-serif";
49 54
50 class LoadFontPromiseResolver final : public FontFace::LoadFontCallback { 55 class LoadFontPromiseResolver final : public FontFace::LoadFontCallback {
51 public: 56 public:
52 static PassRefPtrWillBeRawPtr<LoadFontPromiseResolver> create(FontFaceArray faces, ScriptState* scriptState) 57 static PassRefPtrWillBeRawPtr<LoadFontPromiseResolver> create(FontFaceArray faces, ScriptState* scriptState)
53 { 58 {
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 } 532 }
528 533
529 bool FontFaceSet::IterationSource::next(ScriptState*, RefPtrWillBeMember<FontFac e>& key, RefPtrWillBeMember<FontFace>& value, ExceptionState&) 534 bool FontFaceSet::IterationSource::next(ScriptState*, RefPtrWillBeMember<FontFac e>& key, RefPtrWillBeMember<FontFace>& value, ExceptionState&)
530 { 535 {
531 if (m_fontFaces.size() <= m_index) 536 if (m_fontFaces.size() <= m_index)
532 return false; 537 return false;
533 key = value = m_fontFaces[m_index++]; 538 key = value = m_fontFaces[m_index++];
534 return true; 539 return true;
535 } 540 }
536 541
542 class FontAccessDescriptionCallback : public FontAccessCallbacks {
543 public:
544 FontAccessDescriptionCallback(ScriptPromiseResolver* resolver, ScriptState* scriptState)
545 : m_resolver(resolver)
546 , m_executionContext(scriptState->executionContext())
547 {
548 }
549
550 void onSuccess(WebPassOwnPtr<WebVector<WebFontAccessDescription*>> descripti on) override
esprehn 2016/01/26 20:26:45 who own's the description objects? Why isn't this
Daniel Nishi 2016/01/26 23:49:26 I think the WebVector owns the Description objects
551 {
552 WillBeHeapVector<RefPtrWillBeMember<FontFace>> fonts;
553 OwnPtr<WebVector<WebFontAccessDescription*>> webFonts = description.rele ase();
554 blink::FontFaceDescriptors faceDesc;
esprehn 2016/01/26 20:26:45 don't abbreviate
Daniel Nishi 2016/01/26 23:49:26 Done.
555 for (const auto webFont : *webFonts) {
556 StringOrArrayBufferOrArrayBufferView cssString;
557 StringBuilder result;
558 result.append("local('");
559 result.append(webFont->fullName);
560 result.append(')');
561 cssString.setString(result.toString());
562 RefPtrWillBeMember<LocalFontFace> ff = LocalFontFace::createLocalFon tFace(m_executionContext.get(), webFont->family, webFont->style, webFont->fullNa me, cssString, faceDesc);
563 fonts.append(ff);
564 }
565
566 m_resolver->resolve(fonts);
567 }
568 void onError() override
569 {
570 }
571
572 private:
573 Persistent<ScriptPromiseResolver> m_resolver;
574 RefPtrWillBePersistent<ExecutionContext> m_executionContext;
575 };
576
577 ScriptPromise FontFaceSet::systemFonts(ScriptState* scriptState)
578 {
579 WebFontAccess* webfontaccess = Platform::current()->fontAccess();
580 if (!webfontaccess)
581 return ScriptPromise::rejectWithDOMException(scriptState, DOMException:: create(NotSupportedError));
582
583 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
584 ScriptPromise promise = resolver->promise();
585
586 webfontaccess->getFonts(new FontAccessDescriptionCallback(resolver, scriptSt ate));
587 return promise;
588 }
589
537 DEFINE_TRACE(FontFaceSet) 590 DEFINE_TRACE(FontFaceSet)
538 { 591 {
539 #if ENABLE(OILPAN) 592 #if ENABLE(OILPAN)
540 visitor->trace(m_ready); 593 visitor->trace(m_ready);
541 visitor->trace(m_loadingFonts); 594 visitor->trace(m_loadingFonts);
542 visitor->trace(m_loadedFonts); 595 visitor->trace(m_loadedFonts);
543 visitor->trace(m_failedFonts); 596 visitor->trace(m_failedFonts);
544 visitor->trace(m_nonCSSConnectedFaces); 597 visitor->trace(m_nonCSSConnectedFaces);
545 visitor->trace(m_asyncRunner); 598 visitor->trace(m_asyncRunner);
546 HeapSupplement<Document>::trace(visitor); 599 HeapSupplement<Document>::trace(visitor);
547 #endif 600 #endif
548 EventTargetWithInlineData::trace(visitor); 601 EventTargetWithInlineData::trace(visitor);
549 ActiveDOMObject::trace(visitor); 602 ActiveDOMObject::trace(visitor);
550 } 603 }
551 604
552 } // namespace blink 605 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698