diff options
Diffstat (limited to 'src/core/content_browser_client_qt.h')
-rw-r--r-- | src/core/content_browser_client_qt.h | 332 |
1 files changed, 186 insertions, 146 deletions
diff --git a/src/core/content_browser_client_qt.h b/src/core/content_browser_client_qt.h index b2761b311..7d8e98028 100644 --- a/src/core/content_browser_client_qt.h +++ b/src/core/content_browser_client_qt.h @@ -1,53 +1,12 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWebEngine module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #ifndef CONTENT_BROWSER_CLIENT_QT_H #define CONTENT_BROWSER_CLIENT_QT_H #include "qtwebenginecoreglobal_p.h" -#include "base/memory/ref_counted.h" #include "content/public/browser/content_browser_client.h" -namespace net { -class URLRequestContextGetter; -} - namespace content { class BrowserContext; class BrowserMainParts; @@ -59,155 +18,236 @@ class BrowserPpapiHost; class DevToolsManagerDelegate; class RenderFrameHost; class RenderProcessHost; -class RenderViewHostDelegateView; class ResourceContext; -class ResourceDispatcherHostDelegate; -class WebContentsViewPort; class WebContents; struct MainFunctionParams; struct Referrer; -} +} // namespace content -namespace gl { -class GLShareGroup; -} +namespace device { +class GeolocationManager; +} // namespace device namespace QtWebEngineCore { class BrowserMainPartsQt; -class ProfileQt; -class ShareGroupQtQuick; - -class ContentBrowserClientQt : public content::ContentBrowserClient { +class ContentBrowserClientQt : public content::ContentBrowserClient +{ public: ContentBrowserClientQt(); ~ContentBrowserClientQt(); - content::BrowserMainParts* CreateBrowserMainParts(const content::MainFunctionParams&) override; - void RenderProcessWillLaunch(content::RenderProcessHost *host, - service_manager::mojom::ServiceRequest* service_request) override; - void ResourceDispatcherHostCreated() override; - gl::GLShareGroup* GetInProcessGpuShareGroup() override; + std::unique_ptr<content::BrowserMainParts> CreateBrowserMainParts(bool is_integration_test) override; + void RenderProcessWillLaunch(content::RenderProcessHost *host) override; content::MediaObserver* GetMediaObserver() override; - content::QuotaPermissionContext *CreateQuotaPermissionContext() override; - void GetQuotaSettings(content::BrowserContext *context, - content::StoragePartition *partition, - storage::OptionalQuotaSettingsCallback callback) override; - void OverrideWebkitPrefs(content::RenderViewHost *, content::WebPreferences *) override; + void OverrideWebkitPrefs(content::WebContents *web_contents, + blink::web_pref::WebPreferences *prefs) override; void AllowCertificateError(content::WebContents *web_contents, int cert_error, const net::SSLInfo &ssl_info, const GURL &request_url, - content::ResourceType resource_type, + bool is_main_frame_request, bool strict_enforcement, - bool expired_previous_decision, - const base::Callback<void(content::CertificateRequestResultType)> &callback) override; - void SelectClientCertificate(content::WebContents* web_contents, - net::SSLCertRequestInfo* cert_request_info, - net::ClientCertIdentityList client_certs, - std::unique_ptr<content::ClientCertificateDelegate> delegate) override; - std::unique_ptr<net::ClientCertStore> CreateClientCertStore(content::ResourceContext *resource_context) override; - content::DevToolsManagerDelegate *GetDevToolsManagerDelegate() override; + base::OnceCallback<void(content::CertificateRequestResultType)> callback) override; + base::OnceClosure SelectClientCertificate(content::BrowserContext* browser_context, + content::WebContents* web_contents, + net::SSLCertRequestInfo* cert_request_info, + net::ClientCertIdentityList client_certs, + std::unique_ptr<content::ClientCertificateDelegate> delegate) override; + std::unique_ptr<net::ClientCertStore> CreateClientCertStore(content::BrowserContext *browser_context) override; + std::unique_ptr<content::DevToolsManagerDelegate> CreateDevToolsManagerDelegate() override; std::string GetApplicationLocale() override; std::string GetAcceptLangs(content::BrowserContext* context) override; void AppendExtraCommandLineSwitches(base::CommandLine* command_line, int child_process_id) override; + + void GetAdditionalViewSourceSchemes(std::vector<std::string>* additional_schemes) override; void GetAdditionalWebUISchemes(std::vector<std::string>* additional_schemes) override; + void GetAdditionalAllowedSchemesForFileSystem(std::vector<std::string>* additional_schemes) override; + + std::unique_ptr<ui::SelectFilePolicy> + CreateSelectFilePolicy(content::WebContents *web_contents) override; + void BindHostReceiverForRenderer(content::RenderProcessHost *render_process_host, + mojo::GenericPendingReceiver receiver) override; + void RegisterBrowserInterfaceBindersForFrame(content::RenderFrameHost *render_frame_host, + mojo::BinderMapWithContext<content::RenderFrameHost *> *map) override; + void ExposeInterfacesToRenderer(service_manager::BinderRegistry *registry, + blink::AssociatedInterfaceRegistry *associated_registry, + content::RenderProcessHost *render_process_host) override; + void RegisterAssociatedInterfaceBindersForRenderFrameHost(content::RenderFrameHost &render_frame_host, + blink::AssociatedInterfaceRegistry &associated_registry) override; + + 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; + bool ShouldEnableStrictSiteIsolation() override; + + bool WillCreateRestrictedCookieManager( + network::mojom::RestrictedCookieManagerRole role, + content::BrowserContext *browser_context, + const url::Origin &origin, + const net::IsolationInfo &isolation_info, + bool is_service_worker, + int process_id, + int routing_id, + mojo::PendingReceiver<network::mojom::RestrictedCookieManager> *receiver) override; + bool WillInterceptWebSocket(content::RenderFrameHost *frame) override; + void CreateWebSocket( + content::RenderFrameHost *frame, + WebSocketFactory factory, + const GURL &url, + const net::SiteForCookies &site_for_cookies, + const absl::optional<std::string> &user_agent, + mojo::PendingRemote<network::mojom::WebSocketHandshakeClient> handshake_client) override; - void BindInterfaceRequestFromFrame(content::RenderFrameHost* render_frame_host, - const std::string& interface_name, - mojo::ScopedMessagePipeHandle interface_pipe) override; - void RegisterInProcessServices(StaticServiceMap* services, content::ServiceManagerConnection* connection) override; - void RegisterOutOfProcessServices(OutOfProcessServiceMap* services) override; - std::vector<ServiceManifestInfo> GetExtraServiceManifests() override; - std::unique_ptr<base::Value> GetServiceManifestOverlay(base::StringPiece name) override; - bool CanCreateWindow( - content::RenderFrameHost* opener, - const GURL& opener_url, - const GURL& opener_top_level_frame_url, - const GURL& 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; - - bool AllowGetCookie(const GURL& url, - const GURL& first_party, - const net::CookieList& cookie_list, - content::ResourceContext* context, - int render_process_id, - int render_frame_id) override; - - bool AllowSetCookie(const GURL& url, - const GURL& first_party, - const net::CanonicalCookie& cookie, - content::ResourceContext* context, - int render_process_id, - int render_frame_id) override; - - bool AllowAppCache(const GURL& manifest_url, - const GURL& first_party, - content::ResourceContext* context) override; - - bool AllowServiceWorker(const GURL& scope, - const GURL& first_party, - content::ResourceContext* context, - const base::Callback<content::WebContents*(void)>& wc_getter) override; + content::AllowServiceWorkerResult AllowServiceWorker( + const GURL &scope, + const net::SiteForCookies &site_for_cookies, + const absl::optional<url::Origin> &top_frame_origin, + const GURL &script_url, + content::BrowserContext *context) override; void AllowWorkerFileSystem(const GURL &url, - content::ResourceContext *context, - const std::vector<std::pair<int, int> > &render_frames, - base::Callback<void(bool)> callback) override; + content::BrowserContext *context, + const std::vector<content::GlobalRenderFrameHostId> &render_frames, + base::OnceCallback<void(bool)> callback) override; bool AllowWorkerIndexedDB(const GURL &url, - const base::string16 &name, - content::ResourceContext *context, - const std::vector<std::pair<int, int> > &render_frames) override; + content::BrowserContext *context, + const std::vector<content::GlobalRenderFrameHostId> &render_frames) override; + AllowWebBluetoothResult AllowWebBluetooth(content::BrowserContext *browser_context, + const url::Origin &requesting_origin, + const url::Origin &embedding_origin) override; #if QT_CONFIG(webengine_geolocation) std::unique_ptr<device::LocationProvider> OverrideSystemLocationProvider() override; #endif - + device::GeolocationManager *GetGeolocationManager() override; + + bool ShouldIsolateErrorPage(bool in_main_frame) override; + bool ShouldUseProcessPerSite(content::BrowserContext *browser_context, const GURL &effective_url) override; + bool DoesSiteRequireDedicatedProcess(content::BrowserContext *browser_context, + const GURL &effective_site_url) override; + bool ShouldUseSpareRenderProcessHost(content::BrowserContext *browser_context, const GURL& site_url) override; + bool ShouldTreatURLSchemeAsFirstPartyWhenTopLevel(base::StringPiece scheme, + bool is_embedded_origin_secure) override; + bool DoesSchemeAllowCrossOriginSharedWorker(const std::string &scheme) override; + void OverrideURLLoaderFactoryParams(content::BrowserContext *browser_context, + const url::Origin &origin, + bool is_for_isolated_world, + network::mojom::URLLoaderFactoryParams *factory_params) override; #if defined(Q_OS_LINUX) void GetAdditionalMappedFilesForChildProcess(const base::CommandLine& command_line, int child_process_id, content::PosixFileDescriptorInfo* mappings) override; #endif -#if QT_CONFIG(webengine_pepper_plugins) - void DidCreatePpapiPlugin(content::BrowserPpapiHost* browser_host) override; -#endif - - scoped_refptr<content::LoginDelegate> CreateLoginDelegate( - net::AuthChallengeInfo *auth_info, - content::ResourceRequestInfo::WebContentsGetter web_contents_getter, - const content::GlobalRequestID &request_id, - bool is_main_frame, + std::unique_ptr<content::LoginDelegate> CreateLoginDelegate( + const net::AuthChallengeInfo &auth_info, + content::WebContents *web_contents, + const content::GlobalRequestID& request_id, + bool is_request_for_main_frame, const GURL &url, scoped_refptr<net::HttpResponseHeaders> response_headers, bool first_auth_attempt, LoginAuthRequiredCallback auth_required_callback) override; + bool HandleExternalProtocol( const GURL &url, - content::ResourceRequestInfo::WebContentsGetter web_contents_getter, - int child_id, - content::NavigationUIData *navigation_data, - bool is_main_frame, + base::RepeatingCallback<content::WebContents*()> web_contents_getter, + int 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) override; + bool has_user_gesture, + const absl::optional<url::Origin> &initiating_origin, + content::RenderFrameHost *initiator_document, + mojo::PendingRemote<network::mojom::URLLoaderFactory> *out_factory) 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, int frame_tree_node_id) override; + + std::vector<std::unique_ptr<content::NavigationThrottle>> CreateThrottlesForNavigation( + content::NavigationHandle *navigation_handle) override; + + bool IsHandledURL(const GURL &url) override; + bool HasErrorPage(int http_status_code, content::WebContents *contents) override; + bool HasCustomSchemeHandler(content::BrowserContext *browser_context, + const std::string &scheme) override; + std::vector<std::unique_ptr<content::URLLoaderRequestInterceptor>> + WillCreateURLLoaderRequestInterceptors(content::NavigationUIData *navigation_ui_data, + int frame_tree_node_id, + int64_t navigation_id, + scoped_refptr<base::SequencedTaskRunner> navigation_response_task_runner) override; + bool WillCreateURLLoaderFactory(content::BrowserContext *browser_context, + content::RenderFrameHost *frame, + int render_process_id, + URLLoaderFactoryType type, + const url::Origin &request_initiator, + absl::optional<int64_t> navigation_id, + ukm::SourceIdObj ukm_source_id, + mojo::PendingReceiver<network::mojom::URLLoaderFactory> *factory_receiver, + 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; + scoped_refptr<network::SharedURLLoaderFactory> GetSystemSharedURLLoaderFactory() override; + network::mojom::NetworkContext *GetSystemNetworkContext() override; + void OnNetworkServiceCreated(network::mojom::NetworkService *network_service) override; + void ConfigureNetworkContextParams(content::BrowserContext *context, + bool in_memory, + const base::FilePath &relative_partition_path, + network::mojom::NetworkContextParams *network_context_params, + cert_verifier::mojom::CertVerifierCreationParams *cert_verifier_creation_params) override; + + std::vector<base::FilePath> GetNetworkContextsParentDirectory() override; + void RegisterNonNetworkNavigationURLLoaderFactories(int frame_tree_node_id, + ukm::SourceIdObj ukm_source_id, + NonNetworkURLLoaderFactoryMap *factories) override; + void RegisterNonNetworkSubresourceURLLoaderFactories(int render_process_id, int render_frame_id, + const absl::optional<url::Origin>& request_initiator_origin, + NonNetworkURLLoaderFactoryMap *factories) override; + void RegisterNonNetworkWorkerMainResourceURLLoaderFactories(content::BrowserContext* browser_context, + NonNetworkURLLoaderFactoryMap* factories) override; + void RegisterNonNetworkServiceWorkerUpdateURLLoaderFactories(content::BrowserContext* browser_context, + NonNetworkURLLoaderFactoryMap* factories) override; + void SiteInstanceGotProcess(content::SiteInstance *site_instance) override; + base::flat_set<std::string> GetPluginMimeTypesWithExternalHandlers(content::BrowserContext *browser_context) override; + + std::unique_ptr<content::WebContentsViewDelegate> GetWebContentsViewDelegate(content::WebContents *web_contents) override; + + static std::string getUserAgent(); + + std::string GetUserAgent() override { return getUserAgent(); } + blink::UserAgentMetadata GetUserAgentMetadata() override; + std::string GetProduct() override; + + content::WebAuthenticationDelegate *GetWebAuthenticationDelegate() override; +#if !BUILDFLAG(IS_ANDROID) + std::unique_ptr<content::AuthenticatorRequestClientDelegate> + GetWebAuthenticationRequestDelegate(content::RenderFrameHost *render_frame_host) override; +#endif + + void GetMediaDeviceIDSalt(content::RenderFrameHost *rfh, + const net::SiteForCookies &site_for_cookies, + const blink::StorageKey &storage_key, + base::OnceCallback<void(bool, const std::string&)> callback) override; private: - void InitFrameInterfaces(); - void AddNetworkHintsMessageFilter(int render_process_id, net::URLRequestContext *context); - - BrowserMainPartsQt* m_browserMainParts; - std::unique_ptr<content::ResourceDispatcherHostDelegate> m_resourceDispatcherHostDelegate; - scoped_refptr<ShareGroupQtQuick> m_shareGroupQtQuick; - std::unique_ptr<service_manager::BinderRegistry> m_frameInterfaces; - std::unique_ptr<service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>> m_frameInterfacesParameterized; + BrowserMainPartsQt *m_browserMainParts = nullptr; }; } // namespace QtWebEngineCore |