chore: bump chromium to f30828899e4cd7161f6dc6507023f (master) (#20824)

* chore: bump chromium in DEPS to 0476932294da8809a19189b9f54cee11d50cc512

* update chromium patches (#20838)

* chore: bump chromium in DEPS to 838863f5ec9e8a12132a10bb47be8382ad9756a7

* IsRendererTransferNeededForNavigation went away

1867031

* [arraybuffer] Move the ArrayBuffer implementation from wtf to core

1875731

* URLLoaderRequest new mojo types

* context menu enums moved around

1872004

1876088

1866520

* chore: bump chromium in DEPS to dc9525d251bf30828899e4cd7161f6dc6507023f

* update chromium patches

* [WIP] Convert network hints IPC to Mojo

1881967

* jumbo build is no longer supported

1881967

* fix disable-color-correct-rendering

* [FIXME] fix printing patch

compiles but prob doesn't work

* explicitly include ax_enums

1759821

* fixup! [WIP] Convert network hints IPC to Mojo

* fix base::span

* fix AsarURLLoader to not double-std::move

* fix debug build

* fix msstl patch

* lint

* more fix msstl

* mooooore fix msstl

* fix compile

* update backport_fix_msstl_compat_in_ui_events.patch

* update msstl compat patch

* don't try to build chrome's prefetch predictor

* build: fix compilation on windows

* Fixup patches for MAS build

* Free up disk space for mac debug builds

* fix: apply custom site instance only for main frame

* Fixup from rebase

* Try not generating symbols for mac debug builds

* Remove double entry of patch

* FIx compile errors

* Trigger CI

* Set symbol_level to 1 for mac debug builds
This commit is contained in:
Electron Bot 2019-11-05 18:41:20 -05:00 committed by John Kleinschmidt
parent f18fca0729
commit 9a198e8ef4
60 changed files with 759 additions and 686 deletions

View file

@ -77,6 +77,23 @@
using content::BrowserThread;
using content::StoragePartition;
namespace predictors {
// NOTE(nornagon): this is copied from
// //chrome/browser/predictors/resource_prefetch_predictor.cc we don't need
// anything in that file other than this constructor. Without it we get a link
// error. Probably upstream the constructor should be moved to
// preconnect_manager.cc.
PreconnectRequest::PreconnectRequest(
const GURL& origin,
int num_sockets,
const net::NetworkIsolationKey& network_isolation_key)
: origin(origin),
num_sockets(num_sockets),
network_isolation_key(network_isolation_key) {
DCHECK_GE(num_sockets, 0);
}
} // namespace predictors
namespace {
struct ClearStorageDataOptions {

View file

@ -1845,10 +1845,7 @@ void WebContents::Print(gin_helper::Arguments* args) {
auto* rfh = focused_frame && focused_frame->HasSelection()
? focused_frame
: web_contents()->GetMainFrame();
print_view_manager->PrintNow(rfh,
std::make_unique<PrintMsg_PrintPages>(
rfh->GetRoutingID(), silent, settings),
std::move(callback));
print_view_manager->PrintNow(rfh, std::move(callback));
}
std::vector<printing::PrinterBasicInfo> WebContents::GetPrinterList() {

View file

@ -26,6 +26,7 @@
#include "chrome/browser/browser_process.h"
#include "chrome/common/chrome_version.h"
#include "components/net_log/chrome_net_log.h"
#include "components/network_hints/common/network_hints.mojom.h"
#include "content/public/browser/browser_ppapi_host.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/client_certificate_delegate.h"
@ -69,9 +70,9 @@
#include "shell/browser/net/network_context_service_factory.h"
#include "shell/browser/net/proxying_url_loader_factory.h"
#include "shell/browser/net/system_network_context_manager.h"
#include "shell/browser/network_hints_handler_impl.h"
#include "shell/browser/notifications/notification_presenter.h"
#include "shell/browser/notifications/platform_notification_service.h"
#include "shell/browser/renderer_host/electron_render_message_filter.h"
#include "shell/browser/session_preferences.h"
#include "shell/browser/ui/devtools_manager_delegate.h"
#include "shell/browser/web_contents_permission_helper.h"
@ -368,8 +369,6 @@ void AtomBrowserClient::RenderProcessWillLaunch(
true /* default value */);
}
host->AddFilter(new ElectronRenderMessageFilter(host->GetBrowserContext()));
AddProcessPreferences(host->GetID(), prefs);
// ensure the ProcessPreferences is removed later
host->AddObserver(this);
@ -763,18 +762,6 @@ network::mojom::NetworkContext* AtomBrowserClient::GetSystemNetworkContext() {
return g_browser_process->system_network_context_manager()->GetContext();
}
#if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
void AtomBrowserClient::BindHostReceiverForRenderer(
content::RenderProcessHost* render_process_host,
mojo::GenericPendingReceiver receiver) {
if (auto host_receiver = receiver.As<spellcheck::mojom::SpellCheckHost>()) {
SpellCheckHostChromeImpl::Create(render_process_host->GetID(),
std::move(host_receiver));
return;
}
}
#endif
base::Optional<service_manager::Manifest>
AtomBrowserClient::GetServiceManifestOverlay(base::StringPiece name) {
if (name == content::mojom::kBrowserServiceName)
@ -1098,4 +1085,23 @@ bool AtomBrowserClient::ShouldEnableStrictSiteIsolation() {
return true;
}
void AtomBrowserClient::BindHostReceiverForRenderer(
content::RenderProcessHost* render_process_host,
mojo::GenericPendingReceiver receiver) {
if (auto host_receiver =
receiver.As<network_hints::mojom::NetworkHintsHandler>()) {
NetworkHintsHandlerImpl::Create(render_process_host->GetID(),
std::move(host_receiver));
return;
}
#if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
if (auto host_receiver = receiver.As<spellcheck::mojom::SpellCheckHost>()) {
SpellCheckHostChromeImpl::Create(render_process_host->GetID(),
std::move(host_receiver));
return;
}
#endif
}
} // namespace electron

View file

@ -63,9 +63,10 @@ class AtomBrowserClient : public content::ContentBrowserClient,
// content::ContentBrowserClient:
std::string GetApplicationLocale() override;
base::FilePath GetFontLookupTableCacheDir() override;
// content::ContentBrowserClient:
bool ShouldEnableStrictSiteIsolation() override;
void BindHostReceiverForRenderer(
content::RenderProcessHost* render_process_host,
mojo::GenericPendingReceiver receiver) override;
std::string GetUserAgent() override;
void SetUserAgent(const std::string& user_agent);
@ -149,11 +150,6 @@ class AtomBrowserClient : public content::ContentBrowserClient,
bool in_memory,
const base::FilePath& relative_partition_path) override;
network::mojom::NetworkContext* GetSystemNetworkContext() override;
#if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
void BindHostReceiverForRenderer(
content::RenderProcessHost* render_process_host,
mojo::GenericPendingReceiver receiver) override;
#endif
base::Optional<service_manager::Manifest> GetServiceManifestOverlay(
base::StringPiece name) override;
content::MediaObserver* GetMediaObserver() override;

View file

@ -12,6 +12,7 @@
#include "base/strings/stringprintf.h"
#include "base/task/post_task.h"
#include "content/public/browser/file_url_loader.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/strong_binding.h"
#include "mojo/public/cpp/system/data_pipe_producer.h"
#include "mojo/public/cpp/system/file_data_source.h"
@ -79,20 +80,17 @@ class AsarURLLoader : public network::mojom::URLLoader {
void ResumeReadingBodyFromNet() override {}
private:
AsarURLLoader() : binding_(this) {}
AsarURLLoader() {}
~AsarURLLoader() override = default;
void Start(const network::ResourceRequest& request,
network::mojom::URLLoaderRequest loader,
mojo::PendingReceiver<network::mojom::URLLoader> loader,
network::mojom::URLLoaderClientPtrInfo client_info,
scoped_refptr<net::HttpResponseHeaders> extra_response_headers) {
network::ResourceResponseHead head;
head.request_start = base::TimeTicks::Now();
head.response_start = base::TimeTicks::Now();
head.headers = extra_response_headers;
binding_.Bind(std::move(loader));
binding_.set_connection_error_handler(base::BindOnce(
&AsarURLLoader::OnConnectionError, base::Unretained(this)));
client_.Bind(std::move(client_info));
@ -112,6 +110,10 @@ class AsarURLLoader : public network::mojom::URLLoader {
return;
}
receiver_.Bind(std::move(loader));
receiver_.set_disconnect_handler(base::BindOnce(
&AsarURLLoader::OnConnectionError, base::Unretained(this)));
// Parse asar archive.
std::shared_ptr<Archive> archive = GetOrCreateAsarArchive(asar_path);
Archive::FileInfo info;
@ -245,7 +247,7 @@ class AsarURLLoader : public network::mojom::URLLoader {
}
void OnConnectionError() {
binding_.Close();
receiver_.reset();
MaybeDeleteSelf();
}
@ -256,7 +258,7 @@ class AsarURLLoader : public network::mojom::URLLoader {
}
void MaybeDeleteSelf() {
if (!binding_.is_bound() && !client_.is_bound())
if (!receiver_.is_bound() && !client_.is_bound())
delete this;
}
@ -279,7 +281,7 @@ class AsarURLLoader : public network::mojom::URLLoader {
}
std::unique_ptr<mojo::DataPipeProducer> data_producer_;
mojo::Binding<network::mojom::URLLoader> binding_;
mojo::Receiver<network::mojom::URLLoader> receiver_{this};
network::mojom::URLLoaderClientPtr client_;
// In case of successful loads, this holds the total number of bytes written

View file

@ -168,7 +168,7 @@ AtomURLLoaderFactory::AtomURLLoaderFactory(ProtocolType type,
AtomURLLoaderFactory::~AtomURLLoaderFactory() = default;
void AtomURLLoaderFactory::CreateLoaderAndStart(
network::mojom::URLLoaderRequest loader,
mojo::PendingReceiver<network::mojom::URLLoader> loader,
int32_t routing_id,
int32_t request_id,
uint32_t options,
@ -190,7 +190,7 @@ void AtomURLLoaderFactory::Clone(
// static
void AtomURLLoaderFactory::StartLoading(
network::mojom::URLLoaderRequest loader,
mojo::PendingReceiver<network::mojom::URLLoader> loader,
int32_t routing_id,
int32_t request_id,
uint32_t options,
@ -337,7 +337,7 @@ void AtomURLLoaderFactory::StartLoadingString(
// static
void AtomURLLoaderFactory::StartLoadingFile(
network::mojom::URLLoaderRequest loader,
mojo::PendingReceiver<network::mojom::URLLoader> loader,
network::ResourceRequest request,
network::mojom::URLLoaderClientPtr client,
network::ResourceResponseHead head,
@ -364,7 +364,7 @@ void AtomURLLoaderFactory::StartLoadingFile(
// static
void AtomURLLoaderFactory::StartLoadingHttp(
network::mojom::URLLoaderRequest loader,
mojo::PendingReceiver<network::mojom::URLLoader> loader,
const network::ResourceRequest& original_request,
network::mojom::URLLoaderClientPtr client,
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
@ -406,7 +406,7 @@ void AtomURLLoaderFactory::StartLoadingHttp(
// static
void AtomURLLoaderFactory::StartLoadingStream(
network::mojom::URLLoaderRequest loader,
mojo::PendingReceiver<network::mojom::URLLoader> loader,
network::mojom::URLLoaderClientPtr client,
network::ResourceResponseHead head,
const gin_helper::Dictionary& dict) {

View file

@ -43,19 +43,20 @@ class AtomURLLoaderFactory : public network::mojom::URLLoaderFactory {
~AtomURLLoaderFactory() override;
// network::mojom::URLLoaderFactory:
void CreateLoaderAndStart(network::mojom::URLLoaderRequest loader,
int32_t routing_id,
int32_t request_id,
uint32_t options,
const network::ResourceRequest& request,
network::mojom::URLLoaderClientPtr client,
const net::MutableNetworkTrafficAnnotationTag&
traffic_annotation) override;
void CreateLoaderAndStart(
mojo::PendingReceiver<network::mojom::URLLoader> loader,
int32_t routing_id,
int32_t request_id,
uint32_t options,
const network::ResourceRequest& request,
network::mojom::URLLoaderClientPtr client,
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation)
override;
void Clone(mojo::PendingReceiver<network::mojom::URLLoaderFactory> receiver)
override;
static void StartLoading(
network::mojom::URLLoaderRequest loader,
mojo::PendingReceiver<network::mojom::URLLoader> loader,
int32_t routing_id,
int32_t request_id,
uint32_t options,
@ -75,23 +76,25 @@ class AtomURLLoaderFactory : public network::mojom::URLLoaderFactory {
const gin_helper::Dictionary& dict,
v8::Isolate* isolate,
v8::Local<v8::Value> response);
static void StartLoadingFile(network::mojom::URLLoaderRequest loader,
network::ResourceRequest request,
network::mojom::URLLoaderClientPtr client,
network::ResourceResponseHead head,
const gin_helper::Dictionary& dict,
v8::Isolate* isolate,
v8::Local<v8::Value> response);
static void StartLoadingFile(
mojo::PendingReceiver<network::mojom::URLLoader> loader,
network::ResourceRequest request,
network::mojom::URLLoaderClientPtr client,
network::ResourceResponseHead head,
const gin_helper::Dictionary& dict,
v8::Isolate* isolate,
v8::Local<v8::Value> response);
static void StartLoadingHttp(
network::mojom::URLLoaderRequest loader,
mojo::PendingReceiver<network::mojom::URLLoader> loader,
const network::ResourceRequest& original_request,
network::mojom::URLLoaderClientPtr client,
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
const gin_helper::Dictionary& dict);
static void StartLoadingStream(network::mojom::URLLoaderRequest loader,
network::mojom::URLLoaderClientPtr client,
network::ResourceResponseHead head,
const gin_helper::Dictionary& dict);
static void StartLoadingStream(
mojo::PendingReceiver<network::mojom::URLLoader> loader,
network::mojom::URLLoaderClientPtr client,
network::ResourceResponseHead head,
const gin_helper::Dictionary& dict);
// Helper to send string as response.
static void SendContents(network::mojom::URLLoaderClientPtr client,

View file

@ -682,7 +682,7 @@ ProxyingURLLoaderFactory::ProxyingURLLoaderFactory(
ProxyingURLLoaderFactory::~ProxyingURLLoaderFactory() = default;
void ProxyingURLLoaderFactory::CreateLoaderAndStart(
network::mojom::URLLoaderRequest loader,
mojo::PendingReceiver<network::mojom::URLLoader> loader,
int32_t routing_id,
int32_t request_id,
uint32_t options,

View file

@ -217,14 +217,15 @@ class ProxyingURLLoaderFactory
~ProxyingURLLoaderFactory() override;
// network::mojom::URLLoaderFactory:
void CreateLoaderAndStart(network::mojom::URLLoaderRequest loader,
int32_t routing_id,
int32_t request_id,
uint32_t options,
const network::ResourceRequest& request,
network::mojom::URLLoaderClientPtr client,
const net::MutableNetworkTrafficAnnotationTag&
traffic_annotation) override;
void CreateLoaderAndStart(
mojo::PendingReceiver<network::mojom::URLLoader> loader,
int32_t routing_id,
int32_t request_id,
uint32_t options,
const network::ResourceRequest& request,
network::mojom::URLLoaderClientPtr client,
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation)
override;
void Clone(mojo::PendingReceiver<network::mojom::URLLoaderFactory>
loader_receiver) override;

View file

@ -69,14 +69,15 @@ class SystemNetworkContextManager::URLLoaderFactoryForSystem
}
// mojom::URLLoaderFactory implementation:
void CreateLoaderAndStart(network::mojom::URLLoaderRequest request,
int32_t routing_id,
int32_t request_id,
uint32_t options,
const network::ResourceRequest& url_request,
network::mojom::URLLoaderClientPtr client,
const net::MutableNetworkTrafficAnnotationTag&
traffic_annotation) override {
void CreateLoaderAndStart(
mojo::PendingReceiver<network::mojom::URLLoader> request,
int32_t routing_id,
int32_t request_id,
uint32_t options,
const network::ResourceRequest& url_request,
network::mojom::URLLoaderClientPtr client,
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation)
override {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
if (!manager_)
return;

View file

@ -0,0 +1,48 @@
// Copyright (c) 2019 Slack Technologies, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "shell/browser/network_hints_handler_impl.h"
#include <utility>
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
#include "shell/browser/api/atom_api_session.h"
#include "shell/browser/atom_browser_context.h"
#include "shell/common/gin_converters/gurl_converter.h"
#include "v8/include/v8.h"
NetworkHintsHandlerImpl::NetworkHintsHandlerImpl(int32_t render_process_id)
: network_hints::SimpleNetworkHintsHandlerImpl(render_process_id),
render_process_id_(render_process_id) {}
NetworkHintsHandlerImpl::~NetworkHintsHandlerImpl() = default;
void NetworkHintsHandlerImpl::Preconnect(int32_t render_frame_id,
const GURL& url,
bool allow_credentials) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
content::RenderFrameHost* render_frame_host =
content::RenderFrameHost::FromID(render_process_id_, render_frame_id);
content::BrowserContext* browser_context =
render_frame_host->GetProcess()->GetBrowserContext();
auto* session = electron::api::Session::FromWrappedClass(
v8::Isolate::GetCurrent(),
static_cast<electron::AtomBrowserContext*>(browser_context));
if (session) {
session->Emit("preconnect", url, allow_credentials);
}
}
void NetworkHintsHandlerImpl::Create(
int32_t render_process_id,
mojo::PendingReceiver<network_hints::mojom::NetworkHintsHandler> receiver) {
mojo::MakeSelfOwnedReceiver(
base::WrapUnique(new NetworkHintsHandlerImpl(render_process_id)),
std::move(receiver));
}

View file

@ -0,0 +1,31 @@
// Copyright (c) 2019 Slack Technologies, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifndef SHELL_BROWSER_NETWORK_HINTS_HANDLER_IMPL_H_
#define SHELL_BROWSER_NETWORK_HINTS_HANDLER_IMPL_H_
#include "components/network_hints/browser/simple_network_hints_handler_impl.h"
class NetworkHintsHandlerImpl
: public network_hints::SimpleNetworkHintsHandlerImpl {
public:
~NetworkHintsHandlerImpl() override;
static void Create(
int32_t render_process_id,
mojo::PendingReceiver<network_hints::mojom::NetworkHintsHandler>
receiver);
// network_hints::mojom::NetworkHintsHandler:
void Preconnect(int32_t render_frame_id,
const GURL& url,
bool allow_credentials) override;
private:
explicit NetworkHintsHandlerImpl(int32_t render_process_id);
int32_t render_process_id_;
};
#endif // SHELL_BROWSER_NETWORK_HINTS_HANDLER_IMPL_H_

View file

@ -1,94 +0,0 @@
// Copyright (c) 2019 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.
#include "shell/browser/renderer_host/electron_render_message_filter.h"
#include <stdint.h>
#include <memory>
#include <string>
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/logging.h"
#include "base/stl_util.h"
#include "chrome/browser/predictors/preconnect_manager.h"
#include "components/network_hints/common/network_hints_common.h"
#include "components/network_hints/common/network_hints_messages.h"
#include "content/public/browser/browser_context.h"
#include "shell/browser/api/atom_api_session.h"
#include "shell/browser/atom_browser_context.h"
#include "shell/common/gin_converters/gurl_converter.h"
using content::BrowserThread;
namespace {
const uint32_t kRenderFilteredMessageClasses[] = {
NetworkHintsMsgStart,
};
void EmitPreconnect(content::BrowserContext* browser_context,
const GURL& url,
bool allow_credentials) {
auto* session = electron::api::Session::FromWrappedClass(
v8::Isolate::GetCurrent(),
static_cast<electron::AtomBrowserContext*>(browser_context));
if (session) {
session->Emit("preconnect", url, allow_credentials);
}
}
} // namespace
ElectronRenderMessageFilter::ElectronRenderMessageFilter(
content::BrowserContext* browser_context)
: BrowserMessageFilter(kRenderFilteredMessageClasses,
base::size(kRenderFilteredMessageClasses)),
browser_context_(browser_context) {}
ElectronRenderMessageFilter::~ElectronRenderMessageFilter() = default;
bool ElectronRenderMessageFilter::OnMessageReceived(
const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(ElectronRenderMessageFilter, message)
IPC_MESSAGE_HANDLER(NetworkHintsMsg_Preconnect, OnPreconnect)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
}
void ElectronRenderMessageFilter::OnPreconnect(int render_frame_id,
const GURL& url,
bool allow_credentials,
int count) {
if (count < 1) {
LOG(WARNING) << "NetworkHintsMsg_Preconnect IPC with invalid count: "
<< count;
return;
}
if (!url.is_valid() || !url.has_host() || !url.has_scheme() ||
!url.SchemeIsHTTPOrHTTPS()) {
return;
}
base::PostTask(FROM_HERE, {BrowserThread::UI},
base::BindOnce(&EmitPreconnect, browser_context_, url,
allow_credentials));
}
namespace predictors {
PreconnectRequest::PreconnectRequest(
const GURL& origin,
int num_sockets,
const net::NetworkIsolationKey& network_isolation_key)
: origin(origin), num_sockets(num_sockets) {
DCHECK_GE(num_sockets, 0);
}
} // namespace predictors

View file

@ -1,46 +0,0 @@
// Copyright (c) 2019 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 SHELL_BROWSER_RENDERER_HOST_ELECTRON_RENDER_MESSAGE_FILTER_H_
#define SHELL_BROWSER_RENDERER_HOST_ELECTRON_RENDER_MESSAGE_FILTER_H_
#include <string>
#include <vector>
#include "content/public/browser/browser_message_filter.h"
class GURL;
namespace content {
class BrowserContext;
}
namespace predictors {
class PreconnectManager;
}
// This class filters out incoming Chrome-specific IPC messages for the renderer
// process on the IPC thread.
class ElectronRenderMessageFilter : public content::BrowserMessageFilter {
public:
explicit ElectronRenderMessageFilter(
content::BrowserContext* browser_context);
// content::BrowserMessageFilter methods:
bool OnMessageReceived(const IPC::Message& message) override;
private:
~ElectronRenderMessageFilter() override;
void OnPreconnect(int render_frame_id,
const GURL& url,
bool allow_credentials,
int count);
content::BrowserContext* browser_context_;
DISALLOW_COPY_AND_ASSIGN(ElectronRenderMessageFilter);
};
#endif // SHELL_BROWSER_RENDERER_HOST_ELECTRON_RENDER_MESSAGE_FILTER_H_

View file

@ -11,6 +11,7 @@
#include "base/i18n/rtl.h"
#include "cc/paint/skia_paint_canvas.h"
#include "content/public/browser/render_view_host.h"
#include "ui/accessibility/ax_enums.mojom.h"
#include "ui/events/keycodes/keyboard_codes.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/geometry/point.h"

View file

@ -9,6 +9,7 @@
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "ui/accessibility/ax_enums.mojom.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/color_utils.h"
#include "ui/gfx/text_utils.h"