diff options
Diffstat (limited to 'src/core/content_browser_client_qt.cpp')
-rw-r--r-- | src/core/content_browser_client_qt.cpp | 114 |
1 files changed, 61 insertions, 53 deletions
diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp index 53c2caa2d..341c46295 100644 --- a/src/core/content_browser_client_qt.cpp +++ b/src/core/content_browser_client_qt.cpp @@ -16,7 +16,6 @@ #include "components/performance_manager/embedder/performance_manager_registry.h" #include "components/performance_manager/public/performance_manager.h" #include "content/browser/web_contents/web_contents_impl.h" -#include "content/public/browser/browser_main_runner.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/child_process_security_policy.h" #include "content/public/browser/client_certificate_delegate.h" @@ -25,15 +24,12 @@ #include "content/public/browser/navigation_handle.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" -#include "content/public/browser/render_view_host.h" #include "content/public/browser/shared_cors_origin_access_list.h" #include "content/public/browser/url_loader_request_interceptor.h" #include "content/public/browser/web_contents.h" -#include "content/public/browser/web_contents_user_data.h" #include "content/public/browser/web_contents_view_delegate.h" #include "content/public/browser/web_ui_url_loader_factory.h" #include "content/public/common/content_switches.h" -#include "content/public/common/main_function_params.h" #include "content/public/common/url_constants.h" #include "content/public/common/user_agent.h" #include "extensions/buildflags/buildflags.h" @@ -57,7 +53,6 @@ #include "profile_adapter.h" #include "browser_main_parts_qt.h" -#include "browser_message_filter_qt.h" #include "certificate_error_controller.h" #include "client_cert_select_controller.h" #include "custom_handlers/protocol_handler_registry_factory.h" @@ -70,7 +65,6 @@ #include "net/proxying_restricted_cookie_manager_qt.h" #include "net/proxying_url_loader_factory_qt.h" #include "net/system_network_context_manager.h" -#include "platform_notification_service_qt.h" #include "profile_qt.h" #include "profile_io_data_qt.h" #include "renderer_host/user_resource_controller_host.h" @@ -80,7 +74,6 @@ #include "web_contents_adapter.h" #include "web_contents_delegate_qt.h" #include "web_contents_view_qt.h" -#include "web_engine_context.h" #include "web_engine_library_info.h" #include "web_engine_settings.h" #include "authenticator_request_client_delegate_qt.h" @@ -88,6 +81,10 @@ #include "api/qwebenginecookiestore_p.h" #include "api/qwebengineurlrequestinfo_p.h" +#if BUILDFLAG(CONTENT_ENABLE_LEGACY_IPC) +#include "browser_message_filter_qt.h" +#endif + #if QT_CONFIG(webengine_geolocation) #include "base/memory/ptr_util.h" #include "location_provider_qt.h" @@ -95,6 +92,7 @@ #if QT_CONFIG(webengine_spellchecker) #include "chrome/browser/spellchecker/spell_check_host_chrome_impl.h" +#include "chrome/browser/spellchecker/spell_check_initialization_host_impl.h" #include "chrome/browser/spellchecker/spellcheck_factory.h" #include "chrome/browser/spellchecker/spellcheck_service.h" #include "components/spellcheck/browser/pref_names.h" @@ -147,12 +145,11 @@ #include "components/pdf/browser/pdf_navigation_throttle.h" #include "components/pdf/browser/pdf_url_loader_request_interceptor.h" #include "components/pdf/browser/pdf_document_helper.h" - -#include "printing/pdf_document_helper_client_qt.h" #endif #if BUILDFLAG(ENABLE_PDF) && BUILDFLAG(ENABLE_EXTENSIONS) #include "extensions/pdf_iframe_navigation_throttle_qt.h" +#include "printing/pdf_document_helper_client_qt.h" #endif #include <QGuiApplication> @@ -190,7 +187,7 @@ bool IsHandledProtocol(base::StringPiece scheme) return true; return false; } -} +} // namespace url namespace QtWebEngineCore { @@ -228,7 +225,7 @@ void ContentBrowserClientQt::RenderProcessWillLaunch(content::RenderProcessHost #endif #if QT_CONFIG(webengine_webrtc) && QT_CONFIG(webengine_extensions) - WebRtcLoggingController::AttachToRenderProcessHost(host, WebEngineContext::current()->webRtcLogUploader()); + WebRtcLoggingController::AttachToRenderProcessHost(host); #endif // Allow requesting custom schemes. @@ -240,12 +237,13 @@ void ContentBrowserClientQt::RenderProcessWillLaunch(content::RenderProcessHost // FIXME: Add a settings variable to enable/disable the file scheme. policy->GrantRequestScheme(id, url::kFileScheme); profileAdapter->userResourceController()->renderProcessStartedWithHost(host); +#if BUILDFLAG(CONTENT_ENABLE_LEGACY_IPC) host->AddFilter(new BrowserMessageFilterQt(id, profile)); #if BUILDFLAG(ENABLE_EXTENSIONS) host->AddFilter(new extensions::ExtensionMessageFilter(id, profile)); host->AddFilter(new extensions::MessagingAPIMessageFilter(id, profile)); #endif //ENABLE_EXTENSIONS - +#endif // CONTENT_ENABLE_LEGACY_IPC bool is_incognito_process = profile->IsOffTheRecord(); mojo::AssociatedRemote<qtwebengine::mojom::RendererConfiguration> renderer_configuration; host->GetChannel()->GetRemoteAssociatedInterface(&renderer_configuration); @@ -276,14 +274,14 @@ void ContentBrowserClientQt::AllowCertificateError(content::WebContents *webCont int cert_error, const net::SSLInfo &ssl_info, const GURL &request_url, - bool /* is_main_frame_request */, + bool is_main_frame_request, bool strict_enforcement, base::OnceCallback<void(content::CertificateRequestResultType)> callback) { WebContentsDelegateQt* contentsDelegate = static_cast<WebContentsDelegateQt*>(webContents->GetDelegate()); QSharedPointer<CertificateErrorController> errorController(new CertificateErrorController( - cert_error, ssl_info, request_url, strict_enforcement, std::move(callback))); + cert_error, ssl_info, request_url, is_main_frame_request, strict_enforcement, std::move(callback))); contentsDelegate->allowCertificateError(errorController); } @@ -390,8 +388,9 @@ void ContentBrowserClientQt::BindHostReceiverForRenderer(content::RenderProcessH mojo::GenericPendingReceiver receiver) { #if QT_CONFIG(webengine_spellchecker) - if (auto host_receiver = receiver.As<spellcheck::mojom::SpellCheckHost>()) { - SpellCheckHostChromeImpl::Create(render_process_host->GetID(), std::move(host_receiver)); + if (auto host_receiver = receiver.As<spellcheck::mojom::SpellCheckInitializationHost>()) { + SpellCheckInitializationHostImpl::Create(render_process_host->GetID(), + std::move(host_receiver)); return; } #endif @@ -434,6 +433,15 @@ void ContentBrowserClientQt::RegisterBrowserInterfaceBindersForFrame( mojo::BinderMapWithContext<content::RenderFrameHost *> *map) { map->Add<network_hints::mojom::NetworkHintsHandler>(base::BindRepeating(&BindNetworkHintsHandler)); +#if QT_CONFIG(webengine_spellchecker) + map->Add<spellcheck::mojom::SpellCheckHost>(base::BindRepeating( + [](content::RenderFrameHost *frame_host, + mojo::PendingReceiver<spellcheck::mojom::SpellCheckHost> receiver) { + SpellCheckHostChromeImpl::Create(frame_host->GetProcess()->GetID(), + std::move(receiver)); + })); +#endif + #if BUILDFLAG(ENABLE_EXTENSIONS) map->Add<extensions::mime_handler::MimeHandlerService>(base::BindRepeating(&BindMimeHandlerService)); map->Add<extensions::mime_handler::BeforeUnloadControl>(base::BindRepeating(&BindBeforeUnloadControl)); @@ -460,13 +468,9 @@ void ContentBrowserClientQt::ExposeInterfacesToRenderer(service_manager::BinderR { if (auto *manager = performance_manager::PerformanceManagerRegistry::GetInstance()) manager->CreateProcessNodeAndExposeInterfacesToRendererProcess(registry, render_process_host); -#if BUILDFLAG(ENABLE_EXTENSIONS) - associated_registry->AddInterface<extensions::mojom::EventRouter>( - base::BindRepeating(&extensions::EventRouter::BindForRenderer, render_process_host->GetID())); - associated_registry->AddInterface<guest_view::mojom::GuestViewHost>( - base::BindRepeating(&extensions::ExtensionsGuestView::CreateForComponents, render_process_host->GetID())); - associated_registry->AddInterface<extensions::mojom::GuestView>( - base::BindRepeating(&extensions::ExtensionsGuestView::CreateForExtensions, render_process_host->GetID())); +#if BUILDFLAG(ENABLE_EXTENSIONS) && BUILDFLAG(ENABLE_EXTENSIONS_LEGACY_IPC) + associated_registry->AddInterface<extensions::mojom::EventRouter>(base::BindRepeating( + &extensions::EventRouter::BindForRenderer, render_process_host->GetID())); #else Q_UNUSED(associated_registry); #endif @@ -502,13 +506,14 @@ void ContentBrowserClientQt::RegisterAssociatedInterfaceBindersForRenderFrameHos extensions::ExtensionWebContentsObserverQt::BindLocalFrameHost(std::move(receiver), render_frame_host); }, &rfh)); #endif - associated_registry.AddInterface<autofill::mojom::AutofillDriver>( - base::BindRepeating( - [](content::RenderFrameHost *render_frame_host, - mojo::PendingAssociatedReceiver<autofill::mojom::AutofillDriver> receiver) { - autofill::ContentAutofillDriverFactory::BindAutofillDriver(std::move(receiver), render_frame_host); - }, &rfh)); -#if BUILDFLAG(ENABLE_PDF) + associated_registry.AddInterface<autofill::mojom::AutofillDriver>(base::BindRepeating( + [](content::RenderFrameHost *render_frame_host, + mojo::PendingAssociatedReceiver<autofill::mojom::AutofillDriver> receiver) { + autofill::ContentAutofillDriverFactory::BindAutofillDriver(render_frame_host, + std::move(receiver)); + }, + &rfh)); +#if BUILDFLAG(ENABLE_PDF) && BUILDFLAG(ENABLE_EXTENSIONS) associated_registry.AddInterface<pdf::mojom::PdfService>( base::BindRepeating( [](content::RenderFrameHost *render_frame_host, @@ -517,6 +522,12 @@ void ContentBrowserClientQt::RegisterAssociatedInterfaceBindersForRenderFrameHos }, &rfh)); #endif // BUILDFLAG(ENABLE_PDF) ContentBrowserClient::RegisterAssociatedInterfaceBindersForRenderFrameHost(rfh, associated_registry); +#if BUILDFLAG(ENABLE_EXTENSIONS) + associated_registry.AddInterface<guest_view::mojom::GuestViewHost>(base::BindRepeating( + &extensions::ExtensionsGuestView::CreateForComponents, rfh.GetGlobalId())); + associated_registry.AddInterface<extensions::mojom::GuestView>(base::BindRepeating( + &extensions::ExtensionsGuestView::CreateForExtensions, rfh.GetGlobalId())); +#endif } bool ContentBrowserClientQt::CanCreateWindow( @@ -764,7 +775,8 @@ std::vector<std::unique_ptr<blink::URLLoaderThrottle>> ContentBrowserClientQt::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) + content::NavigationUIData * /*navigation_ui_data*/, int frame_tree_node_id, + absl::optional<int64_t> navigation_id) { std::vector<std::unique_ptr<blink::URLLoaderThrottle>> result; result.push_back(std::make_unique<ProtocolHandlerThrottle>( @@ -827,7 +839,8 @@ static bool navigationThrottleCallback(content::NavigationHandle *handle) client->navigationRequested(pageTransitionToNavigationType(transition_type), toQt(handle->GetURL()), navigationAccepted, - handle->IsInPrimaryMainFrame()); + handle->IsInPrimaryMainFrame(), + handle->IsFormSubmission()); return !navigationAccepted; } @@ -882,13 +895,10 @@ bool ContentBrowserClientQt::HasErrorPage(int httpStatusCode, content::WebConten } std::unique_ptr<content::LoginDelegate> ContentBrowserClientQt::CreateLoginDelegate( - const net::AuthChallengeInfo &authInfo, - content::WebContents *web_contents, - const content::GlobalRequestID & /*request_id*/, - bool /*is_main_frame*/, - const GURL &url, - scoped_refptr<net::HttpResponseHeaders> /*response_headers*/, - bool first_auth_attempt, + const net::AuthChallengeInfo &authInfo, content::WebContents *web_contents, + content::BrowserContext *browser_context, const content::GlobalRequestID & /*request_id*/, + bool /*is_main_frame*/, const GURL &url, + scoped_refptr<net::HttpResponseHeaders> /*response_headers*/, bool first_auth_attempt, LoginAuthRequiredCallback auth_required_callback) { auto loginDelegate = std::make_unique<LoginDelegateQt>(authInfo, web_contents, url, first_auth_attempt, std::move(auth_required_callback)); @@ -1028,22 +1038,20 @@ std::vector<base::FilePath> ContentBrowserClientQt::GetNetworkContextsParentDire toFilePath(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)) }; } -void ContentBrowserClientQt::RegisterNonNetworkNavigationURLLoaderFactories(int frame_tree_node_id, - ukm::SourceIdObj ukm_source_id, - NonNetworkURLLoaderFactoryMap *factories) +void ContentBrowserClientQt::RegisterNonNetworkNavigationURLLoaderFactories( + int frame_tree_node_id, NonNetworkURLLoaderFactoryMap *factories) { content::WebContents *web_contents = content::WebContents::FromFrameTreeNodeId(frame_tree_node_id); Profile *profile = Profile::FromBrowserContext(web_contents->GetBrowserContext()); ProfileAdapter *profileAdapter = static_cast<ProfileQt *>(profile)->profileAdapter(); for (const QByteArray &scheme : profileAdapter->customUrlSchemes()) - factories->emplace(scheme.toStdString(), CreateCustomURLLoaderFactory(profileAdapter)); + factories->emplace(scheme.toStdString(), CreateCustomURLLoaderFactory(profileAdapter, web_contents)); #if BUILDFLAG(ENABLE_EXTENSIONS) - factories->emplace( - extensions::kExtensionScheme, - extensions::CreateExtensionNavigationURLLoaderFactory(profile, ukm_source_id, - !!extensions::WebViewGuest::FromWebContents(web_contents))); + factories->emplace(extensions::kExtensionScheme, + extensions::CreateExtensionNavigationURLLoaderFactory( + profile, !!extensions::WebViewGuest::FromWebContents(web_contents))); #endif } @@ -1054,7 +1062,7 @@ void ContentBrowserClientQt::RegisterNonNetworkWorkerMainResourceURLLoaderFactor ProfileAdapter *profileAdapter = static_cast<ProfileQt *>(profile)->profileAdapter(); for (const QByteArray &scheme : profileAdapter->customUrlSchemes()) - factories->emplace(scheme.toStdString(), CreateCustomURLLoaderFactory(profileAdapter)); + factories->emplace(scheme.toStdString(), CreateCustomURLLoaderFactory(profileAdapter, nullptr)); #if BUILDFLAG(ENABLE_EXTENSIONS) factories->emplace( @@ -1072,7 +1080,7 @@ void ContentBrowserClientQt::RegisterNonNetworkServiceWorkerUpdateURLLoaderFacto for (const QByteArray &scheme : profileAdapter->customUrlSchemes()) { if (const url::CustomScheme *cs = url::CustomScheme::FindScheme(scheme.toStdString())) { if (cs->flags & url::CustomScheme::ServiceWorkersAllowed) - factories->emplace(scheme.toStdString(), CreateCustomURLLoaderFactory(profileAdapter)); + factories->emplace(scheme.toStdString(), CreateCustomURLLoaderFactory(profileAdapter, nullptr)); } } @@ -1092,15 +1100,15 @@ void ContentBrowserClientQt::RegisterNonNetworkSubresourceURLLoaderFactories(int Profile *profile = Profile::FromBrowserContext(process_host->GetBrowserContext()); ProfileAdapter *profileAdapter = static_cast<ProfileQt *>(profile)->profileAdapter(); - for (const QByteArray &scheme : profileAdapter->customUrlSchemes()) - factories->emplace(scheme.toStdString(), CreateCustomURLLoaderFactory(profileAdapter)); - content::RenderFrameHost *frame_host = content::RenderFrameHost::FromID(render_process_id, render_frame_id); content::WebContents *web_contents = content::WebContents::FromRenderFrameHost(frame_host); GURL url; if (web_contents) url = web_contents->GetVisibleURL(); + for (const QByteArray &scheme : profileAdapter->customUrlSchemes()) + factories->emplace(scheme.toStdString(), CreateCustomURLLoaderFactory(profileAdapter, web_contents)); + bool is_background_page = false; #if BUILDFLAG(ENABLE_EXTENSIONS) is_background_page = extensions::GetViewType(web_contents) == extensions::mojom::ViewType::kExtensionBackgroundPage; @@ -1308,7 +1316,7 @@ void ContentBrowserClientQt::CreateWebSocket( std::move(factory).Run(to_url, std::move(headers), std::move(handshake_client), mojo::NullRemote(), mojo::NullRemote()); } -void ContentBrowserClientQt::SiteInstanceGotProcess(content::SiteInstance *site_instance) +void ContentBrowserClientQt::SiteInstanceGotProcessAndSite(content::SiteInstance *site_instance) { #if BUILDFLAG(ENABLE_EXTENSIONS) content::BrowserContext *context = site_instance->GetBrowserContext(); |