From cd61343ceb4a3de8ce16082917a2f197b2481d08 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Wed, 3 Jun 2020 16:01:24 +0200 Subject: Chromium 81-based adaptations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ie422b327025da084bc8038c7a0aadee2db801f29 Reviewed-by: Jüri Valdmann --- src/core/browser_accessibility_qt.cpp | 9 ++- src/core/browser_main_parts_qt.cpp | 18 ++++++ src/core/browser_main_parts_qt.h | 7 +++ src/core/certificate_error_controller.cpp | 2 +- src/core/certificate_error_controller.h | 3 +- src/core/clipboard_qt.cpp | 23 +++++++- src/core/clipboard_qt.h | 2 + src/core/compositor/display_gl_output_surface.cpp | 8 ++- src/core/compositor/display_gl_output_surface.h | 1 + src/core/content_browser_client_qt.cpp | 67 ++++++++++++++++++---- src/core/content_browser_client_qt.h | 14 +++-- src/core/content_main_delegate_qt.cpp | 15 ++++- src/core/content_main_delegate_qt.h | 4 ++ src/core/delegated_frame_host_client_qt.cpp | 5 -- src/core/delegated_frame_host_client_qt.h | 1 - src/core/devtools_frontend_qt.cpp | 36 ++++++++---- src/core/devtools_frontend_qt.h | 2 +- src/core/download_manager_delegate_qt.cpp | 43 ++++++++------ src/core/download_manager_delegate_qt.h | 8 +-- src/core/extensions/extension_system_qt.cpp | 9 ++- src/core/extensions/extension_system_qt.h | 2 +- .../extensions/extensions_browser_client_qt.cpp | 63 +++++++++----------- src/core/extensions/extensions_browser_client_qt.h | 5 +- src/core/net/custom_url_loader_factory.cpp | 64 ++++++++++++++------- .../net/proxying_restricted_cookie_manager_qt.cpp | 17 +++--- .../net/proxying_restricted_cookie_manager_qt.h | 14 ++--- src/core/net/proxying_url_loader_factory_qt.cpp | 16 +++--- src/core/net/proxying_url_loader_factory_qt.h | 1 - src/core/net/ssl_host_state_delegate_qt.cpp | 6 +- src/core/net/ssl_host_state_delegate_qt.h | 6 +- src/core/net/url_request_custom_job_proxy.h | 6 +- src/core/ozone/gl_ozone_glx_qt.cpp | 6 -- src/core/ozone/gl_ozone_glx_qt.h | 1 - src/core/ozone/gl_surface_egl_qt.cpp | 4 +- src/core/ozone/gl_surface_egl_qt.h | 5 +- src/core/ozone/ozone_platform_qt.cpp | 4 +- src/core/permission_manager_qt.cpp | 14 +++-- src/core/printing/print_view_manager_qt.cpp | 7 ++- src/core/qtwebengine_resources.gni | 12 ++-- src/core/qtwebengine_sources.gni | 3 + src/core/quota_permission_context_qt.cpp | 14 ++--- src/core/quota_permission_context_qt.h | 4 +- src/core/quota_request_controller_impl.cpp | 11 ++-- src/core/quota_request_controller_impl.h | 2 +- src/core/render_widget_host_view_qt.cpp | 59 +++++++++++-------- src/core/render_widget_host_view_qt.h | 4 -- src/core/renderer/content_renderer_client_qt.cpp | 9 +-- src/core/renderer/content_renderer_client_qt.h | 2 +- .../renderer/print_web_view_helper_delegate_qt.cpp | 5 -- .../renderer/print_web_view_helper_delegate_qt.h | 2 - .../pepper_isolated_file_system_message_filter.cpp | 2 +- .../pepper_isolated_file_system_message_filter.h | 2 +- src/core/resource_bundle_qt.cpp | 2 +- src/core/user_script.cpp | 2 +- src/core/web_contents_adapter.cpp | 26 ++++++--- src/core/web_contents_delegate_qt.cpp | 8 ++- src/core/web_contents_delegate_qt.h | 2 +- src/core/web_engine_context.cpp | 2 - src/core/web_event_factory.cpp | 18 +++--- src/core/web_event_factory.h | 6 +- 60 files changed, 430 insertions(+), 285 deletions(-) (limited to 'src/core') diff --git a/src/core/browser_accessibility_qt.cpp b/src/core/browser_accessibility_qt.cpp index de78eb85d..cf889961f 100644 --- a/src/core/browser_accessibility_qt.cpp +++ b/src/core/browser_accessibility_qt.cpp @@ -264,7 +264,6 @@ QAccessible::Role BrowserAccessibilityQt::role() const case ax::mojom::Role::kComplementary: return QAccessible::ComplementaryContent; case ax::mojom::Role::kComment: - case ax::mojom::Role::kCommentSection: return QAccessible::Section; case ax::mojom::Role::kContentDeletion: case ax::mojom::Role::kContentInsertion: @@ -450,8 +449,14 @@ QAccessible::Role BrowserAccessibilityQt::role() const return QAccessible::Pane; case ax::mojom::Role::kParagraph: return QAccessible::Paragraph; + case ax::mojom::Role::kPdfActionableHighlight: + return QAccessible::Button; + case ax::mojom::Role::kPluginObject: + return QAccessible::Grouping; case ax::mojom::Role::kPopUpButton: return QAccessible::ComboBox; + case ax::mojom::Role::kPortal: + return QAccessible::Button; case ax::mojom::Role::kPre: return QAccessible::Section; case ax::mojom::Role::kPresentational: @@ -464,8 +469,6 @@ QAccessible::Role BrowserAccessibilityQt::role() const return QAccessible::Grouping; case ax::mojom::Role::kRegion: return QAccessible::Section; - case ax::mojom::Role::kRevision: - return QAccessible::Section; case ax::mojom::Role::kRow: return QAccessible::Row; case ax::mojom::Role::kRowGroup: diff --git a/src/core/browser_main_parts_qt.cpp b/src/core/browser_main_parts_qt.cpp index 45056fec2..785c52507 100644 --- a/src/core/browser_main_parts_qt.cpp +++ b/src/core/browser_main_parts_qt.cpp @@ -48,6 +48,11 @@ #include "base/task/sequence_manager/sequence_manager_impl.h" #include "base/task/sequence_manager/thread_controller_with_message_pump_impl.h" #include "base/threading/thread_restrictions.h" +#include "chrome/browser/tab_contents/form_interaction_tab_helper.h" +#include "components/performance_manager/embedder/performance_manager_lifetime.h" +#include "components/performance_manager/embedder/performance_manager_registry.h" +#include "components/performance_manager/public/graph/graph.h" +#include "components/performance_manager/public/performance_manager.h" #include "content/public/browser/browser_main_parts.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/child_process_security_policy.h" @@ -255,6 +260,10 @@ void BrowserMainPartsQt::PreMainMessageLoopRun() void BrowserMainPartsQt::PostMainMessageLoopRun() { + performance_manager_registry_->TearDown(); + performance_manager_registry_.reset(); + performance_manager::DestroyPerformanceManager(std::move(performance_manager_)); + // The ProfileQt's destructor uses the MessageLoop so it should be deleted // right before the RenderProcessHostImpl's destructor destroys it. WebEngineContext::current()->destroyProfileAdapter(); @@ -277,8 +286,17 @@ int BrowserMainPartsQt::PreCreateThreads() return 0; } +static void CreatePoliciesAndDecorators(performance_manager::Graph *graph) +{ + graph->PassToGraph(FormInteractionTabHelper::CreateGraphObserver()); +} + void BrowserMainPartsQt::PostCreateThreads() { + performance_manager_ = + performance_manager::CreatePerformanceManagerWithDefaultDecorators( + base::BindOnce(&QtWebEngineCore::CreatePoliciesAndDecorators)); + performance_manager_registry_ = performance_manager::PerformanceManagerRegistry::Create(); } } // namespace QtWebEngineCore diff --git a/src/core/browser_main_parts_qt.h b/src/core/browser_main_parts_qt.h index f287c2e44..9d0967612 100644 --- a/src/core/browser_main_parts_qt.h +++ b/src/core/browser_main_parts_qt.h @@ -50,6 +50,11 @@ namespace content { class ServiceManagerConnection; } +namespace performance_manager { +class PerformanceManager; +class PerformanceManagerRegistry; +} + namespace QtWebEngineCore { std::unique_ptr messagePumpFactory(); @@ -69,6 +74,8 @@ public: private: DISALLOW_COPY_AND_ASSIGN(BrowserMainPartsQt); + std::unique_ptr performance_manager_; + std::unique_ptr performance_manager_registry_; }; } // namespace QtWebEngineCore diff --git a/src/core/certificate_error_controller.cpp b/src/core/certificate_error_controller.cpp index 353228c2d..0e97f7cd4 100644 --- a/src/core/certificate_error_controller.cpp +++ b/src/core/certificate_error_controller.cpp @@ -53,7 +53,6 @@ QT_BEGIN_NAMESPACE using namespace QtWebEngineCore; ASSERT_ENUMS_MATCH(CertificateErrorController::SslPinnedKeyNotInCertificateChain, net::ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN) -ASSERT_ENUMS_MATCH(CertificateErrorController::CertificateCommonNameInvalid, net::ERR_CERT_BEGIN) ASSERT_ENUMS_MATCH(CertificateErrorController::CertificateCommonNameInvalid, net::ERR_CERT_COMMON_NAME_INVALID) ASSERT_ENUMS_MATCH(CertificateErrorController::CertificateDateInvalid, net::ERR_CERT_DATE_INVALID) ASSERT_ENUMS_MATCH(CertificateErrorController::CertificateAuthorityInvalid, net::ERR_CERT_AUTHORITY_INVALID) @@ -69,6 +68,7 @@ ASSERT_ENUMS_MATCH(CertificateErrorController::CertificateValidityTooLong, net:: ASSERT_ENUMS_MATCH(CertificateErrorController::CertificateTransparencyRequired, net::ERR_CERTIFICATE_TRANSPARENCY_REQUIRED) ASSERT_ENUMS_MATCH(CertificateErrorController::CertificateSymantecLegacy, net::ERR_CERT_SYMANTEC_LEGACY) ASSERT_ENUMS_MATCH(CertificateErrorController::CertificateKnownInterceptionBlocked, net::ERR_CERT_KNOWN_INTERCEPTION_BLOCKED) +ASSERT_ENUMS_MATCH(CertificateErrorController::SslObsoleteVersion, net::ERR_SSL_OBSOLETE_VERSION) ASSERT_ENUMS_MATCH(CertificateErrorController::CertificateErrorEnd, net::ERR_CERT_END) void CertificateErrorControllerPrivate::accept(bool accepted) diff --git a/src/core/certificate_error_controller.h b/src/core/certificate_error_controller.h index dc1c3cf54..740f7a9d4 100644 --- a/src/core/certificate_error_controller.h +++ b/src/core/certificate_error_controller.h @@ -86,7 +86,8 @@ public: CertificateTransparencyRequired = -214, CertificateSymantecLegacy = -215, CertificateKnownInterceptionBlocked = -217, - CertificateErrorEnd = -218 // not an error, just an enum boundary + SslObsoleteVersion = -218, + CertificateErrorEnd = -219 // not an error, just an enum boundary }; CertificateError error() const; diff --git a/src/core/clipboard_qt.cpp b/src/core/clipboard_qt.cpp index c3b25ff63..f9bc0bc74 100644 --- a/src/core/clipboard_qt.cpp +++ b/src/core/clipboard_qt.cpp @@ -46,6 +46,7 @@ #include "type_conversion.h" #include "base/logging.h" +#include "base/strings/utf_string_conversions.h" #include "third_party/skia/include/core/SkBitmap.h" #include "ui/base/clipboard/custom_data_helper.h" #include "ui/base/clipboard/clipboard.h" @@ -184,14 +185,14 @@ void ClipboardQt::WriteBookmark(const char *title_data, size_t title_len, const void ClipboardQt::WriteData(const ui::ClipboardFormatType &format, const char *data_data, size_t data_len) { - getUncommittedData()->setData(QString::fromStdString(format.ToString()), QByteArray(data_data, data_len)); + getUncommittedData()->setData(QString::fromStdString(format.GetName()), QByteArray(data_data, data_len)); } bool ClipboardQt::IsFormatAvailable(const ui::ClipboardFormatType &format, ui::ClipboardBuffer type) const { const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData( type == ui::ClipboardBuffer::kCopyPaste ? QClipboard::Clipboard : QClipboard::Selection); - return mimeData && mimeData->hasFormat(QString::fromStdString(format.ToString())); + return mimeData && mimeData->hasFormat(QString::fromStdString(format.GetName())); } void ClipboardQt::Clear(ui::ClipboardBuffer type) @@ -313,7 +314,7 @@ void ClipboardQt::ReadData(const ui::ClipboardFormatType &format, std::string *r const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(); if (!mimeData) return; - const QByteArray byteArray = mimeData->data(QString::fromStdString(format.ToString())); + const QByteArray byteArray = mimeData->data(QString::fromStdString(format.GetName())); *result = std::string(byteArray.constData(), byteArray.length()); } @@ -323,4 +324,20 @@ uint64_t ClipboardQt::GetSequenceNumber(ui::ClipboardBuffer type) const : QClipboard::Selection); } +std::vector ClipboardQt::ReadAvailablePlatformSpecificFormatNames(ui::ClipboardBuffer buffer) const +{ + // based on ClipboardAura + std::vector types; + if (IsFormatAvailable(ui::ClipboardFormatType::GetPlainTextType(), buffer)) + types.push_back(base::UTF8ToUTF16(ui::ClipboardFormatType::GetPlainTextType().GetName())); + if (IsFormatAvailable(ui::ClipboardFormatType::GetHtmlType(), buffer)) + types.push_back(base::UTF8ToUTF16(ui::ClipboardFormatType::GetHtmlType().GetName())); + if (IsFormatAvailable(ui::ClipboardFormatType::GetRtfType(), buffer)) + types.push_back(base::UTF8ToUTF16(ui::ClipboardFormatType::GetRtfType().GetName())); + if (IsFormatAvailable(ui::ClipboardFormatType::GetBitmapType(), buffer)) + types.push_back(base::UTF8ToUTF16(ui::kMimeTypePNG)); + + return types; +} + } // namespace QtWebEngineCore diff --git a/src/core/clipboard_qt.h b/src/core/clipboard_qt.h index 6d86e8f6c..034f40863 100644 --- a/src/core/clipboard_qt.h +++ b/src/core/clipboard_qt.h @@ -63,6 +63,8 @@ public: void OnPreShutdown() override {} + std::vector ReadAvailablePlatformSpecificFormatNames(ui::ClipboardBuffer buffer) const override; + protected: void WritePortableRepresentations(ui::ClipboardBuffer type, const ObjectMap &objects) override; void WritePlatformRepresentations(ui::ClipboardBuffer type, diff --git a/src/core/compositor/display_gl_output_surface.cpp b/src/core/compositor/display_gl_output_surface.cpp index 4f63e5b69..139015938 100644 --- a/src/core/compositor/display_gl_output_surface.cpp +++ b/src/core/compositor/display_gl_output_surface.cpp @@ -47,7 +47,6 @@ #include "gpu/command_buffer/service/mailbox_manager.h" #include "gpu/command_buffer/service/texture_base.h" #include "gpu/ipc/in_process_command_buffer.h" -#include "ui/gl/color_space_utils.h" namespace QtWebEngineCore { @@ -116,7 +115,7 @@ void DisplayGLOutputSurface::Reshape(const gfx::Size &sizeInPixels, { m_currentShape = Shape{sizeInPixels, devicePixelRatio, colorSpace, hasAlpha}; m_gl->ResizeCHROMIUM(sizeInPixels.width(), sizeInPixels.height(), devicePixelRatio, - gl::ColorSpaceUtils::GetGLColorSpace(colorSpace), hasAlpha); + colorSpace.AsGLColorSpace(), hasAlpha); } std::unique_ptr DisplayGLOutputSurface::makeBuffer(const Shape &shape) @@ -281,6 +280,11 @@ unsigned DisplayGLOutputSurface::UpdateGpuFence() return 0; } +scoped_refptr DisplayGLOutputSurface::GetGpuTaskSchedulerHelper() +{ + return nullptr; +} + void DisplayGLOutputSurface::SetUpdateVSyncParametersCallback(viz::UpdateVSyncParametersCallback callback) { m_vizContextProvider->SetUpdateVSyncParametersCallback(std::move(callback)); diff --git a/src/core/compositor/display_gl_output_surface.h b/src/core/compositor/display_gl_output_surface.h index 67d987263..3755a294f 100644 --- a/src/core/compositor/display_gl_output_surface.h +++ b/src/core/compositor/display_gl_output_surface.h @@ -86,6 +86,7 @@ public: void SetUpdateVSyncParametersCallback(viz::UpdateVSyncParametersCallback callback) override; void SetDisplayTransformHint(gfx::OverlayTransform transform) override; gfx::OverlayTransform GetDisplayTransform() override; + scoped_refptr GetGpuTaskSchedulerHelper() override; // Overridden from DisplayProducer. QSGNode *updatePaintNode(QSGNode *oldNode, RenderWidgetHostViewQtDelegate *delegate) override; diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp index 05957c26f..f50878ae4 100644 --- a/src/core/content_browser_client_qt.cpp +++ b/src/core/content_browser_client_qt.cpp @@ -55,6 +55,12 @@ #include "components/navigation_interception/intercept_navigation_throttle.h" #include "components/navigation_interception/navigation_params.h" #include "components/network_hints/browser/simple_network_hints_handler_impl.h" +#include "components/performance_manager/embedder/performance_manager_registry.h" +#include "components/performance_manager/graph/process_node_impl.h" +#include "components/performance_manager/performance_manager_impl.h" +#include "components/performance_manager/public/mojom/coordination_unit.mojom.h" +#include "components/performance_manager/public/performance_manager.h" +#include "components/performance_manager/render_process_user_data.h" #include "components/spellcheck/spellcheck_buildflags.h" #include "content/browser/renderer_host/render_view_host_delegate.h" #include "content/browser/web_contents/web_contents_impl.h" @@ -84,6 +90,7 @@ #include "extensions/buildflags/buildflags.h" #include "extensions/browser/extension_protocols.h" #include "extensions/browser/guest_view/web_view/web_view_guest.h" +#include "extensions/browser/url_loader_factory_manager.h" #include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/binding_set.h" #include "mojo/public/cpp/bindings/remote.h" @@ -394,14 +401,6 @@ scoped_refptr ContentBrowserClientQt::CreateQuo return new QuotaPermissionContextQt; } -void ContentBrowserClientQt::GetQuotaSettings(content::BrowserContext* context, - content::StoragePartition* partition, - base::OnceCallback)> callback) -{ - storage::GetNominalDynamicSettings(partition->GetPath(), context->IsOffTheRecord(), - storage::GetDefaultDeviceInfoHelper(), std::move(callback)); -} - // Copied from chrome/browser/ssl/ssl_error_handler.cc: static int IsCertErrorFatal(int cert_error) { @@ -409,17 +408,20 @@ static int IsCertErrorFatal(int cert_error) case net::ERR_CERT_COMMON_NAME_INVALID: case net::ERR_CERT_DATE_INVALID: case net::ERR_CERT_AUTHORITY_INVALID: + case net::ERR_CERT_NO_REVOCATION_MECHANISM: + case net::ERR_CERT_UNABLE_TO_CHECK_REVOCATION: case net::ERR_CERT_WEAK_SIGNATURE_ALGORITHM: case net::ERR_CERT_WEAK_KEY: case net::ERR_CERT_NAME_CONSTRAINT_VIOLATION: case net::ERR_CERT_VALIDITY_TOO_LONG: case net::ERR_CERTIFICATE_TRANSPARENCY_REQUIRED: case net::ERR_CERT_SYMANTEC_LEGACY: + case net::ERR_CERT_KNOWN_INTERCEPTION_BLOCKED: + case net::ERR_SSL_OBSOLETE_VERSION: return false; case net::ERR_CERT_CONTAINS_ERRORS: case net::ERR_CERT_REVOKED: case net::ERR_CERT_INVALID: - case net::ERR_SSL_WEAK_SERVER_EPHEMERAL_DH_KEY: case net::ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN: return true; default: @@ -649,6 +651,36 @@ void ContentBrowserClientQt::RegisterBrowserInterfaceBindersForFrame( map->Add(base::BindRepeating(&BindNetworkHintsHandler)); } +namespace { +void BindProcessNode(int render_process_host_id, + mojo::PendingReceiver receiver) +{ + content::RenderProcessHost *render_process_host = content::RenderProcessHost::FromID(render_process_host_id); + if (!render_process_host) + return; + + performance_manager::RenderProcessUserData *user_data = + performance_manager::RenderProcessUserData::GetForRenderProcessHost(render_process_host); + + DCHECK(performance_manager::PerformanceManagerImpl::GetInstance()); + performance_manager::PerformanceManagerImpl::GetTaskRunner()->PostTask( + FROM_HERE, base::BindOnce(&performance_manager::ProcessNodeImpl::Bind, + base::Unretained(user_data->process_node()), + std::move(receiver))); +} +} // namespace + +void ContentBrowserClientQt::ExposeInterfacesToRenderer(service_manager::BinderRegistry *registry, + blink::AssociatedInterfaceRegistry *associated_registry, + content::RenderProcessHost *render_process_host) +{ + Q_UNUSED(associated_registry); + registry->AddInterface(base::BindRepeating(&BindProcessNode, render_process_host->GetID()), + base::SequencedTaskRunnerHandle::Get()); + + performance_manager::PerformanceManagerRegistry::GetInstance()->CreateProcessNodeForRenderProcessHost(render_process_host); +} + void ContentBrowserClientQt::RunServiceInstance(const service_manager::Identity &identity, mojo::PendingReceiver *receiver) { @@ -731,11 +763,10 @@ bool ContentBrowserClientQt::ShouldEnableStrictSiteIsolation() return false; } -bool ContentBrowserClientQt::WillCreateRestrictedCookieManager( - network::mojom::RestrictedCookieManagerRole role, +bool ContentBrowserClientQt::WillCreateRestrictedCookieManager(network::mojom::RestrictedCookieManagerRole role, content::BrowserContext *browser_context, const url::Origin & /*origin*/, - const GURL & /*site_for_cookies*/, + const net::SiteForCookies & /*site_for_cookies*/, const url::Origin & /*top_frame_origin*/, bool is_service_worker, int process_id, @@ -1033,6 +1064,17 @@ bool ContentBrowserClientQt::ShouldTreatURLSchemeAsFirstPartyWhenTopLevel(base:: #endif } +void ContentBrowserClientQt::OverrideURLLoaderFactoryParams(content::BrowserContext *browser_context, + const url::Origin &origin, + bool is_for_isolated_world, + network::mojom::URLLoaderFactoryParams *factory_params) +{ +#if BUILDFLAG(ENABLE_EXTENSIONS) + extensions::URLLoaderFactoryManager::OverrideURLLoaderFactoryParams( + browser_context, origin, is_for_isolated_world, factory_params); +#endif +} + std::string ContentBrowserClientQt::getUserAgent() { // Mention the Chromium version we're based on to get passed stupid UA-string-based feature detection (several WebRTC demos need this) @@ -1206,6 +1248,7 @@ bool ContentBrowserClientQt::WillCreateURLLoaderFactory( mojo::PendingReceiver *factory_receiver, mojo::PendingRemote *header_client, bool *bypass_redirect_checks, + bool *disable_secure_dns, network::mojom::URLLoaderFactoryOverridePtr *factory_override) { auto *web_contents = content::WebContents::FromRenderFrameHost(frame); diff --git a/src/core/content_browser_client_qt.h b/src/core/content_browser_client_qt.h index 341564574..fe6d8a076 100644 --- a/src/core/content_browser_client_qt.h +++ b/src/core/content_browser_client_qt.h @@ -88,9 +88,6 @@ public: gl::GLShareGroup* GetInProcessGpuShareGroup() override; content::MediaObserver* GetMediaObserver() override; scoped_refptr CreateQuotaPermissionContext() override; - void GetQuotaSettings(content::BrowserContext *context, - content::StoragePartition *partition, - base::OnceCallback)> callback) override; void OverrideWebkitPrefs(content::RenderViewHost *, content::WebPreferences *) override; void AllowCertificateError(content::WebContents *web_contents, int cert_error, @@ -124,6 +121,9 @@ public: service_manager::BinderMapWithContext *map) override; void RunServiceInstance(const service_manager::Identity &identity, mojo::PendingReceiver *receiver) override; + void ExposeInterfacesToRenderer(service_manager::BinderRegistry *registry, + blink::AssociatedInterfaceRegistry *associated_registry, + content::RenderProcessHost *render_process_host) override; std::vector GetExtraServiceManifests() override; base::Optional GetServiceManifestOverlay(base::StringPiece name) override; @@ -146,7 +146,7 @@ public: network::mojom::RestrictedCookieManagerRole role, content::BrowserContext *browser_context, const url::Origin &origin, - const GURL &site_for_cookies, + const net::SiteForCookies &site_for_cookies, const url::Origin &top_frame_origin, bool is_service_worker, int process_id, @@ -190,7 +190,10 @@ public: bool ShouldUseSpareRenderProcessHost(content::BrowserContext *browser_context, const GURL& site_url) override; bool ShouldTreatURLSchemeAsFirstPartyWhenTopLevel(base::StringPiece scheme, bool is_embedded_origin_secure) 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 @@ -239,6 +242,7 @@ public: mojo::PendingReceiver *factory_receiver, mojo::PendingRemote *header_client, bool *bypass_redirect_checks, + bool *disable_secure_dns, network::mojom::URLLoaderFactoryOverridePtr *factory_override) override; scoped_refptr GetSystemSharedURLLoaderFactory() override; network::mojom::NetworkContext *GetSystemNetworkContext() override; diff --git a/src/core/content_main_delegate_qt.cpp b/src/core/content_main_delegate_qt.cpp index 30bac71af..2d7d1eb57 100644 --- a/src/core/content_main_delegate_qt.cpp +++ b/src/core/content_main_delegate_qt.cpp @@ -55,6 +55,7 @@ #include "ui/base/webui/jstemplate_builder.h" #include "net/grit/net_resources.h" #include "net/base/net_module.h" +#include "services/service_manager/embedder/switches.h" #include "services/service_manager/sandbox/switches.h" #include "url/url_util_qt.h" @@ -177,7 +178,7 @@ void ContentMainDelegateQt::PreSandboxStartup() #endif net::NetModule::SetResourceProvider(PlatformResourceProvider); - ui::ResourceBundle::InitSharedInstanceWithLocale(WebEngineLibraryInfo::getApplicationLocale(), 0, ui::ResourceBundle::LOAD_COMMON_RESOURCES); + ui::ResourceBundle::InitSharedInstanceWithLocale(WebEngineLibraryInfo::getApplicationLocale(), nullptr, ui::ResourceBundle::LOAD_COMMON_RESOURCES); base::CommandLine* parsedCommandLine = base::CommandLine::ForCurrentProcess(); logging::LoggingSettings settings; @@ -231,6 +232,16 @@ void ContentMainDelegateQt::PreSandboxStartup() } } +void ContentMainDelegateQt::PostEarlyInitialization(bool) +{ + PostFieldTrialInitialization(); +} + +content::ContentClient *ContentMainDelegateQt::CreateContentClient() +{ + return &m_contentClient; +} + content::ContentBrowserClient *ContentMainDelegateQt::CreateContentBrowserClient() { m_browserClient.reset(new ContentBrowserClientQt); @@ -295,8 +306,6 @@ bool ContentMainDelegateQt::BasicStartupComplete(int *exit_code) #if QT_CONFIG(webengine_spellchecker) SafeOverridePath(base::DIR_APP_DICTIONARIES, WebEngineLibraryInfo::getPath(base::DIR_APP_DICTIONARIES)); #endif - if (!content::GetContentClient()) - content::SetContentClient(new ContentClientQt); url::CustomScheme::LoadSchemes(base::CommandLine::ForCurrentProcess()); diff --git a/src/core/content_main_delegate_qt.h b/src/core/content_main_delegate_qt.h index 4d2f33792..170ccc3ca 100644 --- a/src/core/content_main_delegate_qt.h +++ b/src/core/content_main_delegate_qt.h @@ -44,6 +44,7 @@ #include "compositor/content_gpu_client_qt.h" #include "content_browser_client_qt.h" +#include "content_client_qt.h" #include "content_utility_client_qt.h" namespace QtWebEngineCore { @@ -55,7 +56,9 @@ public: // This is where the embedder puts all of its startup code that needs to run // before the sandbox is engaged. void PreSandboxStartup() override; + void PostEarlyInitialization(bool) override; + content::ContentClient *CreateContentClient() override; content::ContentBrowserClient* CreateContentBrowserClient() override; content::ContentGpuClient* CreateContentGpuClient() override; content::ContentRendererClient* CreateContentRendererClient() override; @@ -63,6 +66,7 @@ public: bool BasicStartupComplete(int* /*exit_code*/) override; private: + ContentClientQt m_contentClient; std::unique_ptr m_browserClient; std::unique_ptr m_gpuClient; std::unique_ptr m_utilityClient; diff --git a/src/core/delegated_frame_host_client_qt.cpp b/src/core/delegated_frame_host_client_qt.cpp index d3f5a4ade..8a3601ada 100644 --- a/src/core/delegated_frame_host_client_qt.cpp +++ b/src/core/delegated_frame_host_client_qt.cpp @@ -58,11 +58,6 @@ SkColor DelegatedFrameHostClientQt::DelegatedFrameHostGetGutterColor() const return p->GetBackgroundColor().value_or(SK_ColorWHITE); } -void DelegatedFrameHostClientQt::OnBeginFrame(base::TimeTicks frame_time) -{ - p->host()->ProgressFlingIfNeeded(frame_time); -} - void DelegatedFrameHostClientQt::OnFrameTokenChanged(uint32_t frame_token) { p->OnFrameTokenChangedForView(frame_token); diff --git a/src/core/delegated_frame_host_client_qt.h b/src/core/delegated_frame_host_client_qt.h index b5dc6eb59..1f5a9858b 100644 --- a/src/core/delegated_frame_host_client_qt.h +++ b/src/core/delegated_frame_host_client_qt.h @@ -57,7 +57,6 @@ public: ui::Layer *DelegatedFrameHostGetLayer() const override; bool DelegatedFrameHostIsVisible() const override; SkColor DelegatedFrameHostGetGutterColor() const override; - void OnBeginFrame(base::TimeTicks frame_time) override; void OnFrameTokenChanged(uint32_t frame_token) override; float GetDeviceScaleFactor() const override; void InvalidateLocalSurfaceIdOnEviction() override; diff --git a/src/core/devtools_frontend_qt.cpp b/src/core/devtools_frontend_qt.cpp index 8070d1c98..fb79a09e6 100644 --- a/src/core/devtools_frontend_qt.cpp +++ b/src/core/devtools_frontend_qt.cpp @@ -86,10 +86,21 @@ using namespace QtWebEngineCore; namespace { -std::unique_ptr BuildObjectForResponse(const net::HttpResponseHeaders *rh) +std::unique_ptr BuildObjectForResponse(const net::HttpResponseHeaders *rh, + bool success, + int net_error) { auto response = std::make_unique(); - response->SetInteger("statusCode", rh ? rh->response_code() : 200); + int responseCode = 200; + if (rh) { + responseCode = rh->response_code(); + } else if (!success) { + // In case of no headers, assume file:// URL and failed to load + responseCode = 404; + } + response->SetInteger("statusCode", responseCode); + response->SetInteger("netError", net_error); + response->SetString("netErrorName", net::ErrorToString(net_error)); auto headers = std::make_unique(); size_t iterator = 0; @@ -159,8 +170,7 @@ private: void OnComplete(bool success) override { - Q_UNUSED(success); - auto response = BuildObjectForResponse(response_headers_.get()); + auto response = BuildObjectForResponse(response_headers_.get(), success, loader_->NetError()); bindings_->SendMessageAck(request_id_, response.get()); bindings_->m_loaders.erase(bindings_->m_loaders.find(this)); } @@ -377,7 +387,7 @@ void DevToolsFrontendQt::HandleMessageFromDevToolsFrontend(const std::string &me std::string protocol_message; if (!params->GetString(0, &protocol_message)) return; - m_agentHost->DispatchProtocolMessage(this, protocol_message); + m_agentHost->DispatchProtocolMessage(this, base::as_bytes(base::make_span(protocol_message))); } else if (method == "loadCompleted") { web_contents()->GetMainFrame()->ExecuteJavaScript(base::ASCIIToUTF16("DevToolsAPI.setUseSoftMenu(true);"), base::NullCallback()); @@ -393,6 +403,7 @@ void DevToolsFrontendQt::HandleMessageFromDevToolsFrontend(const std::string &me if (!gurl.is_valid()) { base::DictionaryValue response; response.SetInteger("statusCode", 404); + response.SetBoolean("urlValid", false); SendMessageAck(request_id, &response); return; } @@ -426,7 +437,7 @@ void DevToolsFrontendQt::HandleMessageFromDevToolsFrontend(const std::string &me resource_request->url = gurl; // TODO(caseq): this preserves behavior of URLFetcher-based implementation. // We really need to pass proper first party origin from the front-end. - resource_request->site_for_cookies = gurl; + resource_request->site_for_cookies = net::SiteForCookies::FromUrl(gurl); resource_request->headers.AddHeadersFromString(headers); std::unique_ptr file_url_loader_factory; @@ -509,22 +520,23 @@ void DevToolsFrontendQt::HandleMessageFromDevToolsFrontend(const std::string &me SendMessageAck(request_id, nullptr); } -void DevToolsFrontendQt::DispatchProtocolMessage(content::DevToolsAgentHost *agentHost, const std::string &message) +void DevToolsFrontendQt::DispatchProtocolMessage(content::DevToolsAgentHost *agentHost, base::span message) { Q_UNUSED(agentHost); - if (message.length() < kMaxMessageChunkSize) { + base::StringPiece message_sp(reinterpret_cast(message.data()), message.size()); + if (message_sp.length() < kMaxMessageChunkSize) { std::string param; - base::EscapeJSONString(message, true, ¶m); + base::EscapeJSONString(message_sp, true, ¶m); std::string code = "DevToolsAPI.dispatchMessage(" + param + ");"; base::string16 javascript = base::UTF8ToUTF16(code); web_contents()->GetMainFrame()->ExecuteJavaScript(javascript, base::NullCallback()); return; } - size_t total_size = message.length(); - for (size_t pos = 0; pos < message.length(); pos += kMaxMessageChunkSize) { + size_t total_size = message_sp.length(); + for (size_t pos = 0; pos < message_sp.length(); pos += kMaxMessageChunkSize) { std::string param; - base::EscapeJSONString(message.substr(pos, kMaxMessageChunkSize), true, ¶m); + base::EscapeJSONString(message_sp.substr(pos, kMaxMessageChunkSize), true, ¶m); std::string code = "DevToolsAPI.dispatchMessageChunk(" + param + "," + std::to_string(pos ? 0 : total_size) + ");"; base::string16 javascript = base::UTF8ToUTF16(code); diff --git a/src/core/devtools_frontend_qt.h b/src/core/devtools_frontend_qt.h index fed2d47fc..9fefcb435 100644 --- a/src/core/devtools_frontend_qt.h +++ b/src/core/devtools_frontend_qt.h @@ -97,7 +97,7 @@ protected: // content::DevToolsAgentHostClient implementation. void AgentHostClosed(content::DevToolsAgentHost* agent_host) override; - void DispatchProtocolMessage(content::DevToolsAgentHost* agent_host, const std::string& message) override; + void DispatchProtocolMessage(content::DevToolsAgentHost* agent_host, base::span message) override; void SetPreferences(const std::string& json); virtual void HandleMessageFromDevToolsFrontend(const std::string& message); diff --git a/src/core/download_manager_delegate_qt.cpp b/src/core/download_manager_delegate_qt.cpp index ebf498fdf..b3c0c7c07 100644 --- a/src/core/download_manager_delegate_qt.cpp +++ b/src/core/download_manager_delegate_qt.cpp @@ -77,9 +77,9 @@ DownloadManagerDelegateQt::~DownloadManagerDelegateQt() { } -void DownloadManagerDelegateQt::GetNextId(const content::DownloadIdCallback& callback) +void DownloadManagerDelegateQt::GetNextId(content::DownloadIdCallback callback) { - callback.Run(m_currentId); + std::move(callback).Run(m_currentId); } download::DownloadItem *DownloadManagerDelegateQt::findDownloadById(quint32 downloadId) @@ -88,13 +88,14 @@ download::DownloadItem *DownloadManagerDelegateQt::findDownloadById(quint32 down return dlm->GetDownload(downloadId); } -void DownloadManagerDelegateQt::cancelDownload(const content::DownloadTargetCallback& callback) +void DownloadManagerDelegateQt::cancelDownload(content::DownloadTargetCallback callback) { - callback.Run(base::FilePath(), - download::DownloadItem::TARGET_DISPOSITION_PROMPT, - download::DownloadDangerType::DOWNLOAD_DANGER_TYPE_MAYBE_DANGEROUS_CONTENT, - base::FilePath(), - download::DownloadInterruptReason::DOWNLOAD_INTERRUPT_REASON_USER_CANCELED); + std::move(callback).Run(base::FilePath(), + download::DownloadItem::TARGET_DISPOSITION_PROMPT, + download::DownloadDangerType::DOWNLOAD_DANGER_TYPE_MAYBE_DANGEROUS_CONTENT, + download::DownloadItem::UNKNOWN, + base::FilePath(), + download::DownloadInterruptReason::DOWNLOAD_INTERRUPT_REASON_USER_CANCELED); } void DownloadManagerDelegateQt::cancelDownload(quint32 downloadId) @@ -121,8 +122,8 @@ void DownloadManagerDelegateQt::removeDownload(quint32 downloadId) download->Remove(); } -bool DownloadManagerDelegateQt::DetermineDownloadTarget(download::DownloadItem* item, - const content::DownloadTargetCallback& callback) +bool DownloadManagerDelegateQt::DetermineDownloadTarget(download::DownloadItem *item, + content::DownloadTargetCallback *callback) { m_currentId = item->GetId(); @@ -130,8 +131,11 @@ bool DownloadManagerDelegateQt::DetermineDownloadTarget(download::DownloadItem* // will already return that the file exists. Forced file paths seem to be only used for // store downloads and other special downloads, so they might never end up here anyway. if (!item->GetForcedFilePath().empty()) { - callback.Run(item->GetForcedFilePath(), download::DownloadItem::TARGET_DISPOSITION_PROMPT, - download::DownloadDangerType::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, item->GetForcedFilePath(), download::DownloadInterruptReason::DOWNLOAD_INTERRUPT_REASON_NONE); + std::move(*callback).Run(item->GetForcedFilePath(), download::DownloadItem::TARGET_DISPOSITION_PROMPT, + download::DownloadDangerType::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, + download::DownloadItem::VALIDATED, + item->GetForcedFilePath(), + download::DownloadInterruptReason::DOWNLOAD_INTERRUPT_REASON_NONE); return true; } @@ -212,18 +216,19 @@ bool DownloadManagerDelegateQt::DetermineDownloadTarget(download::DownloadItem* } if (!info.accepted) { - cancelDownload(callback); + cancelDownload(std::move(*callback)); return true; } base::FilePath filePathForCallback(toFilePathString(suggestedFile.absoluteFilePath())); - callback.Run(filePathForCallback, - download::DownloadItem::TARGET_DISPOSITION_OVERWRITE, - download::DownloadDangerType::DOWNLOAD_DANGER_TYPE_MAYBE_DANGEROUS_CONTENT, - filePathForCallback.AddExtension(toFilePathString("download")), - download::DownloadInterruptReason::DOWNLOAD_INTERRUPT_REASON_NONE); + std::move(*callback).Run(filePathForCallback, + download::DownloadItem::TARGET_DISPOSITION_OVERWRITE, + download::DownloadDangerType::DOWNLOAD_DANGER_TYPE_MAYBE_DANGEROUS_CONTENT, + download::DownloadItem::VALIDATED, + filePathForCallback.AddExtension(toFilePathString("download")), + download::DownloadInterruptReason::DOWNLOAD_INTERRUPT_REASON_NONE); } else - cancelDownload(callback); + cancelDownload(std::move(*callback)); return true; } diff --git a/src/core/download_manager_delegate_qt.h b/src/core/download_manager_delegate_qt.h index 0cdbd6ee3..7f4f33702 100644 --- a/src/core/download_manager_delegate_qt.h +++ b/src/core/download_manager_delegate_qt.h @@ -70,10 +70,10 @@ class DownloadManagerDelegateQt public: DownloadManagerDelegateQt(ProfileAdapter *profileAdapter); ~DownloadManagerDelegateQt(); - void GetNextId(const content::DownloadIdCallback& callback) override; + void GetNextId(content::DownloadIdCallback callback) override; - bool DetermineDownloadTarget(download::DownloadItem* item, - const content::DownloadTargetCallback& callback) override; + bool DetermineDownloadTarget(download::DownloadItem *item, + content::DownloadTargetCallback *callback) override; void GetSaveDir(content::BrowserContext* browser_context, base::FilePath* website_save_dir, @@ -96,7 +96,7 @@ public: void OnDownloadDestroyed(download::DownloadItem *download) override; private: - void cancelDownload(const content::DownloadTargetCallback& callback); + void cancelDownload(content::DownloadTargetCallback callback); download::DownloadItem *findDownloadById(quint32 downloadId); void savePackageDownloadCreated(download::DownloadItem *download); ProfileAdapter *m_profileAdapter; diff --git a/src/core/extensions/extension_system_qt.cpp b/src/core/extensions/extension_system_qt.cpp index a66051fbd..96532d9f6 100644 --- a/src/core/extensions/extension_system_qt.cpp +++ b/src/core/extensions/extension_system_qt.cpp @@ -91,10 +91,9 @@ #include "extensions/common/manifest_constants.h" #include "extensions/common/manifest_handlers/mime_types_handler.h" #include "extensions/common/manifest_url_handlers.h" -#include "ui/base/resource/resource_bundle.h" -#include "chrome/grit/component_extension_resources.h" -#include "chrome/grit/browser_resources.h" #include "net/base/mime_util.h" +#include "qtwebengine/grit/qt_webengine_resources.h" +#include "ui/base/resource/resource_bundle.h" using content::BrowserThread; @@ -405,7 +404,7 @@ void ExtensionSystemQt::InstallUpdate(const std::string &extension_id, #endif void ExtensionSystemQt::RegisterExtensionWithRequestContexts(const Extension *extension, - const base::Closure &callback) + base::OnceClosure callback) { base::Time install_time = base::Time::Now(); @@ -417,7 +416,7 @@ void ExtensionSystemQt::RegisterExtensionWithRequestContexts(const Extension *ex base::Bind(&InfoMap::AddExtension, info_map(), base::RetainedRef(extension), install_time, incognito_enabled, notifications_disabled), - callback); + std::move(callback)); } void ExtensionSystemQt::UnregisterExtensionWithRequestContexts(const std::string &extension_id, diff --git a/src/core/extensions/extension_system_qt.h b/src/core/extensions/extension_system_qt.h index 04bffb74d..e3762e8a6 100644 --- a/src/core/extensions/extension_system_qt.h +++ b/src/core/extensions/extension_system_qt.h @@ -98,7 +98,7 @@ public: AppSorting *app_sorting() override; void RegisterExtensionWithRequestContexts(const Extension *extension, - const base::Closure &callback) override; + base::OnceClosure callback) override; void UnregisterExtensionWithRequestContexts(const std::string &extension_id, const UnloadedExtensionReason reason) override; diff --git a/src/core/extensions/extensions_browser_client_qt.cpp b/src/core/extensions/extensions_browser_client_qt.cpp index 1b2bb51f4..08ce07da8 100644 --- a/src/core/extensions/extensions_browser_client_qt.cpp +++ b/src/core/extensions/extensions_browser_client_qt.cpp @@ -64,14 +64,12 @@ #include "extensions/browser/extension_host_delegate.h" #include "extensions/browser/extension_protocols.h" #include "extensions/browser/extensions_browser_interface_binders.h" -#include "extensions/browser/mojo/interface_registration.h" #include "extensions/browser/url_request_util.h" #include "extensions/common/file_util.h" -#include "mojo/public/cpp/bindings/strong_binding.h" #include "net/base/completion_once_callback.h" #include "net/base/mime_util.h" -#include "services/network/public/cpp/resource_response.h" #include "services/network/public/mojom/url_loader.mojom.h" +#include "services/network/public/mojom/url_response_head.mojom.h" #include "third_party/zlib/google/compression_utils.h" #include "ui/base/resource/resource_bundle.h" @@ -169,7 +167,7 @@ public: void ResumeReadingBodyFromNet() override {} private: - ResourceBundleFileLoader(const std::string &content_security_policy, bool send_cors_header) : binding_(this) + ResourceBundleFileLoader(const std::string &content_security_policy, bool send_cors_header) { response_headers_ = extensions::BuildHttpHeaders(content_security_policy, send_cors_header, base::Time()); } @@ -181,11 +179,11 @@ private: const base::FilePath &filename, int resource_id) { client_.Bind(std::move(client_info_remote)); - binding_.Bind(std::move(loader)); - binding_.set_connection_error_handler( - base::BindOnce(&ResourceBundleFileLoader::OnBindingError, base::Unretained(this))); - client_.set_connection_error_handler( - base::BindOnce(&ResourceBundleFileLoader::OnConnectionError, base::Unretained(this))); + receiver_.Bind(std::move(loader)); + receiver_.set_disconnect_handler(base::BindOnce( + &ResourceBundleFileLoader::OnReceiverError, base::Unretained(this))); + client_.set_disconnect_handler(base::BindOnce( + &ResourceBundleFileLoader::OnMojoDisconnect, base::Unretained(this))); auto data = GetResource(resource_id, request.url.host()); std::string *read_mime_type = new std::string; @@ -198,12 +196,12 @@ private: void OnMimeTypeRead(scoped_refptr data, std::string *read_mime_type, bool read_result) { - network::ResourceResponseHead head; - head.request_start = base::TimeTicks::Now(); - head.response_start = base::TimeTicks::Now(); - head.content_length = data->size(); - head.mime_type = *read_mime_type; - DetermineCharset(head.mime_type, data.get(), &head.charset); + auto head = network::mojom::URLResponseHead::New(); + head->request_start = base::TimeTicks::Now(); + head->response_start = base::TimeTicks::Now(); + head->content_length = data->size(); + head->mime_type = *read_mime_type; + DetermineCharset(head->mime_type, data.get(), &head->charset); mojo::DataPipe pipe(data->size()); if (!pipe.consumer_handle.is_valid()) { client_->OnComplete(network::URLLoaderCompletionStatus(net::ERR_FAILED)); @@ -211,14 +209,14 @@ private: MaybeDeleteSelf(); return; } - head.headers = response_headers_; - head.headers->AddHeader(base::StringPrintf("%s: %s", net::HttpRequestHeaders::kContentLength, - base::NumberToString(head.content_length).c_str())); - if (!head.mime_type.empty()) { - head.headers->AddHeader( - base::StringPrintf("%s: %s", net::HttpRequestHeaders::kContentType, head.mime_type.c_str())); + head->headers = response_headers_; + head->headers->AddHeader(base::StringPrintf("%s: %s", net::HttpRequestHeaders::kContentLength, + base::NumberToString(head->content_length).c_str())); + if (!head->mime_type.empty()) { + head->headers->AddHeader( + base::StringPrintf("%s: %s", net::HttpRequestHeaders::kContentType, head->mime_type.c_str())); } - client_->OnReceiveResponse(head); + client_->OnReceiveResponse(std::move(head)); client_->OnStartLoadingResponseBody(std::move(pipe.consumer_handle)); uint32_t write_size = data->size(); @@ -226,21 +224,21 @@ private: OnFileWritten(result); } - void OnConnectionError() + void OnMojoDisconnect() { client_.reset(); MaybeDeleteSelf(); } - void OnBindingError() + void OnReceiverError() { - binding_.Close(); + receiver_.reset(); MaybeDeleteSelf(); } void MaybeDeleteSelf() { - if (!binding_.is_bound() && !client_.is_bound()) + if (!receiver_.is_bound() && !client_.is_bound()) delete this; } @@ -256,10 +254,10 @@ private: MaybeDeleteSelf(); } - mojo::Binding binding_; - network::mojom::URLLoaderClientPtr client_; + mojo::Receiver receiver_{this}; + mojo::Remote client_; scoped_refptr response_headers_; - base::WeakPtrFactory weak_factory_{ this }; + base::WeakPtrFactory weak_factory_{this}; DISALLOW_COPY_AND_ASSIGN(ResourceBundleFileLoader); }; @@ -449,13 +447,6 @@ ExtensionSystemProvider *ExtensionsBrowserClientQt::GetExtensionSystemFactory() return ExtensionSystemFactoryQt::GetInstance(); } -void ExtensionsBrowserClientQt::RegisterExtensionInterfaces(service_manager::BinderRegistryWithArgs *registry, - content::RenderFrameHost *render_frame_host, - const Extension *extension) const -{ - RegisterInterfacesForExtension(registry, render_frame_host, extension); -} - void ExtensionsBrowserClientQt::RegisterBrowserInterfaceBindersForFrame( service_manager::BinderMapWithContext *binder_map, content::RenderFrameHost* render_frame_host, diff --git a/src/core/extensions/extensions_browser_client_qt.h b/src/core/extensions/extensions_browser_client_qt.h index 97da83240..f57165fcf 100644 --- a/src/core/extensions/extensions_browser_client_qt.h +++ b/src/core/extensions/extensions_browser_client_qt.h @@ -47,6 +47,8 @@ #include "base/compiler_specific.h" #include "extensions/browser/extensions_browser_client.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" namespace extensions { @@ -94,9 +96,6 @@ public: void RegisterBrowserInterfaceBindersForFrame(service_manager::BinderMapWithContext *, content::RenderFrameHost *, const extensions::Extension *) const override; std::unique_ptr CreateRuntimeAPIDelegate(content::BrowserContext *context) const override; - void RegisterExtensionInterfaces(service_manager::BinderRegistryWithArgs *registry, - content::RenderFrameHost *render_frame_host, - const Extension *extension) const override; const ComponentExtensionResourceManager * GetComponentExtensionResourceManager() override; void BroadcastEventToRenderers(events::HistogramValue histogram_value, diff --git a/src/core/net/custom_url_loader_factory.cpp b/src/core/net/custom_url_loader_factory.cpp index e5f580536..709e4451b 100644 --- a/src/core/net/custom_url_loader_factory.cpp +++ b/src/core/net/custom_url_loader_factory.cpp @@ -51,9 +51,10 @@ #include "net/base/net_errors.h" #include "net/http/http_status_code.h" #include "net/http/http_util.h" -#include "services/network/public/cpp/resource_response.h" +#include "services/network/public/cpp/cors/cors.h" #include "services/network/public/mojom/url_loader.mojom.h" #include "services/network/public/mojom/url_loader_factory.mojom.h" +#include "services/network/public/mojom/url_response_head.mojom.h" #include "api/qwebengineurlscheme.h" #include "net/url_request_custom_job_proxy.h" @@ -140,7 +141,19 @@ private: void Start() { DCHECK(m_taskRunner->RunsTasksInCurrentSequence()); - m_head.request_start = base::TimeTicks::Now(); + + if (network::cors::IsCorsEnabledRequestMode(m_request.mode)) { + // CORS mode requires a valid request_initiator. + if (!m_request.request_initiator) + return CompleteWithFailure(net::ERR_INVALID_ARGUMENT); + + // Custom schemes are not covered by CorsURLLoader, so we need to reject CORS requests manually. + if (!m_corsEnabled && !m_request.request_initiator->IsSameOriginWith(url::Origin::Create(m_request.url))) + return CompleteWithFailure(network::CorsErrorStatus(network::mojom::CorsError::kCorsDisabledScheme)); + } + + m_head = network::mojom::URLResponseHead::New(); + m_head->request_start = base::TimeTicks::Now(); if (!m_pipe.consumer_handle.is_valid()) return CompleteWithFailure(net::ERR_FAILED); @@ -162,6 +175,13 @@ private: m_request.url, m_request.method, m_request.request_initiator, std::move(headers))); } + void CompleteWithFailure(network::CorsErrorStatus cors_error) + { + DCHECK(m_taskRunner->RunsTasksInCurrentSequence()); + m_client->OnComplete(network::URLLoaderCompletionStatus(cors_error)); + ClearProxyAndClient(false); + } + void CompleteWithFailure(net::Error net_error) { DCHECK(m_taskRunner->RunsTasksInCurrentSequence()); @@ -184,7 +204,7 @@ private: DCHECK(m_taskRunner->RunsTasksInCurrentSequence()); if (result == MOJO_RESULT_OK) { network::URLLoaderCompletionStatus status(net::OK); - status.encoded_data_length = m_totalBytesRead + m_head.headers->raw_headers().length(); + status.encoded_data_length = m_totalBytesRead + m_headerBytesRead; status.encoded_body_length = m_totalBytesRead; status.decoded_body_length = m_totalBytesRead; m_client->OnComplete(status); @@ -219,17 +239,17 @@ private: CompleteWithFailure(net::ERR_REQUEST_RANGE_NOT_SATISFIABLE); } else { m_maxBytesToRead = m_byteRange.last_byte_position() - m_byteRange.first_byte_position() + 1; - m_head.content_length = m_maxBytesToRead; + m_head->content_length = m_maxBytesToRead; } } else { - m_head.content_length = size; + m_head->content_length = size; } } void notifyHeadersComplete() override { DCHECK(m_taskRunner->RunsTasksInCurrentSequence()); DCHECK(!m_error); - m_head.response_start = base::TimeTicks::Now(); + m_head->response_start = base::TimeTicks::Now(); std::string headers; if (!m_redirect.is_empty()) { @@ -262,11 +282,11 @@ private: headers += "Access-Control-Allow-Credentials: true\n"; } } - m_head.headers = base::MakeRefCounted(net::HttpUtil::AssembleRawHeaders(headers)); - m_head.encoded_data_length = m_head.headers->raw_headers().length(); + m_head->headers = base::MakeRefCounted(net::HttpUtil::AssembleRawHeaders(headers)); + m_head->encoded_data_length = m_head->headers->raw_headers().length(); if (!m_redirect.is_empty()) { - m_head.content_length = m_head.encoded_body_length = -1; + m_head->content_length = m_head->encoded_body_length = -1; net::URLRequest::FirstPartyURLPolicy first_party_url_policy = m_request.update_first_party_url_on_redirect ? net::URLRequest::UPDATE_FIRST_PARTY_URL_ON_REDIRECT : net::URLRequest::NEVER_CHANGE_FIRST_PARTY_URL; @@ -276,15 +296,18 @@ private: first_party_url_policy, m_request.referrer_policy, m_request.referrer.spec(), net::HTTP_SEE_OTHER, m_redirect, base::nullopt, false /*insecure_scheme_was_upgraded*/); - m_client->OnReceiveRedirect(redirectInfo, m_head); + m_client->OnReceiveRedirect(redirectInfo, std::move(m_head)); + m_head = nullptr; // ### should m_request be updated with RedirectInfo? (see FollowRedirect) return; } DCHECK(m_device); - m_head.mime_type = m_mimeType; - m_head.charset = m_charset; - m_client->OnReceiveResponse(m_head); + m_head->mime_type = m_mimeType; + m_head->charset = m_charset; + m_headerBytesRead = m_head->headers->raw_headers().length(); + m_client->OnReceiveResponse(std::move(m_head)); m_client->OnStartLoadingResponseBody(std::move(m_pipe.consumer_handle)); + m_head = nullptr; if (readAvailableData()) // May delete this return; @@ -309,7 +332,7 @@ private: void notifyStartFailure(int error) override { DCHECK(m_taskRunner->RunsTasksInCurrentSequence()); - m_head.response_start = base::TimeTicks::Now(); + m_head->response_start = base::TimeTicks::Now(); std::string headers; switch (error) { case net::ERR_INVALID_URL: @@ -331,10 +354,10 @@ private: headers = "HTTP/1.1 500 Internal Error\n"; break; } - m_head.headers = base::MakeRefCounted(net::HttpUtil::AssembleRawHeaders(headers)); - m_head.encoded_data_length = m_head.headers->raw_headers().length(); - m_head.content_length = m_head.encoded_body_length = -1; - m_client->OnReceiveResponse(m_head); + m_head->headers = base::MakeRefCounted(net::HttpUtil::AssembleRawHeaders(headers)); + m_head->encoded_data_length = m_head->headers->raw_headers().length(); + m_head->content_length = m_head->encoded_body_length = -1; + m_client->OnReceiveResponse(std::move(m_head)); CompleteWithFailure(net::Error(error)); } void notifyReadyRead() override @@ -404,7 +427,7 @@ private: } return false; } - base::TaskRunner *taskRunner() override + base::SequencedTaskRunner *taskRunner() override { DCHECK(m_taskRunner->RunsTasksInCurrentSequence()); return m_taskRunner.get(); @@ -422,7 +445,8 @@ private: int64_t m_totalSize = 0; int64_t m_maxBytesToRead = -1; network::ResourceRequest m_request; - network::ResourceResponseHead m_head; + network::mojom::URLResponseHeadPtr m_head; + qint64 m_headerBytesRead = 0; qint64 m_totalBytesRead = 0; bool m_corsEnabled; diff --git a/src/core/net/proxying_restricted_cookie_manager_qt.cpp b/src/core/net/proxying_restricted_cookie_manager_qt.cpp index 331b55e62..b0b46c817 100644 --- a/src/core/net/proxying_restricted_cookie_manager_qt.cpp +++ b/src/core/net/proxying_restricted_cookie_manager_qt.cpp @@ -116,7 +116,7 @@ ProxyingRestrictedCookieManagerQt::~ProxyingRestrictedCookieManagerQt() } void ProxyingRestrictedCookieManagerQt::GetAllForUrl(const GURL &url, - const GURL &site_for_cookies, + const net::SiteForCookies &site_for_cookies, const url::Origin &top_frame_origin, network::mojom::CookieManagerGetOptionsPtr options, GetAllForUrlCallback callback) @@ -132,7 +132,8 @@ void ProxyingRestrictedCookieManagerQt::GetAllForUrl(const GURL &url, void ProxyingRestrictedCookieManagerQt::SetCanonicalCookie(const net::CanonicalCookie &cookie, const GURL &url, - const GURL &site_for_cookies, const url::Origin &top_frame_origin, + const net::SiteForCookies &site_for_cookies, + const url::Origin &top_frame_origin, SetCanonicalCookieCallback callback) { DCHECK_CURRENTLY_ON(content::BrowserThread::IO); @@ -145,7 +146,7 @@ void ProxyingRestrictedCookieManagerQt::SetCanonicalCookie(const net::CanonicalC } void ProxyingRestrictedCookieManagerQt::AddChangeListener(const GURL &url, - const GURL &site_for_cookies, + const net::SiteForCookies &site_for_cookies, const url::Origin &top_frame_origin, mojo::PendingRemote listener, AddChangeListenerCallback callback) @@ -155,7 +156,7 @@ void ProxyingRestrictedCookieManagerQt::AddChangeListener(const GURL &url, } void ProxyingRestrictedCookieManagerQt::SetCookieFromString(const GURL &url, - const GURL &site_for_cookies, + const net::SiteForCookies &site_for_cookies, const url::Origin &top_frame_origin, const std::string &cookie, SetCookieFromStringCallback callback) @@ -170,7 +171,7 @@ void ProxyingRestrictedCookieManagerQt::SetCookieFromString(const GURL &url, } void ProxyingRestrictedCookieManagerQt::GetCookiesString(const GURL &url, - const GURL &site_for_cookies, + const net::SiteForCookies &site_for_cookies, const url::Origin &top_frame_origin, GetCookiesStringCallback callback) { @@ -184,7 +185,7 @@ void ProxyingRestrictedCookieManagerQt::GetCookiesString(const GURL &url, } void ProxyingRestrictedCookieManagerQt::CookiesEnabledFor(const GURL &url, - const GURL &site_for_cookies, + const net::SiteForCookies &site_for_cookies, const url::Origin & /*top_frame_origin*/, CookiesEnabledForCallback callback) { @@ -192,11 +193,11 @@ void ProxyingRestrictedCookieManagerQt::CookiesEnabledFor(const GURL &url, std::move(callback).Run(allowCookies(url, site_for_cookies)); } -bool ProxyingRestrictedCookieManagerQt::allowCookies(const GURL &url, const GURL &site_for_cookies) const +bool ProxyingRestrictedCookieManagerQt::allowCookies(const GURL &url, const net::SiteForCookies &site_for_cookies) const { if (!m_profileIoData) return false; - return m_profileIoData->canGetCookies(toQt(site_for_cookies), toQt(url)); + return m_profileIoData->canGetCookies(toQt(site_for_cookies.RepresentativeUrl()), toQt(url)); } } // namespace QtWebEngineCore diff --git a/src/core/net/proxying_restricted_cookie_manager_qt.h b/src/core/net/proxying_restricted_cookie_manager_qt.h index b682075ed..3d4765b3b 100644 --- a/src/core/net/proxying_restricted_cookie_manager_qt.h +++ b/src/core/net/proxying_restricted_cookie_manager_qt.h @@ -65,36 +65,36 @@ public: // network::mojom::RestrictedCookieManager interface: void GetAllForUrl(const GURL &url, - const GURL &site_for_cookies, + const net::SiteForCookies &site_for_cookies, const url::Origin &top_frame_origin, network::mojom::CookieManagerGetOptionsPtr options, GetAllForUrlCallback callback) override; void SetCanonicalCookie(const net::CanonicalCookie& cookie, const GURL &url, - const GURL &site_for_cookies, + const net::SiteForCookies &site_for_cookies, const url::Origin &top_frame_origin, SetCanonicalCookieCallback callback) override; void AddChangeListener(const GURL &url, - const GURL &site_for_cookies, + const net::SiteForCookies &site_for_cookies, const url::Origin &top_frame_origin, mojo::PendingRemote listener, AddChangeListenerCallback callback) override; void SetCookieFromString(const GURL &url, - const GURL &site_for_cookies, + const net::SiteForCookies &site_for_cookies, const url::Origin &top_frame_origin, const std::string &cookie, SetCookieFromStringCallback callback) override; void GetCookiesString(const GURL &url, - const GURL &site_for_cookies, + const net::SiteForCookies &site_for_cookies, const url::Origin &top_frame_origin, GetCookiesStringCallback callback) override; void CookiesEnabledFor(const GURL &url, - const GURL &site_for_cookies, + const net::SiteForCookies &site_for_cookies, const url::Origin &top_frame_origin, CookiesEnabledForCallback callback) override; // Internal: - bool allowCookies(const GURL &url, const GURL &site_for_cookies) const; + bool allowCookies(const GURL &url, const net::SiteForCookies &site_for_cookies) const; private: ProxyingRestrictedCookieManagerQt(base::WeakPtr profileIoData, diff --git a/src/core/net/proxying_url_loader_factory_qt.cpp b/src/core/net/proxying_url_loader_factory_qt.cpp index 8e084a40b..cf0b0fb7e 100644 --- a/src/core/net/proxying_url_loader_factory_qt.cpp +++ b/src/core/net/proxying_url_loader_factory_qt.cpp @@ -45,7 +45,6 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/stringprintf.h" #include "base/task/post_task.h" -#include "components/safe_browsing/common/safebrowsing_constants.h" #include "content/browser/web_contents/web_contents_impl.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" @@ -151,7 +150,7 @@ private: // error didn't occur. int error_status_ = net::OK; network::ResourceRequest request_; - network::ResourceResponseHead current_response_; + network::mojom::URLResponseHeadPtr current_response_; const net::MutableNetworkTrafficAnnotationTag traffic_annotation_; @@ -189,6 +188,7 @@ InterceptedRequest::InterceptedRequest(int process_id, uint64_t request_id, int3 , target_factory_(std::move(target_factory)) , weak_factory_(this) { + current_response_ = network::mojom::URLResponseHead::New(); // If there is a client error, clean up the request. target_client_.set_disconnect_handler( base::BindOnce(&InterceptedRequest::OnURLLoaderClientError, weak_factory_.GetWeakPtr())); @@ -219,12 +219,12 @@ void InterceptedRequest::Restart() webContents = content::WebContents::FromFrameTreeNodeId(request_.render_frame_id); } - GURL top_document_url = webContents ? webContents->GetLastCommittedURL() : GURL(); + GURL top_document_url = webContents ? webContents->GetVisibleURL() : GURL(); QUrl firstPartyUrl; if (!top_document_url.is_empty()) firstPartyUrl = toQt(top_document_url); else - firstPartyUrl = toQt(request_.site_for_cookies); // m_topDocumentUrl can be empty for the main-frame. + firstPartyUrl = toQt(request_.site_for_cookies.RepresentativeUrl()); // m_topDocumentUrl can be empty for the main-frame. QWebEngineUrlRequestInfoPrivate *infoPrivate = new QWebEngineUrlRequestInfoPrivate(toQt(resourceType), toQt(navigationType), originalUrl, firstPartyUrl, @@ -283,7 +283,7 @@ void InterceptedRequest::ContinueAfterIntercept() false /*insecure_scheme_was_upgraded*/); // FIXME: Should probably create a new header. - current_response_.encoded_data_length = 0; + current_response_->encoded_data_length = 0; request_.method = redirectInfo.new_method; request_.url = redirectInfo.new_url; request_.site_for_cookies = redirectInfo.new_site_for_cookies; @@ -291,7 +291,7 @@ void InterceptedRequest::ContinueAfterIntercept() request_.referrer_policy = redirectInfo.new_referrer_policy; if (request_.method == net::HttpRequestHeaders::kGetMethod) request_.request_body = nullptr; - target_client_->OnReceiveRedirect(redirectInfo, current_response_); + target_client_->OnReceiveRedirect(redirectInfo, std::move(current_response_)); return; } @@ -319,7 +319,7 @@ void InterceptedRequest::ContinueAfterIntercept() void InterceptedRequest::OnReceiveResponse(network::mojom::URLResponseHeadPtr head) { - current_response_ = head; + current_response_ = head.Clone(); target_client_->OnReceiveResponse(std::move(head)); } @@ -328,7 +328,7 @@ void InterceptedRequest::OnReceiveRedirect(const net::RedirectInfo &redirect_inf { // TODO(timvolodine): handle redirect override. request_was_redirected_ = true; - current_response_ = head; + current_response_ = head.Clone(); target_client_->OnReceiveRedirect(redirect_info, std::move(head)); request_.url = redirect_info.new_url; request_.method = redirect_info.new_method; diff --git a/src/core/net/proxying_url_loader_factory_qt.h b/src/core/net/proxying_url_loader_factory_qt.h index 3d77856cc..e1bcc276c 100644 --- a/src/core/net/proxying_url_loader_factory_qt.h +++ b/src/core/net/proxying_url_loader_factory_qt.h @@ -49,7 +49,6 @@ #include "mojo/public/cpp/bindings/receiver_set.h" #include "net/traffic_annotation/network_traffic_annotation.h" #include "services/network/public/cpp/resource_request.h" -#include "services/network/public/cpp/resource_response.h" #include "services/network/public/mojom/url_loader.mojom.h" #include "services/network/public/mojom/url_loader_factory.mojom.h" #include "url/gurl.h" diff --git a/src/core/net/ssl_host_state_delegate_qt.cpp b/src/core/net/ssl_host_state_delegate_qt.cpp index 3f3f95c83..3390c092a 100644 --- a/src/core/net/ssl_host_state_delegate_qt.cpp +++ b/src/core/net/ssl_host_state_delegate_qt.cpp @@ -77,7 +77,7 @@ SSLHostStateDelegateQt::SSLHostStateDelegateQt() {} SSLHostStateDelegateQt::~SSLHostStateDelegateQt() {} -void SSLHostStateDelegateQt::AllowCert(const std::string &host, const net::X509Certificate &cert, int error) +void SSLHostStateDelegateQt::AllowCert(const std::string &host, const net::X509Certificate &cert, int error, content::WebContents *) { m_certPolicyforHost[host].Allow(cert, error); } @@ -105,7 +105,7 @@ void SSLHostStateDelegateQt::Clear(base::RepeatingCallback host_filter) override; - CertJudgment QueryPolicy(const std::string &host, const net::X509Certificate &cert, int error) override; + CertJudgment QueryPolicy(const std::string &host, const net::X509Certificate &cert, int error, content::WebContents *web_contents) override; void HostRanInsecureContent(const std::string &host, int child_id, InsecureContentType content_type) override; bool DidHostRunInsecureContent(const std::string &host, int child_id, InsecureContentType content_type) override; void RevokeUserAllowExceptions(const std::string &host) override; - bool HasAllowException(const std::string &host) override; + bool HasAllowException(const std::string &host, content::WebContents *web_contents) override; private: std::map m_certPolicyforHost; diff --git a/src/core/net/url_request_custom_job_proxy.h b/src/core/net/url_request_custom_job_proxy.h index db38083dd..b14322f91 100644 --- a/src/core/net/url_request_custom_job_proxy.h +++ b/src/core/net/url_request_custom_job_proxy.h @@ -42,7 +42,7 @@ #include "base/memory/weak_ptr.h" #include "base/optional.h" -#include "base/task_runner.h" +#include "base/sequenced_task_runner.h" #include "url/gurl.h" #include "url/origin.h" #include @@ -75,7 +75,7 @@ public: virtual void notifyAborted() = 0; virtual void notifyStartFailure(int) = 0; virtual void notifyReadyRead() = 0; - virtual base::TaskRunner *taskRunner() = 0; + virtual base::SequencedTaskRunner *taskRunner() = 0; }; URLRequestCustomJobProxy(Client *client, @@ -101,7 +101,7 @@ public: std::string m_scheme; URLRequestCustomJobDelegate *m_delegate; QPointer m_profileAdapter; - scoped_refptr m_ioTaskRunner; + scoped_refptr m_ioTaskRunner; }; } // namespace QtWebEngineCore diff --git a/src/core/ozone/gl_ozone_glx_qt.cpp b/src/core/ozone/gl_ozone_glx_qt.cpp index 0c54299ba..60b970209 100644 --- a/src/core/ozone/gl_ozone_glx_qt.cpp +++ b/src/core/ozone/gl_ozone_glx_qt.cpp @@ -95,12 +95,6 @@ bool GLOzoneGLXQt::InitializeStaticGLBindings( return true; } -void GLOzoneGLXQt::InitializeLogGLBindings() -{ - gl::InitializeLogGLBindingsGL(); - gl::InitializeLogGLBindingsGLX(); -} - void GLOzoneGLXQt::SetDisabledExtensionsPlatform( const std::string& disabled_extensions) { gl::SetDisabledExtensionsGLX(disabled_extensions); diff --git a/src/core/ozone/gl_ozone_glx_qt.h b/src/core/ozone/gl_ozone_glx_qt.h index 8f85ea23b..7825cba35 100644 --- a/src/core/ozone/gl_ozone_glx_qt.h +++ b/src/core/ozone/gl_ozone_glx_qt.h @@ -54,7 +54,6 @@ public: bool InitializeGLOneOffPlatform() override; bool InitializeStaticGLBindings(gl::GLImplementation implementation) override; - void InitializeLogGLBindings() override; bool InitializeExtensionSettingsOneOffPlatform() override; void ShutdownGL() override; void SetDisabledExtensionsPlatform( diff --git a/src/core/ozone/gl_surface_egl_qt.cpp b/src/core/ozone/gl_surface_egl_qt.cpp index ac0e79b67..31126eab9 100644 --- a/src/core/ozone/gl_surface_egl_qt.cpp +++ b/src/core/ozone/gl_surface_egl_qt.cpp @@ -252,7 +252,7 @@ void GLSurfaceEGLQt::Destroy() } bool GLSurfaceEGLQt::Resize(const gfx::Size& size, float scale_factor, - ColorSpace color_space, bool has_alpha) + const gfx::ColorSpace &color_space, bool has_alpha) { if (size == m_size) return true; @@ -303,7 +303,7 @@ bool GLSurfacelessQtEGL::IsSurfaceless() const } bool GLSurfacelessQtEGL::Resize(const gfx::Size& size, float scale_factor, - ColorSpace color_space, bool has_alpha) + const gfx::ColorSpace &color_space, bool has_alpha) { m_size = size; return true; diff --git a/src/core/ozone/gl_surface_egl_qt.h b/src/core/ozone/gl_surface_egl_qt.h index ecc2327b3..dff25e433 100644 --- a/src/core/ozone/gl_surface_egl_qt.h +++ b/src/core/ozone/gl_surface_egl_qt.h @@ -57,7 +57,8 @@ public: void Destroy() override; void* GetHandle() override; bool Resize(const gfx::Size& size, float scale_factor, - ColorSpace color_space, bool has_alpha) override; + const gfx::ColorSpace &color_space, bool has_alpha) override; + protected: ~GLSurfaceEGLQt(); @@ -85,7 +86,7 @@ public: void Destroy() override; bool IsSurfaceless() const override; bool Resize(const gfx::Size& size, float scale_factor, - ColorSpace color_space, bool has_alpha) override; + const gfx::ColorSpace &color_space, bool has_alpha) override; EGLSurface GetHandle() override; void* GetShareHandle() override; diff --git a/src/core/ozone/ozone_platform_qt.cpp b/src/core/ozone/ozone_platform_qt.cpp index fb5af18c5..3674ccfe6 100644 --- a/src/core/ozone/ozone_platform_qt.cpp +++ b/src/core/ozone/ozone_platform_qt.cpp @@ -73,7 +73,7 @@ public: ui::InputController* GetInputController() override; std::unique_ptr CreateSystemInputInjector() override; ui::OverlayManagerOzone* GetOverlayManager() override; - std::unique_ptr CreateInputMethod(internal::InputMethodDelegate *delegate) override; + std::unique_ptr CreateInputMethod(internal::InputMethodDelegate *delegate, gfx::AcceleratedWidget widget) override; std::unique_ptr CreateScreen() override { return nullptr; } private: void InitializeUI(const ui::OzonePlatform::InitParams &) override; @@ -148,7 +148,7 @@ void OzonePlatformQt::InitializeGPU(const ui::OzonePlatform::InitParams &) surface_factory_ozone_.reset(new QtWebEngineCore::SurfaceFactoryQt()); } -std::unique_ptr OzonePlatformQt::CreateInputMethod(internal::InputMethodDelegate *) +std::unique_ptr OzonePlatformQt::CreateInputMethod(internal::InputMethodDelegate *, gfx::AcceleratedWidget) { NOTREACHED(); return nullptr; diff --git a/src/core/permission_manager_qt.cpp b/src/core/permission_manager_qt.cpp index ece74b123..5c33ca702 100644 --- a/src/core/permission_manager_qt.cpp +++ b/src/core/permission_manager_qt.cpp @@ -61,9 +61,9 @@ static ProfileAdapter::PermissionType toQt(content::PermissionType type) return ProfileAdapter::AudioCapturePermission; case content::PermissionType::VIDEO_CAPTURE: return ProfileAdapter::VideoCapturePermission; - case content::PermissionType::CLIPBOARD_READ: + case content::PermissionType::CLIPBOARD_READ_WRITE: return ProfileAdapter::ClipboardRead; - case content::PermissionType::CLIPBOARD_WRITE: + case content::PermissionType::CLIPBOARD_SANITIZED_WRITE: return ProfileAdapter::ClipboardWrite; case content::PermissionType::NOTIFICATIONS: return ProfileAdapter::NotificationPermission; @@ -83,8 +83,10 @@ static ProfileAdapter::PermissionType toQt(content::PermissionType type) case content::PermissionType::WAKE_LOCK_SCREEN: case content::PermissionType::WAKE_LOCK_SYSTEM: case content::PermissionType::NFC: + case content::PermissionType::AR: + case content::PermissionType::VR: case content::PermissionType::NUM: - NOTIMPLEMENTED() << "Unsupported permission type: " << static_cast(type); + LOG(INFO) << "Unsupported permission type: " << static_cast(type); break; } return ProfileAdapter::UnsupportedPermission; @@ -302,13 +304,13 @@ blink::mojom::PermissionStatus PermissionManagerQt::GetPermissionStatusForFrame( content::RenderFrameHost *render_frame_host, const GURL &requesting_origin) { - if (permission == content::PermissionType::CLIPBOARD_READ || - permission == content::PermissionType::CLIPBOARD_WRITE) { + if (permission == content::PermissionType::CLIPBOARD_READ_WRITE || + permission == content::PermissionType::CLIPBOARD_SANITIZED_WRITE) { WebContentsDelegateQt *delegate = static_cast( content::WebContents::FromRenderFrameHost(render_frame_host)->GetDelegate()); if (!delegate->webEngineSettings()->testAttribute(WebEngineSettings::JavascriptCanAccessClipboard)) return blink::mojom::PermissionStatus::DENIED; - if (permission == content::PermissionType::CLIPBOARD_READ && + if (permission == content::PermissionType::CLIPBOARD_READ_WRITE && !delegate->webEngineSettings()->testAttribute(WebEngineSettings::JavascriptCanPaste)) return blink::mojom::PermissionStatus::DENIED; return blink::mojom::PermissionStatus::GRANTED; diff --git a/src/core/printing/print_view_manager_qt.cpp b/src/core/printing/print_view_manager_qt.cpp index 79e92fd6a..3a42f2c41 100644 --- a/src/core/printing/print_view_manager_qt.cpp +++ b/src/core/printing/print_view_manager_qt.cpp @@ -347,10 +347,11 @@ void PrintViewManagerQt::resetPdfState() // IPC handlers void PrintViewManagerQt::OnRequestPrintPreview( - const PrintHostMsg_RequestPrintPreview_Params &/*params*/) + const PrintHostMsg_RequestPrintPreview_Params & /*params*/) { - m_printPreviewRfh->Send(new PrintMsg_PrintPreview(m_printPreviewRfh->GetRoutingID(), - *m_printSettings)); + mojo::AssociatedRemote printRenderFrame; + m_printPreviewRfh->GetRemoteAssociatedInterfaces()->GetInterface(&printRenderFrame); + printRenderFrame->PrintPreview(m_printSettings->Clone()); PrintPreviewDone(); } diff --git a/src/core/qtwebengine_resources.gni b/src/core/qtwebengine_resources.gni index 4f6c51d81..38e824f5e 100644 --- a/src/core/qtwebengine_resources.gni +++ b/src/core/qtwebengine_resources.gni @@ -21,12 +21,13 @@ group("qtwebengine_resources") { repack("qtwebengine_repack_resources") { sources = [ "$root_gen_dir/qtwebengine/qt_webengine_resources.pak", - "$root_gen_dir/chrome/browser_resources.pak", "$root_gen_dir/chrome/common_resources.pak", "$root_gen_dir/chrome/quota_internals_resources.pak", "$root_gen_dir/components/components_resources.pak", + "$root_gen_dir/components/dev_ui_components_resources.pak", "$root_gen_dir/content/browser/resources/media/media_internals_resources.pak", "$root_gen_dir/content/content_resources.pak", + "$root_gen_dir/content/dev_ui_content_resources.pak", "$root_gen_dir/mojo/public/js/mojo_bindings_resources.pak", "$root_gen_dir/net/net_resources.pak", "$root_gen_dir/third_party/blink/public/resources/blink_resources.pak", @@ -36,11 +37,12 @@ repack("qtwebengine_repack_resources") { deps = [ "//qtwebengine/browser:qt_webengine_resources", "//chrome/browser/resources/quota_internals:quota_internals_resources", - "//chrome/browser:resources_grit", "//chrome/common:resources_grit", "//components/resources:components_resources_grit", + "//components/resources:dev_ui_components_resources_grit", "//content/browser/resources/media:media_internals_resources", - "//content:resources_grit", + "//content:content_resources_grit", + "//content:dev_ui_content_resources_grit", "//mojo/public/js:resources", "//net:net_resources_grit", "//third_party/blink/public:resources_grit", @@ -72,9 +74,9 @@ repack("qtwebengine_repack_resources") { repack("qtwebengine_repack_resources_100") { sources = [ + "$root_gen_dir/chrome/renderer_resources_100_percent.pak", "$root_gen_dir/components/components_resources_100_percent.pak", "$root_gen_dir/content/app/resources/content_resources_100_percent.pak", - "$root_gen_dir/chrome/renderer_resources_100_percent.pak", "$root_gen_dir/third_party/blink/public/resources/blink_scaled_resources_100_percent.pak", "$root_gen_dir/ui/resources/ui_resources_100_percent.pak", ] @@ -98,9 +100,9 @@ repack("qtwebengine_repack_resources_100") { repack("qtwebengine_repack_resources_200") { sources = [ + "$root_gen_dir/chrome/renderer_resources_200_percent.pak", "$root_gen_dir/components/components_resources_200_percent.pak", "$root_gen_dir/content/app/resources/content_resources_200_percent.pak", - "$root_gen_dir/chrome/renderer_resources_200_percent.pak", "$root_gen_dir/third_party/blink/public/resources/blink_scaled_resources_200_percent.pak", "$root_gen_dir/ui/resources/ui_resources_200_percent.pak", ] diff --git a/src/core/qtwebengine_sources.gni b/src/core/qtwebengine_sources.gni index 3a39455c3..cbe51d052 100644 --- a/src/core/qtwebengine_sources.gni +++ b/src/core/qtwebengine_sources.gni @@ -50,6 +50,7 @@ source_set("qtwebengine_sources") { "//chrome/browser/resources/quota_internals:quota_internals_resources", "//chrome/common:buildflags", "//components/nacl/common:buildflags", + "//components/performance_manager", "//components/plugins/renderer/", "//extensions/buildflags:buildflags", "//rlz/buildflags:buildflags", @@ -70,6 +71,8 @@ source_set("qtwebengine_sources") { "//chrome/browser/prefs/chrome_command_line_pref_store.h", "//chrome/browser/profiles/profile.cc", "//chrome/browser/profiles/profile.h", + "//chrome/browser/tab_contents/form_interaction_tab_helper.cc", + "//chrome/browser/tab_contents/form_interaction_tab_helper.h", "//chrome/browser/ui/webui/devtools_ui.cc", "//chrome/browser/ui/webui/devtools_ui.h", "//chrome/browser/ui/webui/devtools_ui_data_source.cc", diff --git a/src/core/quota_permission_context_qt.cpp b/src/core/quota_permission_context_qt.cpp index 94645b237..c7f1e856c 100644 --- a/src/core/quota_permission_context_qt.cpp +++ b/src/core/quota_permission_context_qt.cpp @@ -56,12 +56,12 @@ using content::WebContents; namespace QtWebEngineCore { -void QuotaPermissionContextQt::RequestQuotaPermission(const StorageQuotaParams ¶ms, int render_process_id, const PermissionCallback &callback) +void QuotaPermissionContextQt::RequestQuotaPermission(const StorageQuotaParams ¶ms, int render_process_id, PermissionCallback callback) { if (params.storage_type != blink::mojom::StorageType::kPersistent) { // For now we only support requesting quota with this interface // for Persistent storage type. - callback.Run(QUOTA_PERMISSION_RESPONSE_DISALLOW); + std::move(callback).Run(QUOTA_PERMISSION_RESPONSE_DISALLOW); return; } @@ -69,7 +69,7 @@ void QuotaPermissionContextQt::RequestQuotaPermission(const StorageQuotaParams & base::PostTask( FROM_HERE, {content::BrowserThread::UI}, base::BindOnce(&QuotaPermissionContextQt::RequestQuotaPermission, this, - params, render_process_id, callback)); + params, render_process_id, std::move(callback))); return; } @@ -86,11 +86,11 @@ void QuotaPermissionContextQt::RequestQuotaPermission(const StorageQuotaParams & return; QWebEngineQuotaRequest request( - QSharedPointer::create(this, params, callback)); + QSharedPointer::create(this, params, std::move(callback))); client->runQuotaRequest(std::move(request)); } -void QuotaPermissionContextQt::dispatchCallbackOnIOThread(const PermissionCallback &callback, +void QuotaPermissionContextQt::dispatchCallbackOnIOThread(PermissionCallback callback, QuotaPermissionContext::QuotaPermissionResponse response) { if (callback.is_null()) @@ -100,11 +100,11 @@ void QuotaPermissionContextQt::dispatchCallbackOnIOThread(const PermissionCallba base::PostTask( FROM_HERE, {content::BrowserThread::IO}, base::BindOnce(&QuotaPermissionContextQt::dispatchCallbackOnIOThread, - this, callback, response)); + this, std::move(callback), response)); return; } - callback.Run(response); + std::move(callback).Run(response); } } // namespace QtWebEngineCore diff --git a/src/core/quota_permission_context_qt.h b/src/core/quota_permission_context_qt.h index 99e07eec7..6d678c92a 100644 --- a/src/core/quota_permission_context_qt.h +++ b/src/core/quota_permission_context_qt.h @@ -50,9 +50,9 @@ class QuotaPermissionContextQt : public content::QuotaPermissionContext { public: void RequestQuotaPermission(const content::StorageQuotaParams ¶ms, int render_process_id, - const PermissionCallback &callback) override; + PermissionCallback callback) override; - void dispatchCallbackOnIOThread(const PermissionCallback &callback, + void dispatchCallbackOnIOThread(PermissionCallback callback, QuotaPermissionContext::QuotaPermissionResponse response); }; diff --git a/src/core/quota_request_controller_impl.cpp b/src/core/quota_request_controller_impl.cpp index a18ad761d..514b85954 100644 --- a/src/core/quota_request_controller_impl.cpp +++ b/src/core/quota_request_controller_impl.cpp @@ -43,15 +43,14 @@ namespace QtWebEngineCore { -QuotaRequestControllerImpl::QuotaRequestControllerImpl( - QuotaPermissionContextQt *context, +QuotaRequestControllerImpl::QuotaRequestControllerImpl(QuotaPermissionContextQt *context, const content::StorageQuotaParams ¶ms, - const content::QuotaPermissionContext::PermissionCallback &callback) + content::QuotaPermissionContext::PermissionCallback callback) : QuotaRequestController( toQt(params.origin_url), params.requested_size) , m_context(context) - , m_callback(callback) + , m_callback(std::move(callback)) {} QuotaRequestControllerImpl::~QuotaRequestControllerImpl() @@ -61,12 +60,12 @@ QuotaRequestControllerImpl::~QuotaRequestControllerImpl() void QuotaRequestControllerImpl::accepted() { - m_context->dispatchCallbackOnIOThread(m_callback, QuotaPermissionContextQt::QUOTA_PERMISSION_RESPONSE_ALLOW); + m_context->dispatchCallbackOnIOThread(std::move(m_callback), QuotaPermissionContextQt::QUOTA_PERMISSION_RESPONSE_ALLOW); } void QuotaRequestControllerImpl::rejected() { - m_context->dispatchCallbackOnIOThread(m_callback, QuotaPermissionContextQt::QUOTA_PERMISSION_RESPONSE_DISALLOW); + m_context->dispatchCallbackOnIOThread(std::move(m_callback), QuotaPermissionContextQt::QUOTA_PERMISSION_RESPONSE_DISALLOW); } } // namespace QtWebEngineCore diff --git a/src/core/quota_request_controller_impl.h b/src/core/quota_request_controller_impl.h index 5814895f3..65e661694 100644 --- a/src/core/quota_request_controller_impl.h +++ b/src/core/quota_request_controller_impl.h @@ -50,7 +50,7 @@ public: QuotaRequestControllerImpl( QuotaPermissionContextQt *context, const content::StorageQuotaParams ¶ms, - const content::QuotaPermissionContext::PermissionCallback &callback); + content::QuotaPermissionContext::PermissionCallback callback); ~QuotaRequestControllerImpl(); diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp index 7f1adb15e..ef5eaaab6 100644 --- a/src/core/render_widget_host_view_qt.cpp +++ b/src/core/render_widget_host_view_qt.cpp @@ -57,6 +57,7 @@ #include "components/viz/common/frame_sinks/begin_frame_source.h" #include "components/viz/common/surfaces/frame_sink_id_allocator.h" #include "components/viz/host/host_frame_sink_manager.h" +#include "content/browser/compositor/image_transport_factory.h" #include "content/browser/compositor/surface_utils.h" #include "content/browser/frame_host/frame_tree.h" #include "content/browser/frame_host/render_frame_host_impl.h" @@ -272,6 +273,34 @@ static content::ScreenInfo screenInfoFromQScreen(QScreen *screen) return r; } +// An minimal override to support progressing flings +class FlingingCompositor : public ui::Compositor +{ + RenderWidgetHostViewQt *m_rwhv; +public: + FlingingCompositor(RenderWidgetHostViewQt *rwhv, + const viz::FrameSinkId &frame_sink_id, + ui::ContextFactory *context_factory, + ui::ContextFactoryPrivate *context_factory_private, + scoped_refptr task_runner, + bool enable_pixel_canvas, + bool use_external_begin_frame_control = false, + bool force_software_compositor = false, + const char *trace_environment_name = nullptr) + : ui::Compositor(frame_sink_id, context_factory, context_factory_private, + task_runner, enable_pixel_canvas, use_external_begin_frame_control, + force_software_compositor, trace_environment_name) + , m_rwhv(rwhv) + {} + + void BeginMainFrame(const viz::BeginFrameArgs &args) override + { + if (args.type != viz::BeginFrameArgs::MISSED && !m_rwhv->is_currently_scrolling_viewport()) + m_rwhv->host()->ProgressFlingIfNeeded(args.frame_time); + ui::Compositor::BeginMainFrame(args); + } +}; + RenderWidgetHostViewQt::RenderWidgetHostViewQt(content::RenderWidgetHost *widget) : content::RenderWidgetHostViewBase::RenderWidgetHostViewBase(widget) , m_taskRunner(base::ThreadTaskRunnerHandle::Get()) @@ -310,7 +339,8 @@ RenderWidgetHostViewQt::RenderWidgetHostViewQt(content::RenderWidgetHost *widget content::ImageTransportFactory *imageTransportFactory = content::ImageTransportFactory::GetInstance(); ui::ContextFactory *contextFactory = imageTransportFactory->GetContextFactory(); ui::ContextFactoryPrivate *contextFactoryPrivate = imageTransportFactory->GetContextFactoryPrivate(); - m_uiCompositor.reset(new ui::Compositor( + m_uiCompositor.reset(new FlingingCompositor( + this, contextFactoryPrivate->AllocateFrameSinkId(), contextFactory, contextFactoryPrivate, @@ -717,18 +747,6 @@ void RenderWidgetHostViewQt::DisplayTooltipText(const base::string16 &tooltip_te m_adapterClient->setToolTip(toQt(tooltip_text)); } -void RenderWidgetHostViewQt::DidCreateNewRendererCompositorFrameSink(viz::mojom::CompositorFrameSinkClient *frameSinkClient) -{ - // Not used with viz - NOTREACHED(); -} - -void RenderWidgetHostViewQt::SubmitCompositorFrame(const viz::LocalSurfaceId &local_surface_id, viz::CompositorFrame frame, base::Optional hit_test_region_list) -{ - // Not used with viz - NOTREACHED(); -} - void RenderWidgetHostViewQt::GetScreenInfo(content::ScreenInfo *results) { *results = m_screenInfo; @@ -1353,7 +1371,9 @@ void RenderWidgetHostViewQt::handleInputMethodEvent(QInputMethodEvent *ev) end = qMax(0, start + end); } - underlines.push_back(ui::ImeTextSpan(ui::ImeTextSpan::Type::kComposition, start, end, ui::ImeTextSpan::Thickness::kThin, SK_ColorTRANSPARENT)); + underlines.push_back(ui::ImeTextSpan(ui::ImeTextSpan::Type::kComposition, start, end, + ui::ImeTextSpan::Thickness::kThin, ui::ImeTextSpan::UnderlineStyle::kSolid, + SK_ColorTRANSPARENT)); QTextCharFormat format = qvariant_cast(attribute.value).toCharFormat(); if (format.underlineStyle() != QTextCharFormat::NoUnderline) @@ -1772,12 +1792,6 @@ void RenderWidgetHostViewQt::handleFocusEvent(QFocusEvent *ev) } } -void RenderWidgetHostViewQt::SetNeedsBeginFrames(bool needs_begin_frames) -{ - // Not used with viz - NOTREACHED(); -} - content::RenderFrameHost *RenderWidgetHostViewQt::getFocusedFrameHost() { content::RenderViewHostImpl *viewHost = content::RenderViewHostImpl::From(host()); @@ -1808,11 +1822,6 @@ ui::TextInputType RenderWidgetHostViewQt::getTextInputType() const return ui::TEXT_INPUT_TYPE_NONE; } -void RenderWidgetHostViewQt::SetWantsAnimateOnlyBeginFrames() -{ - m_delegatedFrameHost->SetWantsAnimateOnlyBeginFrames(); -} - viz::SurfaceId RenderWidgetHostViewQt::GetCurrentSurfaceId() const { return m_delegatedFrameHost->GetCurrentSurfaceId(); diff --git a/src/core/render_widget_host_view_qt.h b/src/core/render_widget_host_view_qt.h index 139a4ebfe..5bddd0d34 100644 --- a/src/core/render_widget_host_view_qt.h +++ b/src/core/render_widget_host_view_qt.h @@ -152,8 +152,6 @@ public: void Destroy() override; void SetTooltipText(const base::string16 &tooltip_text) override; void DisplayTooltipText(const base::string16& tooltip_text) override; - void DidCreateNewRendererCompositorFrameSink(viz::mojom::CompositorFrameSinkClient* renderer_compositor_frame_sink) override; - void SubmitCompositorFrame(const viz::LocalSurfaceId&, viz::CompositorFrame, base::Optional) override; void WheelEventAck(const blink::WebMouseWheelEvent &event, content::InputEventAckState ack_result) override; void GestureEventAck(const blink::WebGestureEvent &event, content::InputEventAckState ack_result) override; content::MouseWheelPhaseHandler *GetMouseWheelPhaseHandler() override; @@ -163,8 +161,6 @@ public: void GetScreenInfo(content::ScreenInfo *results) override; gfx::Rect GetBoundsInRootWindow() override; void ProcessAckedTouchEvent(const content::TouchEventWithLatencyInfo &touch, content::InputEventAckState ack_result) override; - void SetNeedsBeginFrames(bool needs_begin_frames) override; - void SetWantsAnimateOnlyBeginFrames() override; viz::SurfaceId GetCurrentSurfaceId() const override; const viz::FrameSinkId &GetFrameSinkId() const override; const viz::LocalSurfaceIdAllocation &GetLocalSurfaceIdAllocation() const override; diff --git a/src/core/renderer/content_renderer_client_qt.cpp b/src/core/renderer/content_renderer_client_qt.cpp index 428697936..4786a20ae 100644 --- a/src/core/renderer/content_renderer_client_qt.cpp +++ b/src/core/renderer/content_renderer_client_qt.cpp @@ -273,7 +273,8 @@ void ContentRendererClientQt::PrepareErrorPage(content::RenderFrame *renderFrame { GetNavigationErrorStringsInternal( renderFrame, httpMethod, - error_page::Error::NetError(web_error.url(), web_error.reason(), web_error.has_copy_in_cache()), errorHtml); + error_page::Error::NetError((GURL)web_error.url(), web_error.reason(), net::ResolveErrorInfo(), web_error.has_copy_in_cache()), + errorHtml); } void ContentRendererClientQt::PrepareErrorPageForHttpStatusError(content::RenderFrame *renderFrame, @@ -306,8 +307,8 @@ void ContentRendererClientQt::GetNavigationErrorStringsInternal(content::RenderF error_page::LocalizedError::PageState errorPageState = error_page::LocalizedError::GetPageState( error.reason(), error.domain(), error.url(), isPost, - error.stale_copy_in_cache(), false, RenderThreadObserverQt::is_incognito_process(), false, - false, locale, std::unique_ptr()); + false, error.stale_copy_in_cache(), false, RenderThreadObserverQt::is_incognito_process(), false, + false, false, locale, std::unique_ptr()); resourceId = IDR_NET_ERROR_HTML; @@ -606,7 +607,7 @@ void ContentRendererClientQt::InitSpellCheck() void ContentRendererClientQt::WillSendRequest(blink::WebLocalFrame *frame, ui::PageTransition transition_type, const blink::WebURL &url, - const blink::WebURL &site_for_cookies, + const net::SiteForCookies &site_for_cookies, const url::Origin *initiator_origin, GURL *new_url, bool *attach_same_site_cookies) diff --git a/src/core/renderer/content_renderer_client_qt.h b/src/core/renderer/content_renderer_client_qt.h index f2e725453..3cbd5b9ee 100644 --- a/src/core/renderer/content_renderer_client_qt.h +++ b/src/core/renderer/content_renderer_client_qt.h @@ -122,7 +122,7 @@ public: void WillSendRequest(blink::WebLocalFrame *frame, ui::PageTransition transition_type, const blink::WebURL &url, - const blink::WebURL &site_for_cookies, + const net::SiteForCookies &site_for_cookies, const url::Origin *initiator_origin, GURL *new_url, bool *attach_same_site_cookies) override; diff --git a/src/core/renderer/print_web_view_helper_delegate_qt.cpp b/src/core/renderer/print_web_view_helper_delegate_qt.cpp index b85ff7249..beae6ecfa 100644 --- a/src/core/renderer/print_web_view_helper_delegate_qt.cpp +++ b/src/core/renderer/print_web_view_helper_delegate_qt.cpp @@ -54,11 +54,6 @@ namespace QtWebEngineCore { PrintWebViewHelperDelegateQt::~PrintWebViewHelperDelegateQt() {} -bool PrintWebViewHelperDelegateQt::CancelPrerender(content::RenderFrame *) -{ - return false; -} - blink::WebElement PrintWebViewHelperDelegateQt::GetPdfElement(blink::WebLocalFrame *frame) { GURL url = frame->GetDocument().Url(); diff --git a/src/core/renderer/print_web_view_helper_delegate_qt.h b/src/core/renderer/print_web_view_helper_delegate_qt.h index f02580b91..2cbc171a6 100644 --- a/src/core/renderer/print_web_view_helper_delegate_qt.h +++ b/src/core/renderer/print_web_view_helper_delegate_qt.h @@ -57,8 +57,6 @@ class PrintWebViewHelperDelegateQt : public printing::PrintRenderFrameHelper::De public: ~PrintWebViewHelperDelegateQt() override; - bool CancelPrerender(content::RenderFrame *render_frame) override; - blink::WebElement GetPdfElement(blink::WebLocalFrame *frame) override; bool IsPrintPreviewEnabled() override; diff --git a/src/core/renderer_host/pepper/pepper_isolated_file_system_message_filter.cpp b/src/core/renderer_host/pepper/pepper_isolated_file_system_message_filter.cpp index 6e9efb5ad..f61c06ea9 100644 --- a/src/core/renderer_host/pepper/pepper_isolated_file_system_message_filter.cpp +++ b/src/core/renderer_host/pepper/pepper_isolated_file_system_message_filter.cpp @@ -81,7 +81,7 @@ PepperIsolatedFileSystemMessageFilter::PepperIsolatedFileSystemMessageFilter(int PepperIsolatedFileSystemMessageFilter::~PepperIsolatedFileSystemMessageFilter() {} -scoped_refptr PepperIsolatedFileSystemMessageFilter::OverrideTaskRunnerForMessage(const IPC::Message &) +scoped_refptr PepperIsolatedFileSystemMessageFilter::OverrideTaskRunnerForMessage(const IPC::Message &) { // In order to reach ExtensionSystem, we need to get ProfileManager first. // ProfileManager lives in UI thread, so we need to do this in UI thread. diff --git a/src/core/renderer_host/pepper/pepper_isolated_file_system_message_filter.h b/src/core/renderer_host/pepper/pepper_isolated_file_system_message_filter.h index 750f7cea0..27c23d8e0 100644 --- a/src/core/renderer_host/pepper/pepper_isolated_file_system_message_filter.h +++ b/src/core/renderer_host/pepper/pepper_isolated_file_system_message_filter.h @@ -64,7 +64,7 @@ public: static PepperIsolatedFileSystemMessageFilter *Create(PP_Instance instance, content::BrowserPpapiHost *host); // ppapi::host::ResourceMessageFilter implementation. - scoped_refptr OverrideTaskRunnerForMessage(const IPC::Message &msg) override; + scoped_refptr OverrideTaskRunnerForMessage(const IPC::Message &msg) override; int32_t OnResourceMessageReceived(const IPC::Message &msg, ppapi::host::HostMessageContext *context) override; private: diff --git a/src/core/resource_bundle_qt.cpp b/src/core/resource_bundle_qt.cpp index 61b0f3021..22b40a7ba 100644 --- a/src/core/resource_bundle_qt.cpp +++ b/src/core/resource_bundle_qt.cpp @@ -58,9 +58,9 @@ namespace ui { void ResourceBundle::LoadCommonResources() { // We repacked the resources we need and installed them. now let chromium mmap that file. - AddDataPackFromPath(WebEngineLibraryInfo::getPath(QT_RESOURCES_PAK), SCALE_FACTOR_NONE); AddDataPackFromPath(WebEngineLibraryInfo::getPath(QT_RESOURCES_100P_PAK), SCALE_FACTOR_100P); AddDataPackFromPath(WebEngineLibraryInfo::getPath(QT_RESOURCES_200P_PAK), SCALE_FACTOR_200P); + AddDataPackFromPath(WebEngineLibraryInfo::getPath(QT_RESOURCES_PAK), SCALE_FACTOR_NONE); AddOptionalDataPackFromPath(WebEngineLibraryInfo::getPath(QT_RESOURCES_DEVTOOLS_PAK), SCALE_FACTOR_NONE); } diff --git a/src/core/user_script.cpp b/src/core/user_script.cpp index 7ccb6e10a..912b204b7 100644 --- a/src/core/user_script.cpp +++ b/src/core/user_script.cpp @@ -228,7 +228,7 @@ void UserScript::parseMetadataHeader() if (line_end == std::string::npos) line_end = script_text.length() - 1; - line.set(script_text.data() + line_start, line_end - line_start); + line = base::StringPiece(script_text.data() + line_start, line_end - line_start); if (!in_metadata) { if (line.starts_with(kUserScriptBegin)) diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp index ef482ef08..e3b1c2439 100644 --- a/src/core/web_contents_adapter.cpp +++ b/src/core/web_contents_adapter.cpp @@ -66,6 +66,8 @@ #include "base/task/sequence_manager/sequence_manager_impl.h" #include "base/task/sequence_manager/thread_controller_with_message_pump_impl.h" #include "base/values.h" +#include "chrome/browser/tab_contents/form_interaction_tab_helper.h" +#include "components/performance_manager/embedder/performance_manager_registry.h" #include "content/browser/renderer_host/render_view_host_impl.h" #include "content/browser/renderer_host/text_input_manager.h" #include "content/browser/web_contents/web_contents_impl.h" @@ -86,9 +88,9 @@ #include "content/public/common/url_constants.h" #include "content/public/common/web_preferences.h" #include "extensions/buildflags/buildflags.h" -#include "third_party/blink/public/common/media/media_player_action.h" #include "third_party/blink/public/common/page/page_zoom.h" #include "third_party/blink/public/common/peerconnection/webrtc_ip_handling_policy.h" +#include "third_party/blink/public/mojom/frame/media_player_action.mojom.h" #include "printing/buildflags/buildflags.h" #include "ui/base/clipboard/clipboard.h" #include "ui/base/clipboard/clipboard_constants.h" @@ -525,6 +527,9 @@ void WebContentsAdapter::initialize(content::SiteInstance *site) #if BUILDFLAG(ENABLE_EXTENSIONS) extensions::ExtensionWebContentsObserverQt::CreateForWebContents(webContents()); #endif + FormInteractionTabHelper::CreateForWebContents(webContents()); + if (auto *performance_manager_registry = performance_manager::PerformanceManagerRegistry::GetInstance()) + performance_manager_registry->CreatePageNodeForWebContents(webContents()); // Create an instance of WebEngineVisitedLinksManager to catch the first // content::NOTIFICATION_RENDERER_PROCESS_CREATED event. This event will @@ -1185,22 +1190,22 @@ void WebContentsAdapter::copyImageAt(const QPoint &location) m_webContents->GetRenderViewHost()->GetMainFrame()->CopyImageAt(location.x(), location.y()); } -static blink::MediaPlayerAction::Type toBlinkMediaPlayerActionType(WebContentsAdapter::MediaPlayerAction action) +static blink::mojom::MediaPlayerActionType toBlinkMediaPlayerActionType(WebContentsAdapter::MediaPlayerAction action) { switch (action) { case WebContentsAdapter::MediaPlayerPlay: - return blink::MediaPlayerAction::Type::kPlay; + return blink::mojom::MediaPlayerActionType::kPlay; case WebContentsAdapter::MediaPlayerMute: - return blink::MediaPlayerAction::Type::kMute; + return blink::mojom::MediaPlayerActionType::kMute; case WebContentsAdapter::MediaPlayerLoop: - return blink::MediaPlayerAction::Type::kLoop; + return blink::mojom::MediaPlayerActionType::kLoop; case WebContentsAdapter::MediaPlayerControls: - return blink::MediaPlayerAction::Type::kControls; + return blink::mojom::MediaPlayerActionType::kControls; case WebContentsAdapter::MediaPlayerNoAction: break; } NOTREACHED(); - return (blink::MediaPlayerAction::Type)-1; + return (blink::mojom::MediaPlayerActionType)-1; } void WebContentsAdapter::executeMediaPlayerActionAt(const QPoint &location, MediaPlayerAction action, bool enable) @@ -1208,7 +1213,7 @@ void WebContentsAdapter::executeMediaPlayerActionAt(const QPoint &location, Medi CHECK_INITIALIZED(); if (action == MediaPlayerNoAction) return; - blink::MediaPlayerAction blinkAction(toBlinkMediaPlayerActionType(action), enable); + blink::mojom::MediaPlayerAction blinkAction(toBlinkMediaPlayerActionType(action), enable); m_webContents->GetRenderViewHost()->GetMainFrame()->ExecuteMediaPlayerActionAtLocation(toGfx(location), blinkAction); } @@ -1893,7 +1898,7 @@ WebContentsAdapter::LifecycleState WebContentsAdapter::determineRecommendedState return LifecycleState::Frozen; // Form input is not saved. - if (m_webContents->GetPageImportanceSignals().had_form_interaction) + if (FormInteractionTabHelper::FromWebContents(m_webContents.get())->had_form_interaction()) return LifecycleState::Frozen; // Do not discard PDFs as they might contain entry that is not saved and they @@ -2001,6 +2006,9 @@ void WebContentsAdapter::discard() #if BUILDFLAG(ENABLE_EXTENSIONS) extensions::ExtensionWebContentsObserverQt::CreateForWebContents(webContents()); #endif + FormInteractionTabHelper::CreateForWebContents(webContents()); + if (auto *performance_manager_registry = performance_manager::PerformanceManagerRegistry::GetInstance()) + performance_manager_registry->CreatePageNodeForWebContents(webContents()); } void WebContentsAdapter::undiscard() diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp index 7822d7a41..e75a461e2 100644 --- a/src/core/web_contents_delegate_qt.cpp +++ b/src/core/web_contents_delegate_qt.cpp @@ -459,7 +459,7 @@ void WebContentsDelegateQt::didFailLoad(const QUrl &url, int errorCode, const QS EmitLoadFinished(false /* success */ , url, false /* isErrorPage */, errorCode, errorDescription); } -void WebContentsDelegateQt::DidFailLoad(content::RenderFrameHost* render_frame_host, const GURL& validated_url, int error_code, const base::string16& error_description) +void WebContentsDelegateQt::DidFailLoad(content::RenderFrameHost* render_frame_host, const GURL& validated_url, int error_code) { if (m_loadingState == LoadingState::Loading) setLoadingState(LoadingState::Loaded); @@ -476,7 +476,11 @@ void WebContentsDelegateQt::DidFailLoad(content::RenderFrameHost* render_frame_h EmitLoadFinished(false /* success */, toQt(validated_url), true /* isErrorPage */); return; } - + // Qt6: Consider getting rid of the error_description (Chromium already has) + base::string16 error_description; + error_description = error_page::LocalizedError::GetErrorDetails( + error_code <= 0 ? error_page::Error::kNetErrorDomain : error_page::Error::kHttpErrorDomain, + error_code, false, false); didFailLoad(toQt(validated_url), error_code, toQt(error_description)); } diff --git a/src/core/web_contents_delegate_qt.h b/src/core/web_contents_delegate_qt.h index 8a9d8be1b..bce02df4f 100644 --- a/src/core/web_contents_delegate_qt.h +++ b/src/core/web_contents_delegate_qt.h @@ -161,7 +161,7 @@ public: void DidStartLoading() override; void DidReceiveResponse() override; void DidStopLoading() override; - void DidFailLoad(content::RenderFrameHost* render_frame_host, const GURL& validated_url, int error_code, const base::string16& error_description) override; + void DidFailLoad(content::RenderFrameHost* render_frame_host, const GURL& validated_url, int error_code) override; void DidFinishLoad(content::RenderFrameHost *render_frame_host, const GURL &validated_url) override; void BeforeUnloadFired(bool proceed, const base::TimeTicks& proceed_time) override; void DidUpdateFaviconURL(const std::vector &candidates) override; diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp index 8c7a4bed4..410ada37a 100644 --- a/src/core/web_engine_context.cpp +++ b/src/core/web_engine_context.cpp @@ -750,8 +750,6 @@ WebEngineContext::WebEngineContext() registerMainThreadFactories(); - SetContentClient(new ContentClientQt); - content::ContentMainParams contentMainParams(m_mainDelegate.get()); #if defined(OS_WIN) contentMainParams.sandbox_info = staticSandboxInterfaceInfo(); diff --git a/src/core/web_event_factory.cpp b/src/core/web_event_factory.cpp index 5b6c6bd0e..7bc905bbf 100644 --- a/src/core/web_event_factory.cpp +++ b/src/core/web_event_factory.cpp @@ -1431,8 +1431,8 @@ static WebPointerProperties::PointerType pointerTypeForTabletEvent(const QTablet WebMouseEvent WebEventFactory::toWebMouseEvent(QMouseEvent *ev) { WebMouseEvent webKitEvent(webEventTypeForEvent(ev), - WebFloatPoint(ev->x(), ev->y()), - WebFloatPoint(ev->globalX(), ev->globalY()), + gfx::PointF(ev->x(), ev->y()), + gfx::PointF(ev->globalX(), ev->globalY()), mouseButtonForEvent(ev), 0, modifiersForEvent(ev), @@ -1462,8 +1462,8 @@ WebMouseEvent WebEventFactory::toWebMouseEvent(QHoverEvent *ev) WebMouseEvent WebEventFactory::toWebMouseEvent(QTabletEvent *ev) { WebMouseEvent webKitEvent(webEventTypeForEvent(ev), - WebFloatPoint(ev->x(), ev->y()), - WebFloatPoint(ev->globalX(), ev->globalY()), + gfx::PointF(ev->x(), ev->y()), + gfx::PointF(ev->globalX(), ev->globalY()), mouseButtonForEvent(ev), 0, modifiersForEvent(ev), @@ -1496,11 +1496,9 @@ WebGestureEvent WebEventFactory::toWebGestureEvent(QNativeGestureEvent *ev) webKitEvent.SetTimeStamp(base::TimeTicks::Now()); webKitEvent.SetModifiers(modifiersForEvent(ev)); - webKitEvent.SetPositionInWidget(WebFloatPoint(ev->localPos().x(), - ev->localPos().y())); + webKitEvent.SetPositionInWidget(gfx::PointF(ev->localPos().x(), ev->localPos().y())); - webKitEvent.SetPositionInScreen(WebFloatPoint(ev->screenPos().x(), - ev->screenPos().y())); + webKitEvent.SetPositionInScreen(gfx::PointF(ev->screenPos().x(), ev->screenPos().y())); webKitEvent.SetSourceDevice(blink::WebGestureDevice::kTouchpad); @@ -1628,9 +1626,9 @@ bool WebEventFactory::coalesceWebWheelEvent(blink::WebMouseWheelEvent &webEvent, return true; } -static QPointF toQt(blink::WebFloatPoint p) +static QPointF toQt(gfx::PointF p) { - return QPointF(p.x, p.y); + return QPointF(p.x(), p.y()); } void WebEventFactory::sendUnhandledWheelEvent(const blink::WebGestureEvent &event, diff --git a/src/core/web_event_factory.h b/src/core/web_event_factory.h index 390502a9d..df2f26694 100644 --- a/src/core/web_event_factory.h +++ b/src/core/web_event_factory.h @@ -42,10 +42,10 @@ #include "content/public/browser/native_web_keyboard_event.h" #ifndef QT_NO_GESTURES -#include "third_party/blink/public/platform/web_gesture_event.h" +#include "third_party/blink/public/common/input/web_gesture_event.h" #endif -#include "third_party/blink/public/platform/web_mouse_event.h" -#include "third_party/blink/public/platform/web_mouse_wheel_event.h" +#include "third_party/blink/public/common/input/web_mouse_event.h" +#include "third_party/blink/public/common/input/web_mouse_wheel_event.h" #include -- cgit v1.2.3