summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
m---------src/3rdparty0
-rw-r--r--src/core/CMakeLists.txt8
-rw-r--r--src/core/api/configure.cmake10
-rw-r--r--src/core/api/qt_cmdline.cmake2
-rw-r--r--src/core/api/qtwebenginecoreglobal.cpp1
-rw-r--r--src/core/api/qtwebenginecoreglobal.h1
-rw-r--r--src/core/api/qtwebenginecoreglobal_p.h1
-rw-r--r--src/core/api/qwebenginecertificateerror.cpp1
-rw-r--r--src/core/api/qwebenginecertificateerror.h1
-rw-r--r--src/core/api/qwebengineclientcertificateselection.cpp1
-rw-r--r--src/core/api/qwebengineclientcertificateselection.h1
-rw-r--r--src/core/api/qwebengineclientcertificatestore.cpp1
-rw-r--r--src/core/api/qwebengineclientcertificatestore.h1
-rw-r--r--src/core/api/qwebengineclienthints.cpp1
-rw-r--r--src/core/api/qwebengineclienthints.h6
-rw-r--r--src/core/api/qwebenginecontextmenurequest.cpp1
-rw-r--r--src/core/api/qwebenginecontextmenurequest.h1
-rw-r--r--src/core/api/qwebenginecontextmenurequest_p.h1
-rw-r--r--src/core/api/qwebenginecookiestore.cpp1
-rw-r--r--src/core/api/qwebenginecookiestore.h1
-rw-r--r--src/core/api/qwebenginecookiestore_p.h1
-rw-r--r--src/core/api/qwebenginedesktopmediarequest.cpp1
-rw-r--r--src/core/api/qwebenginedesktopmediarequest.h1
-rw-r--r--src/core/api/qwebenginedesktopmediarequest_p.h1
-rw-r--r--src/core/api/qwebenginedownloadrequest.cpp1
-rw-r--r--src/core/api/qwebenginedownloadrequest.h1
-rw-r--r--src/core/api/qwebenginedownloadrequest_p.h1
-rw-r--r--src/core/api/qwebengineextensioninfo.cpp1
-rw-r--r--src/core/api/qwebengineextensioninfo.h4
-rw-r--r--src/core/api/qwebengineextensioninfo_p.h1
-rw-r--r--src/core/api/qwebengineextensionmanager.cpp1
-rw-r--r--src/core/api/qwebengineextensionmanager.h5
-rw-r--r--src/core/api/qwebenginefilesystemaccessrequest.cpp1
-rw-r--r--src/core/api/qwebenginefilesystemaccessrequest.h1
-rw-r--r--src/core/api/qwebenginefindtextresult.cpp1
-rw-r--r--src/core/api/qwebenginefindtextresult.h1
-rw-r--r--src/core/api/qwebengineframe.cpp1
-rw-r--r--src/core/api/qwebengineframe.h1
-rw-r--r--src/core/api/qwebenginefullscreenrequest.cpp1
-rw-r--r--src/core/api/qwebenginefullscreenrequest.h1
-rw-r--r--src/core/api/qwebengineglobalsettings.cpp1
-rw-r--r--src/core/api/qwebengineglobalsettings.h1
-rw-r--r--src/core/api/qwebengineglobalsettings_p.h1
-rw-r--r--src/core/api/qwebenginehistory.cpp1
-rw-r--r--src/core/api/qwebenginehistory.h1
-rw-r--r--src/core/api/qwebenginehistory_p.h1
-rw-r--r--src/core/api/qwebenginehttprequest.cpp1
-rw-r--r--src/core/api/qwebenginehttprequest.h1
-rw-r--r--src/core/api/qwebengineloadinginfo.cpp1
-rw-r--r--src/core/api/qwebengineloadinginfo.h1
-rw-r--r--src/core/api/qwebenginemessagepumpscheduler.cpp1
-rw-r--r--src/core/api/qwebenginemessagepumpscheduler_p.h1
-rw-r--r--src/core/api/qwebenginenavigationrequest.cpp1
-rw-r--r--src/core/api/qwebenginenavigationrequest.h1
-rw-r--r--src/core/api/qwebenginenewwindowrequest.cpp1
-rw-r--r--src/core/api/qwebenginenewwindowrequest.h1
-rw-r--r--src/core/api/qwebenginenewwindowrequest_p.h1
-rw-r--r--src/core/api/qwebenginenotification.cpp1
-rw-r--r--src/core/api/qwebenginenotification.h1
-rw-r--r--src/core/api/qwebenginepage.cpp80
-rw-r--r--src/core/api/qwebenginepage.h1
-rw-r--r--src/core/api/qwebenginepage_p.h7
-rw-r--r--src/core/api/qwebenginepermission.cpp40
-rw-r--r--src/core/api/qwebenginepermission.h1
-rw-r--r--src/core/api/qwebenginepermission_p.h7
-rw-r--r--src/core/api/qwebengineprofile.cpp6
-rw-r--r--src/core/api/qwebengineprofile.h4
-rw-r--r--src/core/api/qwebengineprofile_p.h1
-rw-r--r--src/core/api/qwebengineprofilebuilder.cpp1
-rw-r--r--src/core/api/qwebengineprofilebuilder.h1
-rw-r--r--src/core/api/qwebengineprofilebuilder_p.h1
-rw-r--r--src/core/api/qwebenginequotarequest.cpp1
-rw-r--r--src/core/api/qwebenginequotarequest.h1
-rw-r--r--src/core/api/qwebengineregisterprotocolhandlerrequest.cpp1
-rw-r--r--src/core/api/qwebengineregisterprotocolhandlerrequest.h1
-rw-r--r--src/core/api/qwebenginescript.cpp1
-rw-r--r--src/core/api/qwebenginescript.h1
-rw-r--r--src/core/api/qwebenginescriptcollection.cpp1
-rw-r--r--src/core/api/qwebenginescriptcollection.h1
-rw-r--r--src/core/api/qwebenginescriptcollection_p.h1
-rw-r--r--src/core/api/qwebenginesettings.cpp1
-rw-r--r--src/core/api/qwebenginesettings.h1
-rw-r--r--src/core/api/qwebengineurlrequestinfo.cpp1
-rw-r--r--src/core/api/qwebengineurlrequestinfo.h1
-rw-r--r--src/core/api/qwebengineurlrequestinfo_p.h1
-rw-r--r--src/core/api/qwebengineurlrequestinterceptor.cpp1
-rw-r--r--src/core/api/qwebengineurlrequestinterceptor.h1
-rw-r--r--src/core/api/qwebengineurlrequestjob.cpp1
-rw-r--r--src/core/api/qwebengineurlrequestjob.h1
-rw-r--r--src/core/api/qwebengineurlscheme.cpp1
-rw-r--r--src/core/api/qwebengineurlscheme.h1
-rw-r--r--src/core/api/qwebengineurlschemehandler.cpp1
-rw-r--r--src/core/api/qwebengineurlschemehandler.h1
-rw-r--r--src/core/api/qwebenginewebauthuxrequest.cpp1
-rw-r--r--src/core/api/qwebenginewebauthuxrequest.h1
-rw-r--r--src/core/api/qwebenginewebauthuxrequest_p.h1
-rw-r--r--src/core/compositor/compositor.h3
-rw-r--r--src/core/compositor/native_skia_output_device.cpp10
-rw-r--r--src/core/compositor/native_skia_output_device.h1
-rw-r--r--src/core/compositor/native_skia_output_device_opengl.cpp86
-rw-r--r--src/core/compositor/wgl_helper.cpp34
-rw-r--r--src/core/compositor/wgl_helper.h5
-rw-r--r--src/core/custom_handlers/protocol_handler_registry_delegate_qt.cpp1
-rw-r--r--src/core/custom_handlers/protocol_handler_registry_delegate_qt.h1
-rw-r--r--src/core/custom_handlers/protocol_handler_registry_factory.cpp1
-rw-r--r--src/core/custom_handlers/protocol_handler_registry_factory.h1
-rw-r--r--src/core/custom_handlers/register_protocol_handler_request_controller.h1
-rw-r--r--src/core/custom_handlers/register_protocol_handler_request_controller_impl.cpp2
-rw-r--r--src/core/custom_handlers/register_protocol_handler_request_controller_impl.h1
-rw-r--r--src/core/doc/src/qtwebengine-overview.qdoc24
-rw-r--r--src/core/media_capture_devices_dispatcher.cpp30
-rw-r--r--src/core/permission_manager_qt.cpp435
-rw-r--r--src/core/permission_manager_qt.h37
-rw-r--r--src/core/printing/pdf_document_helper_client_qt.cpp1
-rw-r--r--src/core/printing/pdf_document_helper_client_qt.h1
-rw-r--r--src/core/printing/pdf_stream_delegate_qt.cpp1
-rw-r--r--src/core/printing/pdf_stream_delegate_qt.h1
-rw-r--r--src/core/printing/pdfium_document_wrapper_qt.cpp1
-rw-r--r--src/core/printing/pdfium_document_wrapper_qt.h1
-rw-r--r--src/core/printing/print_view_manager_base_qt.cpp1
-rw-r--r--src/core/printing/print_view_manager_base_qt.h1
-rw-r--r--src/core/printing/print_view_manager_qt.cpp1
-rw-r--r--src/core/printing/print_view_manager_qt.h1
-rw-r--r--src/core/printing/printer_worker.cpp1
-rw-r--r--src/core/printing/printer_worker.h1
-rw-r--r--src/core/profile_adapter.cpp24
-rw-r--r--src/core/profile_adapter.h8
-rw-r--r--src/core/profile_io_data_qt.cpp3
-rw-r--r--src/core/render_widget_host_view_qt_delegate_item.cpp87
-rw-r--r--src/core/render_widget_host_view_qt_delegate_item.h2
-rw-r--r--src/core/tools/qwebengine_convert_dict/main.cpp1
-rw-r--r--src/core/web_contents_adapter.cpp158
-rw-r--r--src/core/web_contents_adapter.h12
-rw-r--r--src/core/web_contents_adapter_client.h7
-rw-r--r--src/core/web_contents_delegate_qt.cpp48
-rw-r--r--src/core/web_contents_delegate_qt.h3
-rw-r--r--src/core/web_engine_context.cpp2
-rw-r--r--src/webenginequick/api/qquickwebengineforeigntypes_p.h43
-rw-r--r--src/webenginequick/api/qquickwebengineprofile.cpp8
-rw-r--r--src/webenginequick/api/qquickwebengineprofile.h5
-rw-r--r--src/webenginequick/api/qquickwebengineprofileprototype.cpp3
-rw-r--r--src/webenginequick/api/qquickwebenginescriptcollection.cpp38
-rw-r--r--src/webenginequick/api/qquickwebengineview.cpp82
-rw-r--r--src/webenginequick/api/qquickwebengineview_p_p.h6
-rw-r--r--src/webenginewidgets/api/qtwebenginewidgetsglobal.h1
-rw-r--r--src/webenginewidgets/api/qwebenginenotificationpresenter.cpp1
-rw-r--r--src/webenginewidgets/api/qwebenginenotificationpresenter_p.h1
-rw-r--r--src/webenginewidgets/api/qwebengineview.cpp1
-rw-r--r--src/webenginewidgets/api/qwebengineview.h1
-rw-r--r--src/webenginewidgets/api/qwebengineview_p.h1
-rw-r--r--src/webenginewidgets/plugins/qwebengineview/qwebengineview_plugin.cpp1
-rw-r--r--src/webenginewidgets/plugins/qwebengineview/qwebengineview_plugin.h1
-rw-r--r--src/webenginewidgets/qwebengine_accessible.cpp1
-rw-r--r--src/webenginewidgets/qwebengine_accessible_p.h1
-rw-r--r--src/webenginewidgets/ui/autofillpopupwidget.cpp1
-rw-r--r--src/webenginewidgets/ui/autofillpopupwidget_p.h1
-rw-r--r--src/webenginewidgets/ui/touchhandlewidget.cpp1
-rw-r--r--src/webenginewidgets/ui/touchhandlewidget_p.h1
-rw-r--r--src/webenginewidgets/ui/touchselectionmenuwidget.cpp1
-rw-r--r--src/webenginewidgets/ui/touchselectionmenuwidget_p.h1
160 files changed, 967 insertions, 536 deletions
diff --git a/src/3rdparty b/src/3rdparty
-Subproject 40948d1690e3a124e45ac562c58d3e6887a3f4f
+Subproject e94c0f365f3fb987670f082365628000bf59eb4
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 23dc00dfa..f5435509c 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -466,7 +466,7 @@ foreach(arch ${archs})
list(APPEND gnArgArg
angle_enable_gl=true
use_gtk=false # GTK toolkit bindings
- use_qt=false # Qt5 toolkit bindings
+ use_qt5=false # Qt5 toolkit bindings
use_gio=false
use_bundled_fontconfig=false
use_glib=false
@@ -479,7 +479,7 @@ foreach(arch ${archs})
ozone_platform="qt"
ozone_extra_path="${CMAKE_CURRENT_LIST_DIR}/ozone/ozone_extra.gni"
)
- set(systemLibs libjpeg libpng freetype harfbuzz libevent libwebp libxml
+ set(systemLibs libjpeg libpng freetype harfbuzz libwebp libxml
opus snappy icu ffmpeg re2 lcms2 libopenjpeg2 libvpx
)
foreach(slib ${systemLibs})
@@ -535,6 +535,10 @@ foreach(arch ${archs})
CONDITION QT_FEATURE_webengine_system_gbm
)
extend_gn_list(gnArgArg
+ ARGS rtc_system_openh264
+ CONDITION QT_FEATURE_webengine_webrtc_system_openh264
+ )
+ extend_gn_list(gnArgArg
ARGS use_vaapi
CONDITION QT_FEATURE_webengine_vaapi
)
diff --git a/src/core/api/configure.cmake b/src/core/api/configure.cmake
index 4a556656e..79f44f9a2 100644
--- a/src/core/api/configure.cmake
+++ b/src/core/api/configure.cmake
@@ -84,6 +84,12 @@ qt_feature("webengine-system-gbm" PRIVATE
AUTODETECT UNIX
CONDITION GBM_FOUND
)
+qt_feature("webengine-webrtc-system-openh264" PRIVATE
+ LABEL "Use system openh264 for webrtc"
+ CONDITION UNIX
+ AND QT_FEATURE_webengine_system_openh264
+ AND QT_FEATURE_webengine_proprietary_codecs
+)
qt_feature("webengine-printing-and-pdf" PRIVATE
LABEL "Printing and PDF"
PURPOSE "Provides printing and output to PDF."
@@ -224,6 +230,10 @@ qt_configure_add_summary_entry(
ARGS "webengine-system-pulseaudio"
CONDITION LINUX
)
+qt_configure_add_summary_entry(
+ ARGS "webengine-webrtc-system-openh264"
+ CONDITION UNIX
+)
qt_configure_add_summary_entry(ARGS "webengine-v8-context-snapshot")
qt_configure_add_summary_entry(ARGS "webenginedriver")
qt_configure_end_summary_section() # end of "Qt WebEngineCore" section
diff --git a/src/core/api/qt_cmdline.cmake b/src/core/api/qt_cmdline.cmake
index fe7092b8c..3c5b779c3 100644
--- a/src/core/api/qt_cmdline.cmake
+++ b/src/core/api/qt_cmdline.cmake
@@ -27,7 +27,7 @@ function(qt_commandline_jumbo arg val nextok)
endif()
endfunction()
-set(systemLibs alsa ffmpeg freetype harfbuzz icu lcms2 libevent libjpeg
+set(systemLibs alsa ffmpeg freetype harfbuzz icu lcms2 libjpeg
libpng libvpx libxml libwebp minizip opus pulseaudio re2 snappy zlib)
foreach(slib ${systemLibs})
qt_commandline_option(webengine-${slib} TYPE enum NAME webengine-system-${slib} VALUES yes no system)
diff --git a/src/core/api/qtwebenginecoreglobal.cpp b/src/core/api/qtwebenginecoreglobal.cpp
index 931022931..18da6bd43 100644
--- a/src/core/api/qtwebenginecoreglobal.cpp
+++ b/src/core/api/qtwebenginecoreglobal.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qtwebenginecoreglobal_p.h"
diff --git a/src/core/api/qtwebenginecoreglobal.h b/src/core/api/qtwebenginecoreglobal.h
index 0041a72be..8c271de11 100644
--- a/src/core/api/qtwebenginecoreglobal.h
+++ b/src/core/api/qtwebenginecoreglobal.h
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QTWEBENGINECOREGLOBAL_H
#define QTWEBENGINECOREGLOBAL_H
diff --git a/src/core/api/qtwebenginecoreglobal_p.h b/src/core/api/qtwebenginecoreglobal_p.h
index f434e7114..3571754f5 100644
--- a/src/core/api/qtwebenginecoreglobal_p.h
+++ b/src/core/api/qtwebenginecoreglobal_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QTWEBENGINECOREGLOBAL_P_H
#define QTWEBENGINECOREGLOBAL_P_H
diff --git a/src/core/api/qwebenginecertificateerror.cpp b/src/core/api/qwebenginecertificateerror.cpp
index 60ec3c95b..e5ea8190e 100644
--- a/src/core/api/qwebenginecertificateerror.cpp
+++ b/src/core/api/qwebenginecertificateerror.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebenginecertificateerror.h"
diff --git a/src/core/api/qwebenginecertificateerror.h b/src/core/api/qwebenginecertificateerror.h
index 73a3ac090..0021f7506 100644
--- a/src/core/api/qwebenginecertificateerror.h
+++ b/src/core/api/qwebenginecertificateerror.h
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINECERTIFICATEERROR_H
#define QWEBENGINECERTIFICATEERROR_H
diff --git a/src/core/api/qwebengineclientcertificateselection.cpp b/src/core/api/qwebengineclientcertificateselection.cpp
index d6402353c..da46a67e8 100644
--- a/src/core/api/qwebengineclientcertificateselection.cpp
+++ b/src/core/api/qwebengineclientcertificateselection.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2018 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebengineclientcertificateselection.h"
#include "client_cert_select_controller.h"
diff --git a/src/core/api/qwebengineclientcertificateselection.h b/src/core/api/qwebengineclientcertificateselection.h
index 559d1753b..ccea66731 100644
--- a/src/core/api/qwebengineclientcertificateselection.h
+++ b/src/core/api/qwebengineclientcertificateselection.h
@@ -1,5 +1,6 @@
// Copyright (C) 2018 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINECLIENTCERTSELECTION_H
#define QWEBENGINECLIENTCERTSELECTION_H
diff --git a/src/core/api/qwebengineclientcertificatestore.cpp b/src/core/api/qwebengineclientcertificatestore.cpp
index 3d231c05f..38580768e 100644
--- a/src/core/api/qwebengineclientcertificatestore.cpp
+++ b/src/core/api/qwebengineclientcertificatestore.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2018 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebengineclientcertificatestore.h"
diff --git a/src/core/api/qwebengineclientcertificatestore.h b/src/core/api/qwebengineclientcertificatestore.h
index fcebbe2b1..522d01eeb 100644
--- a/src/core/api/qwebengineclientcertificatestore.h
+++ b/src/core/api/qwebengineclientcertificatestore.h
@@ -1,5 +1,6 @@
// Copyright (C) 2018 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINECLIENTCERTIFICATESTORE_H
#define QWEBENGINECLIENTCERTIFICATESTORE_H
diff --git a/src/core/api/qwebengineclienthints.cpp b/src/core/api/qwebengineclienthints.cpp
index 2f930c181..9560bf835 100644
--- a/src/core/api/qwebengineclienthints.cpp
+++ b/src/core/api/qwebengineclienthints.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebengineclienthints.h"
diff --git a/src/core/api/qwebengineclienthints.h b/src/core/api/qwebengineclienthints.h
index 8579b20a9..15be5acef 100644
--- a/src/core/api/qwebengineclienthints.h
+++ b/src/core/api/qwebengineclienthints.h
@@ -1,5 +1,6 @@
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINECLIENTHINTS_H
#define QWEBENGINECLIENTHINTS_H
@@ -9,7 +10,6 @@
#include <QtCore/qobject.h>
#include <QtCore/qpointer.h>
#include <QtCore/qvariantmap.h>
-#include <QtQml/qqmlregistration.h>
namespace QtWebEngineCore {
class ProfileAdapter;
@@ -34,10 +34,6 @@ class Q_WEBENGINECORE_EXPORT QWebEngineClientHints : public QObject
Q_PROPERTY(bool isAllClientHintsEnabled READ isAllClientHintsEnabled WRITE setAllClientHintsEnabled FINAL)
public:
- QML_NAMED_ELEMENT(WebEngineClientHints)
- QML_UNCREATABLE("")
- QML_ADDED_IN_VERSION(6, 8)
-
~QWebEngineClientHints();
QString arch() const;
diff --git a/src/core/api/qwebenginecontextmenurequest.cpp b/src/core/api/qwebenginecontextmenurequest.cpp
index 25de1fe6b..00c3c32f1 100644
--- a/src/core/api/qwebenginecontextmenurequest.cpp
+++ b/src/core/api/qwebenginecontextmenurequest.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebenginecontextmenurequest.h"
#include "qwebenginecontextmenurequest_p.h"
diff --git a/src/core/api/qwebenginecontextmenurequest.h b/src/core/api/qwebenginecontextmenurequest.h
index 6e6f6338c..1d3a2932b 100644
--- a/src/core/api/qwebenginecontextmenurequest.h
+++ b/src/core/api/qwebenginecontextmenurequest.h
@@ -1,5 +1,6 @@
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINECONTEXTMENUREQUEST_H
#define QWEBENGINECONTEXTMENUREQUEST_H
diff --git a/src/core/api/qwebenginecontextmenurequest_p.h b/src/core/api/qwebenginecontextmenurequest_p.h
index 0e774f534..558cc13d5 100644
--- a/src/core/api/qwebenginecontextmenurequest_p.h
+++ b/src/core/api/qwebenginecontextmenurequest_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINECONTEXTMENUREQUEST_P_H
#define QWEBENGINECONTEXTMENUREQUEST_P_H
diff --git a/src/core/api/qwebenginecookiestore.cpp b/src/core/api/qwebenginecookiestore.cpp
index 6c4536a4a..49eb47205 100644
--- a/src/core/api/qwebenginecookiestore.cpp
+++ b/src/core/api/qwebenginecookiestore.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebenginecookiestore.h"
#include "qwebenginecookiestore_p.h"
diff --git a/src/core/api/qwebenginecookiestore.h b/src/core/api/qwebenginecookiestore.h
index 347d0c45c..ebc0be8e8 100644
--- a/src/core/api/qwebenginecookiestore.h
+++ b/src/core/api/qwebenginecookiestore.h
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINECOOKIESTORE_H
#define QWEBENGINECOOKIESTORE_H
diff --git a/src/core/api/qwebenginecookiestore_p.h b/src/core/api/qwebenginecookiestore_p.h
index 51200436d..1aba0bc52 100644
--- a/src/core/api/qwebenginecookiestore_p.h
+++ b/src/core/api/qwebenginecookiestore_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINECOOKIESTORE_P_H
#define QWEBENGINECOOKIESTORE_P_H
diff --git a/src/core/api/qwebenginedesktopmediarequest.cpp b/src/core/api/qwebenginedesktopmediarequest.cpp
index 1fdbfa655..d965522bc 100644
--- a/src/core/api/qwebenginedesktopmediarequest.cpp
+++ b/src/core/api/qwebenginedesktopmediarequest.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "desktop_media_controller.h"
#include "qwebenginedesktopmediarequest.h"
diff --git a/src/core/api/qwebenginedesktopmediarequest.h b/src/core/api/qwebenginedesktopmediarequest.h
index ebf66bce4..c8cc6d817 100644
--- a/src/core/api/qwebenginedesktopmediarequest.h
+++ b/src/core/api/qwebenginedesktopmediarequest.h
@@ -1,5 +1,6 @@
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEDESKTOPMEDIAREQUEST_H
#define QWEBENGINEDESKTOPMEDIAREQUEST_H
diff --git a/src/core/api/qwebenginedesktopmediarequest_p.h b/src/core/api/qwebenginedesktopmediarequest_p.h
index 3add71bc0..a1e6b8dae 100644
--- a/src/core/api/qwebenginedesktopmediarequest_p.h
+++ b/src/core/api/qwebenginedesktopmediarequest_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
//
// W A R N I N G
diff --git a/src/core/api/qwebenginedownloadrequest.cpp b/src/core/api/qwebenginedownloadrequest.cpp
index 536d193b7..2c90d4c94 100644
--- a/src/core/api/qwebenginedownloadrequest.cpp
+++ b/src/core/api/qwebenginedownloadrequest.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebenginedownloadrequest.h"
#include "qwebenginedownloadrequest_p.h"
diff --git a/src/core/api/qwebenginedownloadrequest.h b/src/core/api/qwebenginedownloadrequest.h
index 36604188e..c64b5cfa4 100644
--- a/src/core/api/qwebenginedownloadrequest.h
+++ b/src/core/api/qwebenginedownloadrequest.h
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEDOWNLOADREQUEST_H
#define QWEBENGINEDOWNLOADREQUEST_H
diff --git a/src/core/api/qwebenginedownloadrequest_p.h b/src/core/api/qwebenginedownloadrequest_p.h
index e829f94b1..4e74894a7 100644
--- a/src/core/api/qwebenginedownloadrequest_p.h
+++ b/src/core/api/qwebenginedownloadrequest_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEDOWNLOADREQUEST_P_H
#define QWEBENGINEDOWNLOADREQUEST_P_H
diff --git a/src/core/api/qwebengineextensioninfo.cpp b/src/core/api/qwebengineextensioninfo.cpp
index 0a1525a07..2c4731e3a 100644
--- a/src/core/api/qwebengineextensioninfo.cpp
+++ b/src/core/api/qwebengineextensioninfo.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebengineextensioninfo.h"
#include "qwebengineextensioninfo_p.h"
diff --git a/src/core/api/qwebengineextensioninfo.h b/src/core/api/qwebengineextensioninfo.h
index 5ab02d60e..413f29477 100644
--- a/src/core/api/qwebengineextensioninfo.h
+++ b/src/core/api/qwebengineextensioninfo.h
@@ -1,5 +1,6 @@
// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEEXTENSIONINFO_H_
#define QWEBENGINEEXTENSIONINFO_H_
@@ -35,9 +36,6 @@ class QWebEngineExtensionInfo
Q_PROPERTY(bool isInstalled READ isInstalled FINAL)
public:
- QML_VALUE_TYPE(webEngineExtension)
- QML_ADDED_IN_VERSION(6, 10)
-
Q_WEBENGINECORE_EXPORT QWebEngineExtensionInfo();
Q_WEBENGINECORE_EXPORT
diff --git a/src/core/api/qwebengineextensioninfo_p.h b/src/core/api/qwebengineextensioninfo_p.h
index 79f505cf8..385395054 100644
--- a/src/core/api/qwebengineextensioninfo_p.h
+++ b/src/core/api/qwebengineextensioninfo_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEEXTENSION_P_H_
#define QWEBENGINEEXTENSION_P_H_
diff --git a/src/core/api/qwebengineextensionmanager.cpp b/src/core/api/qwebengineextensionmanager.cpp
index ed83df5e8..71d3326c3 100644
--- a/src/core/api/qwebengineextensionmanager.cpp
+++ b/src/core/api/qwebengineextensionmanager.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebengineextensionmanager.h"
diff --git a/src/core/api/qwebengineextensionmanager.h b/src/core/api/qwebengineextensionmanager.h
index a908be97b..0fc6d3e01 100644
--- a/src/core/api/qwebengineextensionmanager.h
+++ b/src/core/api/qwebengineextensionmanager.h
@@ -1,5 +1,6 @@
// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEEXTENSIONMANAGER_H_
#define QWEBENGINEEXTENSIONMANAGER_H_
@@ -26,10 +27,6 @@ class Q_WEBENGINECORE_EXPORT QWebEngineExtensionManager : public QObject
Q_PROPERTY(QString installPath READ installPath FINAL)
Q_PROPERTY(QList<QWebEngineExtensionInfo> extensions READ extensions FINAL)
public:
- QML_NAMED_ELEMENT(WebEngineExtensionManager)
- QML_UNCREATABLE("")
- QML_ADDED_IN_VERSION(6, 10)
-
~QWebEngineExtensionManager() override;
Q_INVOKABLE void loadExtension(const QString &path);
Q_INVOKABLE void installExtension(const QString &path);
diff --git a/src/core/api/qwebenginefilesystemaccessrequest.cpp b/src/core/api/qwebenginefilesystemaccessrequest.cpp
index 0834468f6..6ef500bfe 100644
--- a/src/core/api/qwebenginefilesystemaccessrequest.cpp
+++ b/src/core/api/qwebenginefilesystemaccessrequest.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebenginefilesystemaccessrequest.h"
diff --git a/src/core/api/qwebenginefilesystemaccessrequest.h b/src/core/api/qwebenginefilesystemaccessrequest.h
index 7707c607c..b379edf40 100644
--- a/src/core/api/qwebenginefilesystemaccessrequest.h
+++ b/src/core/api/qwebenginefilesystemaccessrequest.h
@@ -1,5 +1,6 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEFILESYSTEMACCESSREQUEST_H
#define QWEBENGINEFILESYSTEMACCESSREQUEST_H
diff --git a/src/core/api/qwebenginefindtextresult.cpp b/src/core/api/qwebenginefindtextresult.cpp
index ce953ddff..34096f3eb 100644
--- a/src/core/api/qwebenginefindtextresult.cpp
+++ b/src/core/api/qwebenginefindtextresult.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebenginefindtextresult.h"
diff --git a/src/core/api/qwebenginefindtextresult.h b/src/core/api/qwebenginefindtextresult.h
index d506a50f5..789f11894 100644
--- a/src/core/api/qwebenginefindtextresult.h
+++ b/src/core/api/qwebenginefindtextresult.h
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEFINDTEXTRESULT_H
#define QWEBENGINEFINDTEXTRESULT_H
diff --git a/src/core/api/qwebengineframe.cpp b/src/core/api/qwebengineframe.cpp
index 6eb628ffa..fb69ac6b0 100644
--- a/src/core/api/qwebengineframe.cpp
+++ b/src/core/api/qwebengineframe.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebengineframe.h"
diff --git a/src/core/api/qwebengineframe.h b/src/core/api/qwebengineframe.h
index 02f442f4f..62de87fea 100644
--- a/src/core/api/qwebengineframe.h
+++ b/src/core/api/qwebengineframe.h
@@ -1,5 +1,6 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEFRAME_H
#define QWEBENGINEFRAME_H
diff --git a/src/core/api/qwebenginefullscreenrequest.cpp b/src/core/api/qwebenginefullscreenrequest.cpp
index ddfaae099..406e27684 100644
--- a/src/core/api/qwebenginefullscreenrequest.cpp
+++ b/src/core/api/qwebenginefullscreenrequest.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebenginefullscreenrequest.h"
diff --git a/src/core/api/qwebenginefullscreenrequest.h b/src/core/api/qwebenginefullscreenrequest.h
index 07a2b8059..5632e2a7e 100644
--- a/src/core/api/qwebenginefullscreenrequest.h
+++ b/src/core/api/qwebenginefullscreenrequest.h
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEFULLSCREENREQUEST_H
#define QWEBENGINEFULLSCREENREQUEST_H
diff --git a/src/core/api/qwebengineglobalsettings.cpp b/src/core/api/qwebengineglobalsettings.cpp
index 6aadd5517..1fef72f15 100644
--- a/src/core/api/qwebengineglobalsettings.cpp
+++ b/src/core/api/qwebengineglobalsettings.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:critical reason:network-protocol
#include "qwebengineglobalsettings.h"
#include "qwebengineglobalsettings_p.h"
diff --git a/src/core/api/qwebengineglobalsettings.h b/src/core/api/qwebengineglobalsettings.h
index a9eff6d12..f13849a34 100644
--- a/src/core/api/qwebengineglobalsettings.h
+++ b/src/core/api/qwebengineglobalsettings.h
@@ -1,5 +1,6 @@
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:critical reason:network-protocol
#ifndef QWEBENGINEGLOBALSETTINGS_H
#define QWEBENGINEGLOBALSETTINGS_H
diff --git a/src/core/api/qwebengineglobalsettings_p.h b/src/core/api/qwebengineglobalsettings_p.h
index 8e35ad68c..28adba677 100644
--- a/src/core/api/qwebengineglobalsettings_p.h
+++ b/src/core/api/qwebengineglobalsettings_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:critical reason:network-protocol
#ifndef QWEBENGINEGLOBALSETTINGS_P_H
#define QWEBENGINEGLOBALSETTINGS_P_H
diff --git a/src/core/api/qwebenginehistory.cpp b/src/core/api/qwebenginehistory.cpp
index 5d2fc8e9e..a6b44ce61 100644
--- a/src/core/api/qwebenginehistory.cpp
+++ b/src/core/api/qwebenginehistory.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebenginehistory.h"
#include "qwebenginehistory_p.h"
diff --git a/src/core/api/qwebenginehistory.h b/src/core/api/qwebenginehistory.h
index fd54e62a5..796fb0b6b 100644
--- a/src/core/api/qwebenginehistory.h
+++ b/src/core/api/qwebenginehistory.h
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEHISTORY_H
#define QWEBENGINEHISTORY_H
diff --git a/src/core/api/qwebenginehistory_p.h b/src/core/api/qwebenginehistory_p.h
index fe28f4a0e..e4099081b 100644
--- a/src/core/api/qwebenginehistory_p.h
+++ b/src/core/api/qwebenginehistory_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEHISTORY_P_H
#define QWEBENGINEHISTORY_P_H
diff --git a/src/core/api/qwebenginehttprequest.cpp b/src/core/api/qwebenginehttprequest.cpp
index 0039533d6..8f6cd07d9 100644
--- a/src/core/api/qwebenginehttprequest.cpp
+++ b/src/core/api/qwebenginehttprequest.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:critical reason:network-protocol
#include "qplatformdefs.h"
#include <QtCore/qshareddata.h>
diff --git a/src/core/api/qwebenginehttprequest.h b/src/core/api/qwebenginehttprequest.h
index 6c0298f86..3147b8d05 100644
--- a/src/core/api/qwebenginehttprequest.h
+++ b/src/core/api/qwebenginehttprequest.h
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:critical reason:network-protocol
#ifndef QWEBENGINEHTTPREQUEST_H
#define QWEBENGINEHTTPREQUEST_H
diff --git a/src/core/api/qwebengineloadinginfo.cpp b/src/core/api/qwebengineloadinginfo.cpp
index e60c70edb..60e502616 100644
--- a/src/core/api/qwebengineloadinginfo.cpp
+++ b/src/core/api/qwebengineloadinginfo.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include <qwebengineloadinginfo.h>
diff --git a/src/core/api/qwebengineloadinginfo.h b/src/core/api/qwebengineloadinginfo.h
index 098f8936a..8b14983ff 100644
--- a/src/core/api/qwebengineloadinginfo.h
+++ b/src/core/api/qwebengineloadinginfo.h
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINELOADINGINFO_H
#define QWEBENGINELOADINGINFO_H
diff --git a/src/core/api/qwebenginemessagepumpscheduler.cpp b/src/core/api/qwebenginemessagepumpscheduler.cpp
index 860696c37..1b37b3ac7 100644
--- a/src/core/api/qwebenginemessagepumpscheduler.cpp
+++ b/src/core/api/qwebenginemessagepumpscheduler.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2019 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebenginemessagepumpscheduler_p.h"
diff --git a/src/core/api/qwebenginemessagepumpscheduler_p.h b/src/core/api/qwebenginemessagepumpscheduler_p.h
index b2c51415a..84f21e3aa 100644
--- a/src/core/api/qwebenginemessagepumpscheduler_p.h
+++ b/src/core/api/qwebenginemessagepumpscheduler_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2019 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEMESSAGEPUMPSCHEDULER_P_H
#define QWEBENGINEMESSAGEPUMPSCHEDULER_P_H
diff --git a/src/core/api/qwebenginenavigationrequest.cpp b/src/core/api/qwebenginenavigationrequest.cpp
index a83a9289d..4fa00f956 100644
--- a/src/core/api/qwebenginenavigationrequest.cpp
+++ b/src/core/api/qwebenginenavigationrequest.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebenginenavigationrequest.h"
diff --git a/src/core/api/qwebenginenavigationrequest.h b/src/core/api/qwebenginenavigationrequest.h
index a810a59fe..b4d75e71e 100644
--- a/src/core/api/qwebenginenavigationrequest.h
+++ b/src/core/api/qwebenginenavigationrequest.h
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINENAVIGATIONREQUEST_H
#define QWEBENGINENAVIGATIONREQUEST_H
diff --git a/src/core/api/qwebenginenewwindowrequest.cpp b/src/core/api/qwebenginenewwindowrequest.cpp
index 500f3ac2b..7f8e62f69 100644
--- a/src/core/api/qwebenginenewwindowrequest.cpp
+++ b/src/core/api/qwebenginenewwindowrequest.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebenginenewwindowrequest.h"
#include "qwebenginenewwindowrequest_p.h"
diff --git a/src/core/api/qwebenginenewwindowrequest.h b/src/core/api/qwebenginenewwindowrequest.h
index 86d182581..c5b821df0 100644
--- a/src/core/api/qwebenginenewwindowrequest.h
+++ b/src/core/api/qwebenginenewwindowrequest.h
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINENEWWINDOWREQUEST_H
#define QWEBENGINENEWWINDOWREQUEST_H
diff --git a/src/core/api/qwebenginenewwindowrequest_p.h b/src/core/api/qwebenginenewwindowrequest_p.h
index 979d3fe2d..8e3a45860 100644
--- a/src/core/api/qwebenginenewwindowrequest_p.h
+++ b/src/core/api/qwebenginenewwindowrequest_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINENEWWINDOWREQUEST_P_H
#define QWEBENGINENEWWINDOWREQUEST_P_H
diff --git a/src/core/api/qwebenginenotification.cpp b/src/core/api/qwebenginenotification.cpp
index 0c72848c6..7f705dfba 100644
--- a/src/core/api/qwebenginenotification.cpp
+++ b/src/core/api/qwebenginenotification.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebenginenotification.h"
diff --git a/src/core/api/qwebenginenotification.h b/src/core/api/qwebenginenotification.h
index 646413d39..99442f0cd 100644
--- a/src/core/api/qwebenginenotification.h
+++ b/src/core/api/qwebenginenotification.h
@@ -1,5 +1,6 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINENOTIFICATION_H
#define QWEBENGINENOTIFICATION_H
diff --git a/src/core/api/qwebenginepage.cpp b/src/core/api/qwebenginepage.cpp
index cfc549ecc..8d73723f6 100644
--- a/src/core/api/qwebenginepage.cpp
+++ b/src/core/api/qwebenginepage.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebenginepage.h"
#include "authenticator_request_dialog_controller.h"
@@ -589,49 +590,6 @@ void QWebEnginePagePrivate::showColorDialog(QSharedPointer<ColorChooserControlle
view->showColorDialog(controller);
}
-void QWebEnginePagePrivate::runMediaAccessPermissionRequest(const QUrl &securityOrigin, WebContentsAdapterClient::MediaRequestFlags requestFlags)
-{
- Q_Q(QWebEnginePage);
- QWebEnginePermission::PermissionType permissionType;
-
- if (requestFlags.testFlag(WebContentsAdapterClient::MediaAudioCapture)
- && requestFlags.testFlag(WebContentsAdapterClient::MediaVideoCapture))
- permissionType = QWebEnginePermission::PermissionType::MediaAudioVideoCapture;
- else if (requestFlags.testFlag(WebContentsAdapterClient::MediaAudioCapture))
- permissionType = QWebEnginePermission::PermissionType::MediaAudioCapture;
- else if (requestFlags.testFlag(WebContentsAdapterClient::MediaVideoCapture))
- permissionType = QWebEnginePermission::PermissionType::MediaVideoCapture;
- else if (requestFlags.testFlag(WebContentsAdapterClient::MediaDesktopAudioCapture)
- && requestFlags.testFlag(WebContentsAdapterClient::MediaDesktopVideoCapture))
- permissionType = QWebEnginePermission::PermissionType::DesktopAudioVideoCapture;
- else // if (requestFlags.testFlag(WebContentsAdapterClient::MediaDesktopVideoCapture))
- permissionType = QWebEnginePermission::PermissionType::DesktopVideoCapture;
-
- Q_EMIT q->permissionRequested(createFeaturePermissionObject(securityOrigin, permissionType));
-
-#if QT_DEPRECATED_SINCE(6, 8)
- QT_WARNING_PUSH
- QT_WARNING_DISABLE_DEPRECATED
- QWebEnginePage::Feature deprecatedFeature;
-
- if (requestFlags.testFlag(WebContentsAdapterClient::MediaAudioCapture)
- && requestFlags.testFlag(WebContentsAdapterClient::MediaVideoCapture))
- deprecatedFeature = QWebEnginePage::MediaAudioVideoCapture;
- else if (requestFlags.testFlag(WebContentsAdapterClient::MediaAudioCapture))
- deprecatedFeature = QWebEnginePage::MediaAudioCapture;
- else if (requestFlags.testFlag(WebContentsAdapterClient::MediaVideoCapture))
- deprecatedFeature = QWebEnginePage::MediaVideoCapture;
- else if (requestFlags.testFlag(WebContentsAdapterClient::MediaDesktopAudioCapture)
- && requestFlags.testFlag(WebContentsAdapterClient::MediaDesktopVideoCapture))
- deprecatedFeature = QWebEnginePage::DesktopAudioVideoCapture;
- else // if (requestFlags.testFlag(WebContentsAdapterClient::MediaDesktopVideoCapture))
- deprecatedFeature = QWebEnginePage::DesktopVideoCapture;
-
- Q_EMIT q->featurePermissionRequested(securityOrigin, deprecatedFeature);
- QT_WARNING_POP
-#endif // QT_DEPRECATED_SINCE(6, 8)
-}
-
#if QT_DEPRECATED_SINCE(6, 8)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
@@ -667,33 +625,19 @@ static QWebEnginePage::Feature toDeprecatedFeature(QWebEnginePermission::Permiss
QT_WARNING_POP
#endif // QT_DEPRECATED_SINCE(6, 8)
-void QWebEnginePagePrivate::runFeaturePermissionRequest(QWebEnginePermission::PermissionType permissionType, const QUrl &securityOrigin)
+void QWebEnginePagePrivate::runFeaturePermissionRequest(
+ QWebEnginePermission::PermissionType permissionType,
+ const QUrl &securityOrigin,
+ int childId, const std::string &serializedToken)
{
Q_Q(QWebEnginePage);
- if (QWebEnginePermission::isPersistent(permissionType)) {
- Q_EMIT q->permissionRequested(createFeaturePermissionObject(securityOrigin, permissionType));
-#if QT_DEPRECATED_SINCE(6, 8)
- QT_WARNING_PUSH
- QT_WARNING_DISABLE_DEPRECATED
- Q_EMIT q->featurePermissionRequested(securityOrigin, toDeprecatedFeature(permissionType));
- QT_WARNING_POP
-#endif // QT_DEPRECATED_SINCE(6, 8)
- return;
- }
-
- Q_UNREACHABLE();
-}
-
-void QWebEnginePagePrivate::runMouseLockPermissionRequest(const QUrl &securityOrigin)
-{
- Q_Q(QWebEnginePage);
- Q_EMIT q->permissionRequested(createFeaturePermissionObject(securityOrigin, QWebEnginePermission::PermissionType::MouseLock));
-
+ Q_EMIT q->permissionRequested(QWebEnginePermission(
+ new QWebEnginePermissionPrivate(securityOrigin, permissionType, profileAdapter(), childId, serializedToken)));
#if QT_DEPRECATED_SINCE(6, 8)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
- Q_EMIT q->featurePermissionRequested(securityOrigin, QWebEnginePage::MouseLock);
+ Q_EMIT q->featurePermissionRequested(securityOrigin, toDeprecatedFeature(permissionType));
QT_WARNING_POP
#endif // QT_DEPRECATED_SINCE(6, 8)
}
@@ -884,12 +828,6 @@ void QWebEnginePagePrivate::showWebAuthDialog(QWebEngineWebAuthUxRequest *reques
Q_EMIT q->webAuthUxRequested(request);
}
-QWebEnginePermission QWebEnginePagePrivate::createFeaturePermissionObject(const QUrl &securityOrigin, QWebEnginePermission::PermissionType feature)
-{
- auto *returnPrivate = new QWebEnginePermissionPrivate(securityOrigin, feature, adapter, profileAdapter());
- return QWebEnginePermission(returnPrivate);
-}
-
QWebEnginePage::QWebEnginePage(QObject* parent)
: QObject(parent)
, d_ptr(new QWebEnginePagePrivate())
@@ -1917,7 +1855,7 @@ void QWebEnginePage::setFeaturePermission(const QUrl &securityOrigin, QWebEngine
Q_UNREACHABLE();
}
- d->adapter->setPermission(securityOrigin, f, s);
+ d->adapter->setPermission(securityOrigin, f, s, {});
}
QT_WARNING_POP
#endif // QT_DEPRECATED_SINCE(6, 8)
diff --git a/src/core/api/qwebenginepage.h b/src/core/api/qwebenginepage.h
index ada0af9da..9bee1f98e 100644
--- a/src/core/api/qwebenginepage.h
+++ b/src/core/api/qwebenginepage.h
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEPAGE_H
#define QWEBENGINEPAGE_H
diff --git a/src/core/api/qwebenginepage_p.h b/src/core/api/qwebenginepage_p.h
index 5e81a0cf9..ba1fbc6d5 100644
--- a/src/core/api/qwebenginepage_p.h
+++ b/src/core/api/qwebenginepage_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEPAGE_P_H
#define QWEBENGINEPAGE_P_H
@@ -147,9 +148,8 @@ public:
void authenticationRequired(
QSharedPointer<QtWebEngineCore::AuthenticationDialogController>) override;
void releaseProfile() override;
- void runMediaAccessPermissionRequest(const QUrl &securityOrigin, MediaRequestFlags requestFlags) override;
- void runFeaturePermissionRequest(QWebEnginePermission::PermissionType permissionType, const QUrl &securityOrigin) override;
- void runMouseLockPermissionRequest(const QUrl &securityOrigin) override;
+ void runFeaturePermissionRequest(QWebEnginePermission::PermissionType permissionType, const QUrl &securityOrigin,
+ int childId, const std::string &serializedToken) override;
void runRegisterProtocolHandlerRequest(QWebEngineRegisterProtocolHandlerRequest) override;
void runFileSystemAccessRequest(QWebEngineFileSystemAccessRequest) override;
QObject *accessibilityParentObject() override;
@@ -180,7 +180,6 @@ public:
const QRect &bounds, bool autoselectFirstSuggestion) override;
void hideAutofillPopup() override;
void showWebAuthDialog(QWebEngineWebAuthUxRequest *controller) override;
- QWebEnginePermission createFeaturePermissionObject(const QUrl &securityOrigin, QWebEnginePermission::PermissionType permissionType) override;
QtWebEngineCore::ProfileAdapter *profileAdapter() override;
QtWebEngineCore::WebContentsAdapter *webContentsAdapter() override;
diff --git a/src/core/api/qwebenginepermission.cpp b/src/core/api/qwebenginepermission.cpp
index 5fa1ed484..1d1b12b7e 100644
--- a/src/core/api/qwebenginepermission.cpp
+++ b/src/core/api/qwebenginepermission.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebenginepermission.h"
#include "qwebenginepermission_p.h"
@@ -19,11 +20,12 @@ QWebEnginePermissionPrivate::QWebEnginePermissionPrivate()
/*! \internal */
QWebEnginePermissionPrivate::QWebEnginePermissionPrivate(const QUrl &origin_, QWebEnginePermission::PermissionType permissionType_,
- QSharedPointer<QtWebEngineCore::WebContentsAdapter> webContentsAdapter_, QtWebEngineCore::ProfileAdapter *profileAdapter_)
+ QtWebEngineCore::ProfileAdapter *profileAdapter_, int childId_, const std::string &serializedToken_)
: QSharedData()
, origin(origin_)
, permissionType(permissionType_)
- , webContentsAdapter(webContentsAdapter_)
+ , childId(childId_)
+ , serializedToken(serializedToken_)
, profileAdapter(profileAdapter_)
{
}
@@ -113,15 +115,12 @@ bool QWebEnginePermission::equals(const QWebEnginePermission &other) const
return false;
if (!isPersistent(d_ptr->permissionType)) {
- if (d_ptr->webContentsAdapter != other.d_ptr->webContentsAdapter)
+ if (d_ptr->childId != other.d_ptr->childId
+ && d_ptr->serializedToken != other.d_ptr->serializedToken)
return false;
} else {
- QtWebEngineCore::ProfileAdapter *thisProfile = d_ptr->webContentsAdapter
- ? d_ptr->webContentsAdapter.toStrongRef()->profileAdapter()
- : d_ptr->profileAdapter.get();
- QtWebEngineCore::ProfileAdapter *otherProfile = d_ptr->webContentsAdapter
- ? other.d_ptr->webContentsAdapter.toStrongRef()->profileAdapter()
- : other.d_ptr->profileAdapter.get();
+ QtWebEngineCore::ProfileAdapter *thisProfile = d_ptr->profileAdapter.get();
+ QtWebEngineCore::ProfileAdapter *otherProfile = other.d_ptr->profileAdapter.get();
if (thisProfile != otherProfile)
return false;
@@ -200,11 +199,7 @@ QWebEnginePermission::State QWebEnginePermission::state() const
{
if (!isValid())
return State::Invalid;
- if (d_ptr->webContentsAdapter)
- return d_ptr->webContentsAdapter.toStrongRef()->getPermissionState(origin(), permissionType());
- if (d_ptr->profileAdapter)
- return d_ptr->profileAdapter->getPermissionState(origin(), permissionType());
- Q_UNREACHABLE_RETURN(State::Ask);
+ return d_ptr->profileAdapter->getPermissionState(origin(), permissionType(), d_ptr->childId, d_ptr->serializedToken);
}
/*!
@@ -226,7 +221,7 @@ bool QWebEnginePermission::isValid() const
return false;
if (permissionType() == PermissionType::Unsupported)
return false;
- if (!d_ptr->profileAdapter && !d_ptr->webContentsAdapter)
+ if (!d_ptr->profileAdapter)
return false;
if (!d_ptr->origin.isValid())
return false;
@@ -242,10 +237,7 @@ void QWebEnginePermission::grant() const
{
if (!isValid())
return;
- if (d_ptr->webContentsAdapter)
- d_ptr->webContentsAdapter.toStrongRef()->setPermission(origin(), permissionType(), State::Granted);
- else if (d_ptr->profileAdapter)
- d_ptr->profileAdapter->setPermission(origin(), permissionType(), State::Granted);
+ d_ptr->profileAdapter->setPermission(origin(), permissionType(), State::Granted, d_ptr->childId, d_ptr->serializedToken);
}
/*!
@@ -257,10 +249,7 @@ void QWebEnginePermission::deny() const
{
if (!isValid())
return;
- if (d_ptr->webContentsAdapter)
- d_ptr->webContentsAdapter.toStrongRef()->setPermission(origin(), permissionType(), State::Denied);
- else if (d_ptr->profileAdapter)
- d_ptr->profileAdapter->setPermission(origin(), permissionType(), State::Denied);
+ d_ptr->profileAdapter->setPermission(origin(), permissionType(), State::Denied, d_ptr->childId, d_ptr->serializedToken);
}
/*!
@@ -278,10 +267,7 @@ void QWebEnginePermission::reset() const
{
if (!isValid())
return;
- if (d_ptr->webContentsAdapter)
- d_ptr->webContentsAdapter.toStrongRef()->setPermission(origin(), permissionType(), State::Ask);
- else if (d_ptr->profileAdapter)
- d_ptr->profileAdapter->setPermission(origin(), permissionType(), State::Ask);
+ d_ptr->profileAdapter->setPermission(origin(), permissionType(), State::Ask, d_ptr->childId, d_ptr->serializedToken);
}
/*!
diff --git a/src/core/api/qwebenginepermission.h b/src/core/api/qwebenginepermission.h
index 476c8bdd4..9a62320bf 100644
--- a/src/core/api/qwebenginepermission.h
+++ b/src/core/api/qwebenginepermission.h
@@ -1,5 +1,6 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEPERMISSION_H
#define QWEBENGINEPERMISSION_H
diff --git a/src/core/api/qwebenginepermission_p.h b/src/core/api/qwebenginepermission_p.h
index fe4dc62f8..aabb5c4b9 100644
--- a/src/core/api/qwebenginepermission_p.h
+++ b/src/core/api/qwebenginepermission_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEPERMISSION_P_H
#define QWEBENGINEPERMISSION_P_H
@@ -32,12 +33,14 @@ struct QWebEnginePermissionPrivate : public QSharedData
{
Q_WEBENGINECORE_EXPORT QWebEnginePermissionPrivate();
Q_WEBENGINECORE_EXPORT QWebEnginePermissionPrivate(const QUrl &, QWebEnginePermission::PermissionType,
- QSharedPointer<QtWebEngineCore::WebContentsAdapter>, QtWebEngineCore::ProfileAdapter *);
+ QtWebEngineCore::ProfileAdapter *, int = -1, const std::string & = std::string());
QUrl origin;
QWebEnginePermission::PermissionType permissionType;
- QWeakPointer<QtWebEngineCore::WebContentsAdapter> webContentsAdapter;
+ int childId = -1;
+ std::string serializedToken;
+
QPointer<QtWebEngineCore::ProfileAdapter> profileAdapter;
};
diff --git a/src/core/api/qwebengineprofile.cpp b/src/core/api/qwebengineprofile.cpp
index 5b523dd87..f7f6ab551 100644
--- a/src/core/api/qwebengineprofile.cpp
+++ b/src/core/api/qwebengineprofile.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:critical reason:network-protocol
#include "qwebengineprofile.h"
#include "qwebengineprofile_p.h"
@@ -103,6 +104,9 @@ using QtWebEngineCore::ProfileAdapter;
\value AllowPersistentCookies
Cookies marked persistent are saved to and restored from disk, whereas session cookies
are only stored to disk for crash recovery. This is the default setting.
+ \value OnlyPersistentCookies
+ Cookies marked persistent are saved to and restored from disk, whereas session cookies
+ are not stored to disk, even for crash recovery.
\value ForcePersistentCookies
Both session and persistent cookies are saved to and restored from disk.
*/
@@ -1014,7 +1018,7 @@ QWebEnginePermission QWebEngineProfile::queryPermission(const QUrl &securityOrig
return QWebEnginePermission(new QWebEnginePermissionPrivate());
}
- auto *pvt = new QWebEnginePermissionPrivate(securityOrigin, permissionType, nullptr, d->profileAdapter());
+ auto *pvt = new QWebEnginePermissionPrivate(securityOrigin, permissionType, d->profileAdapter());
return QWebEnginePermission(pvt);
}
diff --git a/src/core/api/qwebengineprofile.h b/src/core/api/qwebengineprofile.h
index fe00e6f5d..f30c9fc82 100644
--- a/src/core/api/qwebengineprofile.h
+++ b/src/core/api/qwebengineprofile.h
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:critical reason:network-protocol
#ifndef QWEBENGINEPROFILE_H
#define QWEBENGINEPROFILE_H
@@ -48,7 +49,8 @@ public:
enum PersistentCookiesPolicy {
NoPersistentCookies,
AllowPersistentCookies,
- ForcePersistentCookies
+ ForcePersistentCookies,
+ OnlyPersistentCookies,
};
Q_ENUM(PersistentCookiesPolicy)
diff --git a/src/core/api/qwebengineprofile_p.h b/src/core/api/qwebengineprofile_p.h
index d4b3513cd..c814c79aa 100644
--- a/src/core/api/qwebengineprofile_p.h
+++ b/src/core/api/qwebengineprofile_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:critical reason:network-protocol
#ifndef QWEBENGINEPROFILE_P_H
#define QWEBENGINEPROFILE_P_H
diff --git a/src/core/api/qwebengineprofilebuilder.cpp b/src/core/api/qwebengineprofilebuilder.cpp
index 9adc12dac..f8a6cae7c 100644
--- a/src/core/api/qwebengineprofilebuilder.cpp
+++ b/src/core/api/qwebengineprofilebuilder.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:critical reason:data-parser
#include "qwebengineprofilebuilder.h"
#include "qwebengineprofile_p.h"
diff --git a/src/core/api/qwebengineprofilebuilder.h b/src/core/api/qwebengineprofilebuilder.h
index 1a03d3aa1..bbbb46b65 100644
--- a/src/core/api/qwebengineprofilebuilder.h
+++ b/src/core/api/qwebengineprofilebuilder.h
@@ -1,5 +1,6 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:critical reason:data-parser
#ifndef QWEBENGINEPROFILEBUILDER_H
#define QWEBENGINEPROFILEBUILDER_H
diff --git a/src/core/api/qwebengineprofilebuilder_p.h b/src/core/api/qwebengineprofilebuilder_p.h
index a0750d47a..a9b6793b2 100644
--- a/src/core/api/qwebengineprofilebuilder_p.h
+++ b/src/core/api/qwebengineprofilebuilder_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:critical reason:data-parser
#ifndef QWEBENGINEPROFILEBUILDER_P_H
#define QWEBENGINEPROFILEBUILDER_P_H
diff --git a/src/core/api/qwebenginequotarequest.cpp b/src/core/api/qwebenginequotarequest.cpp
index 3c312216d..ea3a0c6f4 100644
--- a/src/core/api/qwebenginequotarequest.cpp
+++ b/src/core/api/qwebenginequotarequest.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebenginequotarequest.h"
diff --git a/src/core/api/qwebenginequotarequest.h b/src/core/api/qwebenginequotarequest.h
index f542f5576..15f1dc06a 100644
--- a/src/core/api/qwebenginequotarequest.h
+++ b/src/core/api/qwebenginequotarequest.h
@@ -1,5 +1,6 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEQUOTAREQUEST_H
#define QWEBENGINEQUOTAREQUEST_H
diff --git a/src/core/api/qwebengineregisterprotocolhandlerrequest.cpp b/src/core/api/qwebengineregisterprotocolhandlerrequest.cpp
index 3e52302e4..733f90349 100644
--- a/src/core/api/qwebengineregisterprotocolhandlerrequest.cpp
+++ b/src/core/api/qwebengineregisterprotocolhandlerrequest.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2018 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebengineregisterprotocolhandlerrequest.h"
diff --git a/src/core/api/qwebengineregisterprotocolhandlerrequest.h b/src/core/api/qwebengineregisterprotocolhandlerrequest.h
index d6e51695e..71137a6fd 100644
--- a/src/core/api/qwebengineregisterprotocolhandlerrequest.h
+++ b/src/core/api/qwebengineregisterprotocolhandlerrequest.h
@@ -1,5 +1,6 @@
// Copyright (C) 2018 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEREGISTERPROTOCOLHANDLERREQUEST_H
#define QWEBENGINEREGISTERPROTOCOLHANDLERREQUEST_H
diff --git a/src/core/api/qwebenginescript.cpp b/src/core/api/qwebenginescript.cpp
index 83a790b65..919556fd9 100644
--- a/src/core/api/qwebenginescript.cpp
+++ b/src/core/api/qwebenginescript.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebenginescript.h"
diff --git a/src/core/api/qwebenginescript.h b/src/core/api/qwebenginescript.h
index 9827c4879..daaffdb11 100644
--- a/src/core/api/qwebenginescript.h
+++ b/src/core/api/qwebenginescript.h
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINESCRIPT_H
#define QWEBENGINESCRIPT_H
diff --git a/src/core/api/qwebenginescriptcollection.cpp b/src/core/api/qwebenginescriptcollection.cpp
index 7867192b6..17760a84e 100644
--- a/src/core/api/qwebenginescriptcollection.cpp
+++ b/src/core/api/qwebenginescriptcollection.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebenginescriptcollection.h"
#include "qwebenginescriptcollection_p.h"
diff --git a/src/core/api/qwebenginescriptcollection.h b/src/core/api/qwebenginescriptcollection.h
index a3b3c1c08..a2733f99a 100644
--- a/src/core/api/qwebenginescriptcollection.h
+++ b/src/core/api/qwebenginescriptcollection.h
@@ -1,5 +1,6 @@
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINESCRIPTCOLLECTION_H
#define QWEBENGINESCRIPTCOLLECTION_H
diff --git a/src/core/api/qwebenginescriptcollection_p.h b/src/core/api/qwebenginescriptcollection_p.h
index 67b3aa4a7..87d25b7a8 100644
--- a/src/core/api/qwebenginescriptcollection_p.h
+++ b/src/core/api/qwebenginescriptcollection_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINESCRIPTCOLLECTION_P_H
#define QWEBENGINESCRIPTCOLLECTION_P_H
diff --git a/src/core/api/qwebenginesettings.cpp b/src/core/api/qwebenginesettings.cpp
index a7ae80cd1..98d379069 100644
--- a/src/core/api/qwebenginesettings.cpp
+++ b/src/core/api/qwebenginesettings.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebenginesettings.h"
#include "web_engine_settings.h"
diff --git a/src/core/api/qwebenginesettings.h b/src/core/api/qwebenginesettings.h
index 415d4176a..de85fbfbc 100644
--- a/src/core/api/qwebenginesettings.h
+++ b/src/core/api/qwebenginesettings.h
@@ -1,5 +1,6 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINESETTINGS_H
#define QWEBENGINESETTINGS_H
diff --git a/src/core/api/qwebengineurlrequestinfo.cpp b/src/core/api/qwebengineurlrequestinfo.cpp
index 85362c500..6b6732583 100644
--- a/src/core/api/qwebengineurlrequestinfo.cpp
+++ b/src/core/api/qwebengineurlrequestinfo.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2019 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:critical reason:network-protocol
#include "qwebengineurlrequestinfo.h"
#include "qwebengineurlrequestinfo_p.h"
diff --git a/src/core/api/qwebengineurlrequestinfo.h b/src/core/api/qwebengineurlrequestinfo.h
index 7f73cc0a1..6e4d279b5 100644
--- a/src/core/api/qwebengineurlrequestinfo.h
+++ b/src/core/api/qwebengineurlrequestinfo.h
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:critical reason:network-protocol
#ifndef QWEBENGINEURLREQUESTINFO_H
#define QWEBENGINEURLREQUESTINFO_H
diff --git a/src/core/api/qwebengineurlrequestinfo_p.h b/src/core/api/qwebengineurlrequestinfo_p.h
index b6d56e99c..ef98c91d9 100644
--- a/src/core/api/qwebengineurlrequestinfo_p.h
+++ b/src/core/api/qwebengineurlrequestinfo_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:critical reason:network-protocol
#ifndef QWEBENGINEURLREQUESTINFO_P_H
#define QWEBENGINEURLREQUESTINFO_P_H
diff --git a/src/core/api/qwebengineurlrequestinterceptor.cpp b/src/core/api/qwebengineurlrequestinterceptor.cpp
index c3cd49a5b..3a34b3e88 100644
--- a/src/core/api/qwebengineurlrequestinterceptor.cpp
+++ b/src/core/api/qwebengineurlrequestinterceptor.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebengineurlrequestinterceptor.h"
diff --git a/src/core/api/qwebengineurlrequestinterceptor.h b/src/core/api/qwebengineurlrequestinterceptor.h
index 2ca8ee914..49bac4244 100644
--- a/src/core/api/qwebengineurlrequestinterceptor.h
+++ b/src/core/api/qwebengineurlrequestinterceptor.h
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENINGEURLREQUESTINTERCEPTOR_H
#define QWEBENINGEURLREQUESTINTERCEPTOR_H
diff --git a/src/core/api/qwebengineurlrequestjob.cpp b/src/core/api/qwebengineurlrequestjob.cpp
index 6ef94e41d..7e0ec9c97 100644
--- a/src/core/api/qwebengineurlrequestjob.cpp
+++ b/src/core/api/qwebengineurlrequestjob.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebengineurlrequestjob.h"
diff --git a/src/core/api/qwebengineurlrequestjob.h b/src/core/api/qwebengineurlrequestjob.h
index 8448efdef..b836c877b 100644
--- a/src/core/api/qwebengineurlrequestjob.h
+++ b/src/core/api/qwebengineurlrequestjob.h
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEURLREQUESTJOB_H
#define QWEBENGINEURLREQUESTJOB_H
diff --git a/src/core/api/qwebengineurlscheme.cpp b/src/core/api/qwebengineurlscheme.cpp
index d2ca56f62..36fd3a286 100644
--- a/src/core/api/qwebengineurlscheme.cpp
+++ b/src/core/api/qwebengineurlscheme.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2018 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:critical reason:data-parser
#include "qwebengineurlscheme.h"
diff --git a/src/core/api/qwebengineurlscheme.h b/src/core/api/qwebengineurlscheme.h
index 35498a68e..9e33eeceb 100644
--- a/src/core/api/qwebengineurlscheme.h
+++ b/src/core/api/qwebengineurlscheme.h
@@ -1,5 +1,6 @@
// Copyright (C) 2018 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:critical reason:network-protocol
#ifndef QWEBENGINEURLSCHEME_H
#define QWEBENGINEURLSCHEME_H
diff --git a/src/core/api/qwebengineurlschemehandler.cpp b/src/core/api/qwebengineurlschemehandler.cpp
index 7aeaec850..27b5c46cc 100644
--- a/src/core/api/qwebengineurlschemehandler.cpp
+++ b/src/core/api/qwebengineurlschemehandler.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebengineurlschemehandler.h"
diff --git a/src/core/api/qwebengineurlschemehandler.h b/src/core/api/qwebengineurlschemehandler.h
index 848904719..4ce2acd7c 100644
--- a/src/core/api/qwebengineurlschemehandler.h
+++ b/src/core/api/qwebengineurlschemehandler.h
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEURLSCHEMEHANDLER_H
#define QWEBENGINEURLSCHEMEHANDLER_H
diff --git a/src/core/api/qwebenginewebauthuxrequest.cpp b/src/core/api/qwebenginewebauthuxrequest.cpp
index b22e37942..a7aae9188 100644
--- a/src/core/api/qwebenginewebauthuxrequest.cpp
+++ b/src/core/api/qwebenginewebauthuxrequest.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebenginewebauthuxrequest.h"
#include "qwebenginewebauthuxrequest_p.h"
diff --git a/src/core/api/qwebenginewebauthuxrequest.h b/src/core/api/qwebenginewebauthuxrequest.h
index 111f52847..ff7d8bf7b 100644
--- a/src/core/api/qwebenginewebauthuxrequest.h
+++ b/src/core/api/qwebenginewebauthuxrequest.h
@@ -1,5 +1,6 @@
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEWEBAUTHUXREQUEST_H
#define QWEBENGINEWEBAUTHUXREQUEST_H
diff --git a/src/core/api/qwebenginewebauthuxrequest_p.h b/src/core/api/qwebenginewebauthuxrequest_p.h
index 4c685bac7..829ba5465 100644
--- a/src/core/api/qwebenginewebauthuxrequest_p.h
+++ b/src/core/api/qwebenginewebauthuxrequest_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEWEBAUTHUXREQUEST_P_H
#define QWEBENGINEWEBAUTHUXREQUEST_P_H
diff --git a/src/core/compositor/compositor.h b/src/core/compositor/compositor.h
index aebd8f4c5..b160ca03c 100644
--- a/src/core/compositor/compositor.h
+++ b/src/core/compositor/compositor.h
@@ -131,6 +131,9 @@ public:
// Is the texture produced upside down?
virtual bool textureIsFlipped();
+ // Are there resources to be released?
+ virtual bool hasResources() { return false; }
+
// Release resources created in texture()
virtual void releaseResources();
diff --git a/src/core/compositor/native_skia_output_device.cpp b/src/core/compositor/native_skia_output_device.cpp
index b91512a40..8b79d574c 100644
--- a/src/core/compositor/native_skia_output_device.cpp
+++ b/src/core/compositor/native_skia_output_device.cpp
@@ -180,6 +180,11 @@ void NativeSkiaOutputDevice::releaseTexture()
}
}
+bool NativeSkiaOutputDevice::hasResources()
+{
+ return m_frontBuffer && m_frontBuffer->textureCleanupCallback;
+}
+
void NativeSkiaOutputDevice::releaseResources()
{
if (m_frontBuffer)
@@ -225,7 +230,10 @@ NativeSkiaOutputDevice::Buffer::Buffer(NativeSkiaOutputDevice *parent)
NativeSkiaOutputDevice::Buffer::~Buffer()
{
- DCHECK(!textureCleanupCallback);
+ // FIXME: Can't be called in case of threaded rendering with unexposed window.
+ //DCHECK(!textureCleanupCallback);
+ if (textureCleanupCallback)
+ qWarning("NativeSkiaOutputDevice: Leaking graphics resources.");
if (m_scopedSkiaWriteAccess)
endWriteSkia(false);
diff --git a/src/core/compositor/native_skia_output_device.h b/src/core/compositor/native_skia_output_device.h
index 9a573055d..a405f6684 100644
--- a/src/core/compositor/native_skia_output_device.h
+++ b/src/core/compositor/native_skia_output_device.h
@@ -74,6 +74,7 @@ public:
void swapFrame() override;
void waitForTexture() override;
void releaseTexture() override;
+ bool hasResources() override;
void releaseResources() override;
bool textureIsFlipped() override;
QSize size() override;
diff --git a/src/core/compositor/native_skia_output_device_opengl.cpp b/src/core/compositor/native_skia_output_device_opengl.cpp
index c43311d80..49bacd5fc 100644
--- a/src/core/compositor/native_skia_output_device_opengl.cpp
+++ b/src/core/compositor/native_skia_output_device_opengl.cpp
@@ -51,6 +51,56 @@
namespace QtWebEngineCore {
+class ScopedGLContextForCleanup
+{
+public:
+ ScopedGLContextForCleanup(QOpenGLContext *createContext, QSurface *createSurface)
+ : m_createContext(createContext), m_currentContext(QOpenGLContext::currentContext())
+ {
+ if (m_createContext == m_currentContext)
+ return;
+
+ if (!m_createContext->isValid()) {
+ skipCleanup = true;
+ return;
+ }
+
+ if (m_currentContext)
+ m_currentSurface = m_currentContext->surface();
+
+ if (!createContext->makeCurrent(createSurface)) {
+ skipCleanup = true;
+ qWarning("Failed to make OpenGL context current for clean-up, OpenGL resources will "
+ "not be destroyed.");
+ }
+ }
+
+ ~ScopedGLContextForCleanup()
+ {
+ if (!m_currentContext || m_createContext == m_currentContext || skipCleanup)
+ return;
+
+ if (!m_currentContext->makeCurrent(m_currentSurface))
+ qFatal("Failed to restore OpenGL context after clean-up.");
+ }
+
+ void deleteTexture(GLuint glTexture)
+ {
+ if (skipCleanup)
+ return;
+
+ auto *glFun = m_createContext->functions();
+ Q_ASSERT(glFun->glGetError() == GL_NO_ERROR);
+ glFun->glDeleteTextures(1, &glTexture);
+ }
+
+private:
+ QOpenGLContext *m_createContext;
+ QOpenGLContext *m_currentContext;
+ QSurface *m_currentSurface = nullptr;
+ bool skipCleanup = false;
+};
+
NativeSkiaOutputDeviceOpenGL::NativeSkiaOutputDeviceOpenGL(
scoped_refptr<gpu::SharedContextState> contextState, bool requiresAlpha,
gpu::MemoryTracker *memoryTracker, viz::SkiaOutputSurfaceDependency *dependency,
@@ -221,10 +271,12 @@ QSGTexture *NativeSkiaOutputDeviceOpenGL::texture(QQuickWindow *win, uint32_t te
glxFun->glXBindTexImageEXT(display, glxPixmap, GLX_FRONT_LEFT_EXT, nullptr);
glFun->glBindTexture(GL_TEXTURE_2D, 0);
- m_frontBuffer->textureCleanupCallback = [glFun, glxFun, display, glxPixmap, glTexture,
- glxHelper, pixmapId]() {
+ QSurface *createSurface = glContext->surface();
+ m_frontBuffer->textureCleanupCallback = [glContext, createSurface, glxFun, display,
+ glxPixmap, glTexture, glxHelper, pixmapId]() {
+ ScopedGLContextForCleanup cleanupContext(glContext, createSurface);
glxFun->glXReleaseTexImageEXT(display, glxPixmap, GLX_FRONT_LEFT_EXT);
- glFun->glDeleteTextures(1, &glTexture);
+ cleanupContext.deleteTexture(glTexture);
glXDestroyGLXPixmap(display, glxPixmap);
glxHelper->freePixmap(pixmapId);
};
@@ -273,9 +325,11 @@ QSGTexture *NativeSkiaOutputDeviceOpenGL::texture(QQuickWindow *win, uint32_t te
glExtFun->glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, eglImage);
glFun->glBindTexture(GL_TEXTURE_2D, 0);
- m_frontBuffer->textureCleanupCallback = [glFun, eglFun, glTexture, eglDisplay,
- eglImage]() {
- glFun->glDeleteTextures(1, &glTexture);
+ QSurface *createSurface = glContext->surface();
+ m_frontBuffer->textureCleanupCallback = [glContext, createSurface, eglFun, glTexture,
+ eglDisplay, eglImage]() {
+ ScopedGLContextForCleanup cleanupContext(glContext, createSurface);
+ cleanupContext.deleteTexture(glTexture);
eglFun->eglDestroyImage(eglDisplay, eglImage);
};
}
@@ -328,11 +382,12 @@ QSGTexture *NativeSkiaOutputDeviceOpenGL::texture(QQuickWindow *win, uint32_t te
glMemoryObject, 0);
glFun->glBindTexture(GL_TEXTURE_2D, 0);
- m_frontBuffer->textureCleanupCallback = [glFun, glExtFun, glTexture, glMemoryObject]() {
- Q_ASSERT(glFun->glGetError() == GL_NO_ERROR);
-
+ QSurface *createSurface = glContext->surface();
+ m_frontBuffer->textureCleanupCallback = [glContext, createSurface, glExtFun, glTexture,
+ glMemoryObject]() {
+ ScopedGLContextForCleanup cleanupContext(glContext, createSurface);
glExtFun->glDeleteMemoryObjectsEXT(1, &glMemoryObject);
- glFun->glDeleteTextures(1, &glTexture);
+ cleanupContext.deleteTexture(glTexture);
};
#else
Q_UNREACHABLE();
@@ -384,12 +439,11 @@ QSGTexture *NativeSkiaOutputDeviceOpenGL::texture(QQuickWindow *win, uint32_t te
uint32_t glTexture = makeCGLTexture(win, ioSurface.get(), size());
texture = QNativeInterface::QSGOpenGLTexture::fromNative(glTexture, win, size(), texOpts);
- m_frontBuffer->textureCleanupCallback = [glTexture]() {
- auto *glContext = QOpenGLContext::currentContext();
- if (!glContext)
- return;
- auto glFun = glContext->functions();
- glFun->glDeleteTextures(1, &glTexture);
+ QOpenGLContext *glContext = QOpenGLContext::currentContext();
+ QSurface *createSurface = glContext->surface();
+ m_frontBuffer->textureCleanupCallback = [glContext, createSurface, glTexture]() {
+ ScopedGLContextForCleanup cleanupContext(glContext, createSurface);
+ cleanupContext.deleteTexture(glTexture);
};
#endif // BUILDFLAG(IS_OZONE)
diff --git a/src/core/compositor/wgl_helper.cpp b/src/core/compositor/wgl_helper.cpp
index 85e6bb915..3c3a096b9 100644
--- a/src/core/compositor/wgl_helper.cpp
+++ b/src/core/compositor/wgl_helper.cpp
@@ -124,9 +124,10 @@ D3DSharedTexture::D3DSharedTexture(WGLHelper::WGLFunctions *wglFun, ID3D11Device
// for an already shared texture.
immediateContext->CopyResource(m_d3dTexture.Get(), srcTexture.Get());
- auto *glContext = QOpenGLContext::currentContext();
- Q_ASSERT(glContext);
- auto *glFun = glContext->functions();
+ m_createContext = QOpenGLContext::currentContext();
+ m_createSurface = m_createContext->surface();
+ Q_ASSERT(m_createContext);
+ auto *glFun = m_createContext->functions();
glFun->glGenTextures(1, &m_glTexture);
@@ -148,10 +149,31 @@ D3DSharedTexture::~D3DSharedTexture()
m_wglFun->wglDXUnregisterObjectNV(m_interopDevice, m_glTextureHandle);
}
- auto *glContext = QOpenGLContext::currentContext();
- if (m_glTexture && glContext) {
- auto *glFun = glContext->functions();
+ if (m_glTexture) {
+ QOpenGLContext *currentContext = QOpenGLContext::currentContext();
+ QSurface *currentSurface = nullptr;
+
+ if (m_createContext != currentContext) {
+ if (currentContext)
+ currentSurface = currentContext->surface();
+
+ if (!m_createContext->makeCurrent(m_createSurface)) {
+ qWarning("Failed to make OpenGL context current for clean-up, OpenGL resources "
+ "will not be destroyed.");
+ return;
+ }
+ }
+
+ if (!m_createContext->isValid())
+ return;
+
+ auto *glFun = m_createContext->functions();
glFun->glDeleteTextures(1, &m_glTexture);
+
+ if (currentSurface) {
+ if (!currentContext->makeCurrent(currentSurface))
+ qFatal("Failed to restore OpenGL context after clean-up.");
+ }
}
}
diff --git a/src/core/compositor/wgl_helper.h b/src/core/compositor/wgl_helper.h
index c726c234c..1f94e0706 100644
--- a/src/core/compositor/wgl_helper.h
+++ b/src/core/compositor/wgl_helper.h
@@ -20,6 +20,9 @@
QT_BEGIN_NAMESPACE
+class QOpenGLContext;
+class QSurface;
+
class WGLHelper
{
public:
@@ -88,6 +91,8 @@ private:
HANDLE m_interopDevice;
Microsoft::WRL::ComPtr<ID3D11Texture2D> m_d3dTexture;
+ QOpenGLContext *m_createContext = nullptr;
+ QSurface *m_createSurface = nullptr;
GLuint m_glTexture = 0;
HANDLE m_glTextureHandle = INVALID_HANDLE_VALUE;
diff --git a/src/core/custom_handlers/protocol_handler_registry_delegate_qt.cpp b/src/core/custom_handlers/protocol_handler_registry_delegate_qt.cpp
index a5074fb88..70264ccf4 100644
--- a/src/core/custom_handlers/protocol_handler_registry_delegate_qt.cpp
+++ b/src/core/custom_handlers/protocol_handler_registry_delegate_qt.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
// based on chrome/browser/custom_handlers/chrome_protocol_handler_registry_delegate.cc:
// Copyright 2021 The Chromium Authors. All rights reserved.
diff --git a/src/core/custom_handlers/protocol_handler_registry_delegate_qt.h b/src/core/custom_handlers/protocol_handler_registry_delegate_qt.h
index 6a0753d22..11ecd4102 100644
--- a/src/core/custom_handlers/protocol_handler_registry_delegate_qt.h
+++ b/src/core/custom_handlers/protocol_handler_registry_delegate_qt.h
@@ -1,5 +1,6 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
// based on chrome/browser/custom_handlers/chrome_protocol_handler_registry_delegate.h:
// Copyright 2021 The Chromium Authors. All rights reserved.
diff --git a/src/core/custom_handlers/protocol_handler_registry_factory.cpp b/src/core/custom_handlers/protocol_handler_registry_factory.cpp
index efd5cb406..7caf78e3b 100644
--- a/src/core/custom_handlers/protocol_handler_registry_factory.cpp
+++ b/src/core/custom_handlers/protocol_handler_registry_factory.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
// based on chrome/browser/custom_handlers/protocol_handler_registry_factory.cc
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
diff --git a/src/core/custom_handlers/protocol_handler_registry_factory.h b/src/core/custom_handlers/protocol_handler_registry_factory.h
index aa9bea3a6..71c3dd772 100644
--- a/src/core/custom_handlers/protocol_handler_registry_factory.h
+++ b/src/core/custom_handlers/protocol_handler_registry_factory.h
@@ -1,5 +1,6 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
// based on chrome/browser/custom_handlers/protocol_handler_registry_factory.h:
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
diff --git a/src/core/custom_handlers/register_protocol_handler_request_controller.h b/src/core/custom_handlers/register_protocol_handler_request_controller.h
index 6305ce5b7..d28f46ed3 100644
--- a/src/core/custom_handlers/register_protocol_handler_request_controller.h
+++ b/src/core/custom_handlers/register_protocol_handler_request_controller.h
@@ -1,5 +1,6 @@
// Copyright (C) 2018 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef REGISTER_PROTOCOL_HANDLER_REQUEST_CONTROLLER_H
#define REGISTER_PROTOCOL_HANDLER_REQUEST_CONTROLLER_H
diff --git a/src/core/custom_handlers/register_protocol_handler_request_controller_impl.cpp b/src/core/custom_handlers/register_protocol_handler_request_controller_impl.cpp
index efaf54cd2..33bb2e586 100644
--- a/src/core/custom_handlers/register_protocol_handler_request_controller_impl.cpp
+++ b/src/core/custom_handlers/register_protocol_handler_request_controller_impl.cpp
@@ -1,5 +1,7 @@
// Copyright (C) 2018 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
+
#include "custom_handlers/register_protocol_handler_request_controller_impl.h"
#include "components/custom_handlers/protocol_handler_registry.h"
diff --git a/src/core/custom_handlers/register_protocol_handler_request_controller_impl.h b/src/core/custom_handlers/register_protocol_handler_request_controller_impl.h
index 073ca9bf8..526e5e5e6 100644
--- a/src/core/custom_handlers/register_protocol_handler_request_controller_impl.h
+++ b/src/core/custom_handlers/register_protocol_handler_request_controller_impl.h
@@ -1,5 +1,6 @@
// Copyright (C) 2018 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef REGISTER_PROTOCOL_HANDLER_REQUEST_CONTROLLER_IMPL_H
#define REGISTER_PROTOCOL_HANDLER_REQUEST_CONTROLLER_IMPL_H
diff --git a/src/core/doc/src/qtwebengine-overview.qdoc b/src/core/doc/src/qtwebengine-overview.qdoc
index 3a5d30338..3d7ebf6ad 100644
--- a/src/core/doc/src/qtwebengine-overview.qdoc
+++ b/src/core/doc/src/qtwebengine-overview.qdoc
@@ -249,28 +249,8 @@
\section1 High DPI Support
- To support High DPI devices, it is recommended that the application attribute
- Qt::AA_EnableHighDpiScaling is set to enable automatic scaling based on the
- pixel density of the monitor. In \QWE applications, the scaling
- affects the default zooming factor and scrollbar size.
-
- For example:
-
- \code
- int main(int argc, char *argv[])
- {
- QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
- QApplication app(argc, argv);
- // ...
- }
- \endcode
-
- \QWE bundles images for normal and high-dpi resolutions into
- \e qtwebengine_resources_100p.pak and \e qtwebengine_resources_200p.pak
- files. Depending on the target resolutions, one or both of these files need
- to be deployed.
-
- For more information, see \l{High DPI}.
+ High DPI support is always enabled in Qt 6, and this also applies to \QWE. For more information,
+ see \l{High DPI}.
\section1 Using WebEngine Core
diff --git a/src/core/media_capture_devices_dispatcher.cpp b/src/core/media_capture_devices_dispatcher.cpp
index 848a92986..d691c65ea 100644
--- a/src/core/media_capture_devices_dispatcher.cpp
+++ b/src/core/media_capture_devices_dispatcher.cpp
@@ -11,6 +11,8 @@
#include "web_contents_delegate_qt.h"
#include "web_contents_view_qt.h"
#include "web_engine_settings.h"
+#include "permission_manager_qt.h"
+#include "type_conversion.h"
#include "base/strings/strcat.h"
#include "blink/public/common/page/page_zoom.h"
@@ -21,6 +23,8 @@
#include "content/public/browser/desktop_streams_registry.h"
#include "content/public/browser/host_zoom_map.h"
#include "content/public/browser/media_capture_devices.h"
+#include "content/public/browser/permission_controller_delegate.h"
+#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
#include "media/audio/audio_device_description.h"
#include "media/audio/audio_manager_base.h"
@@ -493,8 +497,17 @@ void MediaCaptureDevicesDispatcher::processMediaAccessRequest(
}
enqueueMediaAccessRequest(webContents, request, std::move(callback), id);
- // We might not require this approval for pepper requests.
- adapterClient->runMediaAccessPermissionRequest(toQt(request.security_origin), flags);
+
+ PermissionManagerQt *permissionManager = static_cast<PermissionManagerQt *>(
+ webContents->GetBrowserContext()->GetPermissionControllerDelegate());
+ permissionManager->requestMediaPermissions(
+ content::RenderFrameHost::FromID(request.render_process_id, request.render_frame_id),
+ flags,
+ base::BindOnce(
+ &MediaCaptureDevicesDispatcher::handleMediaAccessPermissionResponse,
+ base::Unretained(this),
+ webContents,
+ toQt(request.url_origin)));
}
void MediaCaptureDevicesDispatcher::processDesktopCaptureAccessRequest(content::WebContents *webContents, const content::MediaStreamRequest &request, content::MediaResponseCallback callback)
@@ -558,9 +571,18 @@ void MediaCaptureDevicesDispatcher::ProcessQueuedAccessRequest(content::WebConte
RequestsQueue &queue(it->second);
content::MediaStreamRequest &request = queue.front()->request;
+ WebContentsAdapterClient::MediaRequestFlags flags = mediaRequestFlagsForRequest(request);
- WebContentsAdapterClient *adapterClient = WebContentsViewQt::from(static_cast<content::WebContentsImpl *>(webContents)->GetView())->client();
- adapterClient->runMediaAccessPermissionRequest(toQt(request.security_origin), mediaRequestFlagsForRequest(request));
+ PermissionManagerQt *permissionManager = static_cast<PermissionManagerQt *>(
+ webContents->GetBrowserContext()->GetPermissionControllerDelegate());
+ permissionManager->requestMediaPermissions(
+ content::RenderFrameHost::FromID(request.render_process_id, request.render_frame_id),
+ flags,
+ base::BindOnce(
+ &MediaCaptureDevicesDispatcher::handleMediaAccessPermissionResponse,
+ base::Unretained(this),
+ webContents,
+ toQt(request.url_origin)));
}
void MediaCaptureDevicesDispatcher::getDefaultDevices(const std::string &audioDeviceId, const std::string &videoDeviceId,
diff --git a/src/core/permission_manager_qt.cpp b/src/core/permission_manager_qt.cpp
index 5258f15cf..eae98b350 100644
--- a/src/core/permission_manager_qt.cpp
+++ b/src/core/permission_manager_qt.cpp
@@ -40,7 +40,7 @@ static QWebEnginePermission::PermissionType toQt(blink::PermissionType type)
case blink::PermissionType::VIDEO_CAPTURE:
return QWebEnginePermission::PermissionType::MediaVideoCapture;
case blink::PermissionType::DISPLAY_CAPTURE:
- return QWebEnginePermission::PermissionType::DesktopAudioVideoCapture;
+ return QWebEnginePermission::PermissionType::DesktopVideoCapture;
// We treat these both as read/write since we do not currently have a
// ClipboardSanitizedWrite permission type.
case blink::PermissionType::CLIPBOARD_READ_WRITE:
@@ -56,6 +56,8 @@ static QWebEnginePermission::PermissionType toQt(blink::PermissionType type)
case blink::PermissionType::WINDOW_MANAGEMENT:
case blink::PermissionType::BACKGROUND_SYNC:
case blink::PermissionType::NUM:
+ case blink::PermissionType::TOP_LEVEL_STORAGE_ACCESS:
+ case blink::PermissionType::SPEAKER_SELECTION:
return QWebEnginePermission::PermissionType::Unsupported;
case blink::PermissionType::MIDI_SYSEX:
case blink::PermissionType::PROTECTED_MEDIA_IDENTIFIER:
@@ -72,16 +74,13 @@ static QWebEnginePermission::PermissionType toQt(blink::PermissionType type)
case blink::PermissionType::AR:
case blink::PermissionType::VR:
case blink::PermissionType::STORAGE_ACCESS_GRANT:
- case blink::PermissionType::TOP_LEVEL_STORAGE_ACCESS:
case blink::PermissionType::CAPTURED_SURFACE_CONTROL:
case blink::PermissionType::SMART_CARD:
case blink::PermissionType::WEB_PRINTING:
- case blink::PermissionType::SPEAKER_SELECTION:
case blink::PermissionType::KEYBOARD_LOCK:
case blink::PermissionType::AUTOMATIC_FULLSCREEN:
case blink::PermissionType::HAND_TRACKING:
case blink::PermissionType::WEB_APP_INSTALLATION:
- LOG(INFO) << "Unexpected unsupported Blink permission type: " << static_cast<int>(type);
break;
}
return QWebEnginePermission::PermissionType::Unsupported;
@@ -107,16 +106,50 @@ static blink::PermissionType toBlink(QWebEnginePermission::PermissionType permis
return blink::PermissionType::LOCAL_FONTS;
case QWebEnginePermission::PermissionType::MouseLock:
return blink::PermissionType::POINTER_LOCK;
- case QWebEnginePermission::PermissionType::MediaAudioVideoCapture:
- LOG(INFO) << "Unexpected unsupported WebEngine permission type: " << static_cast<int>(permissionType);
- Q_FALLTHROUGH();
case QWebEnginePermission::PermissionType::Unsupported:
return blink::PermissionType::NUM;
+ case QWebEnginePermission::PermissionType::MediaAudioVideoCapture:
+ break;
}
Q_UNREACHABLE_RETURN(blink::PermissionType::NUM);
}
+static std::vector<QWebEnginePermission::PermissionType> toQt(
+ const std::vector<blink::PermissionType> &blinkPermissions)
+{
+ // This function handles the edge case differences between our permission types and Blink's;
+ // namely, MediaAudioVideoCapture and DesktopAudioVideoCapture
+ std::vector<QWebEnginePermission::PermissionType> permissions;
+ for (auto &p : blinkPermissions) {
+ permissions.push_back(toQt(p));
+ }
+
+ for (auto i1 = permissions.begin(); i1 != permissions.end(); ++i1) {
+ if (*i1 == QWebEnginePermission::PermissionType::MediaAudioCapture) {
+ for (auto i2 = permissions.begin(); i2 != permissions.end(); ++i2) {
+ if (*i2 == QWebEnginePermission::PermissionType::MediaVideoCapture) {
+ // Merge MediaAudioCapture and MediaVideoCapture into MediaAudioVideoCapture
+ *i1 = QWebEnginePermission::PermissionType::MediaAudioVideoCapture;
+ permissions.erase(i2);
+ break;
+ }
+ }
+ } else if (*i1 == QWebEnginePermission::PermissionType::DesktopVideoCapture) {
+ for (auto i2 = i1 + 1; i2 != permissions.end(); ++i2) {
+ if (*i2 == QWebEnginePermission::PermissionType::DesktopVideoCapture) {
+ // Double DesktopVideoCapture means we actually need DesktopAudioVideoCapture
+ *i2 = QWebEnginePermission::PermissionType::DesktopAudioVideoCapture;
+ i1 = permissions.erase(i1);
+ break;
+ }
+ }
+ }
+ }
+
+ return permissions;
+}
+
static QWebEnginePermission::State toQt(blink::mojom::PermissionStatus state)
{
switch (state) {
@@ -154,6 +187,8 @@ std::string permissionTypeString(QWebEnginePermission::PermissionType permission
return "MediaVideoCapture";
case QWebEnginePermission::PermissionType::DesktopAudioVideoCapture:
return "DesktopAudioVideoCapture";
+ case QWebEnginePermission::PermissionType::DesktopVideoCapture:
+ return "DesktopVideoCapture";
case QWebEnginePermission::PermissionType::MouseLock:
return "MouseLock";
case QWebEnginePermission::PermissionType::Notifications:
@@ -213,6 +248,8 @@ PermissionManagerQt::PermissionManagerQt(ProfileAdapter *profileAdapter)
m_permissionTypes.push_back(QWebEnginePermission::PermissionType::MediaAudioCapture);
m_permissionTypes.push_back(QWebEnginePermission::PermissionType::MediaVideoCapture);
+ m_permissionTypes.push_back(QWebEnginePermission::PermissionType::DesktopAudioVideoCapture);
+ m_permissionTypes.push_back(QWebEnginePermission::PermissionType::DesktopVideoCapture);
m_permissionTypes.push_back(QWebEnginePermission::PermissionType::MouseLock);
m_permissionTypes.push_back(QWebEnginePermission::PermissionType::Notifications);
m_permissionTypes.push_back(QWebEnginePermission::PermissionType::Geolocation);
@@ -239,38 +276,83 @@ PermissionManagerQt::~PermissionManagerQt()
commit();
}
+// static
+content::GlobalRenderFrameHostToken PermissionManagerQt::deserializeToken(int childId, const std::string &serializedToken)
+{
+ auto maybeToken = base::UnguessableToken::DeserializeFromString(serializedToken);
+ if (maybeToken)
+ return content::GlobalRenderFrameHostToken(childId, blink::LocalFrameToken(maybeToken.value()));
+
+ return content::GlobalRenderFrameHostToken();
+}
+
void PermissionManagerQt::setPermission(
const QUrl &url,
- QWebEnginePermission::PermissionType permissionType,
- QWebEnginePermission::State state,
- content::RenderFrameHost *rfh)
+ const QWebEnginePermission::PermissionType permissionType,
+ const QWebEnginePermission::State state,
+ const content::GlobalRenderFrameHostToken &token)
+{
+ if (permissionType == QWebEnginePermission::PermissionType::MediaAudioVideoCapture) {
+ setPermissionImpl(url, QWebEnginePermission::PermissionType::MediaAudioCapture, state, token);
+ setPermissionImpl(url, QWebEnginePermission::PermissionType::MediaVideoCapture, state, token);
+ return;
+ }
+
+ setPermissionImpl(url, permissionType, state, token);
+}
+
+void PermissionManagerQt::setPermission(
+ const QUrl &url,
+ const QWebEnginePermission::PermissionType permissionType,
+ const QWebEnginePermission::State state,
+ int childId, const std::string &serializedToken)
+{
+ content::GlobalRenderFrameHostToken token;
+ auto maybeToken = base::UnguessableToken::DeserializeFromString(serializedToken);
+ if (maybeToken)
+ token = content::GlobalRenderFrameHostToken(childId, blink::LocalFrameToken(maybeToken.value()));
+
+ setPermission(url, permissionType, state, token);
+}
+
+void PermissionManagerQt::setPermissionImpl(
+ const QUrl &url,
+ const QWebEnginePermission::PermissionType permissionTypeQt,
+ const QWebEnginePermission::State permissionStateQt,
+ const content::GlobalRenderFrameHostToken &frameToken)
{
+ const blink::PermissionType permissionTypeBlink = toBlink(permissionTypeQt);
+ const blink::mojom::PermissionStatus permissionStateBlink = toBlink(permissionStateQt);
+
// Normalize the QUrl to Chromium origin form.
const GURL gorigin = toGurl(url).DeprecatedGetOriginAsURL();
const QUrl origin = gorigin.is_empty() ? url : toQt(gorigin);
if (origin.isEmpty())
return;
- // Send eligible permissions with an associated rfh to the transient store. When pre-granting
+ // Send eligible permissions with an associated frameToken to the transient store. When pre-granting
// a non-persistent permission (or pre-granting any permission in AskEveryTime mode), it is allowed
// to pass through the persistent store. It will be moved to the transient store and associated
- // with a rfh the next time its status is requested.
- bool inTransientStore = rfh && (!QWebEnginePermission::isPersistent(permissionType) || !m_persistence);
+ // with a frameToken the next time its status is requested.
+ bool inTransientStore = frameToken.child_id != content::kInvalidChildProcessUniqueId
+ && (!QWebEnginePermission::isPersistent(permissionTypeQt) || !m_persistence);
- blink::mojom::PermissionStatus blinkStatus = toBlink(state);
- if (state == QWebEnginePermission::State::Ask) {
+ blink::mojom::PermissionStatus blinkStatus = permissionStateBlink;
+ if (permissionStateQt == QWebEnginePermission::State::Ask) {
if (inTransientStore)
- resetTransientPermission(toBlink(permissionType), gorigin, rfh->GetGlobalFrameToken());
+ resetTransientPermission(permissionTypeBlink, gorigin, frameToken);
else
- ResetPermission(toBlink(permissionType), gorigin, gorigin);
+ ResetPermission(permissionTypeBlink, gorigin, gorigin);
} else {
if (inTransientStore)
- setTransientPermission(toBlink(permissionType), gorigin, state == QWebEnginePermission::State::Granted, rfh->GetGlobalFrameToken());
+ setTransientPermission(permissionTypeBlink, gorigin,
+ permissionStateQt == QWebEnginePermission::State::Granted, frameToken);
else
- setPersistentPermission(toBlink(permissionType), gorigin, state == QWebEnginePermission::State::Granted);
+ setPersistentPermission(permissionTypeBlink,
+ gorigin, permissionStateQt == QWebEnginePermission::State::Granted);
auto it = m_requests.begin();
while (it != m_requests.end()) {
- if (it->origin == origin && it->type == permissionType) {
+ if (it->origin == origin && it->type == permissionTypeQt) {
std::move(it->callback).Run(blinkStatus);
it = m_requests.erase(it);
} else
@@ -292,10 +374,10 @@ void PermissionManagerQt::setPermission(
if (subscription->embedding_origin != gorigin)
continue;
- if (subscription->permission != toBlink(permissionType))
+ if (subscription->permission != permissionTypeBlink)
continue;
- if ((!QWebEnginePermission::isPersistent(permissionType) || !m_persistence)
- && targetRfh && targetRfh != rfh)
+ if ((!QWebEnginePermission::isPersistent(permissionTypeQt) || !m_persistence)
+ && targetRfh && targetRfh != content::RenderFrameHost::FromFrameToken(frameToken))
continue;
// Behavior in callbacks may differ depending on the denial reason. Until we have
@@ -312,7 +394,7 @@ void PermissionManagerQt::setPermission(
std::move(callback).Run();
}
- if (state == QWebEnginePermission::State::Ask)
+ if (permissionStateQt == QWebEnginePermission::State::Ask)
return;
auto it = m_multiRequests.begin();
@@ -321,32 +403,37 @@ void PermissionManagerQt::setPermission(
bool answerable = true;
std::vector<blink::mojom::PermissionStatus> result;
result.reserve(it->types.size());
- for (blink::PermissionType permission : it->types) {
- if (toQt(permission) == QWebEnginePermission::PermissionType::Unsupported) {
+ for (blink::PermissionType currentPermissionType : it->types) {
+ if (toQt(currentPermissionType) == QWebEnginePermission::PermissionType::Unsupported) {
result.push_back(blink::mojom::PermissionStatus::DENIED);
continue;
}
blink::mojom::PermissionStatus permissionStatus;
if (inTransientStore)
- permissionStatus = toBlink(getPermissionState(url, permissionType, rfh));
+ permissionStatus = toBlink(getPermissionState(url, toQt(currentPermissionType), frameToken));
else
- permissionStatus = GetPermissionStatus(permission, gorigin, GURL());
+ permissionStatus = GetPermissionStatus(currentPermissionType, gorigin, GURL());
- if (permissionStatus == toBlink(state)) {
+ if (permissionStatus == permissionStateBlink) {
if (permissionStatus == blink::mojom::PermissionStatus::ASK) {
answerable = false;
break;
}
result.push_back(permissionStatus);
- } else {
+ } else if (!m_persistence) {
// Reached when the PersistentPermissionsPolicy is set to AskEveryTime
- result.push_back(toBlink(state));
+ result.push_back(permissionStateBlink);
+ } else {
+ // Not all of the permissions in this request have been set yet, bail and wait for the next setPermission() call
+ answerable = false;
+ break;
}
}
if (answerable) {
- std::move(it->callback).Run(result);
+ if (!it->callback.is_null())
+ std::move(it->callback).Run(result);
it = m_multiRequests.erase(it);
continue;
}
@@ -355,23 +442,44 @@ void PermissionManagerQt::setPermission(
}
}
-QWebEnginePermission::State PermissionManagerQt::getPermissionState(const QUrl &origin, QWebEnginePermission::PermissionType permissionType,
- content::RenderFrameHost *rfh)
+QWebEnginePermission::State PermissionManagerQt::getPermissionState(
+ const QUrl &origin,
+ const QWebEnginePermission::PermissionType permissionType,
+ const content::GlobalRenderFrameHostToken &frameToken)
{
- if (rfh) {
- // Ignore the origin parameter
- return toQt(GetPermissionStatusForCurrentDocument(toBlink(permissionType), rfh, false));
+ std::vector<QWebEnginePermission::PermissionType> types;
+ if (permissionType == QWebEnginePermission::PermissionType::MediaAudioVideoCapture) {
+ types.push_back(QWebEnginePermission::PermissionType::MediaAudioCapture);
+ types.push_back(QWebEnginePermission::PermissionType::MediaVideoCapture);
+ } else {
+ types.push_back(permissionType);
+ }
+
+ auto *rfh = content::RenderFrameHost::FromFrameToken(frameToken);
+ QWebEnginePermission::State returnState = QWebEnginePermission::State::Invalid;
+ for (auto type : types) {
+ QWebEnginePermission::State state = rfh
+ ? toQt(GetPermissionStatusForCurrentDocument(toBlink(type), rfh, false))
+ : toQt(GetPermissionStatus(toBlink(type), toGurl(origin), GURL()));
+
+ if (returnState == QWebEnginePermission::State::Invalid)
+ returnState = state;
+ else if (returnState != state)
+ returnState = QWebEnginePermission::State::Ask;
}
- return toQt(GetPermissionStatus(toBlink(permissionType), toGurl(origin), GURL()));
+ return returnState;
}
-QList<QWebEnginePermission> PermissionManagerQt::listPermissions(const QUrl &origin, QWebEnginePermission::PermissionType permissionType)
+QList<QWebEnginePermission> PermissionManagerQt::listPermissions(
+ const QUrl &origin,
+ const QWebEnginePermission::PermissionType permissionType)
{
Q_ASSERT(origin.isEmpty() || permissionType == QWebEnginePermission::PermissionType::Unsupported);
+
QList<QWebEnginePermission> returnList;
- GURL gorigin = toGurl(origin).DeprecatedGetOriginAsURL();
- std::string originSpec = gorigin.spec();
+ const GURL gorigin = toGurl(origin).DeprecatedGetOriginAsURL();
+ const std::string originSpec = gorigin.spec();
if (!origin.isEmpty() && !gorigin.is_valid())
return returnList;
@@ -382,7 +490,7 @@ QList<QWebEnginePermission> PermissionManagerQt::listPermissions(const QUrl &ori
else
types.push_back(permissionType);
- for (auto &type : types) {
+ for (const auto &type : types) {
// Transient types may end up in the permission store as an implementation detail,
// but we do not want to expose them to callers.
if (!QWebEnginePermission::isPersistent(type))
@@ -399,7 +507,8 @@ QList<QWebEnginePermission> PermissionManagerQt::listPermissions(const QUrl &ori
if (!originSpec.empty() && entry.first != originSpec)
continue;
- auto *pvt = new QWebEnginePermissionPrivate(toQt(GURL(std::string_view(entry.first))), type, nullptr, m_profileAdapter.get());
+ auto *pvt = new QWebEnginePermissionPrivate(
+ toQt(GURL(std::string_view(entry.first))), type, m_profileAdapter.get());
returnList.push_back(QWebEnginePermission(pvt));
}
}
@@ -407,6 +516,78 @@ QList<QWebEnginePermission> PermissionManagerQt::listPermissions(const QUrl &ori
return returnList;
}
+void PermissionManagerQt::requestMediaPermissions(
+ content::RenderFrameHost *render_frame_host,
+ const WebContentsAdapterClient::MediaRequestFlags flags,
+ base::OnceCallback<void(WebContentsAdapterClient::MediaRequestFlags authorizationFlags)> callback)
+{
+ std::vector<blink::PermissionType> permissionTypesBlink;
+ if (flags.testFlag(WebContentsAdapterClient::MediaAudioCapture))
+ permissionTypesBlink.push_back(blink::PermissionType::AUDIO_CAPTURE);
+ if (flags.testFlag(WebContentsAdapterClient::MediaVideoCapture))
+ permissionTypesBlink.push_back(blink::PermissionType::VIDEO_CAPTURE);
+ if (flags.testFlag(WebContentsAdapterClient::MediaDesktopAudioCapture)
+ || flags.testFlag(WebContentsAdapterClient::MediaDesktopVideoCapture)) {
+ permissionTypesBlink.push_back(blink::PermissionType::DISPLAY_CAPTURE);
+ if (flags.testFlag(WebContentsAdapterClient::MediaDesktopAudioCapture)) {
+ // Inject a second copy of the permission type into the request,
+ // so we can distinguish between DesktopVideoCapture and DesktopAudioVideoCapture.
+ permissionTypesBlink.push_back(blink::PermissionType::DISPLAY_CAPTURE);
+ }
+ }
+
+ content::PermissionRequestDescription description(permissionTypesBlink, false, render_frame_host->GetLastCommittedOrigin().GetURL());
+
+ RequestPermissions(render_frame_host, description, base::BindOnce([](
+ std::vector<blink::PermissionType> permissionTypesBlink,
+ base::OnceCallback<void(WebContentsAdapterClient::MediaRequestFlags authorizationFlags)> callback,
+ const std::vector<blink::mojom::PermissionStatus> &statuses)
+ {
+ // This callback converts the Blink permission types to MediaRequestFlags,
+ // and then runs the callback initially passed to requestMediaPermissions().
+ DCHECK(permissionTypesBlink.size() == statuses.size());
+ WebContentsAdapterClient::MediaRequestFlags flags = WebContentsAdapterClient::MediaRequestFlag::MediaNone;
+ for (uint i = 0; i < statuses.size(); ++i) {
+ if (statuses[i] == blink::mojom::PermissionStatus::GRANTED) {
+ switch (permissionTypesBlink[i]) {
+ case blink::PermissionType::AUDIO_CAPTURE:
+ flags.setFlag(WebContentsAdapterClient::MediaRequestFlag::MediaAudioCapture);
+ break;
+ case blink::PermissionType::VIDEO_CAPTURE:
+ flags.setFlag(WebContentsAdapterClient::MediaRequestFlag::MediaVideoCapture);
+ break;
+ case blink::PermissionType::DISPLAY_CAPTURE:
+ flags.setFlag(WebContentsAdapterClient::MediaRequestFlag::MediaDesktopAudioCapture);
+ flags.setFlag(WebContentsAdapterClient::MediaRequestFlag::MediaDesktopVideoCapture);
+ break;
+ default:
+ Q_UNREACHABLE();
+ break;
+ }
+ }
+ }
+ std::move(callback).Run(flags);
+ }, permissionTypesBlink, std::move(callback)));
+}
+
+// Needed for the rare cases where a RenderFrameHost remains the same even after
+// a cross-origin navigation (e.g. inside an iframe). Needs to be called every
+// time transient permissions are accessed.
+void PermissionManagerQt::onCrossOriginNavigation(content::RenderFrameHost *render_frame_host)
+{
+ if (!render_frame_host)
+ return;
+
+ auto frameToken = render_frame_host->GetGlobalFrameToken();
+ auto &permissionsForToken = m_transientPermissions[frameToken];
+ if (!permissionsForToken.size())
+ return;
+
+ GURL savedOrigin = get<0>(permissionsForToken[0]);
+ if (render_frame_host->GetLastCommittedOrigin().GetURL() != savedOrigin)
+ m_transientPermissions.erase(frameToken);
+}
+
void PermissionManagerQt::commit()
{
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
@@ -414,15 +595,18 @@ void PermissionManagerQt::commit()
m_prefService->CommitPendingWrite();
}
-void PermissionManagerQt::RequestPermissions(content::RenderFrameHost *frameHost,
- const content::PermissionRequestDescription &requestDescription,
- base::OnceCallback<void(const std::vector<blink::mojom::PermissionStatus>&)> callback)
+void PermissionManagerQt::RequestPermissions(
+ content::RenderFrameHost *frameHost,
+ const content::PermissionRequestDescription &requestDescription,
+ base::OnceCallback<void(const std::vector<blink::mojom::PermissionStatus>&)> callback)
{
if (requestDescription.requesting_origin.is_empty()) {
- std::move(callback).Run(std::vector<content::PermissionStatus>(requestDescription.permissions.size(), blink::mojom::PermissionStatus::DENIED));
+ std::move(callback).Run(std::vector<content::PermissionStatus>(requestDescription.permissions.size(),
+ blink::mojom::PermissionStatus::DENIED));
return;
}
+ const auto frameToken = frameHost->GetGlobalFrameToken();
WebContentsDelegateQt *contentsDelegate = static_cast<WebContentsDelegateQt *>(
content::WebContents::FromRenderFrameHost(frameHost)->GetDelegate());
Q_ASSERT(contentsDelegate);
@@ -430,53 +614,54 @@ void PermissionManagerQt::RequestPermissions(content::RenderFrameHost *frameHost
bool answerable = true;
std::vector<content::PermissionStatus> result;
result.reserve(requestDescription.permissions.size());
- for (blink::PermissionType permission : requestDescription.permissions) {
- const QWebEnginePermission::PermissionType permissionType = toQt(permission);
- if (permissionType == QWebEnginePermission::PermissionType::Unsupported) {
+ for (const blink::PermissionType permissionTypeBlink : requestDescription.permissions) {
+ const QWebEnginePermission::PermissionType permissionTypeQt = toQt(permissionTypeBlink);
+ if (permissionTypeQt == QWebEnginePermission::PermissionType::Unsupported) {
result.push_back(blink::mojom::PermissionStatus::DENIED);
continue;
}
- blink::mojom::PermissionStatus permissionStatus = getStatusFromSettings(permission, contentsDelegate->webEngineSettings());
- if (permissionStatus == blink::mojom::PermissionStatus::ASK) {
+ blink::mojom::PermissionStatus permissionStatusBlink = getStatusFromSettings(
+ permissionTypeBlink, contentsDelegate->webEngineSettings());
+ if (permissionStatusBlink == blink::mojom::PermissionStatus::ASK) {
const GURL &rorigin = requestDescription.requesting_origin;
+ bool maybePreGranted = false;
if (!m_persistence) {
- answerable = false;
- break;
+ maybePreGranted = true;
}
- bool inTransientStore = !QWebEnginePermission::isPersistent(toQt(permission));
+ bool inTransientStore = !QWebEnginePermission::isPersistent(permissionTypeQt) || maybePreGranted;
if (inTransientStore) {
- permissionStatus = getTransientPermissionStatus(permission, rorigin, frameHost->GetGlobalFrameToken());
+ permissionStatusBlink = getTransientPermissionStatus(permissionTypeBlink, rorigin, frameToken);
- if (permissionStatus != blink::mojom::PermissionStatus::ASK) {
- result.push_back(permissionStatus);
+ if (permissionStatusBlink != blink::mojom::PermissionStatus::ASK) {
+ result.push_back(permissionStatusBlink);
continue;
}
// Fall through to check if permission was pre-granted (and thus landed in the permanent store)
}
- permissionStatus = GetPermissionStatus(permission, rorigin, rorigin);
+ permissionStatusBlink = GetPermissionStatus(permissionTypeBlink, rorigin, rorigin);
- if (inTransientStore && permissionStatus != blink::mojom::PermissionStatus::ASK) {
- // Move the pre-granted permission to the transient store and associate it with the rfh
- ResetPermission(permission, rorigin, rorigin);
- setTransientPermission(permission, rorigin, permissionStatus == blink::mojom::PermissionStatus::GRANTED,
- frameHost->GetGlobalFrameToken());
+ if (inTransientStore && permissionStatusBlink != blink::mojom::PermissionStatus::ASK) {
+ // Move the pre-granted permission to the transient store and associate it with a frame token
+ ResetPermission(permissionTypeBlink, rorigin, rorigin);
+ setTransientPermission(permissionTypeBlink, rorigin,
+ permissionStatusBlink == blink::mojom::PermissionStatus::GRANTED, frameToken);
}
- if (permissionStatus != blink::mojom::PermissionStatus::ASK) {
+ if (permissionStatusBlink != blink::mojom::PermissionStatus::ASK) {
// Automatically grant/deny without prompt if already asked once
- result.push_back(permissionStatus);
+ result.push_back(permissionStatusBlink);
} else {
answerable = false;
break;
}
} else {
// Reached when clipboard settings have been set
- result.push_back(permissionStatus);
+ result.push_back(permissionStatusBlink);
}
}
@@ -486,80 +671,75 @@ void PermissionManagerQt::RequestPermissions(content::RenderFrameHost *frameHost
}
int request_id = ++m_requestIdCount;
- auto requestOrigin = toQt(requestDescription.requesting_origin);
+ const auto requestOrigin = toQt(requestDescription.requesting_origin);
m_multiRequests.push_back({ request_id, requestDescription.permissions, requestOrigin, std::move(callback) });
- for (blink::PermissionType permission : requestDescription.permissions) {
- const QWebEnginePermission::PermissionType permissionType = toQt(permission);
- if (QWebEnginePermission::isPersistent(permissionType))
- contentsDelegate->requestFeaturePermission(permissionType, requestOrigin);
+ auto qtPermissions = toQt(requestDescription.permissions);
+ for (const QWebEnginePermission::PermissionType permissionTypeQt : qtPermissions) {
+ contentsDelegate->requestFeaturePermission(permissionTypeQt, requestOrigin, frameToken);
}
}
-void PermissionManagerQt::RequestPermissionsFromCurrentDocument(content::RenderFrameHost *frameHost,
- const content::PermissionRequestDescription &requestDescription,
- base::OnceCallback<void(const std::vector<blink::mojom::PermissionStatus>&)> callback)
+void PermissionManagerQt::RequestPermissionsFromCurrentDocument(
+ content::RenderFrameHost *frameHost,
+ const content::PermissionRequestDescription &requestDescription,
+ base::OnceCallback<void(const std::vector<blink::mojom::PermissionStatus>&)> callback)
{
RequestPermissions(frameHost, requestDescription, std::move(callback));
}
blink::mojom::PermissionStatus PermissionManagerQt::GetPermissionStatus(
- blink::PermissionType permission,
+ blink::PermissionType permissionTypeBlink,
const GURL& requesting_origin,
const GURL& /*embedding_origin*/)
{
- const QWebEnginePermission::PermissionType permissionType = toQt(permission);
- if (permissionType == QWebEnginePermission::PermissionType::Unsupported)
+ const QWebEnginePermission::PermissionType permissionTypeQt = toQt(permissionTypeBlink);
+ if (permissionTypeQt == QWebEnginePermission::PermissionType::Unsupported)
return blink::mojom::PermissionStatus::DENIED;
- permission = toBlink(toQt(permission)); // Filter out merged/unsupported permissions (e.g. clipboard)
- auto *pref = m_prefService->FindPreference(permissionTypeString(toQt(permission)));
+ permissionTypeBlink = toBlink(toQt(permissionTypeBlink)); // Filter out merged/unsupported permissions (e.g. clipboard)
+ auto *pref = m_prefService->FindPreference(permissionTypeString(permissionTypeQt));
if (!pref)
return blink::mojom::PermissionStatus::ASK; // Permission type not in database
- const auto *permissions = pref->GetValue()->GetIfDict();
- Q_ASSERT(permissions);
+ const auto *permissionsDict = pref->GetValue()->GetIfDict();
+ Q_ASSERT(permissionsDict);
- auto requestedPermission = permissions->FindBool(requesting_origin.DeprecatedGetOriginAsURL().spec());
+ const auto requestedPermission = permissionsDict->FindBool(requesting_origin.DeprecatedGetOriginAsURL().spec());
if (!requestedPermission)
return blink::mojom::PermissionStatus::ASK; // Origin is not in the current permission type's database
- // Workaround: local fonts are entirely managed by Chromium, which only calls RequestPermission() _after_
- // it's checked whether the permission has been granted. By always returning ASK, we force the request to
- // come through every time.
- if (permission == blink::PermissionType::LOCAL_FONTS && !m_persistence)
- return blink::mojom::PermissionStatus::ASK;
-
if (requestedPermission.value())
return blink::mojom::PermissionStatus::GRANTED;
return blink::mojom::PermissionStatus::DENIED;
}
blink::mojom::PermissionStatus PermissionManagerQt::GetPermissionStatusForCurrentDocument(
- blink::PermissionType permission,
+ blink::PermissionType permissionTypeBlink,
content::RenderFrameHost *render_frame_host, bool)
{
Q_ASSERT(render_frame_host);
- if (permission == blink::PermissionType::CLIPBOARD_READ_WRITE ||
- permission == blink::PermissionType::CLIPBOARD_SANITIZED_WRITE) {
+ if (permissionTypeBlink == blink::PermissionType::CLIPBOARD_READ_WRITE ||
+ permissionTypeBlink == blink::PermissionType::CLIPBOARD_SANITIZED_WRITE) {
WebContentsDelegateQt *delegate = static_cast<WebContentsDelegateQt *>(
content::WebContents::FromRenderFrameHost(render_frame_host)->GetDelegate());
Q_ASSERT(delegate);
- auto status = getStatusFromSettings(permission, delegate->webEngineSettings());
+ auto status = getStatusFromSettings(permissionTypeBlink, delegate->webEngineSettings());
if (status != blink::mojom::PermissionStatus::ASK)
return status;
}
- permission = toBlink(toQt(permission)); // Filter out merged/unsupported permissions (e.g. clipboard)
- if (toQt(permission) == QWebEnginePermission::PermissionType::Unsupported)
+ permissionTypeBlink = toBlink(toQt(permissionTypeBlink)); // Filter out merged/unsupported permissions (e.g. clipboard)
+ QWebEnginePermission::PermissionType permissionTypeQt = toQt(permissionTypeBlink);
+ if (permissionTypeQt == QWebEnginePermission::PermissionType::Unsupported)
return blink::mojom::PermissionStatus::DENIED;
GURL origin = render_frame_host->GetLastCommittedOrigin().GetURL();
auto status = blink::mojom::PermissionStatus::ASK;
- bool inTransientStore = !QWebEnginePermission::isPersistent(toQt(permission)) || !m_persistence;
+ const bool inTransientStore = !QWebEnginePermission::isPersistent(permissionTypeQt) || !m_persistence;
if (inTransientStore) {
- status = getTransientPermissionStatus(permission, origin, render_frame_host->GetGlobalFrameToken());
+ status = getTransientPermissionStatus(permissionTypeBlink, origin, render_frame_host->GetGlobalFrameToken());
if (status != blink::mojom::PermissionStatus::ASK) {
return status;
@@ -568,12 +748,12 @@ blink::mojom::PermissionStatus PermissionManagerQt::GetPermissionStatusForCurren
// Fall through to check if permission was pre-granted (and thus landed in the permanent store)
}
- status = GetPermissionStatus(permission, origin, origin);
+ status = GetPermissionStatus(permissionTypeBlink, origin, origin);
if (inTransientStore && status != blink::mojom::PermissionStatus::ASK) {
// Move the pre-granted permission to the transient store and associate it with the rfh
- ResetPermission(permission, origin, origin);
- setTransientPermission(permission, origin, status == blink::mojom::PermissionStatus::GRANTED,
+ ResetPermission(permissionTypeBlink, origin, origin);
+ setTransientPermission(permissionTypeBlink, origin, status == blink::mojom::PermissionStatus::GRANTED,
render_frame_host->GetGlobalFrameToken());
}
@@ -610,9 +790,9 @@ content::PermissionResult PermissionManagerQt::GetPermissionResultForOriginWitho
}
void PermissionManagerQt::ResetPermission(
- blink::PermissionType permission,
- const GURL& requesting_origin,
- const GURL& /*embedding_origin*/)
+ blink::PermissionType permission,
+ const GURL& requesting_origin,
+ const GURL& /*embedding_origin*/)
{
const QWebEnginePermission::PermissionType permissionType = toQt(permission);
if (permissionType == QWebEnginePermission::PermissionType::Unsupported)
@@ -622,12 +802,12 @@ void PermissionManagerQt::ResetPermission(
updater.Get().Remove(requesting_origin.spec());
}
-blink::mojom::PermissionStatus PermissionManagerQt::getTransientPermissionStatus(blink::PermissionType permission,
+blink::mojom::PermissionStatus PermissionManagerQt::getTransientPermissionStatus(
+ blink::PermissionType permissionTypeBlink,
const GURL& requesting_origin,
content::GlobalRenderFrameHostToken token)
{
- const QWebEnginePermission::PermissionType permissionType = toQt(permission);
- if (permissionType == QWebEnginePermission::PermissionType::Unsupported)
+ if (toQt(permissionTypeBlink) == QWebEnginePermission::PermissionType::Unsupported)
return blink::mojom::PermissionStatus::DENIED;
if (!m_transientPermissions.contains(token))
@@ -635,8 +815,10 @@ blink::mojom::PermissionStatus PermissionManagerQt::getTransientPermissionStatus
auto &permissionsForToken = m_transientPermissions[token];
for (auto p = permissionsForToken.begin(); p != permissionsForToken.end(); ++p) {
- if (get<0>(*p) == requesting_origin && get<1>(*p) == permission) {
- return get<2>(*p) ? blink::mojom::PermissionStatus::GRANTED : blink::mojom::PermissionStatus::DENIED;
+ if (get<0>(*p) == requesting_origin && get<1>(*p) == permissionTypeBlink) {
+ return get<2>(*p)
+ ? blink::mojom::PermissionStatus::GRANTED
+ : blink::mojom::PermissionStatus::DENIED;
}
}
@@ -644,47 +826,49 @@ blink::mojom::PermissionStatus PermissionManagerQt::getTransientPermissionStatus
}
void PermissionManagerQt::setPersistentPermission(
- blink::PermissionType permission,
- const GURL& requesting_origin,
- bool granted)
+ blink::PermissionType permissionTypeBlink,
+ const GURL& requesting_origin,
+ bool granted)
{
- const QWebEnginePermission::PermissionType permissionType = toQt(permission);
- if (permissionType == QWebEnginePermission::PermissionType::Unsupported)
+ const QWebEnginePermission::PermissionType permissionTypeQt = toQt(permissionTypeBlink);
+ if (permissionTypeQt == QWebEnginePermission::PermissionType::Unsupported)
return;
- if (!m_prefService->FindPreference(permissionTypeString(permissionType)))
+ if (!m_prefService->FindPreference(permissionTypeString(permissionTypeQt)))
return;
- ScopedDictPrefUpdate updater(m_prefService.get(), permissionTypeString(permissionType));
+ ScopedDictPrefUpdate updater(m_prefService.get(), permissionTypeString(permissionTypeQt));
updater.Get().Set(requesting_origin.spec(), granted);
m_prefService->SchedulePendingLossyWrites();
}
-void PermissionManagerQt::setTransientPermission(blink::PermissionType permission,
+void PermissionManagerQt::setTransientPermission(
+ blink::PermissionType permissionTypeBlink,
const GURL& requesting_origin,
bool granted,
content::GlobalRenderFrameHostToken token)
{
- const QWebEnginePermission::PermissionType permissionType = toQt(permission);
- if (permissionType == QWebEnginePermission::PermissionType::Unsupported)
+ const QWebEnginePermission::PermissionType permissionTypeQt = toQt(permissionTypeBlink);
+ if (permissionTypeQt == QWebEnginePermission::PermissionType::Unsupported)
return;
auto &permissionsForToken = m_transientPermissions[token];
for (auto &p : permissionsForToken) {
- if (get<0>(p) == requesting_origin && get<1>(p) == permission) {
+ if (get<0>(p) == requesting_origin && get<1>(p) == permissionTypeBlink) {
get<2>(p) = granted;
return;
}
}
- permissionsForToken.push_back({requesting_origin, permission, granted});
+ permissionsForToken.push_back({requesting_origin, permissionTypeBlink, granted});
// Render frame hosts get discarded often, so the map will eventualy fill up with junk unless
// periodically cleaned. The number 25 was chosen arbitrarily.
if (++m_transientWriteCount > 25) {
content::GetUIThreadTaskRunner({})->PostTask(FROM_HERE,
- base::BindOnce([](PermissionManagerQt *p){
+ base::BindOnce([](PermissionManagerQt *p)
+ {
for (auto i = p->m_transientPermissions.begin(); i != p->m_transientPermissions.end(); ++i) {
if (content::RenderFrameHost::FromFrameToken(i->first) == nullptr) {
i = p->m_transientPermissions.erase(i);
@@ -695,17 +879,18 @@ void PermissionManagerQt::setTransientPermission(blink::PermissionType permissio
}
}
-void PermissionManagerQt::resetTransientPermission(blink::PermissionType permission,
+void PermissionManagerQt::resetTransientPermission(
+ blink::PermissionType permissionTypeBlink,
const GURL& requesting_origin,
content::GlobalRenderFrameHostToken token)
{
- const QWebEnginePermission::PermissionType permissionType = toQt(permission);
- if (permissionType == QWebEnginePermission::PermissionType::Unsupported)
+ const QWebEnginePermission::PermissionType permissionTypeQt = toQt(permissionTypeBlink);
+ if (permissionTypeQt == QWebEnginePermission::PermissionType::Unsupported)
return;
auto &permissionsForToken = m_transientPermissions[token];
for (auto i = permissionsForToken.begin(); i != permissionsForToken.end(); ++i) {
- if (get<0>(*i) == requesting_origin && get<1>(*i) == permission) {
+ if (get<0>(*i) == requesting_origin && get<1>(*i) == permissionTypeBlink) {
permissionsForToken.erase(i);
return;
}
diff --git a/src/core/permission_manager_qt.h b/src/core/permission_manager_qt.h
index 7468e9861..d8474d1e1 100644
--- a/src/core/permission_manager_qt.h
+++ b/src/core/permission_manager_qt.h
@@ -6,11 +6,13 @@
#include "base/functional/callback.h"
#include "content/public/browser/global_routing_id.h"
+#include "content/public/browser/media_stream_request.h"
#include "content/public/browser/permission_controller_delegate.h"
#include "content/public/browser/render_frame_host.h"
#include <QtWebEngineCore/qwebenginepermission.h>
#include "profile_adapter.h"
+#include "web_contents_adapter_client.h"
#include <map>
#include <tuple>
@@ -25,14 +27,30 @@ public:
PermissionManagerQt(ProfileAdapter *adapter);
~PermissionManagerQt();
+ static content::GlobalRenderFrameHostToken deserializeToken(int childId, const std::string &serializedToken);
+
+ void setPermission(
+ const QUrl &origin,
+ const QWebEnginePermission::PermissionType permissionType,
+ const QWebEnginePermission::State state,
+ const content::GlobalRenderFrameHostToken &frameToken);
+
void setPermission(
const QUrl &origin,
- QWebEnginePermission::PermissionType permissionType,
- QWebEnginePermission::State state,
- content::RenderFrameHost *rfh = nullptr);
- QWebEnginePermission::State getPermissionState(const QUrl &origin, QWebEnginePermission::PermissionType permissionType,
- content::RenderFrameHost *rfh = nullptr);
- QList<QWebEnginePermission> listPermissions(const QUrl &origin, QWebEnginePermission::PermissionType permissionType);
+ const QWebEnginePermission::PermissionType permissionType,
+ const QWebEnginePermission::State state,
+ int childId, const std::string &serializedToken);
+
+ QWebEnginePermission::State getPermissionState(const QUrl &origin, const QWebEnginePermission::PermissionType permissionType,
+ const content::GlobalRenderFrameHostToken &frameToken);
+ QList<QWebEnginePermission> listPermissions(const QUrl &origin, const QWebEnginePermission::PermissionType permissionType);
+
+ void requestMediaPermissions(
+ content::RenderFrameHost *render_frame_host,
+ const WebContentsAdapterClient::MediaRequestFlags flags,
+ base::OnceCallback<void(WebContentsAdapterClient::MediaRequestFlags authorizationFlags)> callback);
+
+ void onCrossOriginNavigation(content::RenderFrameHost *render_frame_host);
void commit();
@@ -42,7 +60,6 @@ public:
const GURL& requesting_origin,
const GURL& embedding_origin) override;
-
content::PermissionStatus GetPermissionStatusForCurrentDocument(blink::PermissionType, content::RenderFrameHost*, bool) override;
blink::mojom::PermissionStatus GetPermissionStatusForWorker(blink::PermissionType, content::RenderProcessHost *, const GURL &) override;
@@ -85,6 +102,12 @@ private:
base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback;
};
+ void setPermissionImpl(
+ const QUrl &origin,
+ const QWebEnginePermission::PermissionType permissionType,
+ const QWebEnginePermission::State state,
+ const content::GlobalRenderFrameHostToken &frameToken);
+
blink::mojom::PermissionStatus getTransientPermissionStatus(blink::PermissionType permission,
const GURL& requesting_origin,
content::GlobalRenderFrameHostToken token);
diff --git a/src/core/printing/pdf_document_helper_client_qt.cpp b/src/core/printing/pdf_document_helper_client_qt.cpp
index acf2ef7e0..a82c68e54 100644
--- a/src/core/printing/pdf_document_helper_client_qt.cpp
+++ b/src/core/printing/pdf_document_helper_client_qt.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
// based on chrome/browser/ui/pdf/chrome_pdf_document_helper_client.cc:
diff --git a/src/core/printing/pdf_document_helper_client_qt.h b/src/core/printing/pdf_document_helper_client_qt.h
index 3c848dfe3..1bfdc1db0 100644
--- a/src/core/printing/pdf_document_helper_client_qt.h
+++ b/src/core/printing/pdf_document_helper_client_qt.h
@@ -1,5 +1,6 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef PDF_DOCUMENT_HELPER_CLIENT_QT_H
#define PDF_DOCUMENT_HELPER_CLIENT_QT_H
diff --git a/src/core/printing/pdf_stream_delegate_qt.cpp b/src/core/printing/pdf_stream_delegate_qt.cpp
index bb82c3302..352a7bdd4 100644
--- a/src/core/printing/pdf_stream_delegate_qt.cpp
+++ b/src/core/printing/pdf_stream_delegate_qt.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
// based on chrome/browser/pdf/chrome_pdf_stream_delegate.cc:
diff --git a/src/core/printing/pdf_stream_delegate_qt.h b/src/core/printing/pdf_stream_delegate_qt.h
index 61ceed777..42271aba3 100644
--- a/src/core/printing/pdf_stream_delegate_qt.h
+++ b/src/core/printing/pdf_stream_delegate_qt.h
@@ -1,5 +1,6 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef PDF_STREAM_DELEGATE_QT_H
#define PDF_STREAM_DELEGATE_QT_H
diff --git a/src/core/printing/pdfium_document_wrapper_qt.cpp b/src/core/printing/pdfium_document_wrapper_qt.cpp
index 56588620d..a9a79140f 100644
--- a/src/core/printing/pdfium_document_wrapper_qt.cpp
+++ b/src/core/printing/pdfium_document_wrapper_qt.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "pdfium_document_wrapper_qt.h"
#include <QtCore/qhash.h>
diff --git a/src/core/printing/pdfium_document_wrapper_qt.h b/src/core/printing/pdfium_document_wrapper_qt.h
index feb34e36a..e390acc48 100644
--- a/src/core/printing/pdfium_document_wrapper_qt.h
+++ b/src/core/printing/pdfium_document_wrapper_qt.h
@@ -1,5 +1,6 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
//
// W A R N I N G
diff --git a/src/core/printing/print_view_manager_base_qt.cpp b/src/core/printing/print_view_manager_base_qt.cpp
index f36767aac..54ca48d70 100644
--- a/src/core/printing/print_view_manager_base_qt.cpp
+++ b/src/core/printing/print_view_manager_base_qt.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
// This is based on chrome/browser/printing/print_view_manager_base.cc:
// Copyright 2013 The Chromium Authors. All rights reserved.
diff --git a/src/core/printing/print_view_manager_base_qt.h b/src/core/printing/print_view_manager_base_qt.h
index f2d4149ab..57cb24bf1 100644
--- a/src/core/printing/print_view_manager_base_qt.h
+++ b/src/core/printing/print_view_manager_base_qt.h
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
diff --git a/src/core/printing/print_view_manager_qt.cpp b/src/core/printing/print_view_manager_qt.cpp
index 364253887..fd6539d95 100644
--- a/src/core/printing/print_view_manager_qt.cpp
+++ b/src/core/printing/print_view_manager_qt.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
// Loosely based on print_view_manager.cc and print_preview_message_handler.cc
// Copyright 2013 The Chromium Authors. All rights reserved.
diff --git a/src/core/printing/print_view_manager_qt.h b/src/core/printing/print_view_manager_qt.h
index 6d90e1061..1e4a65790 100644
--- a/src/core/printing/print_view_manager_qt.h
+++ b/src/core/printing/print_view_manager_qt.h
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
diff --git a/src/core/printing/printer_worker.cpp b/src/core/printing/printer_worker.cpp
index 64c30ac2d..3d1c1f4ec 100644
--- a/src/core/printing/printer_worker.cpp
+++ b/src/core/printing/printer_worker.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2018 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "printer_worker.h"
diff --git a/src/core/printing/printer_worker.h b/src/core/printing/printer_worker.h
index 0d2454fa0..e4d4ead99 100644
--- a/src/core/printing/printer_worker.h
+++ b/src/core/printing/printer_worker.h
@@ -1,5 +1,6 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
//
// W A R N I N G
diff --git a/src/core/profile_adapter.cpp b/src/core/profile_adapter.cpp
index f0cabc088..1e07f95f3 100644
--- a/src/core/profile_adapter.cpp
+++ b/src/core/profile_adapter.cpp
@@ -33,7 +33,9 @@
#include "renderer_host/user_resource_controller_host.h"
#include "type_conversion.h"
#include "visited_links_manager_qt.h"
+#include "web_contents_adapter.h"
#include "web_contents_adapter_client.h"
+#include "web_contents_delegate_qt.h"
#include "web_engine_context.h"
#include <QCoreApplication>
@@ -627,15 +629,29 @@ UserResourceControllerHost *ProfileAdapter::userResourceController()
}
void ProfileAdapter::setPermission(const QUrl &origin, QWebEnginePermission::PermissionType permissionType,
- QWebEnginePermission::State state, content::RenderFrameHost *rfh)
+ QWebEnginePermission::State state, int childId, const std::string &serializedToken)
{
- static_cast<PermissionManagerQt*>(profile()->GetPermissionControllerDelegate())->setPermission(origin, permissionType, state, rfh);
+ auto token = PermissionManagerQt::deserializeToken(childId, serializedToken);
+
+ // Check if the frame token is valid, and defer to WebContentsAdapter if so
+ auto *rfh = content::RenderFrameHost::FromFrameToken(token);
+ if (rfh) {
+ static_cast<WebContentsDelegateQt *>(content::WebContents::FromRenderFrameHost(rfh)->GetDelegate())
+ ->webContentsAdapter()
+ ->setPermission(origin, permissionType, state, childId, serializedToken);
+ return;
+ }
+
+ // Otherwise, set the permission directly
+ static_cast<PermissionManagerQt *>(profile()->GetPermissionControllerDelegate())
+ ->setPermission(origin, permissionType, state, token);
}
QWebEnginePermission::State ProfileAdapter::getPermissionState(const QUrl &origin, QWebEnginePermission::PermissionType permissionType,
- content::RenderFrameHost *rfh)
+ int childId, const std::string &serializedToken)
{
- return static_cast<PermissionManagerQt*>(profile()->GetPermissionControllerDelegate())->getPermissionState(origin, permissionType, rfh);
+ return static_cast<PermissionManagerQt*>(profile()->GetPermissionControllerDelegate())
+ ->getPermissionState(origin, permissionType, PermissionManagerQt::deserializeToken(childId, serializedToken));
}
QList<QWebEnginePermission> ProfileAdapter::listPermissions(const QUrl &origin, QWebEnginePermission::PermissionType permissionType)
diff --git a/src/core/profile_adapter.h b/src/core/profile_adapter.h
index b6357ce1c..22dd65973 100644
--- a/src/core/profile_adapter.h
+++ b/src/core/profile_adapter.h
@@ -16,6 +16,7 @@
#define PROFILE_ADAPTER_H
#include <QtWebEngineCore/private/qtwebenginecoreglobal_p.h>
+#include <QtWebEngineCore/private/qwebenginepermission_p.h>
#include <QHash>
#include <QList>
@@ -61,7 +62,8 @@ public:
enum PersistentCookiesPolicy {
NoPersistentCookies = 0,
AllowPersistentCookies,
- ForcePersistentCookies
+ ForcePersistentCookies,
+ OnlyPersistentCookies,
};
enum VisitedLinksPolicy {
@@ -186,9 +188,9 @@ public:
UserResourceControllerHost *userResourceController();
void setPermission(const QUrl &origin, QWebEnginePermission::PermissionType permissionType,
- QWebEnginePermission::State state, content::RenderFrameHost *rfh = nullptr);
+ QWebEnginePermission::State state, int childId = -1, const std::string &serializedToken = std::string());
QWebEnginePermission::State getPermissionState(const QUrl &origin, QWebEnginePermission::PermissionType permissionType,
- content::RenderFrameHost *rfh = nullptr);
+ int childId = -1, const std::string &serializedToken = std::string());
QList<QWebEnginePermission> listPermissions(const QUrl &origin = QUrl(),
QWebEnginePermission::PermissionType permissionType = QWebEnginePermission::PermissionType::Unsupported);
diff --git a/src/core/profile_io_data_qt.cpp b/src/core/profile_io_data_qt.cpp
index 567403a7c..85b533b93 100644
--- a/src/core/profile_io_data_qt.cpp
+++ b/src/core/profile_io_data_qt.cpp
@@ -224,7 +224,8 @@ void ProfileIODataQt::ConfigureNetworkContextParams(bool in_memory,
if (m_persistentCookiesPolicy != ProfileAdapter::NoPersistentCookies) {
network_context_params->file_paths->cookie_database_name = base::FilePath::FromASCII("Cookies");
network_context_params->restore_old_session_cookies = m_persistentCookiesPolicy == ProfileAdapter::ForcePersistentCookies;
- network_context_params->persist_session_cookies = m_persistentCookiesPolicy != ProfileAdapter::NoPersistentCookies;
+ network_context_params->persist_session_cookies =
+ m_persistentCookiesPolicy != ProfileAdapter::OnlyPersistentCookies;
}
}
diff --git a/src/core/render_widget_host_view_qt_delegate_item.cpp b/src/core/render_widget_host_view_qt_delegate_item.cpp
index 77adb843c..dc8eac4de 100644
--- a/src/core/render_widget_host_view_qt_delegate_item.cpp
+++ b/src/core/render_widget_host_view_qt_delegate_item.cpp
@@ -5,10 +5,13 @@
#include "render_widget_host_view_qt_delegate_client.h"
+#include <QtCore/qrunnable.h>
+#include <QtCore/qthread.h>
#include <QtGui/qevent.h>
#include <QtGui/qguiapplication.h>
#include <QtGui/qwindow.h>
#include <QtQuick/qsgimagenode.h>
+#include <rhi/qrhi.h>
#if QT_CONFIG(accessibility)
#include <QtGui/qaccessible.h>
@@ -37,7 +40,9 @@ RenderWidgetHostViewQtDelegateItem::RenderWidgetHostViewQtDelegateItem(RenderWid
RenderWidgetHostViewQtDelegateItem::~RenderWidgetHostViewQtDelegateItem()
{
- releaseTextureResources();
+ if (QQuickItem::window())
+ releaseResources();
+
unbind(); // Compositor::Observer
if (m_widgetDelegate) {
m_widgetDelegate->Unbind();
@@ -326,12 +331,6 @@ void RenderWidgetHostViewQtDelegateItem::itemChange(ItemChange change, const Ite
for (const QMetaObject::Connection &c : std::as_const(m_windowConnections))
disconnect(c);
m_windowConnections.clear();
-
- auto comp = compositor();
- if (comp && comp->type() == Compositor::Type::Native) {
- comp->releaseTexture();
- comp->releaseResources();
- }
}
if (value.window) {
@@ -343,10 +342,12 @@ void RenderWidgetHostViewQtDelegateItem::itemChange(ItemChange change, const Ite
m_windowConnections.append(connect(value.window, SIGNAL(xChanged(int)), SLOT(onWindowPosChanged())));
m_windowConnections.append(
connect(value.window, SIGNAL(yChanged(int)), SLOT(onWindowPosChanged())));
- m_windowConnections.append(
- connect(value.window, &QQuickWindow::sceneGraphAboutToStop, this,
- &RenderWidgetHostViewQtDelegateItem::releaseTextureResources,
- Qt::DirectConnection));
+ m_windowConnections.append(connect(
+ value.window, &QQuickWindow::sceneGraphAboutToStop, this,
+ &RenderWidgetHostViewQtDelegateItem::releaseResources, Qt::DirectConnection));
+ m_windowConnections.append(connect(
+ value.window, &QQuickWindow::sceneGraphInvalidated, this,
+ &RenderWidgetHostViewQtDelegateItem::releaseResources, Qt::DirectConnection));
if (!m_isPopup)
m_windowConnections.append(connect(value.window, SIGNAL(closing(QQuickCloseEvent*)), SLOT(onHide())));
}
@@ -366,6 +367,61 @@ void RenderWidgetHostViewQtDelegateItem::itemChange(ItemChange change, const Ite
}
}
+class CleanupJob : public QRunnable
+{
+public:
+ CleanupJob(Compositor::Handle<Compositor> compositor) : m_compositor(std::move(compositor)) { }
+
+ ~CleanupJob()
+ {
+ if (m_compositor->hasResources()) {
+ qWarning("Failed to release graphics resources because the clean-up render job was "
+ "deleted.");
+ }
+ }
+
+ void run() override { m_compositor->releaseResources(); }
+
+private:
+ Compositor::Handle<Compositor> m_compositor;
+};
+
+void RenderWidgetHostViewQtDelegateItem::releaseResources()
+{
+ auto comp = compositor();
+ if (!comp || comp->type() != Compositor::Type::Native || !comp->hasResources())
+ return;
+
+ comp->releaseTexture();
+
+ QQuickWindow *win = QQuickItem::window();
+ if (!win) {
+ qWarning("Failed to release graphics resources because QQuickWindow is not available.");
+ return;
+ }
+
+ QRhi *rhi = win->rhi();
+ if (!rhi) {
+ qWarning("Failed to release graphics resources because RHI is not available.");
+ return;
+ }
+
+ // Do not schedule clean-up if the resources were created on the current thread.
+ if (QThread::currentThread() == rhi->thread()) {
+ comp->releaseResources();
+ return;
+ }
+
+ if (win->isExposed())
+ win->scheduleRenderJob(new CleanupJob(std::move(comp)), QQuickWindow::NoStage);
+ else {
+ // TODO: Try to find a proper way to schedule job on the render thread if the window is
+ // not exposed.
+ // This is reproducible with ./tst_qquickwebengineviewgraphics simpleGraphics simpleGraphics
+ qWarning("Failed to release graphics resources because QQuickWindow is not exposed.");
+ }
+}
+
QSGNode *RenderWidgetHostViewQtDelegateItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
{
auto comp = compositor();
@@ -447,15 +503,6 @@ void RenderWidgetHostViewQtDelegateItem::onHide()
m_client->forwardEvent(&event);
}
-void RenderWidgetHostViewQtDelegateItem::releaseTextureResources()
-{
- auto comp = compositor();
- if (!comp || comp->type() != Compositor::Type::Native)
- return;
-
- comp->releaseResources();
-}
-
void RenderWidgetHostViewQtDelegateItem::adapterClientChanged(WebContentsAdapterClient *client)
{
m_adapterClient = client;
diff --git a/src/core/render_widget_host_view_qt_delegate_item.h b/src/core/render_widget_host_view_qt_delegate_item.h
index 65fbeeb17..f0351aa9f 100644
--- a/src/core/render_widget_host_view_qt_delegate_item.h
+++ b/src/core/render_widget_host_view_qt_delegate_item.h
@@ -95,6 +95,7 @@ protected:
void inputMethodEvent(QInputMethodEvent *event) override;
void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override;
void itemChange(ItemChange change, const ItemChangeData &value) override;
+ void releaseResources() override;
QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override;
void adapterClientChanged(WebContentsAdapterClient *client) override;
@@ -104,7 +105,6 @@ private Q_SLOTS:
void onBeforeRendering();
void onAfterFrameEnd();
void onWindowPosChanged();
- void releaseTextureResources();
void onHide();
private:
diff --git a/src/core/tools/qwebengine_convert_dict/main.cpp b/src/core/tools/qwebengine_convert_dict/main.cpp
index 3264e4c13..5978b0a11 100644
--- a/src/core/tools/qwebengine_convert_dict/main.cpp
+++ b/src/core/tools/qwebengine_convert_dict/main.cpp
@@ -8,6 +8,7 @@
** Copyright (C) 2016 The Qt Company Ltd.
**
** SPDX-License-Identifier: BSD-3-Clause
+** Qt-Security score:critical reason:data-parser
**
** This tool converts Hunspell .aff/.dic pairs to a combined binary dictionary
** format (.bdic). This format is more compact, and can be more efficiently
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
index 8c4d01e58..685b2acfe 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -16,6 +16,7 @@
#include "find_text_helper.h"
#include "media_capture_devices_dispatcher.h"
#include "pdf_util_qt.h"
+#include "permission_manager_qt.h"
#include "profile_adapter.h"
#include "profile_qt.h"
#include "qwebengineloadinginfo.h"
@@ -1417,17 +1418,18 @@ QSizeF WebContentsAdapter::lastContentsSize() const
return QSizeF();
}
-void WebContentsAdapter::setPermission(const QUrl &origin, QWebEnginePermission::PermissionType permissionType, QWebEnginePermission::State state)
+void WebContentsAdapter::setPermission(
+ const QUrl &origin,
+ QWebEnginePermission::PermissionType permissionType,
+ QWebEnginePermission::State state,
+ int childId, const std::string &serializedToken)
{
+ auto *manager = static_cast<PermissionManagerQt*>(m_profileAdapter->profile()->GetPermissionControllerDelegate());
+
if (QWebEnginePermission::isPersistent(permissionType)) {
// Do not check for initialization in this path so permissions can be set before first navigation
Q_ASSERT(m_profileAdapter);
- if (!isInitialized()) {
- m_profileAdapter->setPermission(origin, permissionType, state);
- } else {
- m_profileAdapter->setPermission(origin, permissionType, state, m_webContents.get()->GetPrimaryMainFrame());
- }
-
+ manager->setPermission(origin, permissionType, state, childId, serializedToken);
return;
}
@@ -1440,115 +1442,87 @@ void WebContentsAdapter::setPermission(const QUrl &origin, QWebEnginePermission:
// Do nothing
break;
case QWebEnginePermission::State::Denied:
- grantMouseLockPermission(origin, false);
+ grantMouseLockPermission(origin, childId, serializedToken, false);
break;
case QWebEnginePermission::State::Granted:
- grantMouseLockPermission(origin, true);
+ grantMouseLockPermission(origin, childId, serializedToken, true);
break;
}
return;
}
- const WebContentsAdapterClient::MediaRequestFlags audioVideoCaptureFlags(
- WebContentsAdapterClient::MediaVideoCapture |
- WebContentsAdapterClient::MediaAudioCapture);
- const WebContentsAdapterClient::MediaRequestFlags desktopAudioVideoCaptureFlags(
- WebContentsAdapterClient::MediaDesktopVideoCapture |
- WebContentsAdapterClient::MediaDesktopAudioCapture);
-
- switch (state) {
- case QWebEnginePermission::State::Invalid:
- case QWebEnginePermission::State::Ask:
- // Do nothing
- return;
- case QWebEnginePermission::State::Denied:
- // Deny all media access
- grantMediaAccessPermission(origin, WebContentsAdapterClient::MediaNone);
- return;
- case QWebEnginePermission::State::Granted:
- // Enable only the requested capture type
- break;
- }
+ // If we reach this, we must be handling media access permissions
+ manager->setPermission(origin, permissionType, state, childId, serializedToken);
- switch (permissionType) {
- case QWebEnginePermission::PermissionType::MediaAudioVideoCapture:
- grantMediaAccessPermission(origin, audioVideoCaptureFlags);
- break;
- case QWebEnginePermission::PermissionType::MediaAudioCapture:
- grantMediaAccessPermission(origin, WebContentsAdapterClient::MediaAudioCapture);
- break;
- case QWebEnginePermission::PermissionType::MediaVideoCapture:
- grantMediaAccessPermission(origin, WebContentsAdapterClient::MediaVideoCapture);
- break;
- case QWebEnginePermission::PermissionType::DesktopAudioVideoCapture:
- grantMediaAccessPermission(origin, desktopAudioVideoCaptureFlags);
- break;
- case QWebEnginePermission::PermissionType::DesktopVideoCapture:
- grantMediaAccessPermission(origin, WebContentsAdapterClient::MediaDesktopVideoCapture);
- break;
- default:
- Q_UNREACHABLE();
- break;
+ WebContentsAdapterClient::MediaRequestFlags flags = WebContentsAdapterClient::MediaNone;
+ if (state == QWebEnginePermission::State::Granted) {
+ switch (permissionType) {
+ case QWebEnginePermission::PermissionType::MediaAudioCapture:
+ flags.setFlag(WebContentsAdapterClient::MediaAudioCapture);
+ break;
+ case QWebEnginePermission::PermissionType::MediaVideoCapture:
+ flags.setFlag(WebContentsAdapterClient::MediaVideoCapture);
+ break;
+ case QWebEnginePermission::PermissionType::MediaAudioVideoCapture:
+ flags.setFlag(WebContentsAdapterClient::MediaAudioCapture);
+ flags.setFlag(WebContentsAdapterClient::MediaVideoCapture);
+ break;
+ case QWebEnginePermission::PermissionType::DesktopVideoCapture:
+ flags.setFlag(WebContentsAdapterClient::MediaDesktopVideoCapture);
+ break;
+ case QWebEnginePermission::PermissionType::DesktopAudioVideoCapture:
+ flags.setFlag(WebContentsAdapterClient::MediaDesktopAudioCapture);
+ flags.setFlag(WebContentsAdapterClient::MediaDesktopVideoCapture);
+ break;
+ default:
+ break;
+ }
}
-}
-QWebEnginePermission::State WebContentsAdapter::getPermissionState(const QUrl &origin, QWebEnginePermission::PermissionType permissionType)
-{
- return m_profileAdapter->getPermissionState(origin, permissionType, m_webContents.get()->GetPrimaryMainFrame());
-}
-
-void WebContentsAdapter::grantMediaAccessPermission(const QUrl &origin, WebContentsAdapterClient::MediaRequestFlags flags)
-{
- CHECK_INITIALIZED();
- // Let the permission manager remember the reply.
- if (flags & WebContentsAdapterClient::MediaAudioCapture)
- m_profileAdapter->setPermission(origin,
- QWebEnginePermission::PermissionType::MediaAudioCapture,
- QWebEnginePermission::State::Granted,
- m_webContents.get()->GetPrimaryMainFrame());
- if (flags & WebContentsAdapterClient::MediaVideoCapture)
- m_profileAdapter->setPermission(origin,
- QWebEnginePermission::PermissionType::MediaVideoCapture,
- QWebEnginePermission::State::Granted,
- m_webContents.get()->GetPrimaryMainFrame());
MediaCaptureDevicesDispatcher::GetInstance()->handleMediaAccessPermissionResponse(m_webContents.get(), origin, flags);
}
-void WebContentsAdapter::grantMouseLockPermission(const QUrl &securityOrigin, bool granted)
+void WebContentsAdapter::grantMouseLockPermission(const QUrl &securityOrigin, int childId,
+ const std::string &serializedToken, bool granted)
{
CHECK_INITIALIZED();
- if (securityOrigin != toQt(m_webContents->GetLastCommittedURL().DeprecatedGetOriginAsURL()))
- return;
- if (granted) {
- if (RenderWidgetHostViewQt *rwhv = static_cast<RenderWidgetHostViewQt *>(m_webContents->GetRenderWidgetHostView())) {
- rwhv->Focus();
- if (!rwhv->HasFocus()) {
- // We tried to activate our RWHVQtDelegate, but we failed. This probably means that
- // the permission was granted from a modal dialog and the windowing system is not ready
- // to set focus on the originating view. Since pointer lock strongly requires it, we just
- // wait until the next FocusIn event.
- m_pendingMouseLockPermissions.insert(securityOrigin, granted);
- return;
- }
- } else
- granted = false;
+ bool focused = false;
+ if (RenderWidgetHostViewQt *rwhv = static_cast<RenderWidgetHostViewQt *>(m_webContents->GetRenderWidgetHostView())) {
+ rwhv->Focus();
+ if (rwhv->HasFocus()) {
+ focused = true;
+ }
+ } else {
+ granted = false;
}
- m_webContents->GotResponseToPointerLockRequest(granted ? blink::mojom::PointerLockResult::kSuccess
- : blink::mojom::PointerLockResult::kPermissionDenied);
+ m_pendingMouseLockPermissions.enqueue({ securityOrigin, granted, childId, serializedToken });
+
+ if (focused) {
+ handlePendingMouseLockPermission();
+ }
}
void WebContentsAdapter::handlePendingMouseLockPermission()
{
CHECK_INITIALIZED();
- auto it = m_pendingMouseLockPermissions.find(toQt(m_webContents->GetLastCommittedURL().DeprecatedGetOriginAsURL()));
- if (it != m_pendingMouseLockPermissions.end()) {
- m_webContents->GotResponseToPointerLockRequest(it.value() ? blink::mojom::PointerLockResult::kSuccess
- : blink::mojom::PointerLockResult::kPermissionDenied);
- m_pendingMouseLockPermissions.erase(it);
- }
+ if (!m_pendingMouseLockPermissions.size())
+ return;
+
+ auto pending = m_pendingMouseLockPermissions.dequeue();
+
+ // Simply set the permission in the manager. The callback from WebContentsDelegateQt::RequestPointerLock()
+ // will ensure WebContents receives the response
+ auto *manager = static_cast<PermissionManagerQt*>(m_profileAdapter->profile()->GetPermissionControllerDelegate());
+ manager->setPermission(
+ get<0>(pending), // origin
+ QWebEnginePermission::PermissionType::MouseLock,
+ get<1>(pending) // granted
+ ? QWebEnginePermission::State::Granted : QWebEnginePermission::State::Denied,
+ get<2>(pending), // childId
+ get<3>(pending)); // serializedToken
}
void WebContentsAdapter::setBackgroundColor(const QColor &color)
diff --git a/src/core/web_contents_adapter.h b/src/core/web_contents_adapter.h
index 3bb639b1b..212411109 100644
--- a/src/core/web_contents_adapter.h
+++ b/src/core/web_contents_adapter.h
@@ -21,6 +21,7 @@
#include <QtCore/QUrl>
#include <QtCore/QVariant>
#include <QtCore/QPointer>
+#include <QtCore/QQueue>
#include <QtGui/qtgui-config.h>
#include <QtWebEngineCore/private/qtwebenginecoreglobal_p.h>
#include <QtWebEngineCore/qwebenginecontextmenurequest.h>
@@ -48,6 +49,7 @@ namespace content {
class WebContents;
class SiteInstance;
class RenderFrameHost;
+struct GlobalRenderFrameHostToken;
}
QT_BEGIN_NAMESPACE
@@ -179,11 +181,9 @@ public:
void devToolsFrontendDestroyed(DevToolsFrontendQt *frontend);
QString devToolsId();
- void setPermission(const QUrl &origin, QWebEnginePermission::PermissionType permissionType, QWebEnginePermission::State state);
- QWebEnginePermission::State getPermissionState(const QUrl &origin, QWebEnginePermission::PermissionType permissionType);
-
- void grantMediaAccessPermission(const QUrl &origin, WebContentsAdapterClient::MediaRequestFlags flags);
- void grantMouseLockPermission(const QUrl &origin, bool granted);
+ void setPermission(const QUrl &origin, QWebEnginePermission::PermissionType permissionType,
+ QWebEnginePermission::State state, int childId = -1, const std::string &serializedToken = std::string());
+ void grantMouseLockPermission(const QUrl &origin, int childId, const std::string &serializedToken, bool granted);
void handlePendingMouseLockPermission();
void setBackgroundColor(const QColor &color);
@@ -272,7 +272,7 @@ private:
#endif
WebContentsAdapterClient *m_adapterClient;
quint64 m_nextRequestId;
- QMap<QUrl, bool> m_pendingMouseLockPermissions;
+ QQueue<std::tuple<QUrl, bool, int, std::string>> m_pendingMouseLockPermissions;
QMap<quint64, std::function<void(const QVariant &)>> m_javaScriptCallbacks;
std::map<quint64, std::function<void(QSharedPointer<QByteArray>)>> m_printCallbacks;
std::unique_ptr<content::DropData> m_currentDropData;
diff --git a/src/core/web_contents_adapter_client.h b/src/core/web_contents_adapter_client.h
index 9ce5bebfc..2f93d4783 100644
--- a/src/core/web_contents_adapter_client.h
+++ b/src/core/web_contents_adapter_client.h
@@ -16,6 +16,7 @@
#define WEB_CONTENTS_ADAPTER_CLIENT_H
#include <QtWebEngineCore/private/qtwebenginecoreglobal_p.h>
+#include <QtWebEngineCore/private/qwebenginepermission_p.h>
#include <QtWebEngineCore/qwebenginepermission.h>
#include "profile_adapter.h"
@@ -195,9 +196,8 @@ public:
virtual QObject *accessibilityParentObject() = 0;
virtual void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString& message, int lineNumber, const QString& sourceID) = 0;
virtual void authenticationRequired(QSharedPointer<AuthenticationDialogController>) = 0;
- virtual void runFeaturePermissionRequest(QWebEnginePermission::PermissionType, const QUrl &securityOrigin) = 0;
- virtual void runMediaAccessPermissionRequest(const QUrl &securityOrigin, MediaRequestFlags requestFlags) = 0;
- virtual void runMouseLockPermissionRequest(const QUrl &securityOrigin) = 0;
+ virtual void runFeaturePermissionRequest(QWebEnginePermission::PermissionType, const QUrl &securityOrigin,
+ int childId, const std::string &serializedToken) = 0;
virtual void runRegisterProtocolHandlerRequest(QWebEngineRegisterProtocolHandlerRequest) = 0;
virtual void runFileSystemAccessRequest(QWebEngineFileSystemAccessRequest) = 0;
virtual QWebEngineSettings *webEngineSettings() const = 0;
@@ -229,7 +229,6 @@ public:
virtual WebContentsAdapter* webContentsAdapter() = 0;
virtual void releaseProfile() = 0;
virtual void showWebAuthDialog(QWebEngineWebAuthUxRequest *request) = 0;
- virtual QWebEnginePermission createFeaturePermissionObject(const QUrl &securityOrigin, QWebEnginePermission::PermissionType permissionType) = 0;
};
} // namespace QtWebEngineCore
diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp
index 89a0a6582..77ba5ec91 100644
--- a/src/core/web_contents_delegate_qt.cpp
+++ b/src/core/web_contents_delegate_qt.cpp
@@ -19,6 +19,7 @@
#include "javascript_dialog_manager_qt.h"
#include "media_capture_devices_dispatcher.h"
#include "native_web_keyboard_event_qt.h"
+#include "permission_manager_qt.h"
#include "profile_adapter.h"
#include "profile_qt.h"
#include "qwebengineloadinginfo.h"
@@ -418,6 +419,12 @@ void WebContentsDelegateQt::emitLoadCommitted()
void WebContentsDelegateQt::DidFinishNavigation(content::NavigationHandle *navigation_handle)
{
+ if (navigation_handle->HasCommitted() && !navigation_handle->IsSameOrigin()) {
+ PermissionManagerQt *permissionManager = static_cast<PermissionManagerQt *>(
+ navigation_handle->GetWebContents()->GetBrowserContext()->GetPermissionControllerDelegate());
+ permissionManager->onCrossOriginNavigation(navigation_handle->GetRenderFrameHost());
+ }
+
if (!navigation_handle->IsInMainFrame())
return;
@@ -731,14 +738,32 @@ void WebContentsDelegateQt::ActivateContents(content::WebContents* contents)
void WebContentsDelegateQt::RequestPointerLock(content::WebContents *web_contents, bool user_gesture, bool last_unlocked_by_target)
{
- Q_UNUSED(user_gesture);
-
if (last_unlocked_by_target)
web_contents->GotResponseToPointerLockRequest(blink::mojom::PointerLockResult::kSuccess);
- else
- m_viewClient->runMouseLockPermissionRequest(toQt(web_contents->GetLastCommittedURL().DeprecatedGetOriginAsURL()));
+ else {
+ PermissionManagerQt *permissionManager = static_cast<PermissionManagerQt *>(
+ web_contents->GetBrowserContext()->GetPermissionControllerDelegate());
+
+ auto *rfh = web_contents->GetFocusedFrame();
+ if (!rfh)
+ rfh = web_contents->GetPrimaryMainFrame();
+
+ permissionManager->RequestPermissions(
+ rfh,
+ content::PermissionRequestDescription(blink::PermissionType::POINTER_LOCK, user_gesture, rfh->GetLastCommittedOrigin().GetURL()),
+ base::BindOnce([](content::WebContents *web_contents, PermissionManagerQt *manager, const std::vector<blink::mojom::PermissionStatus> &status)
+ {
+ Q_ASSERT(status.size() == 1);
+
+ web_contents->GotResponseToPointerLockRequest(status[0] == blink::mojom::PermissionStatus::GRANTED
+ ? blink::mojom::PointerLockResult::kSuccess
+ : blink::mojom::PointerLockResult::kPermissionDenied);
+ }, web_contents, permissionManager)
+ );
+ }
}
+
void WebContentsDelegateQt::overrideWebPreferences(content::WebContents *webContents, blink::web_pref::WebPreferences *webPreferences)
{
WebEngineSettings::get(m_viewClient->webEngineSettings())->overrideWebPreferences(webContents, webPreferences);
@@ -773,9 +798,12 @@ void WebContentsDelegateQt::selectClientCert(const QSharedPointer<ClientCertSele
m_viewClient->selectClientCert(selectController);
}
-void WebContentsDelegateQt::requestFeaturePermission(QWebEnginePermission::PermissionType permissionType, const QUrl &requestingOrigin)
+void WebContentsDelegateQt::requestFeaturePermission(
+ QWebEnginePermission::PermissionType permissionType,
+ const QUrl &requestingOrigin,
+ const content::GlobalRenderFrameHostToken &frameToken)
{
- m_viewClient->runFeaturePermissionRequest(permissionType, requestingOrigin);
+ m_viewClient->runFeaturePermissionRequest(permissionType, requestingOrigin, frameToken.child_id, frameToken.frame_token.ToString());
}
extern WebContentsAdapterClient::NavigationType pageTransitionToNavigationType(ui::PageTransition transition);
@@ -834,18 +862,22 @@ bool WebContentsDelegateQt::CheckMediaAccessPermission(content::RenderFrameHost
blink::mojom::MediaStreamType type)
{
Q_ASSERT(rfh);
+
+ auto token = rfh->GetGlobalFrameToken();
+ std::string serializedToken = token.frame_token.ToString();
+
switch (type) {
case blink::mojom::MediaStreamType::DEVICE_AUDIO_CAPTURE:
return m_viewClient->profileAdapter()->getPermissionState(
toQt(security_origin),
QWebEnginePermission::PermissionType::MediaAudioCapture,
- rfh)
+ token.child_id, serializedToken)
== QWebEnginePermission::State::Granted;
case blink::mojom::MediaStreamType::DEVICE_VIDEO_CAPTURE:
return m_viewClient->profileAdapter()->getPermissionState(
toQt(security_origin),
QWebEnginePermission::PermissionType::MediaVideoCapture,
- rfh)
+ token.child_id, serializedToken)
== QWebEnginePermission::State::Granted;
default:
LOG(INFO) << "WebContentsDelegateQt::CheckMediaAccessPermission: "
diff --git a/src/core/web_contents_delegate_qt.h b/src/core/web_contents_delegate_qt.h
index 099d8280b..383803c4d 100644
--- a/src/core/web_contents_delegate_qt.h
+++ b/src/core/web_contents_delegate_qt.h
@@ -25,6 +25,7 @@ class ColorChooser;
class JavaScriptDialogManager;
class WebContents;
struct MediaStreamRequest;
+struct GlobalRenderFrameHostToken;
}
namespace QtWebEngineCore {
@@ -144,7 +145,7 @@ public:
void overrideWebPreferences(content::WebContents *, blink::web_pref::WebPreferences*);
void allowCertificateError(const QSharedPointer<CertificateErrorController> &);
void selectClientCert(const QSharedPointer<ClientCertSelectController> &);
- void requestFeaturePermission(QWebEnginePermission::PermissionType permissionType, const QUrl &requestingOrigin);
+ void requestFeaturePermission(QWebEnginePermission::PermissionType permissionType, const QUrl &requestingOrigin, const content::GlobalRenderFrameHostToken &frameToken);
void launchExternalURL(const QUrl &url, ui::PageTransition page_transition, bool is_main_frame, bool has_user_gesture);
FindTextHelper *findTextHelper();
diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp
index 72fd4c3a8..0b16c8760 100644
--- a/src/core/web_engine_context.cpp
+++ b/src/core/web_engine_context.cpp
@@ -1242,7 +1242,7 @@ const char *qWebEngineChromiumVersion() noexcept
const char *qWebEngineChromiumSecurityPatchVersion() noexcept
{
- return "134.0.6998.208"; // FIXME: Remember to update
+ return "139.0.7258.67"; // FIXME: Remember to update
}
QT_END_NAMESPACE
diff --git a/src/webenginequick/api/qquickwebengineforeigntypes_p.h b/src/webenginequick/api/qquickwebengineforeigntypes_p.h
index 58e9a5561..c2892d33c 100644
--- a/src/webenginequick/api/qquickwebengineforeigntypes_p.h
+++ b/src/webenginequick/api/qquickwebengineforeigntypes_p.h
@@ -33,6 +33,13 @@
#include <QtWebEngineCore/qwebenginefilesystemaccessrequest.h>
#include <QtWebEngineCore/qwebenginewebauthuxrequest.h>
#include <QtWebEngineCore/qwebenginepermission.h>
+#include <QtWebEngineCore/qwebenginedesktopmediarequest.h>
+#include <QtWebEngineCore/qwebengineclienthints.h>
+
+#if QT_CONFIG(webengine_extensions)
+#include <QtWebEngineCore/qwebengineextensioninfo.h>
+#include <QtWebEngineCore/qwebengineextensionmanager.h>
+#endif
QT_BEGIN_NAMESPACE
@@ -265,6 +272,42 @@ struct ForeignWebEnginePermission
QML_UNCREATABLE("")
};
+struct ForeignWebEngineDesktopMediaRequest
+{
+ Q_GADGET
+ QML_FOREIGN(QWebEngineDesktopMediaRequest)
+ QML_ANONYMOUS
+ QML_ADDED_IN_VERSION(6, 10)
+};
+
+struct ForeignWebEngineClientHints : public QObject
+{
+ Q_OBJECT
+ QML_FOREIGN(QWebEngineClientHints)
+ QML_NAMED_ELEMENT(WebEngineClientHints)
+ QML_ADDED_IN_VERSION(6, 8)
+ QML_UNCREATABLE("")
+};
+
+#if QT_CONFIG(webengine_extensions)
+struct ForeignWebEngineExtensionInfo
+{
+ Q_GADGET
+ QML_VALUE_TYPE(webEngineExtension)
+ QML_FOREIGN(QWebEngineExtensionInfo)
+ QML_ADDED_IN_VERSION(6, 10)
+};
+
+struct ForeignWebEngineExtensionManager
+{
+ Q_GADGET
+ QML_NAMED_ELEMENT(WebEngineExtensionManager)
+ QML_FOREIGN(QWebEngineExtensionManager)
+ QML_ADDED_IN_VERSION(6, 10)
+ QML_UNCREATABLE("")
+};
+#endif
+
QT_END_NAMESPACE
#endif // QQUICKWEBENGINEFOREIGNTYPES_H
diff --git a/src/webenginequick/api/qquickwebengineprofile.cpp b/src/webenginequick/api/qquickwebengineprofile.cpp
index 6aebc18a1..80e4ec5ac 100644
--- a/src/webenginequick/api/qquickwebengineprofile.cpp
+++ b/src/webenginequick/api/qquickwebengineprofile.cpp
@@ -96,6 +96,9 @@ QT_BEGIN_NAMESPACE
\value AllowPersistentCookies
Cookies marked persistent are saved to and restored from disk, whereas session cookies
are only stored to disk for crash recovery. This is the default setting.
+ \value OnlyPersistentCookies
+ Cookies marked persistent are saved to and restored from disk, whereas session cookies
+ are never stored to disk, even for crash recovery.
\value ForcePersistentCookies
Both session and persistent cookies are saved to and restored from disk.
*/
@@ -726,6 +729,9 @@ void QQuickWebEngineProfile::setHttpCacheType(QQuickWebEngineProfile::HttpCacheT
Cookies marked persistent are saved to and restored from disk, whereas session cookies
are only stored to disk for crash recovery.
This is the default value for non off-the-record profile with storageName.
+ \value WebEngineProfile.OnlyPersistentCookies
+ Cookies marked persistent are saved to and restored from disk, whereas session cookies
+ are never stored to disk, even for crash recovery.
\value WebEngineProfile.ForcePersistentCookies
Both session and persistent cookies are saved to and restored from disk.
*/
@@ -1223,7 +1229,7 @@ QWebEnginePermission QQuickWebEngineProfile::queryPermission(const QUrl &securit
return QWebEnginePermission(new QWebEnginePermissionPrivate());
}
- auto *pvt = new QWebEnginePermissionPrivate(securityOrigin, permissionType, nullptr, d->profileAdapter());
+ auto *pvt = new QWebEnginePermissionPrivate(securityOrigin, permissionType, d->profileAdapter());
return QWebEnginePermission(pvt);
}
diff --git a/src/webenginequick/api/qquickwebengineprofile.h b/src/webenginequick/api/qquickwebengineprofile.h
index 9a21852ba..0995538be 100644
--- a/src/webenginequick/api/qquickwebengineprofile.h
+++ b/src/webenginequick/api/qquickwebengineprofile.h
@@ -44,7 +44,7 @@ class Q_WEBENGINEQUICK_EXPORT QQuickWebEngineProfile : public QObject {
Q_PROPERTY(bool isPushServiceEnabled READ isPushServiceEnabled WRITE setPushServiceEnabled NOTIFY pushServiceEnabledChanged FINAL REVISION(6,5))
Q_PROPERTY(QWebEngineClientHints *clientHints READ clientHints FINAL REVISION(6,8))
#if QT_CONFIG(webengine_extensions)
- Q_PROPERTY(QWebEngineExtensionManager *extensionManager READ extensionManager REVISION(6, 10))
+ Q_PROPERTY(QWebEngineExtensionManager *extensionManager READ extensionManager CONSTANT REVISION(6, 10))
#endif
QML_NAMED_ELEMENT(WebEngineProfile)
QML_ADDED_IN_VERSION(1, 1)
@@ -65,7 +65,8 @@ public:
enum PersistentCookiesPolicy {
NoPersistentCookies,
AllowPersistentCookies,
- ForcePersistentCookies
+ ForcePersistentCookies,
+ OnlyPersistentCookies,
};
Q_ENUM(PersistentCookiesPolicy)
diff --git a/src/webenginequick/api/qquickwebengineprofileprototype.cpp b/src/webenginequick/api/qquickwebengineprofileprototype.cpp
index e6c4b8e99..d32d63ce7 100644
--- a/src/webenginequick/api/qquickwebengineprofileprototype.cpp
+++ b/src/webenginequick/api/qquickwebengineprofileprototype.cpp
@@ -161,6 +161,9 @@ void QQuickWebEngineProfilePrototype::setHttpCacheType(
Cookies marked persistent are saved to and restored from disk, whereas session cookies
are only stored to disk for crash recovery.
This is the default value for non off-the-record profile with storageName.
+ \value WebEngineProfile.OnlyPersistentCookies
+ Cookies marked persistent are saved to and restored from disk, whereas session cookies
+ are never stored to the disk, even for crash recovery.
\value WebEngineProfile.ForcePersistentCookies
Both session and persistent cookies are saved to and restored from disk.
*/
diff --git a/src/webenginequick/api/qquickwebenginescriptcollection.cpp b/src/webenginequick/api/qquickwebenginescriptcollection.cpp
index 7a3e894a6..546633fb1 100644
--- a/src/webenginequick/api/qquickwebenginescriptcollection.cpp
+++ b/src/webenginequick/api/qquickwebenginescriptcollection.cpp
@@ -3,12 +3,10 @@
#include "qquickwebenginescriptcollection_p.h"
#include "qquickwebenginescriptcollection_p_p.h"
-#include "qwebenginescriptcollection.h"
+#include <QtWebEngineCore/qwebenginescriptcollection.h>
#include <QtWebEngineCore/private/qwebenginescriptcollection_p.h>
#include <QtQml/qqmlinfo.h>
-#include <QtQml/private/qqmlengine_p.h>
-#include <QtQml/private/qv4scopedvalue_p.h>
-#include <QtQml/private/qv4arrayobject_p.h>
+#include <QtQml/qqmlengine.h>
/*!
\qmltype WebEngineScriptCollection
@@ -61,7 +59,7 @@
webEngineView.userScripts.insert(list)
\endcode
\endlist
- \sa WebEngineScript WebEngineScriptCollection
+ \sa webEngineScript WebEngineScriptCollection
*/
@@ -117,7 +115,7 @@ QQuickWebEngineScriptCollection::QQuickWebEngineScriptCollection(QQuickWebEngine
QQuickWebEngineScriptCollection::~QQuickWebEngineScriptCollection() { }
/*!
- \qmlmethod bool WebEngineScriptCollection::contains(WebEngineScript script)
+ \qmlmethod bool WebEngineScriptCollection::contains(webEngineScript script)
\since QtWebEngine 6.2
Returns \c true if the specified \a script is in the collection, \c false
otherwise.
@@ -130,7 +128,7 @@ bool QQuickWebEngineScriptCollection::contains(const QWebEngineScript &value) co
}
/*!
- \qmlmethod list<WebEngineScript> WebEngineScriptCollection::find(string name)
+ \qmlmethod list<webEngineScript> WebEngineScriptCollection::find(string name)
\since QtWebEngine 6.2
Returns a list of all user script objects with the given \a name.
\sa contains()
@@ -141,7 +139,7 @@ QList<QWebEngineScript> QQuickWebEngineScriptCollection::find(const QString &nam
}
/*!
- \qmlmethod void WebEngineScriptCollection::insert(WebEngineScript script)
+ \qmlmethod void WebEngineScriptCollection::insert(webEngineScript script)
\since QtWebEngine 6.2
Inserts a single \a script into the collection.
\sa remove()
@@ -152,9 +150,9 @@ void QQuickWebEngineScriptCollection::insert(const QWebEngineScript &s)
}
/*!
- \qmlmethod void WebEngineScriptCollection::insert(list<WebEngineScript> list)
+ \qmlmethod void WebEngineScriptCollection::insert(list<webEngineScript> list)
\since QtWebEngine 6.2
- Inserts a \a list of WebEngineScript values into the user script collection.
+ Inserts a \a list of webEngineScript values into the user script collection.
\sa remove()
*/
void QQuickWebEngineScriptCollection::insert(const QList<QWebEngineScript> &list)
@@ -163,7 +161,7 @@ void QQuickWebEngineScriptCollection::insert(const QList<QWebEngineScript> &list
}
/*!
- \qmlmethod bool WebEngineScriptCollection::remove(WebEngineScript script)
+ \qmlmethod bool WebEngineScriptCollection::remove(webEngineScript script)
\since QtWebEngine 6.2
Returns \c true if a given \a script is removed from the collection.
\sa insert()
@@ -184,11 +182,11 @@ void QQuickWebEngineScriptCollection::clear()
}
/*!
- \qmlproperty list<WebEngineScript> WebEngineScriptCollection::collection
+ \qmlproperty list<webEngineScript> WebEngineScriptCollection::collection
\since QtWebEngine 6.2
This property holds a JavaScript array of user script objects. The array can
- take WebEngineScript basic type or a JavaScript dictionary as values.
+ take webEngineScript basic type or a JavaScript dictionary as values.
*/
QJSValue QQuickWebEngineScriptCollection::collection() const
{
@@ -198,15 +196,11 @@ QJSValue QQuickWebEngineScriptCollection::collection() const
}
const QList<QWebEngineScript> &list = d->toList();
- QV4::ExecutionEngine *v4 = d->m_qmlEngine->handle();
- QV4::Scope scope(v4);
- QV4::Scoped<QV4::ArrayObject> scriptArray(scope, v4->newArrayObject(list.size()));
- int i = 0;
- for (const auto &val : list) {
- QV4::ScopedValue sv(scope, v4->fromVariant(QVariant::fromValue(val)));
- scriptArray->put(i++, sv);
- }
- return QJSValuePrivate::fromReturnedValue(scriptArray.asReturnedValue());
+ QJSValue scriptArray = d->m_qmlEngine->newArray(list.size());
+ uint32_t i = 0;
+ for (const auto &val : list)
+ scriptArray.setProperty(i++, d->m_qmlEngine->toScriptValue(val));
+ return scriptArray;
}
void QQuickWebEngineScriptCollection::setCollection(const QJSValue &scripts)
diff --git a/src/webenginequick/api/qquickwebengineview.cpp b/src/webenginequick/api/qquickwebengineview.cpp
index ade8b451c..619cbaef6 100644
--- a/src/webenginequick/api/qquickwebengineview.cpp
+++ b/src/webenginequick/api/qquickwebengineview.cpp
@@ -521,22 +521,30 @@ static QQuickWebEngineView::Feature toDeprecatedFeature(QWebEnginePermission::Pe
QT_WARNING_POP
#endif // QT_DEPRECATED_SINCE(6, 8)
-void QQuickWebEngineViewPrivate::runFeaturePermissionRequest(QWebEnginePermission::PermissionType permissionType, const QUrl &securityOrigin)
+void QQuickWebEngineViewPrivate::runFeaturePermissionRequest(
+ QWebEnginePermission::PermissionType permissionType,
+ const QUrl &securityOrigin,
+ int childId, const std::string &serializedToken)
{
Q_Q(QQuickWebEngineView);
- if (QWebEnginePermission::isPersistent(permissionType)) {
- Q_EMIT q->permissionRequested(createFeaturePermissionObject(securityOrigin, permissionType));
-#if QT_DEPRECATED_SINCE(6, 8)
- QT_WARNING_PUSH
- QT_WARNING_DISABLE_DEPRECATED
- Q_EMIT q->featurePermissionRequested(securityOrigin, toDeprecatedFeature(permissionType));
- QT_WARNING_POP
-#endif // QT_DEPRECATED_SINCE(6, 8)
+ if (permissionType == QWebEnginePermission::PermissionType::MouseLock) {
+ // Not supported in Qt Quick
+ auto permission = QWebEnginePermission(
+ new QWebEnginePermissionPrivate(securityOrigin, permissionType, profileAdapter(), childId, serializedToken));
+ permission.deny();
return;
}
- Q_UNREACHABLE();
+ Q_EMIT q->permissionRequested(QWebEnginePermission(
+ new QWebEnginePermissionPrivate(securityOrigin, permissionType, profileAdapter(), childId, serializedToken)));
+#if QT_DEPRECATED_SINCE(6, 8)
+ QT_WARNING_PUSH
+ QT_WARNING_DISABLE_DEPRECATED
+ Q_EMIT q->featurePermissionRequested(securityOrigin, toDeprecatedFeature(permissionType));
+ QT_WARNING_POP
+#endif // QT_DEPRECATED_SINCE(6, 8)
+ return;
}
void QQuickWebEngineViewPrivate::showColorDialog(QSharedPointer<ColorChooserController> controller)
@@ -809,54 +817,6 @@ void QQuickWebEngineViewPrivate::authenticationRequired(QSharedPointer<Authentic
ui()->showDialog(controller);
}
-void QQuickWebEngineViewPrivate::runMediaAccessPermissionRequest(const QUrl &securityOrigin, WebContentsAdapterClient::MediaRequestFlags requestFlags)
-{
- Q_Q(QQuickWebEngineView);
- if (!requestFlags)
- return;
- QWebEnginePermission::PermissionType permissionType;
- if (requestFlags.testFlag(WebContentsAdapterClient::MediaAudioCapture) && requestFlags.testFlag(WebContentsAdapterClient::MediaVideoCapture))
- permissionType = QWebEnginePermission::PermissionType::MediaAudioVideoCapture;
- else if (requestFlags.testFlag(WebContentsAdapterClient::MediaAudioCapture))
- permissionType = QWebEnginePermission::PermissionType::MediaAudioCapture;
- else if (requestFlags.testFlag(WebContentsAdapterClient::MediaVideoCapture))
- permissionType = QWebEnginePermission::PermissionType::MediaVideoCapture;
- else if (requestFlags.testFlag(WebContentsAdapterClient::MediaDesktopAudioCapture) &&
- requestFlags.testFlag(WebContentsAdapterClient::MediaDesktopVideoCapture))
- permissionType = QWebEnginePermission::PermissionType::DesktopAudioVideoCapture;
- else // if (requestFlags.testFlag(WebContentsAdapterClient::MediaDesktopVideoCapture))
- permissionType = QWebEnginePermission::PermissionType::DesktopVideoCapture;
- Q_EMIT q->permissionRequested(createFeaturePermissionObject(securityOrigin, permissionType));
-
-#if QT_DEPRECATED_SINCE(6, 8)
- QT_WARNING_PUSH
- QT_WARNING_DISABLE_DEPRECATED
- QQuickWebEngineView::Feature deprecatedFeature;
-
- if (requestFlags.testFlag(WebContentsAdapterClient::MediaAudioCapture)
- && requestFlags.testFlag(WebContentsAdapterClient::MediaVideoCapture))
- deprecatedFeature = QQuickWebEngineView::MediaAudioVideoCapture;
- else if (requestFlags.testFlag(WebContentsAdapterClient::MediaAudioCapture))
- deprecatedFeature = QQuickWebEngineView::MediaAudioCapture;
- else if (requestFlags.testFlag(WebContentsAdapterClient::MediaVideoCapture))
- deprecatedFeature = QQuickWebEngineView::MediaVideoCapture;
- else if (requestFlags.testFlag(WebContentsAdapterClient::MediaDesktopAudioCapture)
- && requestFlags.testFlag(WebContentsAdapterClient::MediaDesktopVideoCapture))
- deprecatedFeature = QQuickWebEngineView::DesktopAudioVideoCapture;
- else // if (requestFlags.testFlag(WebContentsAdapterClient::MediaDesktopVideoCapture))
- deprecatedFeature = QQuickWebEngineView::DesktopVideoCapture;
-
- Q_EMIT q->featurePermissionRequested(securityOrigin, deprecatedFeature);
- QT_WARNING_POP
-#endif // QT_DEPRECATED_SINCE(6, 8)
-}
-
-void QQuickWebEngineViewPrivate::runMouseLockPermissionRequest(const QUrl &securityOrigin)
-{
- // TODO: Add mouse lock support
- adapter->grantMouseLockPermission(securityOrigin, false);
-}
-
void QQuickWebEngineViewPrivate::runRegisterProtocolHandlerRequest(QWebEngineRegisterProtocolHandlerRequest request)
{
Q_Q(QQuickWebEngineView);
@@ -1523,12 +1483,6 @@ void QQuickWebEngineViewPrivate::showWebAuthDialog(QWebEngineWebAuthUxRequest *r
Q_EMIT q->webAuthUxRequested(request);
}
-QWebEnginePermission QQuickWebEngineViewPrivate::createFeaturePermissionObject(const QUrl &securityOrigin, QWebEnginePermission::PermissionType permissionType)
-{
- auto *returnPrivate = new QWebEnginePermissionPrivate(securityOrigin, permissionType, adapter, profileAdapter());
- return QWebEnginePermission(returnPrivate);
-}
-
bool QQuickWebEngineView::isLoading() const
{
Q_D(const QQuickWebEngineView);
diff --git a/src/webenginequick/api/qquickwebengineview_p_p.h b/src/webenginequick/api/qquickwebengineview_p_p.h
index d78157597..8fe98145b 100644
--- a/src/webenginequick/api/qquickwebengineview_p_p.h
+++ b/src/webenginequick/api/qquickwebengineview_p_p.h
@@ -105,8 +105,6 @@ public:
bool passOnFocus(bool reverse) override;
void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString& message, int lineNumber, const QString& sourceID) override;
void authenticationRequired(QSharedPointer<QtWebEngineCore::AuthenticationDialogController>) override;
- void runMediaAccessPermissionRequest(const QUrl &securityOrigin, MediaRequestFlags requestFlags) override;
- void runMouseLockPermissionRequest(const QUrl &securityOrigin) override;
void runRegisterProtocolHandlerRequest(QWebEngineRegisterProtocolHandlerRequest) override;
void runFileSystemAccessRequest(QWebEngineFileSystemAccessRequest) override;
QObject *accessibilityParentObject() override;
@@ -114,7 +112,8 @@ public:
void allowCertificateError(const QWebEngineCertificateError &error) override;
void selectClientCert(const QSharedPointer<QtWebEngineCore::ClientCertSelectController>
&selectController) override;
- void runFeaturePermissionRequest(QWebEnginePermission::PermissionType permissionType, const QUrl &securityOrigin) override;
+ void runFeaturePermissionRequest(QWebEnginePermission::PermissionType permissionType, const QUrl &securityOrigin,
+ int childId, const std::string &serializedToken) override;
void renderProcessTerminated(RenderProcessTerminationStatus terminationStatus, int exitCode) override;
void requestGeometryChange(const QRect &geometry, const QRect &frameGeometry) override;
void updateScrollPosition(const QPointF &position) override;
@@ -139,7 +138,6 @@ public:
const QRect &bounds, bool autoselectFirstSuggestion) override;
void hideAutofillPopup() override;
void showWebAuthDialog(QWebEngineWebAuthUxRequest *request) override;
- QWebEnginePermission createFeaturePermissionObject(const QUrl &securityOrigin, QWebEnginePermission::PermissionType permissionType) override;
void updateAction(QQuickWebEngineView::WebAction) const;
bool adoptWebContents(QtWebEngineCore::WebContentsAdapter *webContents);
diff --git a/src/webenginewidgets/api/qtwebenginewidgetsglobal.h b/src/webenginewidgets/api/qtwebenginewidgetsglobal.h
index 58b9c7a2b..edf6632ac 100644
--- a/src/webenginewidgets/api/qtwebenginewidgetsglobal.h
+++ b/src/webenginewidgets/api/qtwebenginewidgetsglobal.h
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QTWEBENGINEWIDGETSGLOBAL_H
#define QTWEBENGINEWIDGETSGLOBAL_H
diff --git a/src/webenginewidgets/api/qwebenginenotificationpresenter.cpp b/src/webenginewidgets/api/qwebenginenotificationpresenter.cpp
index 83814fe4a..2adcbf912 100644
--- a/src/webenginewidgets/api/qwebenginenotificationpresenter.cpp
+++ b/src/webenginewidgets/api/qwebenginenotificationpresenter.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebenginenotificationpresenter_p.h"
diff --git a/src/webenginewidgets/api/qwebenginenotificationpresenter_p.h b/src/webenginewidgets/api/qwebenginenotificationpresenter_p.h
index 61e7f9e45..c42c6cc84 100644
--- a/src/webenginewidgets/api/qwebenginenotificationpresenter_p.h
+++ b/src/webenginewidgets/api/qwebenginenotificationpresenter_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINENOTIFICATIONPRESENTER_P_H
#define QWEBENGINENOTIFICATIONPRESENTER_P_H
diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp
index 53fcc4628..9745654ac 100644
--- a/src/webenginewidgets/api/qwebengineview.cpp
+++ b/src/webenginewidgets/api/qwebengineview.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:critical reason:data-parser
#include "qapplication.h"
#include "qwebenginenotificationpresenter_p.h"
diff --git a/src/webenginewidgets/api/qwebengineview.h b/src/webenginewidgets/api/qwebengineview.h
index 008aaa032..48d82acb1 100644
--- a/src/webenginewidgets/api/qwebengineview.h
+++ b/src/webenginewidgets/api/qwebengineview.h
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:critical reason:data-parser
#ifndef QWEBENGINEVIEW_H
#define QWEBENGINEVIEW_H
diff --git a/src/webenginewidgets/api/qwebengineview_p.h b/src/webenginewidgets/api/qwebengineview_p.h
index 389bc4a66..27ad6db71 100644
--- a/src/webenginewidgets/api/qwebengineview_p.h
+++ b/src/webenginewidgets/api/qwebengineview_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:critical reason:data-parser
#ifndef QWEBENGINEVIEW_P_H
#define QWEBENGINEVIEW_P_H
diff --git a/src/webenginewidgets/plugins/qwebengineview/qwebengineview_plugin.cpp b/src/webenginewidgets/plugins/qwebengineview/qwebengineview_plugin.cpp
index 6ba64a178..f018b6d19 100644
--- a/src/webenginewidgets/plugins/qwebengineview/qwebengineview_plugin.cpp
+++ b/src/webenginewidgets/plugins/qwebengineview/qwebengineview_plugin.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebengineview_plugin.h"
diff --git a/src/webenginewidgets/plugins/qwebengineview/qwebengineview_plugin.h b/src/webenginewidgets/plugins/qwebengineview/qwebengineview_plugin.h
index a7150151d..6706ab34e 100644
--- a/src/webenginewidgets/plugins/qwebengineview/qwebengineview_plugin.h
+++ b/src/webenginewidgets/plugins/qwebengineview/qwebengineview_plugin.h
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINEVIEW_PLUGIN_H
#define QWEBENGINEVIEW_PLUGIN_H
diff --git a/src/webenginewidgets/qwebengine_accessible.cpp b/src/webenginewidgets/qwebengine_accessible.cpp
index cbdd90104..402a8cf0f 100644
--- a/src/webenginewidgets/qwebengine_accessible.cpp
+++ b/src/webenginewidgets/qwebengine_accessible.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "qwebengine_accessible_p.h"
diff --git a/src/webenginewidgets/qwebengine_accessible_p.h b/src/webenginewidgets/qwebengine_accessible_p.h
index 99604d90d..c95514737 100644
--- a/src/webenginewidgets/qwebengine_accessible_p.h
+++ b/src/webenginewidgets/qwebengine_accessible_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef QWEBENGINE_ACCESSIBLE_H
#define QWEBENGINE_ACCESSIBLE_H
diff --git a/src/webenginewidgets/ui/autofillpopupwidget.cpp b/src/webenginewidgets/ui/autofillpopupwidget.cpp
index a4dc31beb..4e463361a 100644
--- a/src/webenginewidgets/ui/autofillpopupwidget.cpp
+++ b/src/webenginewidgets/ui/autofillpopupwidget.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "autofillpopupwidget_p.h"
#include "qwebengineview.h"
diff --git a/src/webenginewidgets/ui/autofillpopupwidget_p.h b/src/webenginewidgets/ui/autofillpopupwidget_p.h
index 79decc6ab..d84b34bef 100644
--- a/src/webenginewidgets/ui/autofillpopupwidget_p.h
+++ b/src/webenginewidgets/ui/autofillpopupwidget_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef AUTOFILLPOPUPWIDGET_P_H
#define AUTOFILLPOPUPWIDGET_P_H
diff --git a/src/webenginewidgets/ui/touchhandlewidget.cpp b/src/webenginewidgets/ui/touchhandlewidget.cpp
index 88af0ff36..b855e425c 100644
--- a/src/webenginewidgets/ui/touchhandlewidget.cpp
+++ b/src/webenginewidgets/ui/touchhandlewidget.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "touchhandlewidget_p.h"
#include "qwebengineview.h"
diff --git a/src/webenginewidgets/ui/touchhandlewidget_p.h b/src/webenginewidgets/ui/touchhandlewidget_p.h
index 9f181c935..9ab8fc9d6 100644
--- a/src/webenginewidgets/ui/touchhandlewidget_p.h
+++ b/src/webenginewidgets/ui/touchhandlewidget_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef TOUCHHANDLEWIDGET_P_H
#define TOUCHHANDLEWIDGET_P_H
diff --git a/src/webenginewidgets/ui/touchselectionmenuwidget.cpp b/src/webenginewidgets/ui/touchselectionmenuwidget.cpp
index ff69fe84b..dee65ae0e 100644
--- a/src/webenginewidgets/ui/touchselectionmenuwidget.cpp
+++ b/src/webenginewidgets/ui/touchselectionmenuwidget.cpp
@@ -1,5 +1,6 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#include "touchselectionmenuwidget_p.h"
#include "qwebengineview.h"
diff --git a/src/webenginewidgets/ui/touchselectionmenuwidget_p.h b/src/webenginewidgets/ui/touchselectionmenuwidget_p.h
index 1f822023b..89216a510 100644
--- a/src/webenginewidgets/ui/touchselectionmenuwidget_p.h
+++ b/src/webenginewidgets/ui/touchselectionmenuwidget_p.h
@@ -1,5 +1,6 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
#ifndef TOUCHSELECTIONMENUWIDGET_P_H
#define TOUCHSELECTIONMENUWIDGET_P_H