| // 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. |
| |
| #include "chrome/renderer/font_prewarmer.h" |
| |
| #include "content/public/renderer/render_frame.h" |
| #include "third_party/blink/public/platform/web_font_prewarmer.h" |
| #include "third_party/blink/public/web/web_local_frame.h" |
| #include "third_party/blink/public/web/win/web_font_rendering.h" |
| |
| // static |
| void FontPrewarmer::Bind( |
| mojo::PendingReceiver<chrome::mojom::FontPrewarmer> pending_receiver) { |
| new FontPrewarmer(std::move(pending_receiver)); |
| } |
| |
| void FontPrewarmer::PrewarmFonts(const std::vector<std::string>& font_names) { |
| blink::WebFontPrewarmer* prewarmer = |
| blink::WebFontRendering::GetFontPrewarmer(); |
| // `prewarmer` is not always present, such as in --single-process. |
| if (!prewarmer) |
| return; |
| |
| for (const std::string& font_name : font_names) { |
| prewarmer->PrewarmFamily(blink::WebString::FromUTF8(font_name)); |
| } |
| } |
| |
| FontPrewarmer::FontPrewarmer( |
| mojo::PendingReceiver<chrome::mojom::FontPrewarmer> pending_receiver) |
| : receiver_(this, std::move(pending_receiver)) { |
| receiver_.set_disconnect_handler( |
| base::BindOnce(&FontPrewarmer::OnDisconnect, base::Unretained(this))); |
| } |
| |
| FontPrewarmer::~FontPrewarmer() = default; |
| |
| void FontPrewarmer::OnDisconnect() { |
| delete this; |
| } |