blob: 772a76b22bd24a3e3706b996b36b3a720b76a3ba [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_FONTS_FONT_UNIQUE_NAME_LOOKUP_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_FONTS_FONT_UNIQUE_NAME_LOOKUP_H_
#include "base/callback.h"
#include "base/macros.h"
#include "build/build_config.h"
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include "third_party/skia/include/core/SkRefCnt.h"
#include "third_party/skia/include/core/SkTypeface.h"
#if defined(OS_ANDROID) || defined(OS_WIN)
#include "third_party/blink/public/common/font_unique_name_lookup/font_table_matcher.h"
#endif
#include <memory>
namespace blink {
class FontTableMatcher;
class FontUniqueNameLookup {
USING_FAST_MALLOC(FontUniqueNameLookup);
public:
// Factory function to construct a platform specific font unique name lookup
// instance. Client must not use this directly as it is thread
// specific. Retrieve it from FontGlobalContext instead.
static std::unique_ptr<FontUniqueNameLookup> GetPlatformUniqueNameLookup();
virtual sk_sp<SkTypeface> MatchUniqueName(const String& font_unique_name) = 0;
virtual ~FontUniqueNameLookup() = default;
// Below: Methods for asynchronously retrieving the FontUniqueNameLookup
// table. Currently needed on Windows, on other platforms the implementation
// is synchronous.
// Determines whether fonts can be uniquely matched synchronously.
virtual bool IsFontUniqueNameLookupReadyForSyncLookup() { return true; }
// If fonts cannot be uniquely matched synchronously, send a Mojo IPC call to
// prepare the lookup table, and wait for the callback. Once the callback has
// been called, IsFontUniqueNameLookupReadyForSyncLookup() will become true.
// PrepareFontUniqueNameLookup() must not be called if
// IsFontUniqueNameLookupReadyForSyncLookup() is true already.
using NotifyFontUniqueNameLookupReady = base::OnceCallback<void()>;
virtual void PrepareFontUniqueNameLookup(
NotifyFontUniqueNameLookupReady callback) {
NOTREACHED();
}
protected:
FontUniqueNameLookup();
// Windows and Android share the concept of connecting to a Mojo service for
// retrieving a ReadOnlySharedMemoryRegion with the lookup table in it.
#if defined(OS_WIN) || defined(OS_ANDROID)
std::unique_ptr<FontTableMatcher> font_table_matcher_;
#endif
DISALLOW_COPY_AND_ASSIGN(FontUniqueNameLookup);
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_FONTS_FONT_UNIQUE_NAME_LOOKUP_