The templates should be removed along with the feature flag when we switch over to unique_ptr
216 lines
8.6 KiB
C++
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_
|