1 /* 2 * Copyright (C) 2007, 2008, 2011 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #ifndef CSSFontSelector_h 27 #define CSSFontSelector_h 28 29 #include "core/css/FontFaceCache.h" 30 #include "core/css/FontLoader.h" 31 #include "platform/fonts/FontSelector.h" 32 #include "platform/fonts/GenericFontFamilySettings.h" 33 #include "platform/heap/Handle.h" 34 #include "wtf/Forward.h" 35 #include "wtf/HashMap.h" 36 #include "wtf/HashSet.h" 37 38 namespace blink { 39 40 class CSSFontSelectorClient; 41 class Document; 42 class FontDescription; 43 44 class CSSFontSelector FINAL : public FontSelector { 45 public: create(Document * document)46 static PassRefPtrWillBeRawPtr<CSSFontSelector> create(Document* document) 47 { 48 return adoptRefWillBeNoop(new CSSFontSelector(document)); 49 } 50 virtual ~CSSFontSelector(); 51 version()52 virtual unsigned version() const OVERRIDE { return m_fontFaceCache.version(); } 53 54 virtual PassRefPtr<FontData> getFontData(const FontDescription&, const AtomicString&) OVERRIDE; 55 virtual void willUseFontData(const FontDescription&, const AtomicString& family, UChar32) OVERRIDE; 56 bool isPlatformFontAvailable(const FontDescription&, const AtomicString& family); 57 58 #if !ENABLE(OILPAN) 59 void clearDocument(); 60 #endif 61 62 void fontFaceInvalidated(); 63 64 // FontCacheClient implementation 65 virtual void fontCacheInvalidated() OVERRIDE; 66 67 void registerForInvalidationCallbacks(CSSFontSelectorClient*); 68 #if !ENABLE(OILPAN) 69 void unregisterForInvalidationCallbacks(CSSFontSelectorClient*); 70 #endif 71 document()72 Document* document() const { return m_document; } fontFaceCache()73 FontFaceCache* fontFaceCache() { return &m_fontFaceCache; } fontLoader()74 FontLoader* fontLoader() { return m_fontLoader.get(); } 75 genericFontFamilySettings()76 const GenericFontFamilySettings& genericFontFamilySettings() const { return m_genericFontFamilySettings; } 77 void updateGenericFontFamilySettings(Document&); 78 79 virtual void trace(Visitor*); 80 81 private: 82 explicit CSSFontSelector(Document*); 83 84 void dispatchInvalidationCallbacks(); 85 86 // FIXME: Oilpan: Ideally this should just be a traced Member but that will 87 // currently leak because RenderStyle and its data are not on the heap. 88 // See crbug.com/383860 for details. 89 RawPtrWillBeWeakMember<Document> m_document; 90 // FIXME: Move to Document or StyleEngine. 91 FontFaceCache m_fontFaceCache; 92 WillBeHeapHashSet<RawPtrWillBeWeakMember<CSSFontSelectorClient> > m_clients; 93 94 RefPtrWillBeMember<FontLoader> m_fontLoader; 95 GenericFontFamilySettings m_genericFontFamilySettings; 96 }; 97 98 } // namespace blink 99 100 #endif // CSSFontSelector_h 101