diff options
Diffstat (limited to 'src/core')
81 files changed, 713 insertions, 522 deletions
diff --git a/src/core/api/qwebenginecertificateerror.cpp b/src/core/api/qwebenginecertificateerror.cpp index 33f63f2da..40c9a1c7b 100644 --- a/src/core/api/qwebenginecertificateerror.cpp +++ b/src/core/api/qwebenginecertificateerror.cpp @@ -98,6 +98,7 @@ QWebEngineCertificateError::~QWebEngineCertificateError() = default; \value CertificateKnownInterceptionBlocked The certificate is known to be used for interception by an entity other the device owner. (Added in 5.15) + \value SslObsoleteVersion The connection uses an obsolete version of SSL/TLS. (Added in Qt 6.0) */ /*! diff --git a/src/core/api/qwebenginecertificateerror.h b/src/core/api/qwebenginecertificateerror.h index 3cf2d9990..ffcebaf9b 100644 --- a/src/core/api/qwebenginecertificateerror.h +++ b/src/core/api/qwebenginecertificateerror.h @@ -84,6 +84,7 @@ public: CertificateTransparencyRequired = -214, CertificateSymantecLegacy = -215, CertificateKnownInterceptionBlocked = -217, + SslObsoleteVersion = -218, }; Q_ENUM(Type) diff --git a/src/core/api/qwebengineurlrequestinfo.cpp b/src/core/api/qwebengineurlrequestinfo.cpp index 5ed729f5e..040305f66 100644 --- a/src/core/api/qwebengineurlrequestinfo.cpp +++ b/src/core/api/qwebengineurlrequestinfo.cpp @@ -40,34 +40,10 @@ #include "qwebengineurlrequestinfo.h" #include "qwebengineurlrequestinfo_p.h" -#include "content/public/common/resource_type.h" - #include "web_contents_adapter_client.h" QT_BEGIN_NAMESPACE -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeMainFrame, content::ResourceType::kMainFrame) -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeSubFrame, content::ResourceType::kSubFrame) -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeStylesheet, content::ResourceType::kStylesheet) -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeScript, content::ResourceType::kScript) -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeImage, content::ResourceType::kImage) -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeFontResource, content::ResourceType::kFontResource) -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeSubResource, content::ResourceType::kSubResource) -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeObject, content::ResourceType::kObject) -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeMedia, content::ResourceType::kMedia) -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeWorker, content::ResourceType::kWorker) -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeSharedWorker, content::ResourceType::kSharedWorker) -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypePrefetch, content::ResourceType::kPrefetch) -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeFavicon, content::ResourceType::kFavicon) -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeXhr, content::ResourceType::kXhr) -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypePing, content::ResourceType::kPing) -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeServiceWorker, content::ResourceType::kServiceWorker) -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeCspReport, content::ResourceType::kCspReport) -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypePluginResource, content::ResourceType::kPluginResource) -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeNavigationPreloadMainFrame, content::ResourceType::kNavigationPreloadMainFrame) -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeNavigationPreloadSubFrame, content::ResourceType::kNavigationPreloadSubFrame) -ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeLast, content::ResourceType::kMaxValue) - ASSERT_ENUMS_MATCH(QtWebEngineCore::WebContentsAdapterClient::LinkNavigation, QWebEngineUrlRequestInfo::NavigationTypeLink) ASSERT_ENUMS_MATCH(QtWebEngineCore::WebContentsAdapterClient::TypedNavigation, QWebEngineUrlRequestInfo::NavigationTypeTyped) ASSERT_ENUMS_MATCH(QtWebEngineCore::WebContentsAdapterClient::FormSubmittedNavigation, diff --git a/src/core/browser_accessibility_qt.cpp b/src/core/browser_accessibility_qt.cpp index de78eb85d..f4fe2f694 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: @@ -393,7 +392,6 @@ QAccessible::Role BrowserAccessibilityQt::role() const return QAccessible::StaticText; case ax::mojom::Role::kLayoutTable: case ax::mojom::Role::kLayoutTableCell: - case ax::mojom::Role::kLayoutTableColumn: case ax::mojom::Role::kLayoutTableRow: return QAccessible::Section; case ax::mojom::Role::kLegend: @@ -450,8 +448,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 +468,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..c1f4cbb2d 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" @@ -199,19 +204,15 @@ private: { ScopedGLContextChecker glContextChecker; - bool more_work_is_plausible = m_delegate->DoWork(); + base::MessagePump::Delegate::NextWorkInfo more_work_info = m_delegate->DoWork(); - base::TimeTicks delayed_work_time; - more_work_is_plausible |= m_delegate->DoDelayedWork(&delayed_work_time); - - if (more_work_is_plausible) + if (more_work_info.is_immediate()) return ScheduleWork(); - more_work_is_plausible |= m_delegate->DoIdleWork(); - if (more_work_is_plausible) + if (m_delegate->DoIdleWork()) return ScheduleWork(); - ScheduleDelayedWork(delayed_work_time); + ScheduleDelayedWork(more_work_info.delayed_run_time); } Delegate *m_delegate = nullptr; @@ -255,6 +256,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 +282,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<base::MessagePump> messagePumpFactory(); @@ -69,6 +74,8 @@ public: private: DISALLOW_COPY_AND_ASSIGN(BrowserMainPartsQt); + std::unique_ptr<performance_manager::PerformanceManager> performance_manager_; + std::unique_ptr<performance_manager::PerformanceManagerRegistry> performance_manager_registry_; }; } // namespace QtWebEngineCore diff --git a/src/core/certificate_error_controller.cpp b/src/core/certificate_error_controller.cpp index a5a665e70..03918e158 100644 --- a/src/core/certificate_error_controller.cpp +++ b/src/core/certificate_error_controller.cpp @@ -78,6 +78,8 @@ ASSERT_ENUMS_MATCH(QWebEngineCertificateError::CertificateSymantecLegacy, net::ERR_CERT_SYMANTEC_LEGACY) ASSERT_ENUMS_MATCH(QWebEngineCertificateError::CertificateKnownInterceptionBlocked, net::ERR_CERT_KNOWN_INTERCEPTION_BLOCKED) +ASSERT_ENUMS_MATCH(QWebEngineCertificateError::SslObsoleteVersion, + net::ERR_SSL_OBSOLETE_VERSION) // ASSERT_ENUMS_MATCH(QWebEngineCertificateError::CertificateErrorEnd, net::ERR_CERT_END) // Copied from chrome/browser/ssl/ssl_error_handler.cc: @@ -87,17 +89,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: diff --git a/src/core/clipboard_qt.cpp b/src/core/clipboard_qt.cpp index c3b25ff63..a1dba8150 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) @@ -267,12 +268,12 @@ void ClipboardQt::ReadRTF(ui::ClipboardBuffer type, std::string *result) const *result = std::string(byteArray.constData(), byteArray.length()); } -SkBitmap ClipboardQt::ReadImage(ui::ClipboardBuffer type) const +void ClipboardQt::ReadImage(ui::ClipboardBuffer type, ReadImageCallback callback) const { const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData( type == ui::ClipboardBuffer::kCopyPaste ? QClipboard::Clipboard : QClipboard::Selection); if (!mimeData) - return SkBitmap(); + return std::move(callback).Run(SkBitmap()); QImage image = qvariant_cast<QImage>(mimeData->imageData()); image = image.convertToFormat(QImage::Format_ARGB32); @@ -290,7 +291,7 @@ SkBitmap ClipboardQt::ReadImage(ui::ClipboardBuffer type) const src += bytesPerLineSrc; } - return bitmap; + return std::move(callback).Run(bitmap); } void ClipboardQt::ReadCustomData(ui::ClipboardBuffer clipboard_type, const base::string16 &type, base::string16 *result) const @@ -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<base::string16> ClipboardQt::ReadAvailablePlatformSpecificFormatNames(ui::ClipboardBuffer buffer) const +{ + // based on ClipboardAura + std::vector<base::string16> 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..cc1b95a32 100644 --- a/src/core/clipboard_qt.h +++ b/src/core/clipboard_qt.h @@ -56,13 +56,15 @@ public: void ReadHTML(ui::ClipboardBuffer type, base::string16 *markup, std::string *src_url, uint32_t *fragment_start, uint32_t *fragment_end) const override; void ReadRTF(ui::ClipboardBuffer type, std::string *result) const override; - SkBitmap ReadImage(ui::ClipboardBuffer type) const override; + void ReadImage(ui::ClipboardBuffer buffer, ReadImageCallback callback) const override; void ReadCustomData(ui::ClipboardBuffer clipboard_type, const base::string16 &type, base::string16 *result) const override; void ReadBookmark(base::string16 *title, std::string *url) const override; void ReadData(const ui::ClipboardFormatType &format, std::string *result) const override; void OnPreShutdown() override {} + std::vector<base::string16> 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 05653149e..9467d6ea0 100644 --- a/src/core/compositor/display_gl_output_surface.cpp +++ b/src/core/compositor/display_gl_output_surface.cpp @@ -49,7 +49,7 @@ #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" +#include "ui/gfx/buffer_format_util.h" namespace QtWebEngineCore { @@ -113,12 +113,13 @@ void DisplayGLOutputSurface::DiscardBackbuffer() void DisplayGLOutputSurface::Reshape(const gfx::Size &sizeInPixels, float devicePixelRatio, const gfx::ColorSpace &colorSpace, - bool hasAlpha, + gfx::BufferFormat format, bool /*useStencil*/) { + bool hasAlpha = gfx::AlphaBitsForBufferFormat(format) > 0; 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::Buffer> DisplayGLOutputSurface::makeBuffer(const Shape &shape) @@ -250,13 +251,6 @@ unsigned DisplayGLOutputSurface::GetOverlayTextureId() const return 0; } -// Only used if IsDisplayedAsOverlayPlane was true (called from -// viz::DirectRender::DrawFrame). -gfx::BufferFormat DisplayGLOutputSurface::GetOverlayBufferFormat() const -{ - return gfx::BufferFormat(); -} - // Called by viz::GLRenderer but always false in all implementations except for // android_webview::ParentOutputSurface. bool DisplayGLOutputSurface::HasExternalStencilTest() const @@ -284,6 +278,16 @@ unsigned DisplayGLOutputSurface::UpdateGpuFence() return 0; } +scoped_refptr<gpu::GpuTaskSchedulerHelper> DisplayGLOutputSurface::GetGpuTaskSchedulerHelper() +{ + return m_vizContextProvider->GetGpuTaskSchedulerHelper(); +} + +gpu::MemoryTracker *DisplayGLOutputSurface::GetMemoryTracker() +{ + return m_vizContextProvider->GetMemoryTracker(); +} + 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 6b1b2e043..dc6273923 100644 --- a/src/core/compositor/display_gl_output_surface.h +++ b/src/core/compositor/display_gl_output_surface.h @@ -72,11 +72,10 @@ public: void SetDrawRectangle(const gfx::Rect &drawRect) override; bool IsDisplayedAsOverlayPlane() const override; unsigned GetOverlayTextureId() const override; - gfx::BufferFormat GetOverlayBufferFormat() const override; void Reshape(const gfx::Size &size, float devicePixelRatio, const gfx::ColorSpace &colorSpace, - bool hasAlpha, + gfx::BufferFormat format, bool useStencil) override; bool HasExternalStencilTest() const override; void ApplyExternalStencil() override; @@ -86,6 +85,8 @@ public: void SetUpdateVSyncParametersCallback(viz::UpdateVSyncParametersCallback callback) override; void SetDisplayTransformHint(gfx::OverlayTransform transform) override; gfx::OverlayTransform GetDisplayTransform() override; + scoped_refptr<gpu::GpuTaskSchedulerHelper> GetGpuTaskSchedulerHelper() override; + gpu::MemoryTracker *GetMemoryTracker() override; // Overridden from Compositor. void swapFrame() override; diff --git a/src/core/config/windows.pri b/src/core/config/windows.pri index 9543daf90..732a61e28 100644 --- a/src/core/config/windows.pri +++ b/src/core/config/windows.pri @@ -6,3 +6,6 @@ qtConfig(build-qtwebengine-core):qtConfig(webengine-spellchecker) { } else { gn_args += use_browser_spellchecker=false } + +# Avoid conflicting vulkan.h headers +gn_args += enable_vulkan=false diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp index e0ce3558c..4da4f72e4 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" @@ -160,6 +166,7 @@ #include "content/public/browser/file_url_loader.h" #include "extensions/browser/extension_message_filter.h" #include "extensions/browser/guest_view/extensions_guest_view_message_filter.h" +#include "extensions/browser/url_loader_factory_manager.h" #include "extensions/common/constants.h" #include "common/extensions/extensions_client_qt.h" @@ -293,14 +300,6 @@ scoped_refptr<content::QuotaPermissionContext> ContentBrowserClientQt::CreateQuo return new QuotaPermissionContextQt; } -void ContentBrowserClientQt::GetQuotaSettings(content::BrowserContext* context, - content::StoragePartition* partition, - base::OnceCallback<void(base::Optional<storage::QuotaSettings>)> callback) -{ - storage::GetNominalDynamicSettings(partition->GetPath(), context->IsOffTheRecord(), - storage::GetDefaultDeviceInfoHelper(), std::move(callback)); -} - void ContentBrowserClientQt::AllowCertificateError(content::WebContents *webContents, int cert_error, const net::SSLInfo &ssl_info, @@ -436,7 +435,6 @@ public: if (!web_contents) return; CreateForWebContents(web_contents); - } static ServiceDriver* FromRenderFrameHost(content::RenderFrameHost *renderFrameHost) { @@ -445,17 +443,17 @@ public: return nullptr; return FromWebContents(web_contents); } - static void BindInsecureInputService(blink::mojom::InsecureInputServiceRequest request, content::RenderFrameHost *render_frame_host) + static void BindInsecureInputService(content::RenderFrameHost *render_frame_host, mojo::PendingReceiver<blink::mojom::InsecureInputService> receiver) { CreateForRenderFrameHost(render_frame_host); ServiceDriver *driver = FromRenderFrameHost(render_frame_host); if (driver) - driver->BindInsecureInputServiceRequest(std::move(request)); + driver->BindInsecureInputServiceReceiver(std::move(receiver)); } - void BindInsecureInputServiceRequest(blink::mojom::InsecureInputServiceRequest request) + void BindInsecureInputServiceReceiver(mojo::PendingReceiver<blink::mojom::InsecureInputService> receiver) { - m_insecureInputServiceBindings.AddBinding(this, std::move(request)); + m_receivers.Add(this, std::move(receiver)); } // blink::mojom::InsecureInputService: @@ -466,7 +464,7 @@ private: WEB_CONTENTS_USER_DATA_KEY_DECL(); explicit ServiceDriver(content::WebContents* /*web_contents*/) { } friend class content::WebContentsUserData<ServiceDriver>; - mojo::BindingSet<blink::mojom::InsecureInputService> m_insecureInputServiceBindings; + mojo::ReceiverSet<blink::mojom::InsecureInputService> m_receivers; }; WEB_CONTENTS_USER_DATA_KEY_IMPL(ServiceDriver) @@ -475,7 +473,6 @@ void ContentBrowserClientQt::InitFrameInterfaces() { m_frameInterfaces = std::make_unique<service_manager::BinderRegistry>(); m_frameInterfacesParameterized = std::make_unique<service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>>(); - m_frameInterfacesParameterized->AddInterface(base::BindRepeating(&ServiceDriver::BindInsecureInputService)); } void ContentBrowserClientQt::BindInterfaceRequestFromFrame(content::RenderFrameHost* render_frame_host, @@ -511,9 +508,40 @@ void ContentBrowserClientQt::RegisterBrowserInterfaceBindersForFrame( service_manager::BinderMapWithContext<content::RenderFrameHost *> *map) { Q_UNUSED(render_frame_host); + map->Add<blink::mojom::InsecureInputService>(base::BindRepeating(&ServiceDriver::BindInsecureInputService)); map->Add<network_hints::mojom::NetworkHintsHandler>(base::BindRepeating(&BindNetworkHintsHandler)); } +namespace { +void BindProcessNode(int render_process_host_id, + mojo::PendingReceiver<performance_manager::mojom::ProcessCoordinationUnit> 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::IsAvailable()); + performance_manager::PerformanceManagerImpl::CallOnGraphImpl( + 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<service_manager::mojom::Service> *receiver) { @@ -596,11 +624,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, @@ -898,6 +925,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) @@ -1071,6 +1109,7 @@ bool ContentBrowserClientQt::WillCreateURLLoaderFactory( mojo::PendingReceiver<network::mojom::URLLoaderFactory> *factory_receiver, mojo::PendingRemote<network::mojom::TrustedURLLoaderHeaderClient> *header_client, bool *bypass_redirect_checks, + bool *disable_secure_dns, network::mojom::URLLoaderFactoryOverridePtr *factory_override) { 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 f536f2427..876e6e529 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<content::QuotaPermissionContext> CreateQuotaPermissionContext() override; - void GetQuotaSettings(content::BrowserContext *context, - content::StoragePartition *partition, - base::OnceCallback<void(base::Optional<storage::QuotaSettings>)> 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<content::RenderFrameHost *> *map) override; void RunServiceInstance(const service_manager::Identity &identity, mojo::PendingReceiver<service_manager::mojom::Service> *receiver) override; + void ExposeInterfacesToRenderer(service_manager::BinderRegistry *registry, + blink::AssociatedInterfaceRegistry *associated_registry, + content::RenderProcessHost *render_process_host) override; std::vector<service_manager::Manifest> GetExtraServiceManifests() override; base::Optional<service_manager::Manifest> 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<network::mojom::URLLoaderFactory> *factory_receiver, mojo::PendingRemote<network::mojom::TrustedURLLoaderHeaderClient> *header_client, bool *bypass_redirect_checks, + bool *disable_secure_dns, network::mojom::URLLoaderFactoryOverridePtr *factory_override) override; scoped_refptr<network::SharedURLLoaderFactory> 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<ContentBrowserClientQt> m_browserClient; std::unique_ptr<ContentGpuClientQt> m_gpuClient; std::unique_ptr<ContentUtilityClientQt> 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..810c91b94 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<base::DictionaryValue> BuildObjectForResponse(const net::HttpResponseHeaders *rh) +std::unique_ptr<base::DictionaryValue> BuildObjectForResponse(const net::HttpResponseHeaders *rh, + bool success, + int net_error) { auto response = std::make_unique<base::DictionaryValue>(); - 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<base::DictionaryValue>(); 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<network::mojom::URLLoaderFactory> file_url_loader_factory; @@ -476,6 +487,22 @@ void DevToolsFrontendQt::HandleMessageFromDevToolsFrontend(const std::string &me } else if (method == "reattach") { m_agentHost->DetachClient(this); m_agentHost->AttachClient(this); + } else if (method == "inspectedURLChanged" && params && params->GetSize() >= 1) { + std::string url; + if (!params->GetString(0, &url)) + return; + const std::string kHttpPrefix = "http://"; + const std::string kHttpsPrefix = "https://"; + const std::string simplified_url = + base::StartsWith(url, kHttpsPrefix, base::CompareCase::SENSITIVE) + ? url.substr(kHttpsPrefix.length()) + : base::StartsWith(url, kHttpPrefix, base::CompareCase::SENSITIVE) + ? url.substr(kHttpPrefix.length()) + : url; + // DevTools UI is not localized. + web_contents()->UpdateTitleForEntry(web_contents()->GetController().GetActiveEntry(), + base::UTF8ToUTF16( + base::StringPrintf("DevTools - %s", simplified_url.c_str()))); } else if (method == "openInNewTab") { std::string urlString; if (!params->GetString(0, &urlString)) @@ -509,22 +536,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<const uint8_t> message) { Q_UNUSED(agentHost); - if (message.length() < kMaxMessageChunkSize) { + base::StringPiece message_sp(reinterpret_cast<const char*>(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<const uint8_t> 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 9b87d489a..3760ebb49 100644 --- a/src/core/download_manager_delegate_qt.cpp +++ b/src/core/download_manager_delegate_qt.cpp @@ -76,9 +76,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) @@ -87,13 +87,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) @@ -120,8 +121,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(); @@ -129,8 +130,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; } @@ -200,18 +204,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 f254d23c9..eda1e4f21 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, @@ -94,7 +94,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..b285aadd8 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<base::RefCountedMemory> 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<network::mojom::URLLoader> binding_; - network::mojom::URLLoaderClientPtr client_; + mojo::Receiver<network::mojom::URLLoader> receiver_{this}; + mojo::Remote<network::mojom::URLLoaderClient> client_; scoped_refptr<net::HttpResponseHeaders> response_headers_; - base::WeakPtrFactory<ResourceBundleFileLoader> weak_factory_{ this }; + base::WeakPtrFactory<ResourceBundleFileLoader> weak_factory_{this}; DISALLOW_COPY_AND_ASSIGN(ResourceBundleFileLoader); }; @@ -379,7 +377,7 @@ void ExtensionsBrowserClientQt::LoadResourceFromResourceBundle(const network::Re bool ExtensionsBrowserClientQt::AllowCrossRendererResourceLoad(const GURL &url, - content::ResourceType resource_type, + blink::mojom::ResourceType resource_type, ui::PageTransition page_transition, int child_id, bool is_incognito, @@ -449,13 +447,6 @@ ExtensionSystemProvider *ExtensionsBrowserClientQt::GetExtensionSystemFactory() return ExtensionSystemFactoryQt::GetInstance(); } -void ExtensionsBrowserClientQt::RegisterExtensionInterfaces(service_manager::BinderRegistryWithArgs<content::RenderFrameHost *> *registry, - content::RenderFrameHost *render_frame_host, - const Extension *extension) const -{ - RegisterInterfacesForExtension(registry, render_frame_host, extension); -} - void ExtensionsBrowserClientQt::RegisterBrowserInterfaceBindersForFrame( service_manager::BinderMapWithContext<content::RenderFrameHost*> *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..b7f944635 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 { @@ -74,7 +76,7 @@ public: bool IsExtensionIncognitoEnabled(const std::string &extension_id, content::BrowserContext *context) const override; bool CanExtensionCrossIncognito(const Extension *extension, content::BrowserContext *context) const override; bool AllowCrossRendererResourceLoad(const GURL &url, - content::ResourceType resource_type, + blink::mojom::ResourceType resource_type, ui::PageTransition page_transition, int child_id, bool is_incognito, @@ -94,9 +96,6 @@ public: void RegisterBrowserInterfaceBindersForFrame(service_manager::BinderMapWithContext<content::RenderFrameHost*> *, content::RenderFrameHost *, const extensions::Extension *) const override; std::unique_ptr<RuntimeAPIDelegate> CreateRuntimeAPIDelegate(content::BrowserContext *context) const override; - void RegisterExtensionInterfaces(service_manager::BinderRegistryWithArgs<content::RenderFrameHost *> *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/extensions/mime_handler_view_guest_delegate_qt.cpp b/src/core/extensions/mime_handler_view_guest_delegate_qt.cpp index 022bc7db6..58f4f209a 100644 --- a/src/core/extensions/mime_handler_view_guest_delegate_qt.cpp +++ b/src/core/extensions/mime_handler_view_guest_delegate_qt.cpp @@ -46,8 +46,8 @@ #include "content/browser/browser_plugin/browser_plugin_guest.h" #include "content/browser/web_contents/web_contents_impl.h" +#include "content/public/browser/context_menu_params.h" #include "content/public/browser/web_contents.h" -#include "content/public/common/context_menu_params.h" #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h" namespace extensions { diff --git a/src/core/net/cookie_monster_delegate_qt.cpp b/src/core/net/cookie_monster_delegate_qt.cpp index 263973684..a7a3a9348 100644 --- a/src/core/net/cookie_monster_delegate_qt.cpp +++ b/src/core/net/cookie_monster_delegate_qt.cpp @@ -78,9 +78,9 @@ public: CookieAccessFilter(CookieMonsterDelegateQt *delegate) : m_delegate(delegate) { } ~CookieAccessFilter() override = default; - void AllowedAccess(const GURL& url, const GURL& site_for_cookies, AllowedAccessCallback callback) override + void AllowedAccess(const GURL &url, const net::SiteForCookies &site_for_cookies, AllowedAccessCallback callback) override { - bool allow = m_delegate->canGetCookies(toQt(site_for_cookies), toQt(url)); + bool allow = m_delegate->canGetCookies(toQt(site_for_cookies.RepresentativeUrl()), toQt(url)); std::move(callback).Run(allow); } 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::HttpResponseHeaders>(net::HttpUtil::AssembleRawHeaders(headers)); - m_head.encoded_data_length = m_head.headers->raw_headers().length(); + m_head->headers = base::MakeRefCounted<net::HttpResponseHeaders>(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::HttpResponseHeaders>(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::HttpResponseHeaders>(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/plugin_response_interceptor_url_loader_throttle.cpp b/src/core/net/plugin_response_interceptor_url_loader_throttle.cpp index e75900822..f6bddd7b2 100644 --- a/src/core/net/plugin_response_interceptor_url_loader_throttle.cpp +++ b/src/core/net/plugin_response_interceptor_url_loader_throttle.cpp @@ -46,7 +46,6 @@ #include "content/public/browser/download_manager.h" #include "content/public/browser/download_request_utils.h" #include "content/public/browser/download_utils.h" -#include "content/public/common/resource_type.h" #include "extensions/common/constants.h" #include "extensions/common/extension.h" diff --git a/src/core/net/proxy_config_service_qt.cpp b/src/core/net/proxy_config_service_qt.cpp index 59884961d..bc934c960 100644 --- a/src/core/net/proxy_config_service_qt.cpp +++ b/src/core/net/proxy_config_service_qt.cpp @@ -48,7 +48,7 @@ #include "base/bind.h" #include "components/proxy_config/pref_proxy_config_tracker_impl.h" #include "content/public/browser/browser_thread.h" -#include "net/proxy_resolution/proxy_resolution_service.h" +#include "net/proxy_resolution/configured_proxy_resolution_service.h" using content::BrowserThread; @@ -72,7 +72,7 @@ net::ProxyServer ProxyConfigServiceQt::fromQNetworkProxy(const QNetworkProxy &qt ProxyConfigServiceQt::ProxyConfigServiceQt(PrefService *prefService, const scoped_refptr<base::SingleThreadTaskRunner> &taskRunner) - : m_baseService(net::ProxyResolutionService::CreateSystemProxyConfigService(taskRunner)) + : m_baseService(net::ConfiguredProxyResolutionService::CreateSystemProxyConfigService(taskRunner)) , m_usesSystemConfiguration(false) , m_registeredObserver(false) , m_prefState(prefService 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<network::mojom::CookieChangeListener> 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<network::mojom::CookieChangeListener> 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<ProfileIODataQt> profileIoData, diff --git a/src/core/net/proxying_url_loader_factory_qt.cpp b/src/core/net/proxying_url_loader_factory_qt.cpp index b42aa64bb..d63659d2d 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" @@ -73,11 +72,33 @@ namespace QtWebEngineCore { +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeMainFrame, blink::mojom::ResourceType::kMainFrame) +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeSubFrame, blink::mojom::ResourceType::kSubFrame) +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeStylesheet, blink::mojom::ResourceType::kStylesheet) +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeScript, blink::mojom::ResourceType::kScript) +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeImage, blink::mojom::ResourceType::kImage) +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeFontResource, blink::mojom::ResourceType::kFontResource) +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeSubResource, blink::mojom::ResourceType::kSubResource) +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeObject, blink::mojom::ResourceType::kObject) +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeMedia, blink::mojom::ResourceType::kMedia) +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeWorker, blink::mojom::ResourceType::kWorker) +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeSharedWorker, blink::mojom::ResourceType::kSharedWorker) +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypePrefetch, blink::mojom::ResourceType::kPrefetch) +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeFavicon, blink::mojom::ResourceType::kFavicon) +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeXhr, blink::mojom::ResourceType::kXhr) +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypePing, blink::mojom::ResourceType::kPing) +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeServiceWorker, blink::mojom::ResourceType::kServiceWorker) +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeCspReport, blink::mojom::ResourceType::kCspReport) +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypePluginResource, blink::mojom::ResourceType::kPluginResource) +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeNavigationPreloadMainFrame, blink::mojom::ResourceType::kNavigationPreloadMainFrame) +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeNavigationPreloadSubFrame, blink::mojom::ResourceType::kNavigationPreloadSubFrame) +ASSERT_ENUMS_MATCH(QWebEngineUrlRequestInfo::ResourceTypeLast, blink::mojom::ResourceType::kMaxValue) + extern WebContentsAdapterClient::NavigationType pageTransitionToNavigationType(ui::PageTransition transition); -static QWebEngineUrlRequestInfo::ResourceType toQt(content::ResourceType resourceType) +static QWebEngineUrlRequestInfo::ResourceType toQt(blink::mojom::ResourceType resourceType) { - if (resourceType >= content::ResourceType::kMainFrame && resourceType <= content::ResourceType::kMaxValue) + if (resourceType >= blink::mojom::ResourceType::kMinValue && resourceType <= blink::mojom::ResourceType::kMaxValue) return static_cast<QWebEngineUrlRequestInfo::ResourceType>(resourceType); return QWebEngineUrlRequestInfo::ResourceTypeUnknown; } @@ -151,7 +172,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 +210,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())); @@ -204,7 +226,7 @@ InterceptedRequest::~InterceptedRequest() void InterceptedRequest::Restart() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - content::ResourceType resourceType = content::ResourceType(request_.resource_type); + blink::mojom::ResourceType resourceType = blink::mojom::ResourceType(request_.resource_type); WebContentsAdapterClient::NavigationType navigationType = pageTransitionToNavigationType(ui::PageTransition(request_.transition_type)); @@ -219,12 +241,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, @@ -258,7 +280,7 @@ void InterceptedRequest::InterceptOnIOThread(base::WaitableEvent *event) void InterceptedRequest::InterceptOnUIThread() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - if (profile_request_interceptor_) + if (profile_request_interceptor_ && !profile_request_interceptor_->property("deprecated").toBool()) profile_request_interceptor_->interceptRequest(request_info_); if (!request_info_.changed() && page_request_interceptor_) @@ -283,7 +305,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 +313,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 +341,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 +350,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<bool(const std::strin // prior to this query, otherwise false. content::SSLHostStateDelegate::CertJudgment SSLHostStateDelegateQt::QueryPolicy(const std::string &host, const net::X509Certificate &cert, - int error) + int error, content::WebContents *) { return m_certPolicyforHost[host].Check(cert, error) ? SSLHostStateDelegate::ALLOWED : SSLHostStateDelegate::DENIED; } @@ -132,7 +132,7 @@ void SSLHostStateDelegateQt::RevokeUserAllowExceptions(const std::string &host) // |host|. This does not mean that *all* certificate errors are allowed, just // that there exists an exception. To see if a particular certificate and // error combination exception is allowed, use QueryPolicy(). -bool SSLHostStateDelegateQt::HasAllowException(const std::string &host) +bool SSLHostStateDelegateQt::HasAllowException(const std::string &host, content::WebContents *) { auto policy_iterator = m_certPolicyforHost.find(host); return policy_iterator != m_certPolicyforHost.end() && diff --git a/src/core/net/ssl_host_state_delegate_qt.h b/src/core/net/ssl_host_state_delegate_qt.h index 26e503eb5..6b407353a 100644 --- a/src/core/net/ssl_host_state_delegate_qt.h +++ b/src/core/net/ssl_host_state_delegate_qt.h @@ -66,13 +66,13 @@ public: ~SSLHostStateDelegateQt(); // content::SSLHostStateDelegate implementation: - void AllowCert(const std::string &, const net::X509Certificate &cert, int error) override; + void AllowCert(const std::string &, const net::X509Certificate &cert, int error, content::WebContents *web_contents) override; void Clear(base::RepeatingCallback<bool(const std::string&)> 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<std::string, CertPolicy> 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 <QtCore/QPointer> @@ -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<ProfileAdapter> m_profileAdapter; - scoped_refptr<base::TaskRunner> m_ioTaskRunner; + scoped_refptr<base::SequencedTaskRunner> m_ioTaskRunner; }; } // namespace QtWebEngineCore diff --git a/src/core/ozone/gl_context_qt.cpp b/src/core/ozone/gl_context_qt.cpp index 10347bdc7..e511e8eb5 100644 --- a/src/core/ozone/gl_context_qt.cpp +++ b/src/core/ozone/gl_context_qt.cpp @@ -123,7 +123,8 @@ void* GLContextHelper::getEGLConfig() void* GLContextHelper::getGlXConfig() { - return resourceForContext(QByteArrayLiteral("glxconfig")); + QByteArray resource = QByteArrayLiteral("glxconfig"); + return resourceForContext(resource); } void* GLContextHelper::getEGLDisplay() @@ -172,6 +173,24 @@ QFunctionPointer GLContextHelper::getEglGetProcAddress() return get_proc_address; } +void *GLContextHelper::getGlxPlatformInterface() +{ +#if QT_CONFIG(opengl) && defined(USE_GLX) + if (QOpenGLContext *context = qt_gl_global_share_context()) + return context->platformInterface<QPlatformInterface::QGLXContext>(); +#endif + return nullptr; +} + +void *GLContextHelper::getEglPlatformInterface() +{ +#if QT_CONFIG(opengl) && QT_CONFIG(egl) + if (QOpenGLContext *context = qt_gl_global_share_context()) + return context->platformInterface<QPlatformInterface::QEGLContext>(); +#endif + return nullptr; +} + bool GLContextHelper::isCreateContextRobustnessSupported() { return contextHelper->m_robustness; diff --git a/src/core/ozone/gl_context_qt.h b/src/core/ozone/gl_context_qt.h index cc4f6b0d1..612aae3f5 100644 --- a/src/core/ozone/gl_context_qt.h +++ b/src/core/ozone/gl_context_qt.h @@ -65,6 +65,8 @@ public: static QFunctionPointer getGlXGetProcAddress(); static QFunctionPointer getEglGetProcAddress(); static bool isCreateContextRobustnessSupported(); + static void *getGlxPlatformInterface(); + static void *getEglPlatformInterface(); private: Q_INVOKABLE bool initializeContextOnBrowserThread(gl::GLContext* context, gl::GLSurface* surface, gl::GLContextAttribs attribs); diff --git a/src/core/ozone/gl_ozone_egl_qt.cpp b/src/core/ozone/gl_ozone_egl_qt.cpp index c692920cf..a8b7cdfe4 100644 --- a/src/core/ozone/gl_ozone_egl_qt.cpp +++ b/src/core/ozone/gl_ozone_egl_qt.cpp @@ -38,32 +38,21 @@ ****************************************************************************/ #if defined(USE_OZONE) -#include "gl_ozone_egl_qt.h" #include "gl_context_qt.h" +#include "gl_ozone_egl_qt.h" #include "gl_surface_egl_qt.h" + #include "base/files/file_path.h" #include "base/native_library.h" -#include "gl_context_qt.h" -#include "gl_ozone_egl_qt.h" #include "ui/gl/gl_context_egl.h" #include "ui/gl/gl_implementation.h" #include "ui/gl/gl_surface.h" #include "ui/gl/init/gl_factory.h" #include "ui/gl/init/gl_initializer.h" - #include <EGL/egl.h> #include <dlfcn.h> -#include <QtGui/qtgui-config.h> - -#if QT_CONFIG(opengl) -#include <QOpenGLContext> -QT_BEGIN_NAMESPACE -Q_GUI_EXPORT QOpenGLContext *qt_gl_global_share_context(); -QT_END_NAMESPACE -#endif - namespace ui { base::NativeLibrary LoadLibrary(const base::FilePath& filename) { @@ -88,15 +77,11 @@ bool GLOzoneEGLQt::LoadGLES2Bindings(gl::GLImplementation /*implementation*/) reinterpret_cast<gl::GLGetProcAddressProc>( base::GetFunctionPointerFromNativeLibrary(eglgles2Library, "eglGetProcAddress")); -#if QT_CONFIG(opengl) if (!get_proc_address) { // QTBUG-63341 most likely libgles2 not linked with libegl -> fallback to qpa - if (QOpenGLContext *context = qt_gl_global_share_context()) { - get_proc_address = reinterpret_cast<gl::GLGetProcAddressProc>( - context->getProcAddress("eglGetProcAddress")); - } + QFunctionPointer address = GLContextHelper::getEglGetProcAddress(); + get_proc_address = reinterpret_cast<gl::GLGetProcAddressProc>(address); } -#endif if (!get_proc_address) { LOG(ERROR) << "eglGetProcAddress not found."; @@ -142,14 +127,11 @@ scoped_refptr<gl::GLSurface> GLOzoneEGLQt::CreateOffscreenGLSurface(const gfx::S return nullptr; } -intptr_t GLOzoneEGLQt::GetNativeDisplay() +gl::EGLDisplayPlatform GLOzoneEGLQt::GetNativeDisplay() { static void *display = GLContextHelper::getNativeDisplay(); - - if (display) - return reinterpret_cast<intptr_t>(display); - - return reinterpret_cast<intptr_t>(EGL_DEFAULT_DISPLAY); + static gl::EGLDisplayPlatform platform(display ? reinterpret_cast<intptr_t>(display) : EGL_DEFAULT_DISPLAY); + return platform; } } // namespace ui diff --git a/src/core/ozone/gl_ozone_egl_qt.h b/src/core/ozone/gl_ozone_egl_qt.h index c24d03a81..c55ba232c 100644 --- a/src/core/ozone/gl_ozone_egl_qt.h +++ b/src/core/ozone/gl_ozone_egl_qt.h @@ -58,7 +58,7 @@ public: protected: // Returns native platform display handle. This is used to obtain the EGL // display connection for the native display. - intptr_t GetNativeDisplay() override; + gl::EGLDisplayPlatform GetNativeDisplay() override; // Sets up GL bindings for the native surface. bool LoadGLES2Bindings(gl::GLImplementation implementation) override; 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..8e8e66f63 100644 --- a/src/core/ozone/gl_surface_egl_qt.cpp +++ b/src/core/ozone/gl_surface_egl_qt.cpp @@ -194,8 +194,7 @@ bool GLSurfaceEGL::HasEGLExtension(const char* name) { return ExtensionsContain(GetEGLExtensions(), name); } - -bool GLSurfaceEGL::InitializeOneOff(EGLNativeDisplayType /*native_display*/) +bool GLSurfaceEGL::InitializeOneOff(gl::EGLDisplayPlatform /*native_display*/) { return GLSurfaceEGLQt::InitializeOneOff(); } @@ -252,7 +251,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 +302,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/gl_surface_qt.cpp b/src/core/ozone/gl_surface_qt.cpp index 4be17f12b..90f486532 100644 --- a/src/core/ozone/gl_surface_qt.cpp +++ b/src/core/ozone/gl_surface_qt.cpp @@ -243,6 +243,17 @@ bool DirectCompositionSurfaceWin::IsSwapChainTearingSupported() { return false; } + +bool DirectCompositionSurfaceWin::AreOverlaysSupported() +{ + return false; +} + +UINT DirectCompositionSurfaceWin::GetOverlaySupportFlags(DXGI_FORMAT format) +{ + Q_UNUSED(format); + return 0; +} } // namespace gl #endif #endif // !defined(OS_MACOSX) 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<ui::SystemInputInjector> CreateSystemInputInjector() override; ui::OverlayManagerOzone* GetOverlayManager() override; - std::unique_ptr<InputMethod> CreateInputMethod(internal::InputMethodDelegate *delegate) override; + std::unique_ptr<InputMethod> CreateInputMethod(internal::InputMethodDelegate *delegate, gfx::AcceleratedWidget widget) override; std::unique_ptr<ui::PlatformScreen> 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<InputMethod> OzonePlatformQt::CreateInputMethod(internal::InputMethodDelegate *) +std::unique_ptr<InputMethod> OzonePlatformQt::CreateInputMethod(internal::InputMethodDelegate *, gfx::AcceleratedWidget) { NOTREACHED(); return nullptr; diff --git a/src/core/ozone/surface_factory_qt.cpp b/src/core/ozone/surface_factory_qt.cpp index 037641672..846d930d6 100644 --- a/src/core/ozone/surface_factory_qt.cpp +++ b/src/core/ozone/surface_factory_qt.cpp @@ -37,46 +37,31 @@ ** ****************************************************************************/ -#include "surface_factory_qt.h" -#include "gl_context_qt.h" -#include "gl_ozone_egl_qt.h" -#if defined(USE_GLX) -#include "gl_ozone_glx_qt.h" -#endif - -#include "ui/gl/gl_surface.h" - #if defined(USE_OZONE) +#include "surface_factory_qt.h" +#include "ozone/gl_context_qt.h" #include "ozone/gl_ozone_egl_qt.h" -#include "ozone/surface_factory_qt.h" -#include "ui/gl/gl_surface.h" - -#include <QtGui/qtgui-config.h> -#include <QOpenGLContext> +#if defined(USE_GLX) +#include "ozone/gl_ozone_glx_qt.h" +#endif namespace QtWebEngineCore { SurfaceFactoryQt::SurfaceFactoryQt() { - QOpenGLContext *context = QOpenGLContext::globalShareContext(); #if defined(USE_GLX) - auto *glx = context->platformInterface<QPlatformInterface::QGLXContext>(); - if (glx) { + if (GLContextHelper::getGlxPlatformInterface()) { m_impl = { gl::kGLImplementationDesktopGL }; m_ozone.reset(new ui::GLOzoneGLXQt()); - return; - } + } else #endif -#if QT_CONFIG(egl) - auto *egl = context->platformInterface<QPlatformInterface::QEGLContext>(); - if (egl) { + if (GLContextHelper::getEglPlatformInterface()) { m_impl = { gl::kGLImplementationDesktopGL, gl::kGLImplementationEGLGLES2 }; m_ozone.reset(new ui::GLOzoneEGLQt()); - return; + } else { + qFatal("No suitable graphics backend found\n"); } -#endif - qFatal("No suitable graphics backend found\n"); } std::vector<gl::GLImplementation> SurfaceFactoryQt::GetAllowedGLImplementations() diff --git a/src/core/permission_manager_qt.cpp b/src/core/permission_manager_qt.cpp index e232508b4..8b9eab3eb 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,11 @@ 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::STORAGE_ACCESS_GRANT: case content::PermissionType::NUM: - NOTIMPLEMENTED() << "Unsupported permission type: " << static_cast<int>(type); + LOG(INFO) << "Unsupported permission type: " << static_cast<int>(type); break; } return ProfileAdapter::UnsupportedPermission; @@ -302,14 +305,14 @@ 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<WebContentsDelegateQt *>( content::WebContents::FromRenderFrameHost(render_frame_host)->GetDelegate()); if (!delegate->webEngineSettings()->testAttribute( QWebEngineSettings::JavascriptCanAccessClipboard)) return blink::mojom::PermissionStatus::DENIED; - if (permission == content::PermissionType::CLIPBOARD_READ + if (permission == content::PermissionType::CLIPBOARD_READ_WRITE && !delegate->webEngineSettings()->testAttribute( QWebEngineSettings::JavascriptCanPaste)) return blink::mojom::PermissionStatus::DENIED; diff --git a/src/core/printing/print_view_manager_base_qt.cpp b/src/core/printing/print_view_manager_base_qt.cpp index 34c86e506..a6c478037 100644 --- a/src/core/printing/print_view_manager_base_qt.cpp +++ b/src/core/printing/print_view_manager_base_qt.cpp @@ -127,7 +127,7 @@ void PrintViewManagerBaseQt::PrintDocument(printing::PrintedDocument *document, { std::unique_ptr<printing::MetafileSkia> metafile = std::make_unique<printing::MetafileSkia>(); - CHECK(metafile->InitFromData(print_data->front(), print_data->size())); + CHECK(metafile->InitFromData(*print_data)); // Update the rendered document. It will send notifications to the listener. document->SetDocument(std::move(metafile), page_size, content_area); diff --git a/src/core/printing/print_view_manager_qt.cpp b/src/core/printing/print_view_manager_qt.cpp index 79e92fd6a..df7fcc0fc 100644 --- a/src/core/printing/print_view_manager_qt.cpp +++ b/src/core/printing/print_view_manager_qt.cpp @@ -102,7 +102,7 @@ static void SavePdfFile(scoped_refptr<base::RefCountedBytes> data, DCHECK_GT(data->size(), 0U); printing::MetafileSkia metafile; - metafile.InitFromData(static_cast<const void*>(data->front()), data->size()); + metafile.InitFromData(base::as_bytes(base::make_span(data->front(), data->size()))); base::File file(path, base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE); @@ -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<printing::mojom::PrintRenderFrame> printRenderFrame; + m_printPreviewRfh->GetRemoteAssociatedInterfaces()->GetInterface(&printRenderFrame); + printRenderFrame->PrintPreview(m_printSettings->Clone()); PrintPreviewDone(); } diff --git a/src/core/profile_adapter.cpp b/src/core/profile_adapter.cpp index c436c8277..b0b48af03 100644 --- a/src/core/profile_adapter.cpp +++ b/src/core/profile_adapter.cpp @@ -323,7 +323,7 @@ void ProfileAdapter::setHttpUserAgent(const QString &userAgent) std::vector<content::WebContentsImpl *> list = content::WebContentsImpl::GetAllWebContents(); for (content::WebContentsImpl *web_contents : list) if (web_contents->GetBrowserContext() == m_profile.data()) - web_contents->SetUserAgentOverride(stdUserAgent, true); + web_contents->SetUserAgentOverride(blink::UserAgentOverride::UserAgentOnly(stdUserAgent), true); content::BrowserContext::ForEachStoragePartition( m_profile.get(), base::BindRepeating([](const std::string &user_agent, content::StoragePartition *storage_partition) { 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..a329da5ab 100644 --- a/src/core/qtwebengine_sources.gni +++ b/src/core/qtwebengine_sources.gni @@ -39,8 +39,19 @@ source_set("qtwebengine_spellcheck_sources") { } } +config("cpp17_config") { + # static initialized constexpr expressions must be compiled always as c++14 or always as c++17 + # and our qtwebengine core sources use them as c++17 + if (is_win) { + cflags_cc = [ "/std:c++17" ] + } else { + cflags_cc = [ "-std=c++17" ] + } +} + source_set("qtwebengine_sources") { configs += [ + ":cpp17_config", "//skia:skia_config", "//third_party/boringssl:external_config", ] @@ -50,6 +61,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 +82,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<QuotaRequestControllerImpl>::create(this, params, callback)); + QSharedPointer<QuotaRequestControllerImpl>::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 9be6fac9a..fbb4c5bd6 100644 --- a/src/core/render_widget_host_view_qt.cpp +++ b/src/core/render_widget_host_view_qt.cpp @@ -56,17 +56,18 @@ #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/frame_host/frame_tree.h" #include "content/browser/frame_host/render_frame_host_impl.h" #include "content/browser/renderer_host/input/synthetic_gesture_target.h" #include "content/browser/renderer_host/render_view_host_delegate.h" #include "content/browser/renderer_host/render_view_host_impl.h" -#include "content/common/content_switches_internal.h" #include "content/browser/renderer_host/render_widget_host_input_event_router.h" +#include "content/common/content_switches_internal.h" #include "content/common/cursors/webcursor.h" #include "content/common/input_messages.h" #include "third_party/skia/include/core/SkColor.h" -#include "third_party/blink/public/platform/web_cursor_info.h" +#include "ui/base/cursor/cursor.h" #include "ui/events/blink/blink_event_util.h" #include "ui/events/event.h" #include "ui/events/gesture_detection/gesture_configuration.h" @@ -78,7 +79,7 @@ #endif #if defined(USE_AURA) -#include "ui/base/cursor/cursor.h" +#include "ui/base/cursor/cursor_size.h" #include "ui/base/cursor/cursors_aura.h" #include "ui/base/resource/resource_bundle.h" #endif @@ -118,6 +119,33 @@ static inline ui::GestureProvider::Config QtGestureProviderConfig() { return config; } +// 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, + scoped_refptr<base::SingleThreadTaskRunner> task_runner, + bool enable_pixel_canvas, + bool use_external_begin_frame_control = false, + bool force_software_compositor = false) + : ui::Compositor(frame_sink_id, context_factory, + task_runner, enable_pixel_canvas, + use_external_begin_frame_control, + force_software_compositor) + , 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()) @@ -138,11 +166,10 @@ 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( - contextFactoryPrivate->AllocateFrameSinkId(), + m_uiCompositor.reset(new FlingingCompositor( + this, + contextFactory->AllocateFrameSinkId(), contextFactory, - contextFactoryPrivate, m_taskRunner, false /* enable_pixel_canvas */)); m_uiCompositor->SetAcceleratedWidget(gfx::kNullAcceleratedWidget); // null means offscreen @@ -320,17 +347,30 @@ void RenderWidgetHostViewQt::UpdateBackgroundColor() m_uiCompositor->SetBackgroundColor(color); content::RenderViewHost *rvh = content::RenderViewHost::From(host()); - host()->Send(new RenderViewObserverQt_SetBackgroundColor(rvh->GetRoutingID(), color)); + if (color == SK_ColorTRANSPARENT) + host()->owner_delegate()->SetBackgroundOpaque(false); + else + host()->Send(new RenderViewObserverQt_SetBackgroundColor(rvh->GetRoutingID(), color)); } // Return value indicates whether the mouse is locked successfully or not. -bool RenderWidgetHostViewQt::LockMouse(bool) +blink::mojom::PointerLockResult RenderWidgetHostViewQt::LockMouse(bool request_unadjusted_movement) { + if (request_unadjusted_movement) + return blink::mojom::PointerLockResult::kUnsupportedOptions; + delegateClient()->resetPreviousMousePosition(); m_delegate->lockMouse(); m_isMouseLocked = true; qApp->setOverrideCursor(Qt::BlankCursor); - return true; + return blink::mojom::PointerLockResult::kSuccess; +} + +blink::mojom::PointerLockResult RenderWidgetHostViewQt::ChangeMouseLock(bool request_unadjusted_movement) +{ + if (request_unadjusted_movement) + return blink::mojom::PointerLockResult::kUnsupportedOptions; + return blink::mojom::PointerLockResult::kSuccess; } void RenderWidgetHostViewQt::UnlockMouse() @@ -348,134 +388,134 @@ void RenderWidgetHostViewQt::UpdateCursor(const content::WebCursor &webCursor) void RenderWidgetHostViewQt::DisplayCursor(const content::WebCursor &webCursor) { - const content::CursorInfo &cursorInfo = webCursor.info(); + const ui::Cursor &cursorInfo = webCursor.cursor(); Qt::CursorShape shape = Qt::ArrowCursor; #if defined(USE_AURA) - ui::CursorType auraType = ui::CursorType::kNull; + ui::mojom::CursorType auraType = ui::mojom::CursorType::kNull; #endif - switch (cursorInfo.type) { - case ui::CursorType::kNull: - case ui::CursorType::kPointer: + switch (cursorInfo.type()) { + case ui::mojom::CursorType::kNull: + case ui::mojom::CursorType::kPointer: shape = Qt::ArrowCursor; break; - case ui::CursorType::kCross: + case ui::mojom::CursorType::kCross: shape = Qt::CrossCursor; break; - case ui::CursorType::kHand: + case ui::mojom::CursorType::kHand: shape = Qt::PointingHandCursor; break; - case ui::CursorType::kIBeam: + case ui::mojom::CursorType::kIBeam: shape = Qt::IBeamCursor; break; - case ui::CursorType::kWait: + case ui::mojom::CursorType::kWait: shape = Qt::WaitCursor; break; - case ui::CursorType::kHelp: + case ui::mojom::CursorType::kHelp: shape = Qt::WhatsThisCursor; break; - case ui::CursorType::kEastResize: - case ui::CursorType::kWestResize: - case ui::CursorType::kEastWestResize: - case ui::CursorType::kEastPanning: - case ui::CursorType::kWestPanning: - case ui::CursorType::kMiddlePanningHorizontal: + case ui::mojom::CursorType::kEastResize: + case ui::mojom::CursorType::kWestResize: + case ui::mojom::CursorType::kEastWestResize: + case ui::mojom::CursorType::kEastPanning: + case ui::mojom::CursorType::kWestPanning: + case ui::mojom::CursorType::kMiddlePanningHorizontal: shape = Qt::SizeHorCursor; break; - case ui::CursorType::kNorthResize: - case ui::CursorType::kSouthResize: - case ui::CursorType::kNorthSouthResize: - case ui::CursorType::kNorthPanning: - case ui::CursorType::kSouthPanning: - case ui::CursorType::kMiddlePanningVertical: + case ui::mojom::CursorType::kNorthResize: + case ui::mojom::CursorType::kSouthResize: + case ui::mojom::CursorType::kNorthSouthResize: + case ui::mojom::CursorType::kNorthPanning: + case ui::mojom::CursorType::kSouthPanning: + case ui::mojom::CursorType::kMiddlePanningVertical: shape = Qt::SizeVerCursor; break; - case ui::CursorType::kNorthEastResize: - case ui::CursorType::kSouthWestResize: - case ui::CursorType::kNorthEastSouthWestResize: - case ui::CursorType::kNorthEastPanning: - case ui::CursorType::kSouthWestPanning: + case ui::mojom::CursorType::kNorthEastResize: + case ui::mojom::CursorType::kSouthWestResize: + case ui::mojom::CursorType::kNorthEastSouthWestResize: + case ui::mojom::CursorType::kNorthEastPanning: + case ui::mojom::CursorType::kSouthWestPanning: shape = Qt::SizeBDiagCursor; break; - case ui::CursorType::kNorthWestResize: - case ui::CursorType::kSouthEastResize: - case ui::CursorType::kNorthWestSouthEastResize: - case ui::CursorType::kNorthWestPanning: - case ui::CursorType::kSouthEastPanning: + case ui::mojom::CursorType::kNorthWestResize: + case ui::mojom::CursorType::kSouthEastResize: + case ui::mojom::CursorType::kNorthWestSouthEastResize: + case ui::mojom::CursorType::kNorthWestPanning: + case ui::mojom::CursorType::kSouthEastPanning: shape = Qt::SizeFDiagCursor; break; - case ui::CursorType::kColumnResize: + case ui::mojom::CursorType::kColumnResize: shape = Qt::SplitHCursor; break; - case ui::CursorType::kRowResize: + case ui::mojom::CursorType::kRowResize: shape = Qt::SplitVCursor; break; - case ui::CursorType::kMiddlePanning: - case ui::CursorType::kMove: + case ui::mojom::CursorType::kMiddlePanning: + case ui::mojom::CursorType::kMove: shape = Qt::SizeAllCursor; break; - case ui::CursorType::kProgress: + case ui::mojom::CursorType::kProgress: shape = Qt::BusyCursor; break; - case ui::CursorType::kDndNone: - case ui::CursorType::kDndMove: + case ui::mojom::CursorType::kDndNone: + case ui::mojom::CursorType::kDndMove: shape = Qt::DragMoveCursor; break; - case ui::CursorType::kDndCopy: - case ui::CursorType::kCopy: + case ui::mojom::CursorType::kDndCopy: + case ui::mojom::CursorType::kCopy: shape = Qt::DragCopyCursor; break; - case ui::CursorType::kDndLink: - case ui::CursorType::kAlias: + case ui::mojom::CursorType::kDndLink: + case ui::mojom::CursorType::kAlias: shape = Qt::DragLinkCursor; break; #if defined(USE_AURA) - case ui::CursorType::kVerticalText: - auraType = ui::CursorType::kVerticalText; + case ui::mojom::CursorType::kVerticalText: + auraType = ui::mojom::CursorType::kVerticalText; break; - case ui::CursorType::kCell: - auraType = ui::CursorType::kCell; + case ui::mojom::CursorType::kCell: + auraType = ui::mojom::CursorType::kCell; break; - case ui::CursorType::kContextMenu: - auraType = ui::CursorType::kContextMenu; + case ui::mojom::CursorType::kContextMenu: + auraType = ui::mojom::CursorType::kContextMenu; break; - case ui::CursorType::kZoomIn: - auraType = ui::CursorType::kZoomIn; + case ui::mojom::CursorType::kZoomIn: + auraType = ui::mojom::CursorType::kZoomIn; break; - case ui::CursorType::kZoomOut: - auraType = ui::CursorType::kZoomOut; + case ui::mojom::CursorType::kZoomOut: + auraType = ui::mojom::CursorType::kZoomOut; break; #else - case ui::CursorType::kVerticalText: - case ui::CursorType::kCell: - case ui::CursorType::kContextMenu: - case ui::CursorType::kZoomIn: - case ui::CursorType::kZoomOut: + case ui::mojom::CursorType::kVerticalText: + case ui::mojom::CursorType::kCell: + case ui::mojom::CursorType::kContextMenu: + case ui::mojom::CursorType::kZoomIn: + case ui::mojom::CursorType::kZoomOut: // FIXME: Support on OS X break; #endif - case ui::CursorType::kNoDrop: - case ui::CursorType::kNotAllowed: + case ui::mojom::CursorType::kNoDrop: + case ui::mojom::CursorType::kNotAllowed: shape = Qt::ForbiddenCursor; break; - case ui::CursorType::kNone: + case ui::mojom::CursorType::kNone: shape = Qt::BlankCursor; break; - case ui::CursorType::kGrab: + case ui::mojom::CursorType::kGrab: shape = Qt::OpenHandCursor; break; - case ui::CursorType::kGrabbing: + case ui::mojom::CursorType::kGrabbing: shape = Qt::ClosedHandCursor; break; - case ui::CursorType::kCustom: - if (cursorInfo.custom_image.colorType() == SkColorType::kN32_SkColorType) { - QImage cursor = toQImage(cursorInfo.custom_image, QImage::Format_ARGB32); - m_delegate->updateCursor(QCursor(QPixmap::fromImage(cursor), cursorInfo.hotspot.x(), cursorInfo.hotspot.y())); + case ui::mojom::CursorType::kCustom: + if (cursorInfo.custom_bitmap().colorType() == SkColorType::kN32_SkColorType) { + QImage cursor = toQImage(cursorInfo.custom_bitmap(), QImage::Format_ARGB32); + m_delegate->updateCursor(QCursor(QPixmap::fromImage(cursor), cursorInfo.custom_hotspot().x(), cursorInfo.custom_hotspot().y())); return; } break; } #if defined(USE_AURA) - if (auraType != ui::CursorType::kNull) { + if (auraType != ui::mojom::CursorType::kNull) { int resourceId; gfx::Point hotspot; // GetCursorDataFor only knows hotspots for 1x and 2x cursor images, in physical pixels. @@ -541,18 +581,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<viz::HitTestRegionList> hit_test_region_list) -{ - // Not used with viz - NOTREACHED(); -} - void RenderWidgetHostViewQt::GetScreenInfo(content::ScreenInfo *results) { *results = m_screenInfo; @@ -830,12 +858,6 @@ content::MouseWheelPhaseHandler *RenderWidgetHostViewQt::GetMouseWheelPhaseHandl return &m_mouseWheelPhaseHandler; } -void RenderWidgetHostViewQt::SetNeedsBeginFrames(bool needs_begin_frames) -{ - // Not used with viz - NOTREACHED(); -} - content::RenderFrameHost *RenderWidgetHostViewQt::getFocusedFrameHost() { content::RenderViewHostImpl *viewHost = content::RenderViewHostImpl::From(host()); @@ -866,11 +888,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 c13facf00..2bc90a558 100644 --- a/src/core/render_widget_host_view_qt.h +++ b/src/core/render_widget_host_view_qt.h @@ -109,7 +109,8 @@ public: bool IsShowing() override; gfx::Rect GetViewBounds() override; void UpdateBackgroundColor() override; - bool LockMouse(bool) override; + blink::mojom::PointerLockResult LockMouse(bool) override; + blink::mojom::PointerLockResult ChangeMouseLock(bool) override; void UnlockMouse() override; void UpdateCursor(const content::WebCursor&) override; void DisplayCursor(const content::WebCursor&) override; @@ -120,8 +121,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<viz::HitTestRegionList>) 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; @@ -131,8 +130,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/render_widget_host_view_qt_delegate_client.cpp b/src/core/render_widget_host_view_qt_delegate_client.cpp index 2c427cd46..5e15c2353 100644 --- a/src/core/render_widget_host_view_qt_delegate_client.cpp +++ b/src/core/render_widget_host_view_qt_delegate_client.cpp @@ -770,6 +770,7 @@ void RenderWidgetHostViewQtDelegateClient::handleInputMethodEvent(QInputMethodEv 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<QTextFormat>(attribute.value).toCharFormat(); diff --git a/src/core/renderer/content_renderer_client_qt.cpp b/src/core/renderer/content_renderer_client_qt.cpp index 3e9e8f299..7567775fb 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<error_page::ErrorPageParams>()); + false, error.stale_copy_in_cache(), false, RenderThreadObserverQt::is_incognito_process(), false, + false, false, locale, std::unique_ptr<error_page::ErrorPageParams>()); 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<base::TaskRunner> PepperIsolatedFileSystemMessageFilter::OverrideTaskRunnerForMessage(const IPC::Message &) +scoped_refptr<base::SequencedTaskRunner> 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<base::TaskRunner> OverrideTaskRunnerForMessage(const IPC::Message &msg) override; + scoped_refptr<base::SequencedTaskRunner> 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/touch_selection_controller_client_qt.h b/src/core/touch_selection_controller_client_qt.h index 0d8dcf696..aadf72172 100644 --- a/src/core/touch_selection_controller_client_qt.h +++ b/src/core/touch_selection_controller_client_qt.h @@ -40,8 +40,8 @@ #ifndef TOUCH_SELECTION_CONTROLLER_CLIENT_QT_H #define TOUCH_SELECTION_CONTROLLER_CLIENT_QT_H +#include "content/public/browser/context_menu_params.h" #include "content/public/browser/touch_selection_controller_client_manager.h" -#include "content/public/common/context_menu_params.h" #include "ui/touch_selection/touch_selection_controller.h" #include "ui/touch_selection/touch_selection_menu_runner.h" diff --git a/src/core/type_conversion.cpp b/src/core/type_conversion.cpp index de507f836..bf2656de4 100644 --- a/src/core/type_conversion.cpp +++ b/src/core/type_conversion.cpp @@ -39,11 +39,11 @@ #include "type_conversion.h" -#include <content/public/common/favicon_url.h> #include <net/cert/x509_certificate.h> #include <net/cert/x509_util.h> #include <ui/events/event_constants.h> #include <ui/gfx/image/image_skia.h> +#include "third_party/blink/public/mojom/favicon/favicon_url.mojom.h" #include <QtCore/qcoreapplication.h> #include <QtGui/qmatrix4x4.h> @@ -242,27 +242,27 @@ int flagsFromModifiers(Qt::KeyboardModifiers modifiers) return modifierFlags; } -FaviconInfo::FaviconTypeFlags toQt(content::FaviconURL::IconType type) +FaviconInfo::FaviconTypeFlags toQt(blink::mojom::FaviconIconType type) { switch (type) { - case content::FaviconURL::IconType::kFavicon: + case blink::mojom::FaviconIconType::kFavicon: return FaviconInfo::Favicon; - case content::FaviconURL::IconType::kTouchIcon: + case blink::mojom::FaviconIconType::kTouchIcon: return FaviconInfo::TouchIcon; - case content::FaviconURL::IconType::kTouchPrecomposedIcon: + case blink::mojom::FaviconIconType::kTouchPrecomposedIcon: return FaviconInfo::TouchPrecomposedIcon; - case content::FaviconURL::IconType::kInvalid: + case blink::mojom::FaviconIconType::kInvalid: return FaviconInfo::InvalidIcon; } Q_UNREACHABLE(); return FaviconInfo::InvalidIcon; } -FaviconInfo toFaviconInfo(const content::FaviconURL &favicon_url) +FaviconInfo toFaviconInfo(const blink::mojom::FaviconURLPtr &favicon_url) { FaviconInfo info; - info.url = toQt(favicon_url.icon_url); - info.type = toQt(favicon_url.icon_type); + info.url = toQt(favicon_url->icon_url); + info.type = toQt(favicon_url->icon_type); // TODO: Add support for rel sizes attribute (favicon_url.icon_sizes): // http://www.w3schools.com/tags/att_link_sizes.asp info.size = QSize(0, 0); diff --git a/src/core/type_conversion.h b/src/core/type_conversion.h index 703b62188..565d8330a 100644 --- a/src/core/type_conversion.h +++ b/src/core/type_conversion.h @@ -55,6 +55,7 @@ #include "content/public/common/file_chooser_file_info.h" #include "favicon_manager.h" #include "net/cookies/canonical_cookie.h" +#include "third_party/blink/public/mojom/favicon/favicon_url.mojom-forward.h" #include "third_party/skia/include/core/SkBitmap.h" #include "third_party/skia/include/core/SkColor.h" #include "third_party/skia/include/core/SkPixelRef.h" @@ -67,10 +68,6 @@ QT_FORWARD_DECLARE_CLASS(QMatrix4x4) QT_FORWARD_DECLARE_CLASS(QSslCertificate) -namespace content { -struct FaviconURL; -} - namespace gfx { class ImageSkiaRep; } @@ -295,7 +292,7 @@ inline QStringList fromVector(const std::vector<base::string16> &vector) return result; } -FaviconInfo toFaviconInfo(const content::FaviconURL &); +FaviconInfo toFaviconInfo(const blink::mojom::FaviconURLPtr &favicon_url); QList<QSslCertificate> toCertificateChain(net::X509Certificate *certificate); 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 2c4d9125e..db2069fe7 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" @@ -241,7 +243,6 @@ static void callbackOnPdfSavingFinished(WebContentsAdapterClient *adapterClient, static std::unique_ptr<content::WebContents> createBlankWebContents(WebContentsAdapterClient *adapterClient, content::BrowserContext *browserContext) { content::WebContents::CreateParams create_params(browserContext, nullptr); - create_params.routing_id = MSG_ROUTING_NONE; create_params.initially_hidden = true; std::unique_ptr<content::WebContents> webContents = content::WebContents::Create(create_params); @@ -526,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 @@ -553,7 +557,7 @@ void WebContentsAdapter::initializeRenderPrefs() const int qtCursorFlashTime = QGuiApplication::styleHints()->cursorFlashTime(); rendererPrefs->caret_blink_interval = base::TimeDelta::FromMillisecondsD(0.5 * static_cast<double>(qtCursorFlashTime)); - rendererPrefs->user_agent_override = m_profileAdapter->httpUserAgent().toStdString(); + rendererPrefs->user_agent_override = blink::UserAgentOverride::UserAgentOnly(m_profileAdapter->httpUserAgent().toStdString()); rendererPrefs->accept_languages = m_profileAdapter->httpAcceptLanguageWithoutQualities().toStdString(); #if QT_CONFIG(webengine_webrtc) base::CommandLine* commandLine = base::CommandLine::ForCurrentProcess(); @@ -1184,22 +1188,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) @@ -1207,7 +1211,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); } @@ -1392,7 +1396,8 @@ void WebContentsAdapter::grantMouseLockPermission(const QUrl &securityOrigin, bo granted = false; } - m_webContents->GotResponseToLockMouseRequest(granted); + m_webContents->GotResponseToLockMouseRequest(granted ? blink::mojom::PointerLockResult::kSuccess + : blink::mojom::PointerLockResult::kPermissionDenied); } void WebContentsAdapter::handlePendingMouseLockPermission() @@ -1400,7 +1405,8 @@ void WebContentsAdapter::handlePendingMouseLockPermission() CHECK_INITIALIZED(); auto it = m_pendingMouseLockPermissions.find(toQt(m_webContents->GetLastCommittedURL().GetOrigin())); if (it != m_pendingMouseLockPermissions.end()) { - m_webContents->GotResponseToLockMouseRequest(it.value()); + m_webContents->GotResponseToLockMouseRequest(it.value() ? blink::mojom::PointerLockResult::kSuccess + : blink::mojom::PointerLockResult::kPermissionDenied); m_pendingMouseLockPermissions.erase(it); } } @@ -1665,7 +1671,7 @@ void WebContentsAdapter::waitForUpdateDragActionCalled() DCHECK(delegate); m_updateDragActionCalled = false; for (;;) { - while (delegate->DoWork() && !m_updateDragActionCalled) {} + while (delegate->DoWork().is_immediate() && !m_updateDragActionCalled) {} if (m_updateDragActionCalled) break; if (t.hasExpired(timeout)) { @@ -1892,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 @@ -2000,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() @@ -2036,7 +2045,7 @@ ASSERT_ENUMS_MATCH(ReferrerPolicy::NoReferrerWhenDowngrade, network::mojom::Refe ASSERT_ENUMS_MATCH(ReferrerPolicy::Never, network::mojom::ReferrerPolicy::kNever) ASSERT_ENUMS_MATCH(ReferrerPolicy::Origin, network::mojom::ReferrerPolicy::kOrigin) ASSERT_ENUMS_MATCH(ReferrerPolicy::OriginWhenCrossOrigin, network::mojom::ReferrerPolicy::kOriginWhenCrossOrigin) -ASSERT_ENUMS_MATCH(ReferrerPolicy::NoReferrerWhenDowngradeOriginWhenCrossOrigin, network::mojom::ReferrerPolicy::kNoReferrerWhenDowngradeOriginWhenCrossOrigin) +//ASSERT_ENUMS_MATCH(ReferrerPolicy::NoReferrerWhenDowngradeOriginWhenCrossOrigin, network::mojom::ReferrerPolicy::kNoReferrerWhenDowngradeOriginWhenCrossOrigin) ASSERT_ENUMS_MATCH(ReferrerPolicy::SameOrigin, network::mojom::ReferrerPolicy::kSameOrigin) ASSERT_ENUMS_MATCH(ReferrerPolicy::StrictOrigin, network::mojom::ReferrerPolicy::kStrictOrigin) ASSERT_ENUMS_MATCH(ReferrerPolicy::Last, network::mojom::ReferrerPolicy::kLast) diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp index e83903524..a6bd12ca8 100644 --- a/src/core/web_contents_delegate_qt.cpp +++ b/src/core/web_contents_delegate_qt.cpp @@ -62,6 +62,8 @@ #include "web_engine_settings.h" #include "certificate_error_controller.h" #include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h" +#include "components/error_page/common/error.h" +#include "components/error_page/common/localized_error.h" #include "components/web_cache/browser/web_cache_manager.h" #include "content/browser/frame_host/render_frame_host_impl.h" #include "content/browser/renderer_host/render_widget_host_impl.h" @@ -75,7 +77,6 @@ #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/web_contents.h" -#include "content/public/common/favicon_url.h" #include "content/public/common/frame_navigate_params.h" #include "content/public/common/url_constants.h" #include "content/public/common/web_preferences.h" @@ -239,7 +240,9 @@ void WebContentsDelegateQt::AddNewContents(content::WebContents* source, std::un // so set it here. Note the actual value doesn't really matter here. Only the second value does, but we try // to give the correct user-agent anyway. if (newAdapter) - newAdapter->webContents()->SetUserAgentOverride(newAdapter->profileAdapter()->httpUserAgent().toStdString(), true); + newAdapter->webContents()->SetUserAgentOverride( + blink::UserAgentOverride::UserAgentOnly(newAdapter->profileAdapter()->httpUserAgent().toStdString()), + true); if (newAdapter && !newAdapter->isInitialized()) newAdapter->loadDefault(); if (was_blocked) @@ -259,9 +262,12 @@ void WebContentsDelegateQt::LoadProgressChanged(double progress) return; if (m_lastLoadProgress < 0) // suppress signals that aren't between loadStarted and loadFinished return; - m_lastLoadProgress = qMax(m_lastLoadProgress, qRound(progress * 100)); // ensure monotonicity - m_lastLoadProgress = qMin(m_lastLoadProgress, 100); - m_viewClient->loadProgressChanged(m_lastLoadProgress); + + int p = qMin(qRound(progress * 100), 100); + if (p > m_lastLoadProgress) { // ensure strict monotonic increase + m_lastLoadProgress = p; + m_viewClient->loadProgressChanged(p); + } } bool WebContentsDelegateQt::HandleKeyboardEvent(content::WebContents *, const content::NativeWebKeyboardEvent &event) @@ -363,8 +369,9 @@ void WebContentsDelegateQt::EmitLoadFinished(bool success, const QUrl &url, bool { if (m_lastLoadProgress < 0) // not currently running return; + if (m_lastLoadProgress < 100) + m_viewClient->loadProgressChanged(100); m_lastLoadProgress = -1; - m_viewClient->loadProgressChanged(100); m_viewClient->loadFinished(success, url, isErrorPage, errorCode, errorDescription); m_viewClient->updateNavigationActions(); } @@ -459,7 +466,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 +483,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)); } @@ -510,11 +521,12 @@ void WebContentsDelegateQt::DidFinishLoad(content::RenderFrameHost* render_frame EmitLoadFinished(true /* success */ , toQt(validated_url), false /* isErrorPage */, http_statuscode); } -void WebContentsDelegateQt::DidUpdateFaviconURL(const std::vector<content::FaviconURL> &candidates) +void WebContentsDelegateQt::DidUpdateFaviconURL(const std::vector<blink::mojom::FaviconURLPtr> &candidates) + { QList<FaviconInfo> faviconCandidates; faviconCandidates.reserve(static_cast<int>(candidates.size())); - for (const content::FaviconURL &candidate : candidates) { + for (const blink::mojom::FaviconURLPtr &candidate : candidates) { // Store invalid candidates too for later debugging via API faviconCandidates.append(toFaviconInfo(candidate)); } @@ -655,7 +667,7 @@ void WebContentsDelegateQt::RequestToLockMouse(content::WebContents *web_content Q_UNUSED(user_gesture); if (last_unlocked_by_target) - web_contents->GotResponseToLockMouseRequest(true); + web_contents->GotResponseToLockMouseRequest(blink::mojom::PointerLockResult::kSuccess); else m_viewClient->runMouseLockPermissionRequest(toQt(web_contents->GetLastCommittedURL().GetOrigin())); } diff --git a/src/core/web_contents_delegate_qt.h b/src/core/web_contents_delegate_qt.h index 86b697488..4677a780a 100644 --- a/src/core/web_contents_delegate_qt.h +++ b/src/core/web_contents_delegate_qt.h @@ -158,10 +158,10 @@ 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<content::FaviconURL> &candidates) override; + void DidUpdateFaviconURL(const std::vector<blink::mojom::FaviconURLPtr> &candidates) override; void OnVisibilityChanged(content::Visibility visibility) override; void DidFirstVisuallyNonEmptyPaint() override; void ActivateContents(content::WebContents* contents) override; diff --git a/src/core/web_contents_view_qt.cpp b/src/core/web_contents_view_qt.cpp index 7a42977fe..41f1c601e 100644 --- a/src/core/web_contents_view_qt.cpp +++ b/src/core/web_contents_view_qt.cpp @@ -55,8 +55,8 @@ #include "content/browser/renderer_host/render_view_host_impl.h" #include "content/browser/renderer_host/render_widget_host_impl.h" #include "content/browser/web_contents/web_contents_impl.h" +#include "content/public/browser/context_menu_params.h" #include "content/public/browser/web_contents_delegate.h" -#include "content/public/common/context_menu_params.h" #include "third_party/blink/public/common/context_menu_data/edit_flags.h" #include "third_party/blink/public/common/context_menu_data/media_type.h" #include "ui/gfx/image/image_skia.h" diff --git a/src/core/web_contents_view_qt.h b/src/core/web_contents_view_qt.h index 218bebf13..acf4a1eba 100644 --- a/src/core/web_contents_view_qt.h +++ b/src/core/web_contents_view_qt.h @@ -75,8 +75,6 @@ public: void SetPageTitle(const base::string16& title) override { } - void RenderViewCreated(content::RenderViewHost* host) override { } - void RenderViewReady() override { } void RenderViewHostChanged(content::RenderViewHost*, content::RenderViewHost*) override { } diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp index 2a5666776..a49d8103c 100644 --- a/src/core/web_engine_context.cpp +++ b/src/core/web_engine_context.cpp @@ -44,6 +44,8 @@ #include "base/base_switches.h" #include "base/command_line.h" #include "base/files/file_path.h" +#include "base/power_monitor/power_monitor.h" +#include "base/power_monitor/power_monitor_device_source.h" #include "base/run_loop.h" #include "base/task/post_task.h" #include "base/task/sequence_manager/thread_controller_with_message_pump_impl.h" @@ -94,6 +96,7 @@ #include "services/tracing/public/cpp/trace_startup.h" #include "services/tracing/public/cpp/tracing_features.h" #include "third_party/blink/public/common/features.h" +#include "ui/base/ui_base_features.h" #include "ui/events/event_switches.h" #include "ui/native_theme/native_theme_features.h" #include "ui/gl/gl_switches.h" @@ -436,12 +439,12 @@ void WebEngineContext::destroy() // task runner is not working anymore so we need to do this earlier. cleanupVizProcess(); while (waitForViz) { - while (delegate->DoWork()){} + while (delegate->DoWork().is_immediate()) { } QThread::msleep(50); } destroyGpuProcess(); // Flush the UI message loop before quitting. - while (delegate->DoWork()) { } + while (delegate->DoWork().is_immediate()) { } #if QT_CONFIG(webengine_printing_and_pdf) // Kill print job manager early as it has a content::NotificationRegistrar @@ -463,7 +466,7 @@ void WebEngineContext::destroy() // Handle any events posted by browser-context shutdown. // This should deliver all nessesery calls of DeleteSoon from PostTask - while (delegate->DoWork()) { } + while (delegate->DoWork().is_immediate()) { } m_devtoolsServer.reset(); m_runLoop->AfterRun(); @@ -696,6 +699,9 @@ WebEngineContext::WebEngineContext() appendToFeatureList(disableFeatures, features::kWebUsb.name); appendToFeatureList(disableFeatures, media::kPictureInPicture.name); + // Breaks current colordialog tests. + appendToFeatureList(disableFeatures, features::kFormControlsRefresh.name); + if (useEmbeddedSwitches) { // embedded switches are based on the switches for Android, see content/browser/android/content_startup_flags.cc appendToFeatureList(enableFeatures, features::kOverlayScrollbar.name); @@ -755,8 +761,6 @@ WebEngineContext::WebEngineContext() registerMainThreadFactories(); - SetContentClient(new ContentClientQt); - content::ContentMainParams contentMainParams(m_mainDelegate.get()); #if defined(OS_WIN) contentMainParams.sandbox_info = staticSandboxInterfaceInfo(); @@ -781,6 +785,7 @@ WebEngineContext::WebEngineContext() content::BrowserTaskExecutor::PostFeatureListSetup(); tracing::InitTracingPostThreadPoolStartAndFeatureList(); m_discardableSharedMemoryManager = std::make_unique<discardable_memory::DiscardableSharedMemoryManager>(); + base::PowerMonitor::Initialize(std::make_unique<base::PowerMonitorDeviceSource>()); m_serviceManagerEnvironment = std::make_unique<content::ServiceManagerEnvironment>(content::BrowserTaskExecutor::CreateIOThread()); m_startupData = m_serviceManagerEnvironment->CreateBrowserStartupData(); diff --git a/src/core/web_event_factory.cpp b/src/core/web_event_factory.cpp index cbf1fecf3..2c50287c8 100644 --- a/src/core/web_event_factory.cpp +++ b/src/core/web_event_factory.cpp @@ -1433,8 +1433,8 @@ static WebPointerProperties::PointerType pointerTypeForTabletEvent(const QTablet WebMouseEvent WebEventFactory::toWebMouseEvent(QMouseEvent *ev) { WebMouseEvent webKitEvent(webEventTypeForEvent(ev), - WebFloatPoint(ev->position().x(), ev->position().y()), - WebFloatPoint(ev->globalPosition().x(), ev->globalPosition().y()), + gfx::PointF(ev->position().x(), ev->position().y()), + gfx::PointF(ev->globalPosition().x(), ev->globalPosition().y()), mouseButtonForEvent<QMouseEvent>(ev), 0, modifiersForEvent(ev), @@ -1464,8 +1464,8 @@ WebMouseEvent WebEventFactory::toWebMouseEvent(QHoverEvent *ev) WebMouseEvent WebEventFactory::toWebMouseEvent(QTabletEvent *ev) { WebMouseEvent webKitEvent(webEventTypeForEvent(ev), - WebFloatPoint(ev->position().x(), ev->position().y()), - WebFloatPoint(ev->globalPosition().x(), ev->globalPosition().y()), + gfx::PointF(ev->position().x(), ev->position().y()), + gfx::PointF(ev->globalPosition().x(), ev->globalPosition().y()), mouseButtonForEvent<QTabletEvent>(ev), 0, modifiersForEvent(ev), @@ -1498,11 +1498,11 @@ WebGestureEvent WebEventFactory::toWebGestureEvent(QNativeGestureEvent *ev) webKitEvent.SetTimeStamp(base::TimeTicks::Now()); webKitEvent.SetModifiers(modifiersForEvent(ev)); - webKitEvent.SetPositionInWidget(WebFloatPoint(ev->position().x(), - ev->position().y())); + webKitEvent.SetPositionInWidget(gfx::PointF(ev->position().x(), + ev->position().y())); - webKitEvent.SetPositionInScreen(WebFloatPoint(ev->globalPosition().x(), - ev->globalPosition().y())); + webKitEvent.SetPositionInScreen(gfx::PointF(ev->globalPosition().x(), + ev->globalPosition().y())); webKitEvent.SetSourceDevice(blink::WebGestureDevice::kTouchpad); @@ -1590,7 +1590,7 @@ blink::WebMouseWheelEvent WebEventFactory::toWebWheelEvent(QWheelEvent *ev) #if defined(Q_OS_DARWIN) // PrecisePixel is a macOS term meaning it is a system scroll gesture, see qnsview_mouse.mm if (ev->source() == Qt::MouseEventSynthesizedBySystem) - webEvent.delta_units = ui::input_types::ScrollGranularity::kScrollByPrecisePixel; + webEvent.delta_units = ui::ScrollGranularity::kScrollByPrecisePixel; #endif setBlinkWheelEventDelta(webEvent); @@ -1607,7 +1607,7 @@ bool WebEventFactory::coalesceWebWheelEvent(blink::WebMouseWheelEvent &webEvent, if (toBlinkPhase(ev) != webEvent.phase) return false; #if defined(Q_OS_DARWIN) - if ((webEvent.delta_units == ui::input_types::ScrollGranularity::kScrollByPrecisePixel) + if ((webEvent.delta_units == ui::ScrollGranularity::kScrollByPrecisePixel) != (ev->source() == Qt::MouseEventSynthesizedBySystem)) return false; #endif @@ -1630,9 +1630,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 <QtGlobal> |