| // Copyright 2021 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #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; |
| } |
| |
| // Waits for the render frame to generate fcp and copies the font names so that |
| // they can be supplied back to browser via |
| // chrome::mojom::RenderFrameFontFamilyAccessor . |
| 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); |
| |
| // chrome::mojom::RenderFrameFontFamilyAccessor: |
| void GetFontFamilyNames(GetFontFamilyNamesCallback callback) override; |
| |
| // content::RenderFrameObserver: |
| 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; |
| |
| // Returns true if the font names should be obtained. |
| bool ShouldGetFontNames() const; |
| |
| // Copies the fonts from blink. |
| void GetFontNames(); |
| |
| // Returns true if the font names have been copied. |
| 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_; |
| // Whether ReadyToCommitNavigation() has been called. |
| bool got_commit_ = false; |
| }; |
| |
| #endif // CHROME_RENDERER_RENDER_FRAME_FONT_FAMILY_ACCESSOR_H_ |