summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/platform/fonts/font_unique_name_lookup.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/platform/fonts/font_unique_name_lookup.cc')
-rw-r--r--chromium/third_party/blink/renderer/platform/fonts/font_unique_name_lookup.cc42
1 files changed, 41 insertions, 1 deletions
diff --git a/chromium/third_party/blink/renderer/platform/fonts/font_unique_name_lookup.cc b/chromium/third_party/blink/renderer/platform/fonts/font_unique_name_lookup.cc
index 1a084984c34..ef45e9929b1 100644
--- a/chromium/third_party/blink/renderer/platform/fonts/font_unique_name_lookup.cc
+++ b/chromium/third_party/blink/renderer/platform/fonts/font_unique_name_lookup.cc
@@ -4,12 +4,17 @@
#include "third_party/blink/renderer/platform/fonts/font_unique_name_lookup.h"
#include "base/macros.h"
-#include "build/build_config.h"
+#include "third_party/blink/public/platform/interface_provider.h"
+#include "third_party/blink/public/platform/platform.h"
#if defined(OS_ANDROID)
+#include "third_party/blink/public/platform/modules/font_unique_name_lookup/font_unique_name_lookup.mojom-blink.h"
#include "third_party/blink/renderer/platform/fonts/android/font_unique_name_lookup_android.h"
#elif defined(OS_LINUX)
#include "third_party/blink/renderer/platform/fonts/linux/font_unique_name_lookup_linux.h"
+#elif defined(OS_WIN)
+#include "third_party/blink/public/mojom/dwrite_font_proxy/dwrite_font_proxy.mojom-blink.h"
+#include "third_party/blink/renderer/platform/fonts/win/font_unique_name_lookup_win.h"
#endif
namespace blink {
@@ -23,10 +28,45 @@ FontUniqueNameLookup::GetPlatformUniqueNameLookup() {
return std::make_unique<FontUniqueNameLookupAndroid>();
#elif defined(OS_LINUX)
return std::make_unique<FontUniqueNameLookupLinux>();
+#elif defined(OS_WIN)
+ return std::make_unique<FontUniqueNameLookupWin>();
#else
NOTREACHED();
return nullptr;
#endif
}
+#if defined(OS_WIN) || defined(OS_ANDROID)
+template <class ServicePtrType>
+bool FontUniqueNameLookup::EnsureMatchingServiceConnected() {
+ if (font_table_matcher_)
+ return true;
+
+ ServicePtrType service;
+ Platform::Current()->GetInterfaceProvider()->GetInterface(
+ mojo::MakeRequest(&service));
+
+ base::ReadOnlySharedMemoryRegion region_ptr;
+ if (!service->GetUniqueNameLookupTable(&region_ptr)) {
+ // Tests like StyleEngineTest do not set up a full browser where Blink can
+ // connect to a browser side service for font lookups. Placing a DCHECK here
+ // is too strict for such a case.
+ LOG(ERROR) << "Unable to connect to browser side service for src: local() "
+ "font lookup.";
+ return false;
+ }
+
+ font_table_matcher_ = std::make_unique<FontTableMatcher>(region_ptr.Map());
+ return true;
+}
+#endif
+
+#if defined(OS_ANDROID)
+template bool FontUniqueNameLookup::EnsureMatchingServiceConnected<
+ mojom::blink::FontUniqueNameLookupPtr>();
+#elif defined(OS_WIN)
+template bool FontUniqueNameLookup::EnsureMatchingServiceConnected<
+ mojom::blink::DWriteFontProxyPtr>();
+#endif
+
} // namespace blink