#ifndef CHROME_RENDERER_RENDER_FRAME_FONT_FAMILY_ACCESSOR_H_
#define CHROME_RENDERER_RENDER_FRAME_FONT_FAMILY_ACCESSOR_H_
#include <optional>
#include "chrome/common/font_prewarmer.mojom.h"
#include "content/public/renderer/render_frame_observer.h"
#include "mojo/public/cpp/bindings/associated_receiver.h"
#include "mojo/public/cpp/bindings/pending_associated_receiver.h"
#include "third_party/blink/public/web/win/web_font_family_names.h"
namespace content {
class RenderFrame;
}
class RenderFrameFontFamilyAccessor
: public chrome::mojom::RenderFrameFontFamilyAccessor,
public content::RenderFrameObserver {
public:
RenderFrameFontFamilyAccessor(const RenderFrameFontFamilyAccessor&) = delete;
RenderFrameFontFamilyAccessor& operator=(
const RenderFrameFontFamilyAccessor&) = delete;
static void Bind(
content::RenderFrame* render_frame,
mojo::PendingAssociatedReceiver<
chrome::mojom::RenderFrameFontFamilyAccessor> pending_receiver);
void GetFontFamilyNames(GetFontFamilyNamesCallback callback) override;
void OnDestruct() override;
void DidChangePerformanceTiming() override;
void ReadyToCommitNavigation(
blink::WebDocumentLoader* document_loader) override;
private:
RenderFrameFontFamilyAccessor(
content::RenderFrame* render_frame,
mojo::PendingAssociatedReceiver<
chrome::mojom::RenderFrameFontFamilyAccessor> pending_receiver);
~RenderFrameFontFamilyAccessor() override;
bool ShouldGetFontNames() const;
void GetFontNames();
bool got_font_names() const { return family_names_.has_value(); }
void RunCallback(GetFontFamilyNamesCallback callback);
std::optional<blink::WebFontFamilyNames> family_names_;
GetFontFamilyNamesCallback callback_;
mojo::AssociatedReceiver<chrome::mojom::RenderFrameFontFamilyAccessor>
receiver_;
bool got_commit_ = false;
};
#endif