Files
brave-core/browser/brave_content_browser_client.h
T
Brian Johnson f9b8cc532d Add template/feature flag to toggle BraveRequestInfo to unique_ptr/WeakPtr for BraveRequestInfo (#33949)
The templates should be removed along with the feature flag when we switch over to unique_ptr
2026-02-23 06:15:29 -07:00

216 lines
8.6 KiB
C++

/* Copyright (c) 2019 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef BRAVE_BROWSER_BRAVE_CONTENT_BROWSER_CLIENT_H_
#define BRAVE_BROWSER_BRAVE_CONTENT_BROWSER_CLIENT_H_
#include <memory>
#include <optional>
#include <string>
#include <vector>
#include "base/memory/scoped_refptr.h"
#include "brave/browser/net/resource_context_data.h"
#include "chrome/browser/chrome_content_browser_client.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/content_browser_client.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/metrics/public/cpp/ukm_source_id.h"
#include "third_party/blink/public/mojom/loader/referrer.mojom.h"
class PrefChangeRegistrar;
namespace content {
class BrowserContext;
class NavigationThrottleRegistry;
class RenderProcessHost;
} // namespace content
namespace blink {
class AssociatedInterfaceRegistry;
} // namespace blink
namespace web_pref {
struct WebPreferences;
} // namespace web_pref
template <template <typename> class T>
class BraveProxyingWebSocket;
class BraveContentBrowserClient : public ChromeContentBrowserClient {
public:
BraveContentBrowserClient();
BraveContentBrowserClient(const BraveContentBrowserClient&) = delete;
BraveContentBrowserClient& operator=(const BraveContentBrowserClient&) =
delete;
~BraveContentBrowserClient() override;
// Overridden from ChromeContentBrowserClient:
std::unique_ptr<content::BrowserMainParts> CreateBrowserMainParts(
bool is_integration_test) override;
bool AreIsolatedWebAppsEnabled(
content::BrowserContext* browser_context) override;
void BrowserURLHandlerCreated(content::BrowserURLHandler* handler) override;
void RenderProcessWillLaunch(content::RenderProcessHost* host) override;
void RegisterAssociatedInterfaceBindersForRenderFrameHost(
content::RenderFrameHost& render_frame_host,
blink::AssociatedInterfaceRegistry& associated_registry) override;
void RegisterTrustedWebUIInterfaceBrokers(
content::WebUIBrowserInterfaceBrokerRegistry& registry) override;
void RegisterUntrustedWebUIInterfaceBrokers(
content::WebUIBrowserInterfaceBrokerRegistry& registry) override;
bool HandleExternalProtocol(
const GURL& url,
content::WebContents::Getter web_contents_getter,
content::FrameTreeNodeId frame_tree_node_id,
content::NavigationUIData* navigation_data,
bool is_primary_main_frame,
bool is_in_fenced_frame_tree,
network::mojom::WebSandboxFlags sandbox_flags,
ui::PageTransition page_transition,
bool has_user_gesture,
const std::optional<url::Origin>& initiating_origin,
content::RenderFrameHost* initiator_document,
const net::IsolationInfo& isolation_info,
mojo::PendingRemote<network::mojom::URLLoaderFactory>* out_factory)
override;
std::optional<base::UnguessableToken> GetEphemeralStorageToken(
content::RenderFrameHost* render_frame_host,
const url::Origin& origin) override;
bool AllowWorkerFingerprinting(
const GURL& url,
content::BrowserContext* browser_context) override;
brave_shields::mojom::ShieldsSettingsPtr WorkerGetBraveShieldSettings(
const GURL& url,
content::BrowserContext* browser_context) override;
content::ContentBrowserClient::AllowWebBluetoothResult AllowWebBluetooth(
content::BrowserContext* browser_context,
const url::Origin& requesting_origin,
const url::Origin& embedding_origin) override;
void RegisterBrowserInterfaceBindersForFrame(
content::RenderFrameHost* render_frame_host,
mojo::BinderMapWithContext<content::RenderFrameHost*>* map) override;
void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
int child_process_id) override;
bool IsJitDisabledForSite(content::BrowserContext* browser_context,
const GURL& site_url) override;
std::vector<std::unique_ptr<blink::URLLoaderThrottle>>
CreateURLLoaderThrottles(
const network::ResourceRequest& request,
content::BrowserContext* browser_context,
const base::RepeatingCallback<content::WebContents*()>& wc_getter,
content::NavigationUIData* navigation_ui_data,
content::FrameTreeNodeId frame_tree_node_id,
std::optional<int64_t> navigation_id) override;
void WillCreateURLLoaderFactory(
content::BrowserContext* browser_context,
content::RenderFrameHost* frame,
int render_process_id,
URLLoaderFactoryType type,
const url::Origin& request_initiator,
const net::IsolationInfo& isolation_info,
std::optional<int64_t> navigation_id,
ukm::SourceIdObj ukm_source_id,
network::URLLoaderFactoryBuilder& factory_builder,
mojo::PendingRemote<network::mojom::TrustedURLLoaderHeaderClient>*
header_client,
bool* bypass_redirect_checks,
bool* disable_secure_dns,
network::mojom::URLLoaderFactoryOverridePtr* factory_override,
scoped_refptr<base::SequencedTaskRunner> navigation_response_task_runner)
override;
bool WillInterceptWebSocket(content::RenderFrameHost* frame) override;
void CreateWebSocket(
content::RenderFrameHost* frame,
content::ContentBrowserClient::WebSocketFactory factory,
const GURL& url,
const net::SiteForCookies& site_for_cookies,
const std::optional<std::string>& user_agent,
mojo::PendingRemote<network::mojom::WebSocketHandshakeClient>
handshake_client) override;
void MaybeHideReferrer(content::BrowserContext* browser_context,
const GURL& request_url,
const GURL& document_url,
blink::mojom::ReferrerPtr* referrer) override;
std::optional<GURL> GetEffectiveURL(content::BrowserContext* browser_context,
const GURL& url) override;
static bool HandleURLOverrideRewrite(
GURL* url,
content::BrowserContext* browser_context);
void CreateThrottlesForNavigation(
content::NavigationThrottleRegistry& registry) override;
std::vector<url::Origin> GetOriginsRequiringDedicatedProcess() override;
// We use this for the Google Sign-In feature
bool CanCreateWindow(content::RenderFrameHost* opener,
const GURL& opener_url,
const GURL& opener_top_level_frame_url,
const url::Origin& source_origin,
content::mojom::WindowContainerType container_type,
const GURL& target_url,
const content::Referrer& referrer,
const std::string& frame_name,
WindowOpenDisposition disposition,
const blink::mojom::WindowFeatures& features,
bool user_gesture,
bool opener_suppressed,
bool* no_javascript_access) override;
void ExposeInterfacesToRenderer(
service_manager::BinderRegistry* registry,
blink::AssociatedInterfaceRegistry* associated_registry,
content::RenderProcessHost* render_process_host) override;
bool OverrideWebPreferencesAfterNavigation(
content::WebContents* web_contents,
content::SiteInstance& main_frame_site,
blink::web_pref::WebPreferences* prefs) override;
void OverrideWebPreferences(content::WebContents* web_contents,
content::SiteInstance& main_frame_site,
blink::web_pref::WebPreferences* prefs) override;
blink::UserAgentMetadata GetUserAgentMetadata() override;
std::optional<GURL> SanitizeURL(content::RenderFrameHost* render_frame_host,
const GURL& url) override;
bool IsWindowsRecallDisabled() override;
bool ShouldInheritStoragePartition(
const content::StoragePartitionConfig& partition_config) const override;
bool AllowSignedExchange(content::BrowserContext* context) override;
private:
void OnAllowGoogleAuthChanged();
template <template <typename> class T>
void CreateChromeWebSocket(
content::RenderFrameHost* frame,
const GURL& url,
const net::SiteForCookies& site_for_cookies,
const std::optional<std::string>& user_agent,
mojo::PendingRemote<network::mojom::WebSocketHandshakeClient>
handshake_client,
BraveProxyingWebSocket<T>* proxy);
std::unique_ptr<PrefChangeRegistrar, content::BrowserThread::DeleteOnUIThread>
pref_change_registrar_;
};
#endif // BRAVE_BROWSER_BRAVE_CONTENT_BROWSER_CLIENT_H_