1 // Copyright 2018 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_FONTS_ANDROID_FONT_UNIQUE_NAME_LOOKUP_ANDROID_H_ 6 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_FONTS_ANDROID_FONT_UNIQUE_NAME_LOOKUP_ANDROID_H_ 7 8 #include "mojo/public/cpp/bindings/remote.h" 9 #include "third_party/blink/public/common/font_unique_name_lookup/font_table_matcher.h" 10 #include "third_party/blink/public/mojom/android_font_lookup/android_font_lookup.mojom-blink.h" 11 #include "third_party/blink/public/mojom/font_unique_name_lookup/font_unique_name_lookup.mojom-blink.h" 12 #include "third_party/blink/renderer/platform/fonts/font_unique_name_lookup.h" 13 #include "third_party/blink/renderer/platform/wtf/deque.h" 14 15 #include <memory> 16 17 namespace blink { 18 19 // Unique font lookup implementation for Android, uses two backends: Fonts from 20 // the firmware in the font directories indexed by 21 // content/browser/font_unique_name_lookup/font_unique_name_lookup.cc as well 22 // as the Mojo IPC connection to a java implementation that fetches fonts from 23 // GMSCore, see 24 // content/public/android/java/src/org/chromium/content/browser/font/AndroidFontLookupImpl.java 25 class FontUniqueNameLookupAndroid : public FontUniqueNameLookup { 26 public: 27 FontUniqueNameLookupAndroid() = default; 28 ~FontUniqueNameLookupAndroid() override; 29 30 bool IsFontUniqueNameLookupReadyForSyncLookup() override; 31 32 void PrepareFontUniqueNameLookup( 33 NotifyFontUniqueNameLookupReady callback) override; 34 35 sk_sp<SkTypeface> MatchUniqueName(const String& font_unique_name) override; 36 37 private: 38 void EnsureServiceConnected(); 39 40 void ReceiveReadOnlySharedMemoryRegion( 41 base::ReadOnlySharedMemoryRegion shared_memory_region); 42 43 sk_sp<SkTypeface> MatchUniqueNameFromFirmwareFonts( 44 const String& font_unique_name); 45 46 bool RequestedNameInQueryableFonts(const String& font_unique_name); 47 sk_sp<SkTypeface> MatchUniqueNameFromDownloadableFonts( 48 const String& font_unique_name); 49 50 mojo::Remote<mojom::blink::FontUniqueNameLookup> 51 firmware_font_lookup_service_; 52 mojo::Remote<mojom::blink::AndroidFontLookup> android_font_lookup_service_; 53 WTF::Deque<NotifyFontUniqueNameLookupReady> pending_callbacks_; 54 base::Optional<bool> sync_available_; 55 base::Optional<Vector<String>> queryable_fonts_; 56 57 DISALLOW_COPY_AND_ASSIGN(FontUniqueNameLookupAndroid); 58 }; 59 60 } // namespace blink 61 62 #endif 63