summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/webenginequick/quicknanobrowser/BrowserWindow.qml31
-rw-r--r--examples/webenginewidgets/maps/mainwindow.cpp2
-rw-r--r--examples/webenginewidgets/notifications/main.cpp2
-rw-r--r--examples/webenginewidgets/permissionbrowser/doc/src/permissionbrowser.qdoc32
-rw-r--r--examples/webenginewidgets/permissionbrowser/mainwindow.cpp38
-rw-r--r--examples/webenginewidgets/permissionbrowser/permissiondialog.ui4
-rw-r--r--examples/webenginewidgets/push-notifications/main.cpp2
-rw-r--r--examples/webenginewidgets/simplebrowser/webview.cpp28
-rw-r--r--src/core/api/qwebenginepage.cpp100
-rw-r--r--src/core/api/qwebenginepage.h49
-rw-r--r--src/core/api/qwebenginepage_p.h4
-rw-r--r--src/core/api/qwebenginepermission.cpp171
-rw-r--r--src/core/api/qwebenginepermission.h34
-rw-r--r--src/core/api/qwebenginepermission_p.h4
-rw-r--r--src/core/api/qwebengineprofile.cpp68
-rw-r--r--src/core/api/qwebengineprofile.h16
-rw-r--r--src/core/doc/src/qtwebengine-features.qdoc6
-rw-r--r--src/core/permission_manager_qt.cpp178
-rw-r--r--src/core/permission_manager_qt.h12
-rw-r--r--src/core/profile_adapter.cpp27
-rw-r--r--src/core/profile_adapter.h15
-rw-r--r--src/core/web_contents_adapter.cpp51
-rw-r--r--src/core/web_contents_adapter.h4
-rw-r--r--src/core/web_contents_adapter_client.h4
-rw-r--r--src/core/web_contents_delegate_qt.cpp10
-rw-r--r--src/core/web_contents_delegate_qt.h2
-rw-r--r--src/webenginequick/api/qquickwebengineprofile.cpp97
-rw-r--r--src/webenginequick/api/qquickwebengineprofile.h16
-rw-r--r--src/webenginequick/api/qquickwebenginesettings.cpp4
-rw-r--r--src/webenginequick/api/qquickwebengineview.cpp91
-rw-r--r--src/webenginequick/api/qquickwebengineview_p.h32
-rw-r--r--src/webenginequick/api/qquickwebengineview_p_p.h4
-rw-r--r--src/webenginequick/doc/src/webengine_permission.qdoc87
-rw-r--r--src/webenginequick/doc/src/webengineview_lgpl.qdoc6
-rw-r--r--tests/auto/quick/publicapi/tst_publicapi.cpp50
-rw-r--r--tests/auto/quick/qmltests/data/tst_geopermission.qml10
-rw-r--r--tests/auto/quick/qmltests/data/tst_getUserMedia.qml14
-rw-r--r--tests/auto/quick/qmltests/data/tst_notification.qml9
-rw-r--r--tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp143
-rw-r--r--tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp95
-rw-r--r--tests/manual/quick/geopermission/tst_geopermission.qml2
41 files changed, 781 insertions, 773 deletions
diff --git a/examples/webenginequick/quicknanobrowser/BrowserWindow.qml b/examples/webenginequick/quicknanobrowser/BrowserWindow.qml
index d040667d3..02f5564ac 100644
--- a/examples/webenginequick/quicknanobrowser/BrowserWindow.qml
+++ b/examples/webenginequick/quicknanobrowser/BrowserWindow.qml
@@ -748,53 +748,54 @@ ApplicationWindow {
contentItem: Item {
Label {
id: mainTextForPermissionDialog
- text: permissionDialog.questionForFeature()
}
}
onAccepted: permission.grant()
onRejected: permission.deny()
onVisibleChanged: {
- if (visible)
+ if (visible) {
+ mainTextForPermissionDialog.text = questionForPermissionType();
width = contentWidth + 20;
+ }
}
- function questionForFeature() {
+ function questionForPermissionType() {
var question = "Allow " + permission.origin + " to "
- switch (permission.feature) {
- case WebEnginePermission.Geolocation:
+ switch (permission.permissionType) {
+ case WebEnginePermission.PermissionType.Geolocation:
question += "access your location information?";
break;
- case WebEnginePermission.MediaAudioCapture:
+ case WebEnginePermission.PermissionType.MediaAudioCapture:
question += "access your microphone?";
break;
- case WebEnginePermission.MediaVideoCapture:
+ case WebEnginePermission.PermissionType.MediaVideoCapture:
question += "access your webcam?";
break;
- case WebEnginePermission.MediaAudioVideoCapture:
+ case WebEnginePermission.PermissionType.MediaAudioVideoCapture:
question += "access your microphone and webcam?";
break;
- case WebEnginePermission.MouseLock:
+ case WebEnginePermission.PermissionType.MouseLock:
question += "lock your mouse cursor?";
break;
- case WebEnginePermission.DesktopVideoCapture:
+ case WebEnginePermission.PermissionType.DesktopVideoCapture:
question += "capture video of your desktop?";
break;
- case WebEnginePermission.DesktopAudioVideoCapture:
+ case WebEnginePermission.PermissionType.DesktopAudioVideoCapture:
question += "capture audio and video of your desktop?";
break;
- case WebEnginePermission.Notifications:
+ case WebEnginePermission.PermissionType.Notifications:
question += "show notification on your desktop?";
break;
- case WebEnginePermission.ClipboardReadWrite:
+ case WebEnginePermission.PermissionType.ClipboardReadWrite:
question += "read from and write to your clipboard?";
break;
- case WebEnginePermission.LocalFontsAccess:
+ case WebEnginePermission.PermissionType.LocalFontsAccess:
question += "access the fonts stored on your machine?";
break;
default:
- question += "access unknown or unsupported feature [" + permission.feature + "] ?";
+ question += "access unknown or unsupported permission type [" + permission.permissionType + "] ?";
break;
}
diff --git a/examples/webenginewidgets/maps/mainwindow.cpp b/examples/webenginewidgets/maps/mainwindow.cpp
index ca98ca263..07b8d8ab3 100644
--- a/examples/webenginewidgets/maps/mainwindow.cpp
+++ b/examples/webenginewidgets/maps/mainwindow.cpp
@@ -15,7 +15,7 @@ MainWindow::MainWindow(QWidget *parent)
connect(page, &QWebEnginePage::permissionRequested,
[this, page](QWebEnginePermission permission) {
- if (permission.feature() != QWebEnginePermission::Geolocation)
+ if (permission.permissionType() != QWebEnginePermission::PermissionType::Geolocation)
return;
QMessageBox msgBox(this);
diff --git a/examples/webenginewidgets/notifications/main.cpp b/examples/webenginewidgets/notifications/main.cpp
index df9ebff73..e01dd03bc 100644
--- a/examples/webenginewidgets/notifications/main.cpp
+++ b/examples/webenginewidgets/notifications/main.cpp
@@ -35,7 +35,7 @@ int main(int argc, char *argv[])
QObject::connect(view.page(), &QWebEnginePage::permissionRequested,
[&] (QWebEnginePermission permission) {
- if (permission.feature() != QWebEnginePermission::Notifications)
+ if (permission.permissionType() != QWebEnginePermission::PermissionType::Notifications)
return;
permission.grant();
});
diff --git a/examples/webenginewidgets/permissionbrowser/doc/src/permissionbrowser.qdoc b/examples/webenginewidgets/permissionbrowser/doc/src/permissionbrowser.qdoc
index a266ec62a..3715d63cd 100644
--- a/examples/webenginewidgets/permissionbrowser/doc/src/permissionbrowser.qdoc
+++ b/examples/webenginewidgets/permissionbrowser/doc/src/permissionbrowser.qdoc
@@ -65,7 +65,7 @@
gets populated with a \c PermissionWidget whenever that happens.
The \c PermissionWidget displays the permission's origin, the requested
- \l QWebEnginePermission::Feature, as well as the current status of that permission.
+ \l QWebEnginePermission::PermissionType, as well as the current status of that permission.
It also has buttons for granting and denying the permission. Since the permission status
is (by default) remembered, the delete button allows the user to remove the permission
from the underlying storage.
@@ -133,23 +133,23 @@
\skipto void MainWindow::handlePermissionModified
\printuntil /^\}/
- Notably, we only do this in cases where we know the permission is remembered.
- This is not true for transient \c Features,
- which require a permission prompt be shown to the user every time they're needed.
+ Notably, we only do this in cases where we know the permission is remembered;
+ some \c PermissionTypes are non-persistent, which means they require
+ a permission prompt be shown to the user every time they're used.
We also exclude permissions with a \l QWebEnginePermission::Ask state, which
indicates that the permission was \l {QWebEnginePermission::reset}{reset}(),
and we don't add anything to the list of existing permissions when
\l QWebEngineProfile::persistentPermissionsPolicy is set to
- \c NoPersistentPermissions.
+ \c AskEveryTime.
- \note Check the \l QWebEnginePermission::Feature documentation to see which
- \c Features are transient.
+ \note Check the \l QWebEnginePermission::PermissionType documentation to see which
+ \c PermissionTypes are persistent.
\section1 Displaying and modifying existing permissions
By default, permissions are stored to disk and retrieved again on application
startup. To get a list of all existing website permissions, we call
- \l QWebEngineProfile::listPermissions():
+ \l QWebEngineProfile::listAllPermissions():
\quotefromfile webenginewidgets/permissionbrowser/mainwindow.cpp
\skipto void MainWindow::loadStoredPermissions()
@@ -161,7 +161,7 @@
\section1 Pre-granting permissions
- Certain permissions may be granted in advance, provided the origin and Feature type
+ Certain permissions may be granted in advance, provided the origin and permission type
are known. Clicking on the "New" button in the top right will create a pop-up
dialog that allows you to do just that. The dialog is implemented by the
\c PermissionDialog class:
@@ -171,8 +171,8 @@
\printuntil /^\}/
We populate the \l QComboBox using the QMetaEnum type associated with
- \l QWebEnginePermission::Feature. We make sure to filter out transient
- features, since pre-granting these is not supported.
+ \l QWebEnginePermission::PermissionType. We make sure to filter out non-persistent
+ permission types, since pre-granting these is not supported.
We display the dialog and add show the resulting \c PermissionWidget
in the UI inside the \c MainWindow::handleNewClicked slot. The new
@@ -191,22 +191,22 @@
of each option.
\list
- \li \l QWebEngineProfile::PersistentPermissionsOnDisk is the default, and it ensures
+ \li \l QWebEngineProfile::StoreOnDisk is the default, and it ensures
that any permissions that have been granted in the current application run will be
loaded back up at next startup. A permission onlycneeds to be granted once, and
subsequent uses of the API that triggered the request will automatically be granted,
until the application calls QWebEnginePermission::reset().
- li \l QWebEngineProfile::PersistentPermissionsInMemory Has the same behavior as above,
+ li \l QWebEngineProfile::StoreInMemory Has the same behavior as above,
except that permissions will be destroyed at application exit, and not committed
to disk.
- li \l QWebEngineProfile::NoPersistentPermissions makes sure permissions are never
- remembered, and all act as if they're transient. Thus, every time a web API needs
+ li \l QWebEngineProfile::AskEveryTime makes sure permissions are never
+ remembered, and all act as if they're non-persistent. Thus, every time a web API needs
a permission, a new prompt will be shown to the user. This option is intended for
backwards compatibility and applications which implement their own permission storage.
\endlist
To ensure the user will be shown previously existing permissions, we need to call
- \l QWebEngineProfile::listPermissions():
+ \l QWebEngineProfile::listAllPermissions():
\quotefromfile webenginewidgets/permissionbrowser/mainwindow.cpp
\skipto void MainWindow::loadStoredPermissions()
diff --git a/examples/webenginewidgets/permissionbrowser/mainwindow.cpp b/examples/webenginewidgets/permissionbrowser/mainwindow.cpp
index 2fe3c3b17..8fd811e83 100644
--- a/examples/webenginewidgets/permissionbrowser/mainwindow.cpp
+++ b/examples/webenginewidgets/permissionbrowser/mainwindow.cpp
@@ -15,12 +15,12 @@ PermissionDialog::PermissionDialog(const QWebEngineProfile *profile, QWidget *pa
{
setupUi(this);
- auto metaEnum = QMetaEnum::fromType<QWebEnginePermission::Feature>();
- Q_ASSERT(metaEnum.value(QWebEnginePermission::Unsupported) == 0);
+ auto metaEnum = QMetaEnum::fromType<QWebEnginePermission::PermissionType>();
+ Q_ASSERT(metaEnum.value((quint8)QWebEnginePermission::PermissionType::Unsupported) == 0);
for (int i = 1; i < metaEnum.keyCount(); ++i) {
- QWebEnginePermission::Feature feature = QWebEnginePermission::Feature(metaEnum.value(i));
- if (!QWebEnginePermission::isTransient(feature))
- m_featureComboBox->addItem(metaEnum.valueToKey(feature), QVariant(feature));
+ QWebEnginePermission::PermissionType permissionType = QWebEnginePermission::PermissionType(metaEnum.value(i));
+ if (QWebEnginePermission::isPersistent(permissionType))
+ m_permissionTypeComboBox->addItem(metaEnum.valueToKey((quint8)permissionType), QVariant::fromValue(permissionType));
}
}
@@ -31,8 +31,8 @@ PermissionDialog::~PermissionDialog()
QWebEnginePermission PermissionDialog::permission()
{
- return m_profile->getPermission(QUrl(m_originLineEdit->text()),
- QWebEnginePermission::Feature(m_featureComboBox->itemData(m_featureComboBox->currentIndex()).toInt()));
+ return m_profile->queryPermission(QUrl(m_originLineEdit->text()),
+ QWebEnginePermission::PermissionType(m_permissionTypeComboBox->itemData(m_permissionTypeComboBox->currentIndex()).toInt()));
}
PermissionWidget::PermissionWidget(const QWebEnginePermission &permission, QWidget *parent)
@@ -64,23 +64,23 @@ PermissionWidget::PermissionWidget(const QWebEnginePermission &permission, QWidg
void PermissionWidget::updateState()
{
switch (m_permission.state()) {
- case QWebEnginePermission::Invalid:
+ case QWebEnginePermission::State::Invalid:
m_stateLabel->setText("<font color='gray'>Invalid</font>");
m_grantButton->setEnabled(false);
m_denyButton->setEnabled(false);
break;
- case QWebEnginePermission::Ask:
+ case QWebEnginePermission::State::Ask:
m_stateLabel->setText("<font color='yellow'>Waiting for response</font>");
break;
- case QWebEnginePermission::Granted:
+ case QWebEnginePermission::State::Granted:
m_stateLabel->setText("<font color='green'>Granted</font>");
break;
- case QWebEnginePermission::Denied:
+ case QWebEnginePermission::State::Denied:
m_stateLabel->setText("<font color='red'>Denied</font>");
break;
}
- m_typeLabel->setText(QMetaEnum::fromType<QWebEnginePermission::Feature>().valueToKey(m_permission.feature()));
+ m_typeLabel->setText(QMetaEnum::fromType<QWebEnginePermission::PermissionType>().valueToKey((quint8)m_permission.permissionType()));
m_originLabel->setText(m_permission.origin().toDisplayString());
}
@@ -153,9 +153,9 @@ void MainWindow::handlePermissionModified(PermissionWidget *widget)
m_pendingFrame->layout()->removeWidget(widget);
m_pendingWidget = nullptr;
- if (QWebEnginePermission::isTransient(widget->m_permission.feature())
- || widget->m_permission.state() == QWebEnginePermission::Ask
- || m_profile->persistentPermissionsPolicy() == QWebEngineProfile::NoPersistentPermissions) {
+ if (!QWebEnginePermission::isPersistent(widget->m_permission.permissionType())
+ || widget->m_permission.state() == QWebEnginePermission::State::Ask
+ || m_profile->persistentPermissionsPolicy() == QWebEngineProfile::PersistentPermissionsPolicy::AskEveryTime) {
widget->deleteLater();
return;
@@ -209,13 +209,13 @@ void MainWindow::handlePolicyComboBoxIndexChanged(int index)
QWebEngineProfile::PersistentPermissionsPolicy policy;
switch (index) {
case 0:
- policy = QWebEngineProfile::PersistentPermissionsOnDisk;
+ policy = QWebEngineProfile::PersistentPermissionsPolicy::AskEveryTime;
break;
case 1:
- policy = QWebEngineProfile::PersistentPermissionsInMemory;
+ policy = QWebEngineProfile::PersistentPermissionsPolicy::StoreInMemory;
break;
case 2:
- policy = QWebEngineProfile::NoPersistentPermissions;
+ policy = QWebEngineProfile::PersistentPermissionsPolicy::StoreOnDisk;
break;
}
@@ -261,7 +261,7 @@ PermissionWidget *MainWindow::createPermissionWidget(const QWebEnginePermission
void MainWindow::loadStoredPermissions()
{
- QList<QWebEnginePermission> permissionsList = m_profile->listPermissions();
+ QList<QWebEnginePermission> permissionsList = m_profile->listAllPermissions();
for (QWebEnginePermission &permission : permissionsList) {
PermissionWidget *widget = createPermissionWidget(permission);
if (widget)
diff --git a/examples/webenginewidgets/permissionbrowser/permissiondialog.ui b/examples/webenginewidgets/permissionbrowser/permissiondialog.ui
index a98432131..430df2d58 100644
--- a/examples/webenginewidgets/permissionbrowser/permissiondialog.ui
+++ b/examples/webenginewidgets/permissionbrowser/permissiondialog.ui
@@ -31,7 +31,7 @@
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
- <string>Feature</string>
+ <string>Permission type</string>
</property>
</widget>
</item>
@@ -70,7 +70,7 @@
</layout>
</item>
<item row="1" column="1">
- <widget class="QComboBox" name="m_featureComboBox"/>
+ <widget class="QComboBox" name="m_permissionTypeComboBox"/>
</item>
</layout>
</widget>
diff --git a/examples/webenginewidgets/push-notifications/main.cpp b/examples/webenginewidgets/push-notifications/main.cpp
index 2a52ea39e..16465317d 100644
--- a/examples/webenginewidgets/push-notifications/main.cpp
+++ b/examples/webenginewidgets/push-notifications/main.cpp
@@ -22,7 +22,7 @@ int main(int argc, char *argv[])
QObject::connect(view.page(), &QWebEnginePage::permissionRequested,
[&](QWebEnginePermission permission) {
- if (permission.feature() != QWebEnginePermission::Notifications)
+ if (permission.permissionType() != QWebEnginePermission::PermissionType::Notifications)
return;
permission.grant();
diff --git a/examples/webenginewidgets/simplebrowser/webview.cpp b/examples/webenginewidgets/simplebrowser/webview.cpp
index 40a1508b4..e7538f948 100644
--- a/examples/webenginewidgets/simplebrowser/webview.cpp
+++ b/examples/webenginewidgets/simplebrowser/webview.cpp
@@ -71,27 +71,31 @@ WebView::~WebView()
m_imageAnimationGroup = nullptr;
}
-inline QString questionForFeature(QWebEnginePermission::Feature feature)
+inline QString questionForPermissionType(QWebEnginePermission::PermissionType permissionType)
{
- switch (feature) {
- case QWebEnginePermission::Geolocation:
+ switch (permissionType) {
+ case QWebEnginePermission::PermissionType::Geolocation:
return QObject::tr("Allow %1 to access your location information?");
- case QWebEnginePermission::MediaAudioCapture:
+ case QWebEnginePermission::PermissionType::MediaAudioCapture:
return QObject::tr("Allow %1 to access your microphone?");
- case QWebEnginePermission::MediaVideoCapture:
+ case QWebEnginePermission::PermissionType::MediaVideoCapture:
return QObject::tr("Allow %1 to access your webcam?");
- case QWebEnginePermission::MediaAudioVideoCapture:
+ case QWebEnginePermission::PermissionType::MediaAudioVideoCapture:
return QObject::tr("Allow %1 to access your microphone and webcam?");
- case QWebEnginePermission::MouseLock:
+ case QWebEnginePermission::PermissionType::MouseLock:
return QObject::tr("Allow %1 to lock your mouse cursor?");
- case QWebEnginePermission::DesktopVideoCapture:
+ case QWebEnginePermission::PermissionType::DesktopVideoCapture:
return QObject::tr("Allow %1 to capture video of your desktop?");
- case QWebEnginePermission::DesktopAudioVideoCapture:
+ case QWebEnginePermission::PermissionType::DesktopAudioVideoCapture:
return QObject::tr("Allow %1 to capture audio and video of your desktop?");
- case QWebEnginePermission::Notifications:
+ case QWebEnginePermission::PermissionType::Notifications:
return QObject::tr("Allow %1 to show notification on your desktop?");
- case QWebEnginePermission::ClipboardReadWrite:
+ case QWebEnginePermission::PermissionType::ClipboardReadWrite:
return QObject::tr("Allow %1 to read from and write to the clipboard?");
+ case QWebEnginePermission::PermissionType::LocalFontsAccess:
+ return QObject::tr("Allow %1 to access fonts stored on this machine?");
+ case QWebEnginePermission::PermissionType::Unsupported:
+ break;
}
return QString();
}
@@ -312,7 +316,7 @@ void WebView::handleAuthenticationRequired(const QUrl &requestUrl, QAuthenticato
void WebView::handlePermissionRequested(QWebEnginePermission permission)
{
QString title = tr("Permission Request");
- QString question = questionForFeature(permission.feature()).arg(permission.origin().host());
+ QString question = questionForPermissionType(permission.permissionType()).arg(permission.origin().host());
if (!question.isEmpty() && QMessageBox::question(window(), title, question) == QMessageBox::Yes)
permission.grant();
else
diff --git a/src/core/api/qwebenginepage.cpp b/src/core/api/qwebenginepage.cpp
index a5c06f29c..433de26b0 100644
--- a/src/core/api/qwebenginepage.cpp
+++ b/src/core/api/qwebenginepage.cpp
@@ -590,22 +590,22 @@ void QWebEnginePagePrivate::showColorDialog(QSharedPointer<ColorChooserControlle
void QWebEnginePagePrivate::runMediaAccessPermissionRequest(const QUrl &securityOrigin, WebContentsAdapterClient::MediaRequestFlags requestFlags)
{
Q_Q(QWebEnginePage);
- QWebEnginePermission::Feature feature;
+ QWebEnginePermission::PermissionType permissionType;
if (requestFlags.testFlag(WebContentsAdapterClient::MediaAudioCapture)
&& requestFlags.testFlag(WebContentsAdapterClient::MediaVideoCapture))
- feature = QWebEnginePermission::MediaAudioVideoCapture;
+ permissionType = QWebEnginePermission::PermissionType::MediaAudioVideoCapture;
else if (requestFlags.testFlag(WebContentsAdapterClient::MediaAudioCapture))
- feature = QWebEnginePermission::MediaAudioCapture;
+ permissionType = QWebEnginePermission::PermissionType::MediaAudioCapture;
else if (requestFlags.testFlag(WebContentsAdapterClient::MediaVideoCapture))
- feature = QWebEnginePermission::MediaVideoCapture;
+ permissionType = QWebEnginePermission::PermissionType::MediaVideoCapture;
else if (requestFlags.testFlag(WebContentsAdapterClient::MediaDesktopAudioCapture)
&& requestFlags.testFlag(WebContentsAdapterClient::MediaDesktopVideoCapture))
- feature = QWebEnginePermission::DesktopAudioVideoCapture;
+ permissionType = QWebEnginePermission::PermissionType::DesktopAudioVideoCapture;
else // if (requestFlags.testFlag(WebContentsAdapterClient::MediaDesktopVideoCapture))
- feature = QWebEnginePermission::DesktopVideoCapture;
+ permissionType = QWebEnginePermission::PermissionType::DesktopVideoCapture;
- Q_EMIT q->permissionRequested(createFeaturePermissionObject(securityOrigin, feature));
+ Q_EMIT q->permissionRequested(createFeaturePermissionObject(securityOrigin, permissionType));
#if QT_DEPRECATED_SINCE(6, 8)
QT_WARNING_PUSH
@@ -633,30 +633,30 @@ void QWebEnginePagePrivate::runMediaAccessPermissionRequest(const QUrl &security
#if QT_DEPRECATED_SINCE(6, 8)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
-static QWebEnginePage::Feature toDeprecatedFeature(QWebEnginePermission::Feature feature)
+static QWebEnginePage::Feature toDeprecatedFeature(QWebEnginePermission::PermissionType permissionType)
{
- switch (feature) {
- case QWebEnginePermission::Feature::Notifications:
+ switch (permissionType) {
+ case QWebEnginePermission::PermissionType::Notifications:
return QWebEnginePage::Notifications;
- case QWebEnginePermission::Feature::Geolocation:
+ case QWebEnginePermission::PermissionType::Geolocation:
return QWebEnginePage::Geolocation;
- case QWebEnginePermission::Feature::ClipboardReadWrite:
+ case QWebEnginePermission::PermissionType::ClipboardReadWrite:
return QWebEnginePage::ClipboardReadWrite;
- case QWebEnginePermission::Feature::LocalFontsAccess:
+ case QWebEnginePermission::PermissionType::LocalFontsAccess:
return QWebEnginePage::LocalFontsAccess;
- case QWebEnginePermission::Feature::MediaAudioCapture:
+ case QWebEnginePermission::PermissionType::MediaAudioCapture:
return QWebEnginePage::MediaAudioCapture;
- case QWebEnginePermission::Feature::MediaVideoCapture:
+ case QWebEnginePermission::PermissionType::MediaVideoCapture:
return QWebEnginePage::MediaVideoCapture;
- case QWebEnginePermission::Feature::MediaAudioVideoCapture:
+ case QWebEnginePermission::PermissionType::MediaAudioVideoCapture:
return QWebEnginePage::MediaAudioVideoCapture;
- case QWebEnginePermission::Feature::DesktopVideoCapture:
+ case QWebEnginePermission::PermissionType::DesktopVideoCapture:
return QWebEnginePage::DesktopVideoCapture;
- case QWebEnginePermission::Feature::DesktopAudioVideoCapture:
+ case QWebEnginePermission::PermissionType::DesktopAudioVideoCapture:
return QWebEnginePage::DesktopAudioVideoCapture;
- case QWebEnginePermission::Feature::MouseLock:
+ case QWebEnginePermission::PermissionType::MouseLock:
return QWebEnginePage::MouseLock;
- case QWebEnginePermission::Feature::Unsupported:
+ case QWebEnginePermission::PermissionType::Unsupported:
break;
}
@@ -666,38 +666,28 @@ static QWebEnginePage::Feature toDeprecatedFeature(QWebEnginePermission::Feature
QT_WARNING_POP
#endif // QT_DEPRECATED_SINCE(6, 8)
-void QWebEnginePagePrivate::runFeaturePermissionRequest(QWebEnginePermission::Feature feature, const QUrl &securityOrigin)
+void QWebEnginePagePrivate::runFeaturePermissionRequest(QWebEnginePermission::PermissionType permissionType, const QUrl &securityOrigin)
{
Q_Q(QWebEnginePage);
- switch (feature) {
- case QWebEnginePermission::Notifications:
- case QWebEnginePermission::Geolocation:
- case QWebEnginePermission::ClipboardReadWrite:
- case QWebEnginePermission::LocalFontsAccess:
- Q_EMIT q->permissionRequested(createFeaturePermissionObject(securityOrigin, feature));
+
+ 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(feature));
+ Q_EMIT q->featurePermissionRequested(securityOrigin, toDeprecatedFeature(permissionType));
QT_WARNING_POP
#endif // QT_DEPRECATED_SINCE(6, 8)
return;
- case QWebEnginePermission::MouseLock:
- case QWebEnginePermission::MediaAudioCapture:
- case QWebEnginePermission::MediaVideoCapture:
- case QWebEnginePermission::MediaAudioVideoCapture:
- case QWebEnginePermission::DesktopAudioVideoCapture:
- case QWebEnginePermission::DesktopVideoCapture:
- case QWebEnginePermission::Unsupported:
- Q_UNREACHABLE();
- return;
}
+
+ Q_UNREACHABLE();
}
void QWebEnginePagePrivate::runMouseLockPermissionRequest(const QUrl &securityOrigin)
{
Q_Q(QWebEnginePage);
- Q_EMIT q->permissionRequested(createFeaturePermissionObject(securityOrigin, QWebEnginePermission::MouseLock));
+ Q_EMIT q->permissionRequested(createFeaturePermissionObject(securityOrigin, QWebEnginePermission::PermissionType::MouseLock));
#if QT_DEPRECATED_SINCE(6, 8)
QT_WARNING_PUSH
@@ -893,9 +883,9 @@ void QWebEnginePagePrivate::showWebAuthDialog(QWebEngineWebAuthUxRequest *reques
Q_EMIT q->webAuthUxRequested(request);
}
-QWebEnginePermission QWebEnginePagePrivate::createFeaturePermissionObject(const QUrl &securityOrigin, QWebEnginePermission::Feature feature)
+QWebEnginePermission QWebEnginePagePrivate::createFeaturePermissionObject(const QUrl &securityOrigin, QWebEnginePermission::PermissionType feature)
{
- auto *returnPrivate = new QWebEnginePermissionPrivate{securityOrigin, feature, adapter, profileAdapter()};
+ auto *returnPrivate = new QWebEnginePermissionPrivate(securityOrigin, feature, adapter, profileAdapter());
return QWebEnginePermission(returnPrivate);
}
@@ -1857,39 +1847,39 @@ QT_WARNING_DISABLE_DEPRECATED
void QWebEnginePage::setFeaturePermission(const QUrl &securityOrigin, QWebEnginePage::Feature feature, QWebEnginePage::PermissionPolicy policy)
{
Q_D(QWebEnginePage);
- QWebEnginePermission::Feature f = QWebEnginePermission::Feature::Unsupported;
+ QWebEnginePermission::PermissionType f = QWebEnginePermission::PermissionType::Unsupported;
QWebEnginePermission::State s = QWebEnginePermission::State::Invalid;
switch (feature) {
case QWebEnginePage::Notifications:
- f = QWebEnginePermission::Notifications;
+ f = QWebEnginePermission::PermissionType::Notifications;
break;
case QWebEnginePage::Geolocation:
- f = QWebEnginePermission::Geolocation;
+ f = QWebEnginePermission::PermissionType::Geolocation;
break;
case QWebEnginePage::MediaAudioCapture:
- f = QWebEnginePermission::MediaAudioCapture;
+ f = QWebEnginePermission::PermissionType::MediaAudioCapture;
break;
case QWebEnginePage::MediaVideoCapture:
- f = QWebEnginePermission::MediaVideoCapture;
+ f = QWebEnginePermission::PermissionType::MediaVideoCapture;
break;
case QWebEnginePage::MediaAudioVideoCapture:
- f = QWebEnginePermission::MediaAudioVideoCapture;
+ f = QWebEnginePermission::PermissionType::MediaAudioVideoCapture;
break;
case QWebEnginePage::MouseLock:
- f = QWebEnginePermission::MouseLock;
+ f = QWebEnginePermission::PermissionType::MouseLock;
break;
case QWebEnginePage::DesktopVideoCapture:
- f = QWebEnginePermission::DesktopVideoCapture;
+ f = QWebEnginePermission::PermissionType::DesktopVideoCapture;
break;
case QWebEnginePage::DesktopAudioVideoCapture:
- f = QWebEnginePermission::DesktopAudioVideoCapture;
+ f = QWebEnginePermission::PermissionType::DesktopAudioVideoCapture;
break;
case QWebEnginePage::ClipboardReadWrite:
- f = QWebEnginePermission::ClipboardReadWrite;
+ f = QWebEnginePermission::PermissionType::ClipboardReadWrite;
break;
case QWebEnginePage::LocalFontsAccess:
- f = QWebEnginePermission::LocalFontsAccess;
+ f = QWebEnginePermission::PermissionType::LocalFontsAccess;
break;
default:
Q_UNREACHABLE();
@@ -1897,19 +1887,19 @@ void QWebEnginePage::setFeaturePermission(const QUrl &securityOrigin, QWebEngine
switch (policy) {
case QWebEnginePage::PermissionUnknown:
- s = QWebEnginePermission::Ask;
+ s = QWebEnginePermission::State::Ask;
break;
case QWebEnginePage::PermissionDeniedByUser:
- s = QWebEnginePermission::Denied;
+ s = QWebEnginePermission::State::Denied;
break;
case QWebEnginePage::PermissionGrantedByUser:
- s = QWebEnginePermission::Granted;
+ s = QWebEnginePermission::State::Granted;
break;
default:
Q_UNREACHABLE();
}
- d->adapter->setFeaturePermission(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 61c9bd990..8b3682672 100644
--- a/src/core/api/qwebenginepage.h
+++ b/src/core/api/qwebenginepage.h
@@ -150,17 +150,12 @@ public:
Q_ENUM(WebWindowType)
#if QT_DEPRECATED_SINCE(6, 8)
-QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
- enum QT_DEPRECATED_VERSION_X_6_8(
- "QWebEnginePage::PermissionPolicy has been deprecated. "
- "The updated permissions API uses QWebEnginePermission::State.")
- PermissionPolicy {
- PermissionUnknown,
- PermissionGrantedByUser,
- PermissionDeniedByUser
+ enum PermissionPolicy {
+ PermissionUnknown Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::State::Ask instead"),
+ PermissionGrantedByUser Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::State::Granted instead"),
+ PermissionDeniedByUser Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::State::Denied instead")
};
Q_ENUM(PermissionPolicy)
-QT_WARNING_POP
#endif
// must match WebContentsAdapterClient::NavigationType
@@ -176,24 +171,19 @@ QT_WARNING_POP
Q_ENUM(NavigationType)
#if QT_DEPRECATED_SINCE(6, 8)
-QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
- enum QT_DEPRECATED_VERSION_X_6_8(
- "QWebEnginePage::Feature has been deprecated. "
- "The updated permissions API uses QWebEnginePermission::Feature.")
- Feature {
- Notifications = 0,
- Geolocation = 1,
- MediaAudioCapture = 2,
- MediaVideoCapture,
- MediaAudioVideoCapture,
- MouseLock,
- DesktopVideoCapture,
- DesktopAudioVideoCapture,
- ClipboardReadWrite,
- LocalFontsAccess,
+ enum Feature {
+ Notifications Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::PermissionType::Notifications instead") = 0,
+ Geolocation Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::PermissionType::Geolocation instead") = 1,
+ MediaAudioCapture Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::PermissionType::MediaAudioCapture instead") = 2,
+ MediaVideoCapture Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::PermissionType::MediaVideoCapture instead"),
+ MediaAudioVideoCapture Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::PermissionType::MediaAudioVideoCapture instead"),
+ MouseLock Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::PermissionType::MouseLock instead"),
+ DesktopVideoCapture Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::PermissionType::DesktopVideoCapture instead"),
+ DesktopAudioVideoCapture Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::PermissionType::DesktopAudioVideoCapture instead"),
+ ClipboardReadWrite Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::PermissionType::ClipboardReadWrite instead"),
+ LocalFontsAccess Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::PermissionType::LocalFontsAccess instead"),
};
Q_ENUM(Feature)
-QT_WARNING_POP
#endif
// Ex-QWebFrame enum
@@ -253,10 +243,8 @@ QT_WARNING_POP
void findText(const QString &subString, FindFlags options = {}, const std::function<void(const QWebEngineFindTextResult &)> &resultCallback = std::function<void(const QWebEngineFindTextResult &)>());
#if QT_DEPRECATED_SINCE(6, 8)
-QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
QT_DEPRECATED_VERSION_X_6_8("Setting permissions through QWebEnginePage has been deprecated. Please use QWebEnginePermission instead.")
void setFeaturePermission(const QUrl &securityOrigin, Feature feature, PermissionPolicy policy);
-QT_WARNING_POP
#endif
bool isLoading() const;
@@ -341,17 +329,10 @@ Q_SIGNALS:
void windowCloseRequested();
#if QT_DEPRECATED_SINCE(6, 8)
-#if !defined(Q_MOC_RUN)
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
-#endif // !defined(Q_MOC_RUN)
QT_MOC_COMPAT QT_DEPRECATED_VERSION_X_6_8("The signal has been deprecated; please use permissionRequested instead.")
void featurePermissionRequested(const QUrl &securityOrigin, QWebEnginePage::Feature feature);
QT_MOC_COMPAT QT_DEPRECATED_VERSION_X_6_8("The signal has been deprecated, and no longer functions.")
void featurePermissionRequestCanceled(const QUrl &securityOrigin, QWebEnginePage::Feature feature);
-#if !defined(Q_MOC_RUN)
-QT_WARNING_POP
-#endif // !defined(Q_MOC_RUN)
#endif // QT_DEPRECATED_SINCE(6, 8)
void fullScreenRequested(QWebEngineFullScreenRequest fullScreenRequest);
diff --git a/src/core/api/qwebenginepage_p.h b/src/core/api/qwebenginepage_p.h
index 77d3dd8c2..5e81a0cf9 100644
--- a/src/core/api/qwebenginepage_p.h
+++ b/src/core/api/qwebenginepage_p.h
@@ -148,7 +148,7 @@ public:
QSharedPointer<QtWebEngineCore::AuthenticationDialogController>) override;
void releaseProfile() override;
void runMediaAccessPermissionRequest(const QUrl &securityOrigin, MediaRequestFlags requestFlags) override;
- void runFeaturePermissionRequest(QWebEnginePermission::Feature feature, const QUrl &securityOrigin) override;
+ void runFeaturePermissionRequest(QWebEnginePermission::PermissionType permissionType, const QUrl &securityOrigin) override;
void runMouseLockPermissionRequest(const QUrl &securityOrigin) override;
void runRegisterProtocolHandlerRequest(QWebEngineRegisterProtocolHandlerRequest) override;
void runFileSystemAccessRequest(QWebEngineFileSystemAccessRequest) override;
@@ -180,7 +180,7 @@ public:
const QRect &bounds, bool autoselectFirstSuggestion) override;
void hideAutofillPopup() override;
void showWebAuthDialog(QWebEngineWebAuthUxRequest *controller) override;
- QWebEnginePermission createFeaturePermissionObject(const QUrl &securityOrigin, QWebEnginePermission::Feature feature) 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 61e76ee4a..a6860b5dd 100644
--- a/src/core/api/qwebenginepermission.cpp
+++ b/src/core/api/qwebenginepermission.cpp
@@ -10,17 +10,19 @@ QT_BEGIN_NAMESPACE
QT_DEFINE_QESDP_SPECIALIZATION_DTOR(QWebEnginePermissionPrivate)
+/*! \internal */
QWebEnginePermissionPrivate::QWebEnginePermissionPrivate()
: QSharedData()
- , feature(QWebEnginePermission::Unsupported)
+ , permissionType(QWebEnginePermission::PermissionType::Unsupported)
{
}
-QWebEnginePermissionPrivate::QWebEnginePermissionPrivate(const QUrl &origin_, QWebEnginePermission::Feature feature_,
+/*! \internal */
+QWebEnginePermissionPrivate::QWebEnginePermissionPrivate(const QUrl &origin_, QWebEnginePermission::PermissionType permissionType_,
QSharedPointer<QtWebEngineCore::WebContentsAdapter> webContentsAdapter_, QtWebEngineCore::ProfileAdapter *profileAdapter_)
: QSharedData()
, origin(origin_)
- , feature(feature_)
+ , permissionType(permissionType_)
, webContentsAdapter(webContentsAdapter_)
, profileAdapter(profileAdapter_)
{
@@ -35,32 +37,39 @@ QWebEnginePermissionPrivate::QWebEnginePermissionPrivate(const QUrl &origin_, QW
The typical usage pattern is as follows:
\list 1
- \li A website requests a specific feature, triggering the QWebEnginePage::permissionRequested() signal;
+ \li A website requests a specific permission, triggering the QWebEnginePage::permissionRequested() signal;
\li The signal handler triggers a prompt asking the user whether they want to grant the permission;
\li When the user has made their decision, the application calls \l grant() or \l deny();
\endlist
- Alternatively, an application interested in modifying already granted permissions may use QWebEngineProfile::listPermissions()
- to get a list of existing permissions associated with a profile, or QWebEngineProfile::getPermission() to get
+ Alternatively, an application interested in modifying already granted permissions may use QWebEngineProfile::listAllPermissions()
+ to get a list of existing permissions associated with a profile, or QWebEngineProfile::queryPermission() to get
a QWebEnginePermission object for a specific permission.
The \l origin() property can be used to query which origin the QWebEnginePermission is associated with, while the
- \l feature() property describes the associated feature. A website origin is the combination of its scheme, hostname,
- and port. Permissions are granted on a per-origin basis; thus, if the web page \c{https://www.example.com:12345/some/page.html}
- requests a permission, it will be granted to the origin \c{https://www.example.com:12345/}.
+ \l permissionType() property describes the type of the requested permission. A website origin is the combination of
+ its scheme, hostname, and port. Permissions are granted on a per-origin basis; thus, if the web page
+ \c{https://www.example.com:12345/some/page.html} requests a permission, it will be granted to the origin
+ \c{https://www.example.com:12345/}.
+
+ \l QWebEnginePermission::PermissionType describes all the permission types Qt WebEngine supports. Only some permission types
+ are remembered between browsing sessions; they are \e persistent. Non-persistent permissions query the user every time a
+ website requests them, and cannot be granted in advance. You can check whether a permission type is persistent at runtime
+ using the static method QWebEnginePermission::isPersistent().
+
+ Persistent permissions are stored inside the active QWebEngineProfile, and their lifetime depends on the value of
+ QWebEngineProfile::persistentPermissionsPolicy(). By default, named profiles store their permissions on disk, whereas
+ off-the-record ones store them in memory (and destroy them when the profile is destroyed). A stored permission will not
+ query the user the next time a website requests it; instead it will be automatically granted or denied, depending on
+ the resolution the user picked initially. To erase a stored permission, call \l reset() on it.
- \l QWebEnginePermission::Feature describes all the feature types Qt WebEngine supports. Some Features are transient;
- in practice, this means that they are never remembered, and a website that uses them will trigger a permission
- prompt every time the Feature is needed. Transient Features cannot be granted in advance.
+ A non-persistent permission, on the other hand, is only usable until the related QWebEnginePage performs a navigation to
+ a different URL, or is destroyed.
- The usability lifetime of a QWebEnginePermission is tied either to its associated QWebEnginePage
- (for transient feature types), or QWebEngineProfile (for permanent feature types). A transient permission is one which
- needs to be explicitly granted or denied every time it's needed (e.g. webcam/screen sharing permission), whereas a permanent
- one might be stored inside the current profile, depending on the value of QWebEngineProfile::persistentPermissionsPolicy().
You can check whether a QWebEnginePermission is in a valid state using its \l isValid() property. For invalid objects, calls to \l grant(),
\l deny(), or \l reset() will do nothing, while calls to \l state() will always return QWebEnginePermission::Invalid.
- \sa QWebEnginePage::permissionRequested(), QWebEngineProfile::getPermission(), QWebEngineProfile::listPermissions()
+ \sa QWebEnginePage::permissionRequested(), QWebEngineProfile::queryPermission(), QWebEngineProfile::listAllPermissions()
*/
/*! \fn QWebEnginePermission::QWebEnginePermission()
@@ -100,10 +109,10 @@ bool QWebEnginePermission::comparesEqual(const QWebEnginePermission &other) cons
if (this == &other)
return true;
- if (d_ptr->feature != other.d_ptr->feature || d_ptr->origin != other.d_ptr->origin)
+ if (d_ptr->permissionType != other.d_ptr->permissionType || d_ptr->origin != other.d_ptr->origin)
return false;
- if (isTransient(d_ptr->feature)) {
+ if (!isPersistent(d_ptr->permissionType)) {
if (d_ptr->webContentsAdapter != other.d_ptr->webContentsAdapter)
return false;
} else {
@@ -129,49 +138,49 @@ bool QWebEnginePermission::comparesEqual(const QWebEnginePermission &other) cons
per-origin basis; thus, if the web page \c{https://www.example.com:12345/some/page.html}
requests a permission, it will be granted to the origin \c{https://www.example.com:12345/}.
*/
-const QUrl QWebEnginePermission::origin() const
+QUrl QWebEnginePermission::origin() const
{
return d_ptr->origin;
}
/*!
- \enum QWebEnginePermission::Feature
-
- This enum type holds the type of the requested feature:
-
- \value MediaAudioCapture Access to a microphone, or another audio source. This feature is transient.
- \value MediaVideoCapture Access to a webcam, or another video source. This feature is transient.
- \value MediaAudioVideoCapture Combination of \l MediaAudioCapture and \l MediaVideoCapture. This feature is transient.
- \value DesktopVideoCapture Access to the contents of the user's screen. This feature is transient.
- \value DesktopAudioVideoCapture Access to the contents of the user's screen, and application audio. This feature is transient.
- \value MouseLock Locks the pointer inside an element on the web page. This feature is transient.
- \value Notifications Allows the website to send notifications to the user.
- \value Geolocation Access to the user's physical location.
- \value ClipboardReadWrite Access to the user's clipboard.
- \value LocalFontsAccess Access to the fonts installed on the user's machine. Only available on desktops.
- \value Unsupported An unsupported feature type.
-
- \note Transient feature types are ones that will never be remembered by the underlying storage, and will trigger
- a permission request every time a website tries to use them. Transient Features can only be denied/granted
- as they're needed; any attempts to pre-grant a transient Feature will fail.
+ \enum QWebEnginePermission::PermissionType
+
+ This enum type holds the type of the requested permission type:
+
+ \value MediaAudioCapture Access to a microphone, or another audio source. This permission is \e not persistent.
+ \value MediaVideoCapture Access to a webcam, or another video source. This permission is \e not persistent.
+ \value MediaAudioVideoCapture Combination of \l MediaAudioCapture and \l MediaVideoCapture. This permission is \e not persistent.
+ \value DesktopVideoCapture Access to the contents of the user's screen. This permission is \e not persistent.
+ \value DesktopAudioVideoCapture Access to the contents of the user's screen, and application audio. This permission is \e not persistent.
+ \value MouseLock Locks the pointer inside an element on the web page. This permission is \e not persistent.
+ \value Notifications Allows the website to send notifications to the user. This permission is persistent.
+ \value Geolocation Access to the user's physical location. This permission is persistent.
+ \value ClipboardReadWrite Access to the user's clipboard. This permission is persistent.
+ \value LocalFontsAccess Access to the fonts installed on the user's machine. Only available on desktops. This permission is persistent.
+ \value Unsupported An unsupported permission type.
+
+ \note Non-persistent permission types are ones that will never be remembered by the underlying storage, and will trigger
+ a permission request every time a website tries to use them. They can only be denied/granted as they're needed;
+ any attempts to pre-grant a non-persistent permission will fail.
*/
/*!
- \property QWebEnginePermission::feature
- \brief The feature type associated with this permission.
+ \property QWebEnginePermission::permissionType
+ \brief The permission type associated with this permission.
*/
-QWebEnginePermission::Feature QWebEnginePermission::feature() const
+QWebEnginePermission::PermissionType QWebEnginePermission::permissionType() const
{
- return d_ptr->feature;
+ return d_ptr->permissionType;
}
/*!
\enum QWebEnginePermission::State
- This enum type holds the current state of the requested feature:
+ This enum type holds the current state of the requested permission:
\value Invalid Object is in an invalid state, and any attempts to modify the described permission will fail.
- \value Ask Either the permission has not been requested before, or the feature() is transient.
+ \value Ask Either the permission has not been requested before, or the permissionType() is not persistent.
\value Granted Permission has already been granted.
\value Denied Permission has already been denied.
*/
@@ -180,24 +189,24 @@ QWebEnginePermission::Feature QWebEnginePermission::feature() const
\property QWebEnginePermission::state
\brief The current state of the permission.
- If a permission for the specified \l feature() and \l origin() has already been granted or denied,
+ If a permission for the specified \l permissionType() and \l origin() has already been granted or denied,
the return value is QWebEnginePermission::Granted, or QWebEnginePermission::Denied, respectively.
- When this is the first time the permission is requested, or if the \l feature() is transient,
+ When this is the first time the permission is requested, or if the \l permissionType() is non-persistent,
the return value is QWebEnginePermission::Ask. If the object is in an invalid state, the returned
value is QWebEnginePermission::Invalid.
- \sa isValid(), isTransient()
+ \sa isValid(), isPersistent()
*/
QWebEnginePermission::State QWebEnginePermission::state() const
{
if (!isValid())
- return Invalid;
+ return State::Invalid;
if (d_ptr->webContentsAdapter)
- return d_ptr->webContentsAdapter.toStrongRef()->getPermissionState(origin(), feature());
+ return d_ptr->webContentsAdapter.toStrongRef()->getPermissionState(origin(), permissionType());
if (d_ptr->profileAdapter)
- return d_ptr->profileAdapter->getPermissionState(origin(), feature());
+ return d_ptr->profileAdapter->getPermissionState(origin(), permissionType());
Q_UNREACHABLE();
- return Ask;
+ return State::Ask;
}
/*!
@@ -206,19 +215,19 @@ QWebEnginePermission::State QWebEnginePermission::state() const
An invalid QWebEnginePermission is either:
\list
- \li One whose \l feature() is unsupported;
- \li One whose \l feature() is transient, and the associated page/view has been destroyed;
- \li One whose \l feature() is permanent, but the associated profile has been destroyed;
+ \li One whose \l permissionType() is unsupported;
+ \li One whose \l permissionType() is non-persistent, and the user has navigated away from the web page that triggered the request;
+ \li One whose \l permissionType() is persistent, but the associated profile has been destroyed;
\li One whose \l origin() is invalid.
\endlist
- \sa isTransient()
+ \sa isPersistent()
*/
bool QWebEnginePermission::isValid() const
{
- if (feature() == Unsupported)
+ if (permissionType() == PermissionType::Unsupported)
return false;
- if (isTransient(feature()) && !d_ptr->webContentsAdapter)
+ if (!isPersistent(permissionType()) && !d_ptr->webContentsAdapter)
return false;
if (!d_ptr->profileAdapter)
return false;
@@ -228,7 +237,7 @@ bool QWebEnginePermission::isValid() const
}
/*!
- Allows the associated origin to access the requested feature. Does nothing when \l isValid() evaluates to false.
+ Allows the associated origin to access the requested permissionType. Does nothing when \l isValid() evaluates to false.
\sa deny(), reset(), isValid()
*/
@@ -237,13 +246,13 @@ void QWebEnginePermission::grant() const
if (!isValid())
return;
if (d_ptr->webContentsAdapter)
- d_ptr->webContentsAdapter.toStrongRef()->setFeaturePermission(origin(), feature(), Granted);
+ d_ptr->webContentsAdapter.toStrongRef()->setPermission(origin(), permissionType(), State::Granted);
else if (d_ptr->profileAdapter)
- d_ptr->profileAdapter->setPermission(origin(), feature(), Granted);
+ d_ptr->profileAdapter->setPermission(origin(), permissionType(), State::Granted);
}
/*!
- Stops the associated origin from accessing the requested feature. Does nothing when \l isValid() evaluates to false.
+ Stops the associated origin from accessing the requested permissionType. Does nothing when \l isValid() evaluates to false.
\sa grant(), reset(), isValid()
*/
@@ -252,9 +261,9 @@ void QWebEnginePermission::deny() const
if (!isValid())
return;
if (d_ptr->webContentsAdapter)
- d_ptr->webContentsAdapter.toStrongRef()->setFeaturePermission(origin(), feature(), Denied);
+ d_ptr->webContentsAdapter.toStrongRef()->setPermission(origin(), permissionType(), State::Denied);
else if (d_ptr->profileAdapter)
- d_ptr->profileAdapter->setPermission(origin(), feature(), Denied);
+ d_ptr->profileAdapter->setPermission(origin(), permissionType(), State::Denied);
}
/*!
@@ -273,31 +282,31 @@ void QWebEnginePermission::reset() const
if (!isValid())
return;
if (d_ptr->webContentsAdapter)
- d_ptr->webContentsAdapter.toStrongRef()->setFeaturePermission(origin(), feature(), Ask);
+ d_ptr->webContentsAdapter.toStrongRef()->setPermission(origin(), permissionType(), State::Ask);
else if (d_ptr->profileAdapter)
- d_ptr->profileAdapter->setPermission(origin(), feature(), Ask);
+ d_ptr->profileAdapter->setPermission(origin(), permissionType(), State::Ask);
}
/*!
- Returns whether \a feature is transient, meaning that a permission will be requested
- every time the associated functionality is used by a web page.
+ Returns whether a \a permissionType is \e persistent, meaning that a permission's state will be remembered
+ and the user will not be queried the next time the website requests the same permission.
*/
-bool QWebEnginePermission::isTransient(QWebEnginePermission::Feature feature)
+bool QWebEnginePermission::isPersistent(QWebEnginePermission::PermissionType permissionType)
{
- switch (feature) {
- case QWebEnginePermission::MediaAudioCapture:
- case QWebEnginePermission::MediaVideoCapture:
- case QWebEnginePermission::MediaAudioVideoCapture:
- case QWebEnginePermission::DesktopVideoCapture:
- case QWebEnginePermission::DesktopAudioVideoCapture:
- case QWebEnginePermission::MouseLock:
+ switch (permissionType) {
+ case QWebEnginePermission::PermissionType::Notifications:
+ case QWebEnginePermission::PermissionType::Geolocation:
+ case QWebEnginePermission::PermissionType::ClipboardReadWrite:
+ case QWebEnginePermission::PermissionType::LocalFontsAccess:
return true;
- case QWebEnginePermission::Notifications:
- case QWebEnginePermission::Geolocation:
- case QWebEnginePermission::ClipboardReadWrite:
- case QWebEnginePermission::LocalFontsAccess:
+ case QWebEnginePermission::PermissionType::MediaAudioCapture:
+ case QWebEnginePermission::PermissionType::MediaVideoCapture:
+ case QWebEnginePermission::PermissionType::MediaAudioVideoCapture:
+ case QWebEnginePermission::PermissionType::DesktopVideoCapture:
+ case QWebEnginePermission::PermissionType::DesktopAudioVideoCapture:
+ case QWebEnginePermission::PermissionType::MouseLock:
return false;
- case QWebEnginePermission::Unsupported:
+ case QWebEnginePermission::PermissionType::Unsupported:
return false;
}
diff --git a/src/core/api/qwebenginepermission.h b/src/core/api/qwebenginepermission.h
index 09db8ce36..440bf788b 100644
--- a/src/core/api/qwebenginepermission.h
+++ b/src/core/api/qwebenginepermission.h
@@ -9,8 +9,17 @@
#include <QtCore/qurl.h>
#include <QtCore/qshareddata.h>
+namespace QtWebEngineCore {
+class PermissionManagerQt;
+} // namespace
+
QT_BEGIN_NAMESPACE
+class QWebEnginePagePrivate;
+class QWebEngineProfile;
+class QQuickWebEngineViewPrivate;
+class QQuickWebEngineProfile;
+
struct QWebEnginePermissionPrivate;
QT_DECLARE_QESDP_SPECIALIZATION_DTOR_WITH_EXPORT(QWebEnginePermissionPrivate,
Q_WEBENGINECORE_EXPORT)
@@ -19,7 +28,7 @@ class QWebEnginePermission
{
Q_GADGET_EXPORT(Q_WEBENGINECORE_EXPORT)
Q_PROPERTY(QUrl origin READ origin CONSTANT FINAL)
- Q_PROPERTY(Feature feature READ feature CONSTANT FINAL)
+ Q_PROPERTY(PermissionType permissionType READ permissionType CONSTANT FINAL)
Q_PROPERTY(State state READ state CONSTANT FINAL)
Q_PROPERTY(bool isValid READ isValid CONSTANT FINAL)
Q_CLASSINFO("RegisterEnumClassesUnscoped", "false")
@@ -28,14 +37,13 @@ public:
Q_WEBENGINECORE_EXPORT QWebEnginePermission();
Q_WEBENGINECORE_EXPORT QWebEnginePermission(const QWebEnginePermission &other);
- Q_WEBENGINECORE_EXPORT QWebEnginePermission(QWebEnginePermissionPrivate *pvt);
Q_WEBENGINECORE_EXPORT ~QWebEnginePermission();
Q_WEBENGINECORE_EXPORT QWebEnginePermission &operator=(const QWebEnginePermission &other);
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QWebEnginePermission)
void swap(QWebEnginePermission &other) noexcept { d_ptr.swap(other.d_ptr); }
- enum Feature : quint8 {
+ enum class PermissionType : quint8 {
Unsupported,
MediaAudioCapture,
MediaVideoCapture,
@@ -48,18 +56,18 @@ public:
ClipboardReadWrite,
LocalFontsAccess,
};
- Q_ENUM(Feature)
+ Q_ENUM(PermissionType)
- enum State : quint8 {
+ enum class State : quint8 {
Invalid,
Ask,
Granted,
- Denied
+ Denied,
};
Q_ENUM(State)
- Q_WEBENGINECORE_EXPORT const QUrl origin() const;
- Q_WEBENGINECORE_EXPORT Feature feature() const;
+ Q_WEBENGINECORE_EXPORT QUrl origin() const;
+ Q_WEBENGINECORE_EXPORT PermissionType permissionType() const;
Q_WEBENGINECORE_EXPORT State state() const;
Q_WEBENGINECORE_EXPORT bool isValid() const;
@@ -67,7 +75,7 @@ public:
Q_WEBENGINECORE_EXPORT Q_INVOKABLE void deny() const;
Q_WEBENGINECORE_EXPORT Q_INVOKABLE void reset() const;
- Q_WEBENGINECORE_EXPORT Q_INVOKABLE static bool isTransient(QWebEnginePermission::Feature feature);
+ Q_WEBENGINECORE_EXPORT Q_INVOKABLE static bool isPersistent(QWebEnginePermission::PermissionType permissionType);
private:
inline friend bool operator==(const QWebEnginePermission &lhs, const QWebEnginePermission &rhs)
@@ -78,6 +86,14 @@ private:
Q_WEBENGINECORE_EXPORT bool comparesEqual(const QWebEnginePermission &other) const;
protected:
+ friend class QWebEnginePagePrivate;
+ friend class QWebEngineProfile;
+ friend class QQuickWebEngineViewPrivate;
+ friend class QQuickWebEngineProfile;
+ friend class QtWebEngineCore::PermissionManagerQt;
+
+ Q_WEBENGINECORE_EXPORT QWebEnginePermission(QWebEnginePermissionPrivate *pvt);
+
QExplicitlySharedDataPointer<QWebEnginePermissionPrivate> d_ptr;
};
diff --git a/src/core/api/qwebenginepermission_p.h b/src/core/api/qwebenginepermission_p.h
index 94c898873..fe4dc62f8 100644
--- a/src/core/api/qwebenginepermission_p.h
+++ b/src/core/api/qwebenginepermission_p.h
@@ -31,11 +31,11 @@ QT_BEGIN_NAMESPACE
struct QWebEnginePermissionPrivate : public QSharedData
{
Q_WEBENGINECORE_EXPORT QWebEnginePermissionPrivate();
- Q_WEBENGINECORE_EXPORT QWebEnginePermissionPrivate(const QUrl &, QWebEnginePermission::Feature,
+ Q_WEBENGINECORE_EXPORT QWebEnginePermissionPrivate(const QUrl &, QWebEnginePermission::PermissionType,
QSharedPointer<QtWebEngineCore::WebContentsAdapter>, QtWebEngineCore::ProfileAdapter *);
QUrl origin;
- QWebEnginePermission::Feature feature;
+ QWebEnginePermission::PermissionType permissionType;
QWeakPointer<QtWebEngineCore::WebContentsAdapter> webContentsAdapter;
QPointer<QtWebEngineCore::ProfileAdapter> profileAdapter;
diff --git a/src/core/api/qwebengineprofile.cpp b/src/core/api/qwebengineprofile.cpp
index 5d7bb5559..b238d32a5 100644
--- a/src/core/api/qwebengineprofile.cpp
+++ b/src/core/api/qwebengineprofile.cpp
@@ -113,18 +113,18 @@ using QtWebEngineCore::ProfileAdapter;
This enum describes the policy for permission persistence:
- \value NoPersistentPermissions
+ \value AskEveryTime
The application will ask for permissions every time they're needed, regardless of
whether they've been granted before or not. This is intended for backwards compatibility
with existing applications, and otherwise not recommended.
- \value PersistentPermissionsInMemory
+ \value StoreInMemory
A request will be made only the first time a permission is needed. Any subsequent
requests will be automatically granted or denied, depending on the initial user choice.
This carries over to all pages that use the same QWebEngineProfile instance, until the
application is shut down. This is the setting applied if \c off-the-record is set
or no persistent data path is available.
- \value PersistentPermissionsOnDisk
- Works the same way as \c PersistentPermissionsInMemory, but the permissions are saved to
+ \value StoreOnDisk
+ Works the same way as \c StoreInMemory, but the permissions are saved to
and restored from disk. This is the default setting.
*/
@@ -597,9 +597,9 @@ void QWebEngineProfile::setPersistentCookiesPolicy(QWebEngineProfile::Persistent
Returns the current policy for persistent permissions.
Off-the-record profiles are not allowed to save data to the disk, so they can only return
- PersistentPermissionsInMemory or NoPersistentPermissions.
+ \c StoreInMemory or \c AskEveryTime.
- \sa setPersistentPermissionsPolicy()
+ \sa QWebEngineProfile::PersistentPermissionsPolicy, setPersistentPermissionsPolicy()
*/
QWebEngineProfile::PersistentPermissionsPolicy QWebEngineProfile::persistentPermissionsPolicy() const
{
@@ -610,7 +610,7 @@ QWebEngineProfile::PersistentPermissionsPolicy QWebEngineProfile::persistentPerm
/*!
Sets the policy for persistent permissions to \a newPersistentPermissionsPolicy.
- \sa persistentPermissionsPolicy()
+ \sa QWebEngineProfile::PersistentPermissionsPolicy, persistentPermissionsPolicy()
*/
void QWebEngineProfile::setPersistentPermissionsPolicy(QWebEngineProfile::PersistentPermissionsPolicy newPersistentPermissionsPolicy)
{
@@ -979,44 +979,45 @@ void QWebEngineProfile::requestIconForIconURL(const QUrl &url, int desiredSizeIn
/*!
* Returns a QWebEnginePermission object corresponding to a single permission for the provided \a securityOrigin and
- * \a feature. The object may be used to query for the current state of the permission, or to change it. It is not required
+ * \a permissionType. The object may be used to query for the current state of the permission, or to change it. It is not required
* for a permission to already exist; the returned object may also be used to pre-grant a permission if a website is
* known to use it.
*
- * \note This may only be used for permanent feature types. Calling it with a transient \a feature will return an invalid object.
+ * \note This may only be used for persistent permission types. Calling it with a non-persistent type will return an invalid object.
* \since 6.8
- * \sa listPermissions(), QWebEnginePermission::Feature
+ * \sa listAllPermissions(), listPermissionsForOrigin(), listPermissionsForPermissionType(), QWebEnginePermission::PermissionType
*/
-QWebEnginePermission QWebEngineProfile::getPermission(const QUrl &securityOrigin, QWebEnginePermission::Feature feature) const
+QWebEnginePermission QWebEngineProfile::queryPermission(const QUrl &securityOrigin, QWebEnginePermission::PermissionType permissionType) const
{
Q_D(const QWebEngineProfile);
- if (feature == QWebEnginePermission::Unsupported) {
+ if (permissionType == QWebEnginePermission::PermissionType::Unsupported) {
qWarning("Attempting to get unsupported permission. Returned object will be in an invalid state.");
return QWebEnginePermission(new QWebEnginePermissionPrivate());
}
- if (QWebEnginePermission::isTransient(feature)) {
- qWarning() << "Attempting to get permission for feature" << feature << ". Returned object will be in an invalid state.";
+ if (!QWebEnginePermission::isPersistent(permissionType)) {
+ qWarning() << "Attempting to get permission for permission type" << permissionType << ". Returned object will be in an invalid state.";
return QWebEnginePermission(new QWebEnginePermissionPrivate());
}
- auto *pvt = new QWebEnginePermissionPrivate(securityOrigin, feature, nullptr, d->profileAdapter());
+ auto *pvt = new QWebEnginePermissionPrivate(securityOrigin, permissionType, nullptr, d->profileAdapter());
return QWebEnginePermission(pvt);
}
/*!
* Returns a QList of QWebEnginePermission objects, each one representing a single permission currently
* present in the permissions store. The returned list contains all previously granted/denied permissions for this profile,
- * except for those of a transient feature type.
+ * provided they are of a \e persistent type.
*
+ * \note When persistentPermissionPolicy() is set to \c AskEveryTime, this will return an empty list.
* \since 6.8
- * \sa getPermission(), QWebEnginePermission::Feature
+ * \sa queryPermission(), QWebEnginePermission::PermissionType, QWebEnginePermission::isPersistent()
*/
-QList<QWebEnginePermission> QWebEngineProfile::listPermissions() const
+QList<QWebEnginePermission> QWebEngineProfile::listAllPermissions() const
{
Q_D(const QWebEngineProfile);
- if (persistentPermissionsPolicy() == NoPersistentPermissions)
+ if (persistentPermissionsPolicy() == PersistentPermissionsPolicy::AskEveryTime)
return QList<QWebEnginePermission>();
return d->profileAdapter()->listPermissions();
}
@@ -1024,46 +1025,49 @@ QList<QWebEnginePermission> QWebEngineProfile::listPermissions() const
/*!
* Returns a QList of QWebEnginePermission objects, each one representing a single permission currently
* present in the permissions store. The returned list contains all previously granted/denied permissions associated with a
- * specific \a securityOrigin for this profile, except for those of a transient feature type.
+ * specific \a securityOrigin for this profile, provided they are of a \e persistent type.
*
* \note Since permissions are granted on a per-origin basis, the provided \a securityOrigin will be stripped to its
* origin form, and the returned list will contain all permissions for the origin. Thus, passing https://www.example.com/some/page.html
* is the same as passing just https://www.example.com/.
+ * \note When persistentPermissionPolicy() is set to \c AskEveryTime, this will return an empty list.
* \since 6.8
- * \sa getPermission(), QWebEnginePermission::Feature
+ * \sa queryPermission(), QWebEnginePermission::PermissionType, QWebEnginePermission::isPersistent()
*/
-QList<QWebEnginePermission> QWebEngineProfile::listPermissions(const QUrl &securityOrigin) const
+QList<QWebEnginePermission> QWebEngineProfile::listPermissionsForOrigin(const QUrl &securityOrigin) const
{
Q_D(const QWebEngineProfile);
- if (persistentPermissionsPolicy() == NoPersistentPermissions)
+ if (persistentPermissionsPolicy() == PersistentPermissionsPolicy::AskEveryTime)
return QList<QWebEnginePermission>();
return d->profileAdapter()->listPermissions(securityOrigin);
}
/*!
* Returns a QList of QWebEnginePermission objects, each one representing a single permission currently
- * present in the permissions store. The returned list contains all previously granted/denied permissions of the \a feature
- * type for this profile. If the feature is of a transient or unsupported type, the list will be empty.
+ * present in the permissions store. The returned list contains all previously granted/denied permissions of the provided
+ * \a permissionType. If the \permissionType is non-persistent, the list will be empty.
+ *
+ * \note When persistentPermissionPolicy() is set to \c AskEveryTime, this will return an empty list.
* \since 6.8
- * \sa getPermission(), QWebEnginePermission::Feature
+ * \sa queryPermission(), QWebEnginePermission::PermissionType, QWebEnginePermission::isPersistent()
*/
-QList<QWebEnginePermission> QWebEngineProfile::listPermissions(QWebEnginePermission::Feature feature) const
+QList<QWebEnginePermission> QWebEngineProfile::listPermissionsForPermissionType(QWebEnginePermission::PermissionType permissionType) const
{
Q_D(const QWebEngineProfile);
- if (persistentPermissionsPolicy() == NoPersistentPermissions)
+ if (persistentPermissionsPolicy() == PersistentPermissionsPolicy::AskEveryTime)
return QList<QWebEnginePermission>();
- if (feature == QWebEnginePermission::Unsupported) {
+ if (permissionType == QWebEnginePermission::PermissionType::Unsupported) {
qWarning("Attempting to get permission list for an unsupported type. Returned list will be empty.");
return QList<QWebEnginePermission>();
}
- if (QWebEnginePermission::isTransient(feature)) {
- qWarning() << "Attempting to get permission list for feature" << feature << ". Returned list will be empty.";
+ if (!QWebEnginePermission::isPersistent(permissionType)) {
+ qWarning() << "Attempting to get permission list for permission type" << permissionType << ". Returned list will be empty.";
return QList<QWebEnginePermission>();
}
- return d->profileAdapter()->listPermissions(QUrl(), feature);
+ return d->profileAdapter()->listPermissions(QUrl(), permissionType);
}
/*!
diff --git a/src/core/api/qwebengineprofile.h b/src/core/api/qwebengineprofile.h
index 573f39e7d..c83ffbe33 100644
--- a/src/core/api/qwebengineprofile.h
+++ b/src/core/api/qwebengineprofile.h
@@ -50,10 +50,10 @@ public:
};
Q_ENUM(PersistentCookiesPolicy)
- enum PersistentPermissionsPolicy : quint8 {
- NoPersistentPermissions,
- PersistentPermissionsInMemory,
- PersistentPermissionsOnDisk,
+ enum class PersistentPermissionsPolicy : quint8 {
+ AskEveryTime = 0,
+ StoreInMemory,
+ StoreOnDisk,
};
Q_ENUM(PersistentPermissionsPolicy)
@@ -121,10 +121,10 @@ public:
void requestIconForPageURL(const QUrl &url, int desiredSizeInPixel, std::function<void(const QIcon &, const QUrl &, const QUrl &)> iconAvailableCallback) const;
void requestIconForIconURL(const QUrl &url, int desiredSizeInPixel, std::function<void(const QIcon &, const QUrl &)> iconAvailableCallback) const;
- QWebEnginePermission getPermission(const QUrl &securityOrigin, QWebEnginePermission::Feature feature) const;
- QList<QWebEnginePermission> listPermissions() const;
- QList<QWebEnginePermission> listPermissions(const QUrl &securityOrigin) const;
- QList<QWebEnginePermission> listPermissions(QWebEnginePermission::Feature feature) const;
+ QWebEnginePermission queryPermission(const QUrl &securityOrigin, QWebEnginePermission::PermissionType permissionType) const;
+ QList<QWebEnginePermission> listAllPermissions() const;
+ QList<QWebEnginePermission> listPermissionsForOrigin(const QUrl &securityOrigin) const;
+ QList<QWebEnginePermission> listPermissionsForPermissionType(QWebEnginePermission::PermissionType permissionType) const;
static QWebEngineProfile *defaultProfile();
diff --git a/src/core/doc/src/qtwebengine-features.qdoc b/src/core/doc/src/qtwebengine-features.qdoc
index 9465d75a2..c7221677c 100644
--- a/src/core/doc/src/qtwebengine-features.qdoc
+++ b/src/core/doc/src/qtwebengine-features.qdoc
@@ -358,9 +358,9 @@
\QWE supports JavaScript Geolocation API with \l {Qt Positioning} as a
backend. HTML5 geolocation is disabled by default. To explicitly allow it, the application
- needs to listen to QWebEnginePage::featurePermissionRequested. Use QWebEnginePage::Geolocation
- with a QWebEnginePage::setFeaturePermission() call or \l{WebEngineView::Feature}
- with a \l{WebEngineView::grantFeaturePermission} {WebEngineView.grantFeaturePermission}() call
+ needs to listen to QWebEnginePage::permissionRequested. When a permission request
+ with a type of QWebEnginePermission::PermissionType::Geolocation is received,
+ you can call QWebEnginePermission::grant() on the received object
to grant the required permission.
If \QWE was built with Qt Positioning support then this feature can be
diff --git a/src/core/permission_manager_qt.cpp b/src/core/permission_manager_qt.cpp
index 1f826e712..b9a327d51 100644
--- a/src/core/permission_manager_qt.cpp
+++ b/src/core/permission_manager_qt.cpp
@@ -28,30 +28,30 @@
namespace QtWebEngineCore {
-static QWebEnginePermission::Feature toQt(blink::PermissionType type)
+static QWebEnginePermission::PermissionType toQt(blink::PermissionType type)
{
switch (type) {
case blink::PermissionType::GEOLOCATION:
- return QWebEnginePermission::Geolocation;
+ return QWebEnginePermission::PermissionType::Geolocation;
case blink::PermissionType::AUDIO_CAPTURE:
- return QWebEnginePermission::MediaAudioCapture;
+ return QWebEnginePermission::PermissionType::MediaAudioCapture;
case blink::PermissionType::VIDEO_CAPTURE:
- return QWebEnginePermission::MediaVideoCapture;
+ return QWebEnginePermission::PermissionType::MediaVideoCapture;
case blink::PermissionType::DISPLAY_CAPTURE:
- return QWebEnginePermission::DesktopAudioVideoCapture;
+ return QWebEnginePermission::PermissionType::DesktopAudioVideoCapture;
// We treat these both as read/write since we do not currently have a
- // ClipboardSanitizedWrite feature.
+ // ClipboardSanitizedWrite permission type.
case blink::PermissionType::CLIPBOARD_READ_WRITE:
case blink::PermissionType::CLIPBOARD_SANITIZED_WRITE:
- return QWebEnginePermission::ClipboardReadWrite;
+ return QWebEnginePermission::PermissionType::ClipboardReadWrite;
case blink::PermissionType::NOTIFICATIONS:
- return QWebEnginePermission::Notifications;
+ return QWebEnginePermission::PermissionType::Notifications;
case blink::PermissionType::LOCAL_FONTS:
- return QWebEnginePermission::LocalFontsAccess;
+ return QWebEnginePermission::PermissionType::LocalFontsAccess;
case blink::PermissionType::ACCESSIBILITY_EVENTS:
case blink::PermissionType::CAMERA_PAN_TILT_ZOOM:
case blink::PermissionType::WINDOW_MANAGEMENT:
- return QWebEnginePermission::Unsupported;
+ return QWebEnginePermission::PermissionType::Unsupported;
case blink::PermissionType::MIDI_SYSEX:
case blink::PermissionType::PROTECTED_MEDIA_IDENTIFIER:
case blink::PermissionType::MIDI:
@@ -76,31 +76,31 @@ static QWebEnginePermission::Feature toQt(blink::PermissionType type)
LOG(INFO) << "Unexpected unsupported Blink permission type: " << static_cast<int>(type);
break;
}
- return QWebEnginePermission::Unsupported;
+ return QWebEnginePermission::PermissionType::Unsupported;
}
-static blink::PermissionType toBlink(QWebEnginePermission::Feature feature)
+static blink::PermissionType toBlink(QWebEnginePermission::PermissionType permissionType)
{
- switch (feature) {
- case QWebEnginePermission::Notifications:
+ switch (permissionType) {
+ case QWebEnginePermission::PermissionType::Notifications:
return blink::PermissionType::NOTIFICATIONS;
- case QWebEnginePermission::Geolocation:
+ case QWebEnginePermission::PermissionType::Geolocation:
return blink::PermissionType::GEOLOCATION;
- case QWebEnginePermission::MediaAudioCapture:
+ case QWebEnginePermission::PermissionType::MediaAudioCapture:
return blink::PermissionType::AUDIO_CAPTURE;
- case QWebEnginePermission::MediaVideoCapture:
+ case QWebEnginePermission::PermissionType::MediaVideoCapture:
return blink::PermissionType::VIDEO_CAPTURE;
- case QWebEnginePermission::DesktopVideoCapture:
- case QWebEnginePermission::DesktopAudioVideoCapture:
+ case QWebEnginePermission::PermissionType::DesktopVideoCapture:
+ case QWebEnginePermission::PermissionType::DesktopAudioVideoCapture:
return blink::PermissionType::DISPLAY_CAPTURE;
- case QWebEnginePermission::ClipboardReadWrite:
+ case QWebEnginePermission::PermissionType::ClipboardReadWrite:
return blink::PermissionType::CLIPBOARD_READ_WRITE;
- case QWebEnginePermission::LocalFontsAccess:
+ case QWebEnginePermission::PermissionType::LocalFontsAccess:
return blink::PermissionType::LOCAL_FONTS;
- case QWebEnginePermission::MediaAudioVideoCapture:
- case QWebEnginePermission::MouseLock:
- case QWebEnginePermission::Unsupported:
- LOG(INFO) << "Unexpected unsupported WebEngine permission type: " << static_cast<int>(feature);
+ case QWebEnginePermission::PermissionType::MediaAudioVideoCapture:
+ case QWebEnginePermission::PermissionType::MouseLock:
+ case QWebEnginePermission::PermissionType::Unsupported:
+ LOG(INFO) << "Unexpected unsupported WebEngine permission type: " << static_cast<int>(permissionType);
return blink::PermissionType::NUM;
}
@@ -111,46 +111,46 @@ static QWebEnginePermission::State toQt(blink::mojom::PermissionStatus state)
{
switch (state) {
case blink::mojom::PermissionStatus::ASK:
- return QWebEnginePermission::Ask;
+ return QWebEnginePermission::State::Ask;
case blink::mojom::PermissionStatus::GRANTED:
- return QWebEnginePermission::Granted;
+ return QWebEnginePermission::State::Granted;
case blink::mojom::PermissionStatus::DENIED:
- return QWebEnginePermission::Denied;
+ return QWebEnginePermission::State::Denied;
}
}
static blink::mojom::PermissionStatus toBlink(QWebEnginePermission::State state)
{
switch (state) {
- case QWebEnginePermission::Invalid:
- case QWebEnginePermission::Ask:
+ case QWebEnginePermission::State::Invalid:
+ case QWebEnginePermission::State::Ask:
return blink::mojom::PermissionStatus::ASK;
- case QWebEnginePermission::Granted:
+ case QWebEnginePermission::State::Granted:
return blink::mojom::PermissionStatus::GRANTED;
- case QWebEnginePermission::Denied:
+ case QWebEnginePermission::State::Denied:
return blink::mojom::PermissionStatus::DENIED;
}
}
-std::string featureString(QWebEnginePermission::Feature feature)
+std::string permissionTypeString(QWebEnginePermission::PermissionType permissionType)
{
- // This is separate from blink::featureString() for the sake of future-proofing;
+ // This is separate from blink::permissionTypeString() for the sake of future-proofing;
// e.g. in case we add extra Features that do not correspond to a PermissionType, and
// we need to store them.
- switch (feature) {
- case QWebEnginePermission::Notifications:
+ switch (permissionType) {
+ case QWebEnginePermission::PermissionType::Notifications:
return "Notifications";
- case QWebEnginePermission::Geolocation:
+ case QWebEnginePermission::PermissionType::Geolocation:
return "Geolocation";
- case QWebEnginePermission::ClipboardReadWrite:
+ case QWebEnginePermission::PermissionType::ClipboardReadWrite:
return "ClipboardReadWrite";
- case QWebEnginePermission::LocalFontsAccess:
+ case QWebEnginePermission::PermissionType::LocalFontsAccess:
return "LocalFontsAccess";
- case QWebEnginePermission::MediaAudioCapture:
+ case QWebEnginePermission::PermissionType::MediaAudioCapture:
return "MediaAudioCapture";
- case QWebEnginePermission::MediaVideoCapture:
+ case QWebEnginePermission::PermissionType::MediaVideoCapture:
return "MediaVideoCapture";
- case QWebEnginePermission::DesktopAudioVideoCapture:
+ case QWebEnginePermission::PermissionType::DesktopAudioVideoCapture:
return "DesktopAudioVideoCapture";
default:
Q_UNREACHABLE();
@@ -186,7 +186,7 @@ PermissionManagerQt::PermissionManagerQt(ProfileAdapter *profileAdapter)
auto prefRegistry = base::MakeRefCounted<PrefRegistrySimple>();
auto policy = profileAdapter->persistentPermissionsPolicy();
- if (!profileAdapter->isOffTheRecord() && policy == ProfileAdapter::PersistentPermissionsOnDisk &&
+ if (!profileAdapter->isOffTheRecord() && policy == ProfileAdapter::PersistentPermissionsPolicy::StoreOnDisk &&
!userPrefStorePath.isEmpty() && profileAdapter->ensureDataPathExists()) {
userPrefStorePath += QDir::separator();
userPrefStorePath += QStringLiteral("permissions.json");
@@ -195,22 +195,22 @@ PermissionManagerQt::PermissionManagerQt(ProfileAdapter *profileAdapter)
factory.set_user_prefs(new InMemoryPrefStore);
}
- m_featureTypes.push_back(QWebEnginePermission::Notifications);
- m_featureTypes.push_back(QWebEnginePermission::Geolocation);
- m_featureTypes.push_back(QWebEnginePermission::ClipboardReadWrite);
- m_featureTypes.push_back(QWebEnginePermission::LocalFontsAccess);
+ m_permissionTypes.push_back(QWebEnginePermission::PermissionType::Notifications);
+ m_permissionTypes.push_back(QWebEnginePermission::PermissionType::Geolocation);
+ m_permissionTypes.push_back(QWebEnginePermission::PermissionType::ClipboardReadWrite);
+ m_permissionTypes.push_back(QWebEnginePermission::PermissionType::LocalFontsAccess);
// Transient, but the implementation relies on them being written to storage
- m_featureTypes.push_back(QWebEnginePermission::MediaAudioCapture);
- m_featureTypes.push_back(QWebEnginePermission::MediaVideoCapture);
+ m_permissionTypes.push_back(QWebEnginePermission::PermissionType::MediaAudioCapture);
+ m_permissionTypes.push_back(QWebEnginePermission::PermissionType::MediaVideoCapture);
// Register all preference types as keys prior to doing anything else
- for (auto &type : m_featureTypes) {
- prefRegistry->RegisterDictionaryPref(featureString(type));
+ for (auto &type : m_permissionTypes) {
+ prefRegistry->RegisterDictionaryPref(permissionTypeString(type));
}
PrefProxyConfigTrackerImpl::RegisterPrefs(prefRegistry.get());
- if (policy == ProfileAdapter::NoPersistentPermissions)
+ if (policy == ProfileAdapter::PersistentPermissionsPolicy::AskEveryTime)
m_persistence = false;
{
@@ -224,22 +224,22 @@ PermissionManagerQt::~PermissionManagerQt()
commit();
}
-void PermissionManagerQt::setPermission(const QUrl &url, QWebEnginePermission::Feature feature, QWebEnginePermission::State state)
+void PermissionManagerQt::setPermission(const QUrl &url, QWebEnginePermission::PermissionType permissionType, QWebEnginePermission::State state)
{
// 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;
- if (state == QWebEnginePermission::Ask)
- ResetPermission(toBlink(feature), gorigin, gorigin);
+ if (state == QWebEnginePermission::State::Ask)
+ ResetPermission(toBlink(permissionType), gorigin, gorigin);
else
- setPermission(toBlink(feature), gorigin, state == QWebEnginePermission::Granted);
+ setPermission(toBlink(permissionType), gorigin, state == QWebEnginePermission::State::Granted);
blink::mojom::PermissionStatus status = toBlink(state);
- if (state != QWebEnginePermission::Ask) {
+ if (state != QWebEnginePermission::State::Ask) {
auto it = m_requests.begin();
while (it != m_requests.end()) {
- if (it->origin == origin && it->type == feature) {
+ if (it->origin == origin && it->type == permissionType) {
std::move(it->callback).Run(status);
it = m_requests.erase(it);
} else
@@ -247,12 +247,12 @@ void PermissionManagerQt::setPermission(const QUrl &url, QWebEnginePermission::F
}
}
- for (const auto &it: m_subscribers) {
- if (it.second.origin == origin && it.second.type == feature)
+ for (const auto &it : m_subscribers) {
+ if (it.second.origin == origin && it.second.type == permissionType)
it.second.callback.Run(status);
}
- if (state == QWebEnginePermission::Ask)
+ if (state == QWebEnginePermission::State::Ask)
return;
auto it = m_multiRequests.begin();
@@ -262,7 +262,7 @@ void PermissionManagerQt::setPermission(const QUrl &url, QWebEnginePermission::F
std::vector<blink::mojom::PermissionStatus> result;
result.reserve(it->types.size());
for (blink::PermissionType permission : it->types) {
- if (toQt(permission) == QWebEnginePermission::Unsupported) {
+ if (toQt(permission) == QWebEnginePermission::PermissionType::Unsupported) {
result.push_back(blink::mojom::PermissionStatus::DENIED);
continue;
}
@@ -276,7 +276,7 @@ void PermissionManagerQt::setPermission(const QUrl &url, QWebEnginePermission::F
result.push_back(permissionStatus);
} else {
- // Reached when the PersistentPermissionsPolicy is set to NoPersistentPermissions
+ // Reached when the PersistentPermissionsPolicy is set to AskEveryTime
result.push_back(toBlink(state));
}
}
@@ -290,14 +290,14 @@ void PermissionManagerQt::setPermission(const QUrl &url, QWebEnginePermission::F
}
}
-QWebEnginePermission::State PermissionManagerQt::getPermissionState(const QUrl &origin, QWebEnginePermission::Feature feature)
+QWebEnginePermission::State PermissionManagerQt::getPermissionState(const QUrl &origin, QWebEnginePermission::PermissionType permissionType)
{
- return toQt(GetPermissionStatus(toBlink(feature), toGurl(origin), GURL()));
+ return toQt(GetPermissionStatus(toBlink(permissionType), toGurl(origin), GURL()));
}
-QList<QWebEnginePermission> PermissionManagerQt::listPermissions(const QUrl &origin, QWebEnginePermission::Feature feature)
+QList<QWebEnginePermission> PermissionManagerQt::listPermissions(const QUrl &origin, QWebEnginePermission::PermissionType permissionType)
{
- Q_ASSERT(origin.isEmpty() || feature == QWebEnginePermission::Unsupported);
+ Q_ASSERT(origin.isEmpty() || permissionType == QWebEnginePermission::PermissionType::Unsupported);
QList<QWebEnginePermission> returnList;
GURL gorigin = toGurl(origin).DeprecatedGetOriginAsURL();
std::string originSpec = gorigin.spec();
@@ -305,19 +305,19 @@ QList<QWebEnginePermission> PermissionManagerQt::listPermissions(const QUrl &ori
if (!origin.isEmpty() && !gorigin.is_valid())
return returnList;
- std::vector<QWebEnginePermission::Feature> types;
- if (feature == QWebEnginePermission::Unsupported)
- types = m_featureTypes;
+ std::vector<QWebEnginePermission::PermissionType> types;
+ if (permissionType == QWebEnginePermission::PermissionType::Unsupported)
+ types = m_permissionTypes;
else
- types.push_back(feature);
+ types.push_back(permissionType);
for (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::isTransient(type))
+ if (!QWebEnginePermission::isPersistent(type))
continue;
- auto *pref = m_prefService->FindPreference(featureString(type));
+ auto *pref = m_prefService->FindPreference(permissionTypeString(type));
if (!pref)
continue;
@@ -360,8 +360,8 @@ void PermissionManagerQt::RequestPermissions(content::RenderFrameHost *frameHost
std::vector<content::PermissionStatus> result;
result.reserve(requestDescription.permissions.size());
for (blink::PermissionType permission : requestDescription.permissions) {
- const QWebEnginePermission::Feature feature = toQt(permission);
- if (feature == QWebEnginePermission::Unsupported) {
+ const QWebEnginePermission::PermissionType permissionType = toQt(permission);
+ if (permissionType == QWebEnginePermission::PermissionType::Unsupported) {
result.push_back(blink::mojom::PermissionStatus::DENIED);
continue;
}
@@ -391,9 +391,9 @@ void PermissionManagerQt::RequestPermissions(content::RenderFrameHost *frameHost
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::Feature feature = toQt(permission);
- if (!QWebEnginePermission::isTransient(feature))
- contentsDelegate->requestFeaturePermission(feature, requestOrigin);
+ const QWebEnginePermission::PermissionType permissionType = toQt(permission);
+ if (QWebEnginePermission::isPersistent(permissionType))
+ contentsDelegate->requestFeaturePermission(permissionType, requestOrigin);
}
}
@@ -409,12 +409,12 @@ blink::mojom::PermissionStatus PermissionManagerQt::GetPermissionStatus(
const GURL& requesting_origin,
const GURL& /*embedding_origin*/)
{
- const QWebEnginePermission::Feature feature = toQt(permission);
- if (feature == QWebEnginePermission::Unsupported)
+ const QWebEnginePermission::PermissionType permissionType = toQt(permission);
+ if (permissionType == 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(featureString(toQt(permission)));
+ auto *pref = m_prefService->FindPreference(permissionTypeString(toQt(permission)));
if (!pref)
return blink::mojom::PermissionStatus::ASK; // Permission type not in database
@@ -429,7 +429,7 @@ blink::mojom::PermissionStatus PermissionManagerQt::GetPermissionStatus(
// 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_profileAdapter->persistentPermissionsPolicy() == ProfileAdapter::NoPersistentPermissions)
+ && m_profileAdapter->persistentPermissionsPolicy() == ProfileAdapter::PersistentPermissionsPolicy::AskEveryTime)
return blink::mojom::PermissionStatus::ASK;
if (requestedPermission.value())
@@ -490,11 +490,11 @@ void PermissionManagerQt::ResetPermission(
const GURL& requesting_origin,
const GURL& /*embedding_origin*/)
{
- const QWebEnginePermission::Feature feature = toQt(permission);
- if (feature == QWebEnginePermission::Unsupported)
+ const QWebEnginePermission::PermissionType permissionType = toQt(permission);
+ if (permissionType == QWebEnginePermission::PermissionType::Unsupported)
return;
- ScopedDictPrefUpdate updater(m_prefService.get(), featureString(feature));
+ ScopedDictPrefUpdate updater(m_prefService.get(), permissionTypeString(permissionType));
updater.Get().Remove(requesting_origin.spec());
}
@@ -522,14 +522,14 @@ void PermissionManagerQt::setPermission(
const GURL& requesting_origin,
bool granted)
{
- const QWebEnginePermission::Feature feature = toQt(permission);
- if (feature == QWebEnginePermission::Unsupported)
+ const QWebEnginePermission::PermissionType permissionType = toQt(permission);
+ if (permissionType == QWebEnginePermission::PermissionType::Unsupported)
return;
- if (!m_prefService->FindPreference(featureString(feature)))
+ if (!m_prefService->FindPreference(permissionTypeString(permissionType)))
return;
- ScopedDictPrefUpdate updater(m_prefService.get(), featureString(feature));
+ ScopedDictPrefUpdate updater(m_prefService.get(), permissionTypeString(permissionType));
updater.Get().Set(requesting_origin.spec(), granted);
}
diff --git a/src/core/permission_manager_qt.h b/src/core/permission_manager_qt.h
index 6a4df2efa..ea69243b5 100644
--- a/src/core/permission_manager_qt.h
+++ b/src/core/permission_manager_qt.h
@@ -22,9 +22,9 @@ public:
PermissionManagerQt(ProfileAdapter *adapter);
~PermissionManagerQt();
- void setPermission(const QUrl &origin, QWebEnginePermission::Feature feature, QWebEnginePermission::State state);
- QWebEnginePermission::State getPermissionState(const QUrl &origin, QWebEnginePermission::Feature feature);
- QList<QWebEnginePermission> listPermissions(const QUrl &origin, QWebEnginePermission::Feature feature);
+ void setPermission(const QUrl &origin, QWebEnginePermission::PermissionType permissionType, QWebEnginePermission::State state);
+ QWebEnginePermission::State getPermissionState(const QUrl &origin, QWebEnginePermission::PermissionType permissionType);
+ QList<QWebEnginePermission> listPermissions(const QUrl &origin, QWebEnginePermission::PermissionType permissionType);
void commit();
@@ -68,7 +68,7 @@ public:
private:
struct Request {
int id;
- QWebEnginePermission::Feature type;
+ QWebEnginePermission::PermissionType type;
QUrl origin;
base::OnceCallback<void(blink::mojom::PermissionStatus)> callback;
};
@@ -79,7 +79,7 @@ private:
base::OnceCallback<void(const std::vector<blink::mojom::PermissionStatus>&)> callback;
};
struct Subscription {
- QWebEnginePermission::Feature type;
+ QWebEnginePermission::PermissionType type;
QUrl origin;
base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback;
};
@@ -90,7 +90,7 @@ private:
std::vector<Request> m_requests;
std::vector<MultiRequest> m_multiRequests;
- std::vector<QWebEnginePermission::Feature> m_featureTypes;
+ std::vector<QWebEnginePermission::PermissionType> m_permissionTypes;
std::map<content::PermissionControllerDelegate::SubscriptionId, Subscription> m_subscribers;
content::PermissionControllerDelegate::SubscriptionId::Generator subscription_id_generator_;
int m_requestIdCount;
diff --git a/src/core/profile_adapter.cpp b/src/core/profile_adapter.cpp
index 1f0062953..031ee6dec 100644
--- a/src/core/profile_adapter.cpp
+++ b/src/core/profile_adapter.cpp
@@ -63,7 +63,7 @@ ProfileAdapter::ProfileAdapter(const QString &storageName):
, m_downloadPath(QStandardPaths::writableLocation(QStandardPaths::DownloadLocation))
, m_httpCacheType(DiskHttpCache)
, m_persistentCookiesPolicy(AllowPersistentCookies)
- , m_persistentPermissionsPolicy(PersistentPermissionsOnDisk)
+ , m_persistentPermissionsPolicy(PersistentPermissionsPolicy::StoreOnDisk)
, m_visitedLinksPolicy(TrackVisitedLinksOnDisk)
, m_clientHintsEnabled(true)
, m_pushServiceEnabled(false)
@@ -265,6 +265,7 @@ void ProfileAdapter::setDataPath(const QString &path)
return;
m_dataPath = path;
m_profile->setupPrefService();
+ m_profile->setupPermissionsManager();
if (!m_profile->m_profileIOData->isClearHttpCacheInProgress())
m_profile->m_profileIOData->resetNetworkContext();
if (!m_offTheRecord && m_visitedLinksManager)
@@ -377,10 +378,10 @@ void ProfileAdapter::setPersistentCookiesPolicy(ProfileAdapter::PersistentCookie
ProfileAdapter::PersistentPermissionsPolicy ProfileAdapter::persistentPermissionsPolicy() const
{
- if (m_persistentPermissionsPolicy == NoPersistentPermissions)
- return NoPersistentPermissions;
+ if (m_persistentPermissionsPolicy == PersistentPermissionsPolicy::AskEveryTime)
+ return PersistentPermissionsPolicy::AskEveryTime;
if (isOffTheRecord() || m_name.isEmpty())
- return PersistentPermissionsInMemory;
+ return PersistentPermissionsPolicy::StoreInMemory;
return m_persistentPermissionsPolicy;
}
@@ -567,25 +568,25 @@ UserResourceControllerHost *ProfileAdapter::userResourceController()
return m_userResourceController.data();
}
-void ProfileAdapter::setPermission(const QUrl &origin, QWebEnginePermission::Feature feature, QWebEnginePermission::State state)
+void ProfileAdapter::setPermission(const QUrl &origin, QWebEnginePermission::PermissionType permissionType, QWebEnginePermission::State state)
{
- static_cast<PermissionManagerQt*>(profile()->GetPermissionControllerDelegate())->setPermission(origin, feature, state);
+ static_cast<PermissionManagerQt*>(profile()->GetPermissionControllerDelegate())->setPermission(origin, permissionType, state);
}
-QWebEnginePermission::State ProfileAdapter::getPermissionState(const QUrl &origin, QWebEnginePermission::Feature feature)
+QWebEnginePermission::State ProfileAdapter::getPermissionState(const QUrl &origin, QWebEnginePermission::PermissionType permissionType)
{
- if (persistentPermissionsPolicy() == ProfileAdapter::NoPersistentPermissions)
- return QWebEnginePermission::Ask;
+ if (persistentPermissionsPolicy() == ProfileAdapter::PersistentPermissionsPolicy::AskEveryTime)
+ return QWebEnginePermission::State::Ask;
- return static_cast<PermissionManagerQt*>(profile()->GetPermissionControllerDelegate())->getPermissionState(origin, feature);
+ return static_cast<PermissionManagerQt*>(profile()->GetPermissionControllerDelegate())->getPermissionState(origin, permissionType);
}
-QList<QWebEnginePermission> ProfileAdapter::listPermissions(const QUrl &origin, QWebEnginePermission::Feature feature)
+QList<QWebEnginePermission> ProfileAdapter::listPermissions(const QUrl &origin, QWebEnginePermission::PermissionType permissionType)
{
- if (persistentPermissionsPolicy() == ProfileAdapter::NoPersistentPermissions)
+ if (persistentPermissionsPolicy() == ProfileAdapter::PersistentPermissionsPolicy::AskEveryTime)
return QList<QWebEnginePermission>();
- return static_cast<PermissionManagerQt*>(profile()->GetPermissionControllerDelegate())->listPermissions(origin, feature);
+ return static_cast<PermissionManagerQt*>(profile()->GetPermissionControllerDelegate())->listPermissions(origin, permissionType);
}
QString ProfileAdapter::httpAcceptLanguageWithoutQualities() const
diff --git a/src/core/profile_adapter.h b/src/core/profile_adapter.h
index 6550e6176..d0194df99 100644
--- a/src/core/profile_adapter.h
+++ b/src/core/profile_adapter.h
@@ -128,10 +128,10 @@ public:
TrackVisitedLinksOnDisk,
};
- enum PersistentPermissionsPolicy {
- NoPersistentPermissions = 0,
- PersistentPermissionsInMemory,
- PersistentPermissionsOnDisk,
+ enum class PersistentPermissionsPolicy : quint8 {
+ AskEveryTime = 0,
+ StoreInMemory,
+ StoreOnDisk,
};
enum ClientHint : uchar {
@@ -172,9 +172,10 @@ public:
const QList<QByteArray> customUrlSchemes() const;
UserResourceControllerHost *userResourceController();
- void setPermission(const QUrl &origin, QWebEnginePermission::Feature feature, QWebEnginePermission::State state);
- QWebEnginePermission::State getPermissionState(const QUrl &origin, QWebEnginePermission::Feature feature);
- QList<QWebEnginePermission> listPermissions(const QUrl &origin = QUrl(), QWebEnginePermission::Feature feature = QWebEnginePermission::Unsupported);
+ void setPermission(const QUrl &origin, QWebEnginePermission::PermissionType permissionType, QWebEnginePermission::State state);
+ QWebEnginePermission::State getPermissionState(const QUrl &origin, QWebEnginePermission::PermissionType permissionType);
+ QList<QWebEnginePermission> listPermissions(const QUrl &origin = QUrl(),
+ QWebEnginePermission::PermissionType permissionType = QWebEnginePermission::PermissionType::Unsupported);
QString httpAcceptLanguageWithoutQualities() const;
QString httpAcceptLanguage() const;
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
index ed169b161..a40f641c1 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -1411,26 +1411,27 @@ QSizeF WebContentsAdapter::lastContentsSize() const
return QSizeF();
}
-void WebContentsAdapter::setFeaturePermission(const QUrl &origin, QWebEnginePermission::Feature feature, QWebEnginePermission::State state)
+void WebContentsAdapter::setPermission(const QUrl &origin, QWebEnginePermission::PermissionType permissionType, QWebEnginePermission::State state)
{
- if (!QWebEnginePermission::isTransient(feature)) {
+ if (QWebEnginePermission::isPersistent(permissionType)) {
// Do not check for initialization in this path so permissions can be set before first navigation
Q_ASSERT(m_profileAdapter);
- m_profileAdapter->setPermission(origin, feature, state);
+ m_profileAdapter->setPermission(origin, permissionType, state);
return;
}
CHECK_INITIALIZED();
- if (feature == QWebEnginePermission::MouseLock) {
+
+ if (permissionType == QWebEnginePermission::PermissionType::MouseLock) {
switch (state) {
- case QWebEnginePermission::Invalid:
- case QWebEnginePermission::Ask:
+ case QWebEnginePermission::State::Invalid:
+ case QWebEnginePermission::State::Ask:
// Do nothing
break;
- case QWebEnginePermission::Denied:
+ case QWebEnginePermission::State::Denied:
grantMouseLockPermission(origin, false);
break;
- case QWebEnginePermission::Granted:
+ case QWebEnginePermission::State::Granted:
grantMouseLockPermission(origin, true);
break;
}
@@ -1446,33 +1447,33 @@ void WebContentsAdapter::setFeaturePermission(const QUrl &origin, QWebEnginePerm
WebContentsAdapterClient::MediaDesktopAudioCapture);
switch (state) {
- case QWebEnginePermission::Invalid:
- case QWebEnginePermission::Ask:
+ case QWebEnginePermission::State::Invalid:
+ case QWebEnginePermission::State::Ask:
// Do nothing
return;
- case QWebEnginePermission::Denied:
+ case QWebEnginePermission::State::Denied:
// Deny all media access
grantMediaAccessPermission(origin, WebContentsAdapterClient::MediaNone);
return;
- case QWebEnginePermission::Granted:
+ case QWebEnginePermission::State::Granted:
// Enable only the requested capture type
break;
}
- switch (feature) {
- case QWebEnginePermission::MediaAudioVideoCapture:
+ switch (permissionType) {
+ case QWebEnginePermission::PermissionType::MediaAudioVideoCapture:
grantMediaAccessPermission(origin, audioVideoCaptureFlags);
break;
- case QWebEnginePermission::MediaAudioCapture:
+ case QWebEnginePermission::PermissionType::MediaAudioCapture:
grantMediaAccessPermission(origin, WebContentsAdapterClient::MediaAudioCapture);
break;
- case QWebEnginePermission::MediaVideoCapture:
+ case QWebEnginePermission::PermissionType::MediaVideoCapture:
grantMediaAccessPermission(origin, WebContentsAdapterClient::MediaVideoCapture);
break;
- case QWebEnginePermission::DesktopAudioVideoCapture:
+ case QWebEnginePermission::PermissionType::DesktopAudioVideoCapture:
grantMediaAccessPermission(origin, desktopAudioVideoCaptureFlags);
break;
- case QWebEnginePermission::DesktopVideoCapture:
+ case QWebEnginePermission::PermissionType::DesktopVideoCapture:
grantMediaAccessPermission(origin, WebContentsAdapterClient::MediaDesktopVideoCapture);
break;
default:
@@ -1481,13 +1482,13 @@ void WebContentsAdapter::setFeaturePermission(const QUrl &origin, QWebEnginePerm
}
}
-QWebEnginePermission::State WebContentsAdapter::getPermissionState(const QUrl &origin, QWebEnginePermission::Feature feature)
+QWebEnginePermission::State WebContentsAdapter::getPermissionState(const QUrl &origin, QWebEnginePermission::PermissionType permissionType)
{
- // For now, we just return Ask for transient Features
- if (QWebEnginePermission::isTransient(feature))
- return QWebEnginePermission::Ask;
+ // For now, we just return Ask for transient (a.k.a non-persistent) PermissionTypes
+ if (!QWebEnginePermission::isPersistent(permissionType))
+ return QWebEnginePermission::State::Ask;
- return m_profileAdapter->getPermissionState(origin, feature);
+ return m_profileAdapter->getPermissionState(origin, permissionType);
}
void WebContentsAdapter::grantMediaAccessPermission(const QUrl &origin, WebContentsAdapterClient::MediaRequestFlags flags)
@@ -1495,9 +1496,9 @@ void WebContentsAdapter::grantMediaAccessPermission(const QUrl &origin, WebConte
CHECK_INITIALIZED();
// Let the permission manager remember the reply.
if (flags & WebContentsAdapterClient::MediaAudioCapture)
- m_profileAdapter->setPermission(origin, QWebEnginePermission::MediaAudioCapture, QWebEnginePermission::Granted);
+ m_profileAdapter->setPermission(origin, QWebEnginePermission::PermissionType::MediaAudioCapture, QWebEnginePermission::State::Granted);
if (flags & WebContentsAdapterClient::MediaVideoCapture)
- m_profileAdapter->setPermission(origin, QWebEnginePermission::MediaVideoCapture, QWebEnginePermission::Granted);
+ m_profileAdapter->setPermission(origin, QWebEnginePermission::PermissionType::MediaVideoCapture, QWebEnginePermission::State::Granted);
MediaCaptureDevicesDispatcher::GetInstance()->handleMediaAccessPermissionResponse(m_webContents.get(), origin, flags);
}
diff --git a/src/core/web_contents_adapter.h b/src/core/web_contents_adapter.h
index 66736dd21..41a296072 100644
--- a/src/core/web_contents_adapter.h
+++ b/src/core/web_contents_adapter.h
@@ -179,8 +179,8 @@ public:
void devToolsFrontendDestroyed(DevToolsFrontendQt *frontend);
QString devToolsId();
- void setFeaturePermission(const QUrl &origin, QWebEnginePermission::Feature feature, QWebEnginePermission::State state);
- QWebEnginePermission::State getPermissionState(const QUrl &origin, QWebEnginePermission::Feature feature);
+ 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);
diff --git a/src/core/web_contents_adapter_client.h b/src/core/web_contents_adapter_client.h
index ca162833c..9ce5bebfc 100644
--- a/src/core/web_contents_adapter_client.h
+++ b/src/core/web_contents_adapter_client.h
@@ -195,7 +195,7 @@ 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::Feature, const QUrl &securityOrigin) = 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 runRegisterProtocolHandlerRequest(QWebEngineRegisterProtocolHandlerRequest) = 0;
@@ -229,7 +229,7 @@ public:
virtual WebContentsAdapter* webContentsAdapter() = 0;
virtual void releaseProfile() = 0;
virtual void showWebAuthDialog(QWebEngineWebAuthUxRequest *request) = 0;
- virtual QWebEnginePermission createFeaturePermissionObject(const QUrl &securityOrigin, QWebEnginePermission::Feature feature) = 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 c2cd6981a..2eada9d3c 100644
--- a/src/core/web_contents_delegate_qt.cpp
+++ b/src/core/web_contents_delegate_qt.cpp
@@ -741,9 +741,9 @@ void WebContentsDelegateQt::selectClientCert(const QSharedPointer<ClientCertSele
m_viewClient->selectClientCert(selectController);
}
-void WebContentsDelegateQt::requestFeaturePermission(QWebEnginePermission::Feature feature, const QUrl &requestingOrigin)
+void WebContentsDelegateQt::requestFeaturePermission(QWebEnginePermission::PermissionType permissionType, const QUrl &requestingOrigin)
{
- m_viewClient->runFeaturePermissionRequest(feature, requestingOrigin);
+ m_viewClient->runFeaturePermissionRequest(permissionType, requestingOrigin);
}
extern WebContentsAdapterClient::NavigationType pageTransitionToNavigationType(ui::PageTransition transition);
@@ -800,9 +800,11 @@ bool WebContentsDelegateQt::CheckMediaAccessPermission(content::RenderFrameHost
{
switch (type) {
case blink::mojom::MediaStreamType::DEVICE_AUDIO_CAPTURE:
- return m_viewClient->profileAdapter()->getPermissionState(toQt(security_origin), QWebEnginePermission::MediaAudioCapture);
+ return m_viewClient->profileAdapter()->getPermissionState(toQt(security_origin), QWebEnginePermission::PermissionType::MediaAudioCapture)
+ == QWebEnginePermission::State::Granted;
case blink::mojom::MediaStreamType::DEVICE_VIDEO_CAPTURE:
- return m_viewClient->profileAdapter()->getPermissionState(toQt(security_origin), QWebEnginePermission::MediaVideoCapture);
+ return m_viewClient->profileAdapter()->getPermissionState(toQt(security_origin), QWebEnginePermission::PermissionType::MediaVideoCapture)
+ == QWebEnginePermission::State::Granted;
default:
LOG(INFO) << "WebContentsDelegateQt::CheckMediaAccessPermission: "
<< "Unsupported media stream type checked " << type;
diff --git a/src/core/web_contents_delegate_qt.h b/src/core/web_contents_delegate_qt.h
index 899d46cd0..8188b3dea 100644
--- a/src/core/web_contents_delegate_qt.h
+++ b/src/core/web_contents_delegate_qt.h
@@ -139,7 +139,7 @@ public:
void overrideWebPreferences(content::WebContents *, blink::web_pref::WebPreferences*);
void allowCertificateError(const QSharedPointer<CertificateErrorController> &);
void selectClientCert(const QSharedPointer<ClientCertSelectController> &);
- void requestFeaturePermission(QWebEnginePermission::Feature feature, const QUrl &requestingOrigin);
+ void requestFeaturePermission(QWebEnginePermission::PermissionType permissionType, const QUrl &requestingOrigin);
void launchExternalURL(const QUrl &url, ui::PageTransition page_transition, bool is_main_frame, bool has_user_gesture);
FindTextHelper *findTextHelper();
diff --git a/src/webenginequick/api/qquickwebengineprofile.cpp b/src/webenginequick/api/qquickwebengineprofile.cpp
index 0246eb645..1979d18a0 100644
--- a/src/webenginequick/api/qquickwebengineprofile.cpp
+++ b/src/webenginequick/api/qquickwebengineprofile.cpp
@@ -102,17 +102,17 @@ QT_BEGIN_NAMESPACE
This enum describes the policy for permission persistence:
- \value NoPersistentPermissions
+ \value AskEveryTime
The application will ask for permissions every time they're needed, regardless of
whether they've been granted before or not. This is intended for backwards compatibility
with existing applications, and otherwise not recommended.
- \value PersistentPermissionsInMemory
+ \value StoreInMemory
A request will be made only the first time a permission is needed. Any subsequent
requests will be automatically granted or denied, depending on the initial user choice.
This carries over to all pages that use the same QQuickWebEngineProfile instance, until the
application is shut down. This is the setting applied if \c off-the-record is set
or no persistent data path is available.
- \value PersistentPermissionsOnDisk
+ \value StoreOnDisk
Works the same way as \c PersistentPermissionsInMemory, but the permissions are saved to
and restored from disk. This is the default setting.
*/
@@ -714,17 +714,17 @@ void QQuickWebEngineProfile::setPersistentCookiesPolicy(QQuickWebEngineProfile::
This enumeration describes the policy for permission persistence:
- \value WebEngineProfile.NoPersistentPermissions
+ \value WebEngineProfile.AskEveryTime
The application will ask for permissions every time they're needed, regardless of
whether they've been granted before or not. This is intended for backwards compatibility
with existing applications, and otherwise not recommended.
- \value WebEngineProfile.PersistentPermissionsInMemory
+ \value WebEngineProfile.StoreInMemory
A request will be made only the first time a permission is needed. Any subsequent
requests will be automatically granted or denied, depending on the initial user choice.
This carries over to all pages using the same QWebEngineProfile instance, until the
application is shut down. This is the setting applied if \c off-the-record is set
or no persistent data path is available.
- \value WebEngineProfile.PersistentPermissionsOnDisk
+ \value WebEngineProfile.StoreOnDisk
Works the same way as \c PersistentPermissionsInMemory, but the permissions are saved to
and restored from disk. This is the default setting.
*/
@@ -1130,144 +1130,149 @@ QWebEngineClientHints *QQuickWebEngineProfile::clientHints() const
}
/*!
- \fn QQuickWebEngineProfile::getPermission(const QUrl &securityOrigin, QWebEnginePermission::Feature feature) const
+ \fn QQuickWebEngineProfile::queryPermission(const QUrl &securityOrigin, QWebEnginePermission::PermissionType permissionType) const
Returns a QWebEnginePermission object corresponding to a single permission for the provided \a securityOrigin and
- \a feature. The object may be used to query for the current state of the permission, or to change it. It is not required
+ \a permissionType. The object may be used to query for the current state of the permission, or to change it. It is not required
for a permission to already exist; the returned object may also be used to pre-grant a permission if a website is
known to use it.
- \note This may only be used for permanent feature types. Calling it with a transient \a feature will return an invalid object.
+ \note This may only be used for persistent permission types. Calling it with a non-persistent \a permissionType will return an invalid object.
\since 6.8
- \sa listPermissions(), QWebEnginePermission::Feature
+ \sa listAllPermissions(), listPermissionsForOrigin(), listPermissionsForPermissionType(), QWebEnginePermission::PermissionType
*/
/*!
- \qmlmethod void WebEngineProfile::getPermission(url securityOrigin, WebEnginePermission.Feature feature) const
+ \qmlmethod void WebEngineProfile::queryPermission(url securityOrigin, WebEnginePermission.PermissionType permissionType) const
Returns a webEnginePermission object corresponding to a single permission for the provided \a securityOrigin and
- \a feature. The object may be used to query for the current state of the permission, or to change it. It is not required
+ \a permissionType. The object may be used to query for the current state of the permission, or to change it. It is not required
for a permission to already exist; the returned object may also be used to pre-grant a permission if a website is
known to use it.
- \note This may only be used for permanent feature types. Calling it with a transient \a feature will return an invalid object.
+ \note This may only be used for persistent permission types. Calling it with a non-persistent \a permissionType will return an invalid object.
\since 6.8
- \sa listPermissions()
+ \sa listAllPermissions(), listPermissionsForOrigin(), listPermissionsForPermissionType()
*/
-QWebEnginePermission QQuickWebEngineProfile::getPermission(const QUrl &securityOrigin, QWebEnginePermission::Feature feature) const
+QWebEnginePermission QQuickWebEngineProfile::queryPermission(const QUrl &securityOrigin, QWebEnginePermission::PermissionType permissionType) const
{
Q_D(const QQuickWebEngineProfile);
- if (feature == QWebEnginePermission::Unsupported) {
+ if (permissionType == QWebEnginePermission::PermissionType::Unsupported) {
qWarning("Attempting to get unsupported permission. Returned object will be in an invalid state.");
return QWebEnginePermission(new QWebEnginePermissionPrivate());
}
- if (QWebEnginePermission::isTransient(feature)) {
- qWarning() << "Attempting to get permission for feature" << feature << ". Returned object will be in an invalid state.";
+ if (!QWebEnginePermission::isPersistent(permissionType)) {
+ qWarning() << "Attempting to get permission for permission type" << permissionType << ". Returned object will be in an invalid state.";
return QWebEnginePermission(new QWebEnginePermissionPrivate());
}
- auto *pvt = new QWebEnginePermissionPrivate(securityOrigin, feature, nullptr, d->profileAdapter());
+ auto *pvt = new QWebEnginePermissionPrivate(securityOrigin, permissionType, nullptr, d->profileAdapter());
return QWebEnginePermission(pvt);
}
/*!
- \qmlmethod list<webEnginePermission> WebEngineProfile::listPermissions() const
+ \qmlmethod list<webEnginePermission> WebEngineProfile::listAllPermissions() const
Returns a \l list of webEnginePermission objects, each one representing a single permission currently
present in the permissions store. The returned list contains all previously granted/denied permissions for this profile,
- except for those of a transient feature type.
+ provided they are of a \e persistent type.
+ \note When the persistentPermissionPolicy property is set to \c AskEveryTime, this will return an empty list.
\since 6.8
- \sa getPermission()
+ \sa queryPermission(), listPermissionsForOrigin(), listPermissionsForPermissionType(), webEnginePermission::isPersistent()
*/
/*!
Returns a QList of QWebEnginePermission objects, each one representing a single permission currently
present in the permissions store. The returned list contains all previously granted/denied permissions for this profile,
- except for those of a transient feature type.
+ provided they are of a \e persistent type.
+ \note When persistentPermissionPolicy() is set to \c AskEveryTime, this will return an empty list.
\since 6.8
- \sa getPermission()
+ \sa queryPermission(), listPermissionsForOrigin(), listPermissionsForPermissionType(), QWebEnginePermission::isPersistent()
*/
-QList<QWebEnginePermission> QQuickWebEngineProfile::listPermissions() const
+QList<QWebEnginePermission> QQuickWebEngineProfile::listAllPermissions() const
{
Q_D(const QQuickWebEngineProfile);
- if (persistentPermissionsPolicy() == NoPersistentPermissions)
+ if (persistentPermissionsPolicy() == PersistentPermissionsPolicy::AskEveryTime)
return QList<QWebEnginePermission>();
return d->profileAdapter()->listPermissions();
}
/*!
- \qmlmethod list<webEnginePermission> WebEngineProfile::listPermissions(url securityOrigin) const
+ \qmlmethod list<webEnginePermission> WebEngineProfile::listPermissionsForOrigin(url securityOrigin) const
Returns a \l list of webEnginePermission objects, each one representing a single permission currently
present in the permissions store. The returned list contains all previously granted/denied permissions associated with a
- specific \a securityOrigin for this profile, except for those of a transient feature type.
+ specific \a securityOrigin for this profile, provided they are of a \e persistent type.
\note Since permissions are granted on a per-origin basis, the provided \a securityOrigin will be stripped to its
origin form, and the returned list will contain all permissions for the origin. Thus, passing https://www.example.com/some/page.html
is the same as passing just https://www.example.com/.
+ \note When persistentPermissionPolicy() is set to \c AskEveryTime, this will return an empty list.
\since 6.8
- \sa getPermission()
+ \sa queryPermission(), listAllPermissions(), listPermissionsForPermissionType(), webEnginePermission::isPersistent()
*/
/*!
Returns a QList of QWebEnginePermission objects, each one representing a single permission currently
present in the permissions store. The returned list contains all previously granted/denied permissions associated with a
- specific \a securityOrigin for this profile, except for those of a transient feature type.
+ specific \a securityOrigin for this profile, provided they are of a \e persistent type.
\note Since permissions are granted on a per-origin basis, the provided \a securityOrigin will be stripped to its
origin form, and the returned list will contain all permissions for the origin. Thus, passing https://www.example.com/some/page.html
is the same as passing just https://www.example.com/.
\since 6.8
- \sa getPermission()
+ \sa queryPermission(), listAllPermissions(), listPermissionsForPermissionType(), QWebEnginePermission::isPersistent()
*/
-QList<QWebEnginePermission> QQuickWebEngineProfile::listPermissions(const QUrl &securityOrigin) const
+QList<QWebEnginePermission> QQuickWebEngineProfile::listPermissionsForOrigin(const QUrl &securityOrigin) const
{
Q_D(const QQuickWebEngineProfile);
- if (persistentPermissionsPolicy() == NoPersistentPermissions)
+ if (persistentPermissionsPolicy() == PersistentPermissionsPolicy::AskEveryTime)
return QList<QWebEnginePermission>();
return d->profileAdapter()->listPermissions(securityOrigin);
}
/*!
- \qmlmethod list<webEnginePermission> WebEngineProfile::listPermissions(WebEnginePermission.Feature feature) const
+ \qmlmethod list<webEnginePermission> WebEngineProfile::listPermissionsForPermissionType(WebEnginePermission.PermissionType permissionType) const
Returns a \l list of webEnginePermission objects, each one representing a single permission currently
- present in the permissions store. The returned list contains all previously granted/denied permissions of the \a feature
- type for this profile. If the feature is of a transient or unsupported type, the list will be empty.
+ present in the permissions store. The returned list contains all previously granted/denied permissions of the provided
+ \a permissionType. If the \permissionType is non-persistent, the list will be empty.
+ \note When persistentPermissionPolicy() is set to \c AskEveryTime, this will return an empty list.
\since 6.8
- \sa getPermission()
+ \sa queryPermission(), listAllPermissions(), listPermissionsForOrigin(), webEnginePermission::isPersistent()
*/
/*!
Returns a QList of QWebEnginePermission objects, each one representing a single permission currently
- present in the permissions store. The returned list contains all previously granted/denied permissions of the \a feature
- type for this profile. If the feature is of a transient or unsupported type, the list will be empty.
+ present in the permissions store. The returned list contains all previously granted/denied permissions of the provided
+ \a permissionType. If the \permissionType is non-persistent, the list will be empty.
+ \note When persistentPermissionPolicy() is set to \c AskEveryTime, this will return an empty list.
\since 6.8
- \sa getPermission(), QWebEnginePermission::Feature
+ \sa queryPermission(), listAllPermissions(), listPermissionsForOrigin(), QWebEnginePermission::PermissionType, QWebEnginePermission::isPersistent()
*/
-QList<QWebEnginePermission> QQuickWebEngineProfile::listPermissions(QWebEnginePermission::Feature feature) const
+QList<QWebEnginePermission> QQuickWebEngineProfile::listPermissionsForPermissionType(QWebEnginePermission::PermissionType permissionType) const
{
Q_D(const QQuickWebEngineProfile);
- if (persistentPermissionsPolicy() == NoPersistentPermissions)
+ if (persistentPermissionsPolicy() == PersistentPermissionsPolicy::AskEveryTime)
return QList<QWebEnginePermission>();
- if (feature == QWebEnginePermission::Unsupported) {
+ if (permissionType == QWebEnginePermission::PermissionType::Unsupported) {
qWarning("Attempting to get permission list for an unsupported type. Returned list will be empty.");
return QList<QWebEnginePermission>();
}
- if (QWebEnginePermission::isTransient(feature)) {
- qWarning() << "Attempting to get permission list for feature" << feature << ". Returned list will be empty.";
+ if (!QWebEnginePermission::isPersistent(permissionType)) {
+ qWarning() << "Attempting to get permission list for permission type" << permissionType << ". Returned list will be empty.";
return QList<QWebEnginePermission>();
}
- return d->profileAdapter()->listPermissions(QUrl(), feature);
+ return d->profileAdapter()->listPermissions(QUrl(), permissionType);
}
void QQuickWebEngineProfile::ensureQmlContext(const QObject *object)
diff --git a/src/webenginequick/api/qquickwebengineprofile.h b/src/webenginequick/api/qquickwebengineprofile.h
index f5b7ce8e7..27ce9d9fc 100644
--- a/src/webenginequick/api/qquickwebengineprofile.h
+++ b/src/webenginequick/api/qquickwebengineprofile.h
@@ -64,10 +64,10 @@ public:
};
Q_ENUM(PersistentCookiesPolicy)
- enum PersistentPermissionsPolicy : quint8 {
- NoPersistentPermissions,
- PersistentPermissionsInMemory,
- PersistentPermissionsOnDisk,
+ enum class PersistentPermissionsPolicy : quint8 {
+ AskEveryTime = 0,
+ StoreInMemory,
+ StoreOnDisk,
};
Q_ENUM(PersistentPermissionsPolicy)
@@ -129,10 +129,10 @@ public:
QWebEngineClientCertificateStore *clientCertificateStore();
QWebEngineClientHints *clientHints() const;
- Q_REVISION(6,8) Q_INVOKABLE QWebEnginePermission getPermission(const QUrl &securityOrigin, QWebEnginePermission::Feature feature) const;
- Q_REVISION(6,8) Q_INVOKABLE QList<QWebEnginePermission> listPermissions() const;
- Q_REVISION(6,8) Q_INVOKABLE QList<QWebEnginePermission> listPermissions(const QUrl &securityOrigin) const;
- Q_REVISION(6,8) Q_INVOKABLE QList<QWebEnginePermission> listPermissions(QWebEnginePermission::Feature feature) const;
+ Q_REVISION(6,8) Q_INVOKABLE QWebEnginePermission queryPermission(const QUrl &securityOrigin, QWebEnginePermission::PermissionType permissionType) const;
+ Q_REVISION(6,8) Q_INVOKABLE QList<QWebEnginePermission> listAllPermissions() const;
+ Q_REVISION(6,8) Q_INVOKABLE QList<QWebEnginePermission> listPermissionsForOrigin(const QUrl &securityOrigin) const;
+ Q_REVISION(6,8) Q_INVOKABLE QList<QWebEnginePermission> listPermissionsForPermissionType(QWebEnginePermission::PermissionType permissionType) const;
static QQuickWebEngineProfile *defaultProfile();
diff --git a/src/webenginequick/api/qquickwebenginesettings.cpp b/src/webenginequick/api/qquickwebenginesettings.cpp
index 4a66605d6..50fb5c3b0 100644
--- a/src/webenginequick/api/qquickwebenginesettings.cpp
+++ b/src/webenginequick/api/qquickwebenginesettings.cpp
@@ -79,7 +79,7 @@ bool QQuickWebEngineSettings::javascriptCanOpenWindows() const
Since unrestricted clipboard access is a potential security concern, it is
recommended that applications leave this disabled and instead respond to
- \l{WebEnginePermission::ClipboardReadWrite}{ClipboardReadWrite} feature permission requests.
+ \l{webEnginePermission::permissionType}{ClipboardReadWrite} feature permission requests.
Disabled by default.
*/
@@ -389,7 +389,7 @@ bool QQuickWebEngineSettings::webRTCPublicInterfacesOnly() const
Since unrestricted clipboard access is a potential security concern, it is
recommended that applications leave this disabled and instead respond to
- \l{WebEnginePermission::ClipboardReadWrite}{ClipboardReadWrite} feature permission requests.
+ \l{webEnginePermission::permissionType}{ClipboardReadWrite} feature permission requests.
Disabled by default.
*/
diff --git a/src/webenginequick/api/qquickwebengineview.cpp b/src/webenginequick/api/qquickwebengineview.cpp
index 852d00c76..56b5963f6 100644
--- a/src/webenginequick/api/qquickwebengineview.cpp
+++ b/src/webenginequick/api/qquickwebengineview.cpp
@@ -489,29 +489,29 @@ void QQuickWebEngineViewPrivate::selectClientCert(
#if QT_DEPRECATED_SINCE(6, 8)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
-static QQuickWebEngineView::Feature toDeprecatedFeature(QWebEnginePermission::Feature feature)
+static QQuickWebEngineView::Feature toDeprecatedFeature(QWebEnginePermission::PermissionType permissionType)
{
- switch (feature) {
- case QWebEnginePermission::Feature::Notifications:
+ switch (permissionType) {
+ case QWebEnginePermission::PermissionType::Notifications:
return QQuickWebEngineView::Notifications;
- case QWebEnginePermission::Feature::Geolocation:
+ case QWebEnginePermission::PermissionType::Geolocation:
return QQuickWebEngineView::Geolocation;
- case QWebEnginePermission::Feature::ClipboardReadWrite:
+ case QWebEnginePermission::PermissionType::ClipboardReadWrite:
return QQuickWebEngineView::ClipboardReadWrite;
- case QWebEnginePermission::Feature::LocalFontsAccess:
+ case QWebEnginePermission::PermissionType::LocalFontsAccess:
return QQuickWebEngineView::LocalFontsAccess;
- case QWebEnginePermission::Feature::MediaAudioCapture:
+ case QWebEnginePermission::PermissionType::MediaAudioCapture:
return QQuickWebEngineView::MediaAudioCapture;
- case QWebEnginePermission::Feature::MediaVideoCapture:
+ case QWebEnginePermission::PermissionType::MediaVideoCapture:
return QQuickWebEngineView::MediaVideoCapture;
- case QWebEnginePermission::Feature::MediaAudioVideoCapture:
+ case QWebEnginePermission::PermissionType::MediaAudioVideoCapture:
return QQuickWebEngineView::MediaAudioVideoCapture;
- case QWebEnginePermission::Feature::DesktopVideoCapture:
+ case QWebEnginePermission::PermissionType::DesktopVideoCapture:
return QQuickWebEngineView::DesktopVideoCapture;
- case QWebEnginePermission::Feature::DesktopAudioVideoCapture:
+ case QWebEnginePermission::PermissionType::DesktopAudioVideoCapture:
return QQuickWebEngineView::DesktopAudioVideoCapture;
- case QWebEnginePermission::Feature::MouseLock:
- case QWebEnginePermission::Feature::Unsupported:
+ case QWebEnginePermission::PermissionType::MouseLock:
+ case QWebEnginePermission::PermissionType::Unsupported:
break;
}
@@ -521,32 +521,22 @@ static QQuickWebEngineView::Feature toDeprecatedFeature(QWebEnginePermission::Fe
QT_WARNING_POP
#endif // QT_DEPRECATED_SINCE(6, 8)
-void QQuickWebEngineViewPrivate::runFeaturePermissionRequest(QWebEnginePermission::Feature feature, const QUrl &url)
+void QQuickWebEngineViewPrivate::runFeaturePermissionRequest(QWebEnginePermission::PermissionType permissionType, const QUrl &securityOrigin)
{
Q_Q(QQuickWebEngineView);
- switch (feature) {
- case QWebEnginePermission::Notifications:
- case QWebEnginePermission::Geolocation:
- case QWebEnginePermission::ClipboardReadWrite:
- case QWebEnginePermission::LocalFontsAccess:
- Q_EMIT q->permissionRequested(createFeaturePermissionObject(url, feature));
+
+ 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(url, toDeprecatedFeature(feature));
+ Q_EMIT q->featurePermissionRequested(securityOrigin, toDeprecatedFeature(permissionType));
QT_WARNING_POP
#endif // QT_DEPRECATED_SINCE(6, 8)
return;
- case QWebEnginePermission::MouseLock:
- case QWebEnginePermission::MediaAudioCapture:
- case QWebEnginePermission::MediaVideoCapture:
- case QWebEnginePermission::MediaAudioVideoCapture:
- case QWebEnginePermission::DesktopAudioVideoCapture:
- case QWebEnginePermission::DesktopVideoCapture:
- case QWebEnginePermission::Unsupported:
- Q_UNREACHABLE();
- return;
}
+
+ Q_UNREACHABLE();
}
void QQuickWebEngineViewPrivate::showColorDialog(QSharedPointer<ColorChooserController> controller)
@@ -824,19 +814,19 @@ void QQuickWebEngineViewPrivate::runMediaAccessPermissionRequest(const QUrl &sec
Q_Q(QQuickWebEngineView);
if (!requestFlags)
return;
- QWebEnginePermission::Feature feature;
+ QWebEnginePermission::PermissionType permissionType;
if (requestFlags.testFlag(WebContentsAdapterClient::MediaAudioCapture) && requestFlags.testFlag(WebContentsAdapterClient::MediaVideoCapture))
- feature = QWebEnginePermission::MediaAudioVideoCapture;
+ permissionType = QWebEnginePermission::PermissionType::MediaAudioVideoCapture;
else if (requestFlags.testFlag(WebContentsAdapterClient::MediaAudioCapture))
- feature = QWebEnginePermission::MediaAudioCapture;
+ permissionType = QWebEnginePermission::PermissionType::MediaAudioCapture;
else if (requestFlags.testFlag(WebContentsAdapterClient::MediaVideoCapture))
- feature = QWebEnginePermission::MediaVideoCapture;
+ permissionType = QWebEnginePermission::PermissionType::MediaVideoCapture;
else if (requestFlags.testFlag(WebContentsAdapterClient::MediaDesktopAudioCapture) &&
requestFlags.testFlag(WebContentsAdapterClient::MediaDesktopVideoCapture))
- feature = QWebEnginePermission::DesktopAudioVideoCapture;
+ permissionType = QWebEnginePermission::PermissionType::DesktopAudioVideoCapture;
else // if (requestFlags.testFlag(WebContentsAdapterClient::MediaDesktopVideoCapture))
- feature = QWebEnginePermission::DesktopVideoCapture;
- Q_EMIT q->permissionRequested(createFeaturePermissionObject(securityOrigin, feature));
+ permissionType = QWebEnginePermission::PermissionType::DesktopVideoCapture;
+ Q_EMIT q->permissionRequested(createFeaturePermissionObject(securityOrigin, permissionType));
#if QT_DEPRECATED_SINCE(6, 8)
QT_WARNING_PUSH
@@ -1528,9 +1518,9 @@ void QQuickWebEngineViewPrivate::showWebAuthDialog(QWebEngineWebAuthUxRequest *r
Q_EMIT q->webAuthUxRequested(request);
}
-QWebEnginePermission QQuickWebEngineViewPrivate::createFeaturePermissionObject(const QUrl &securityOrigin, QWebEnginePermission::Feature feature)
+QWebEnginePermission QQuickWebEngineViewPrivate::createFeaturePermissionObject(const QUrl &securityOrigin, QWebEnginePermission::PermissionType permissionType)
{
- auto *returnPrivate = new QWebEnginePermissionPrivate(securityOrigin, feature, adapter, profileAdapter());
+ auto *returnPrivate = new QWebEnginePermissionPrivate(securityOrigin, permissionType, adapter, profileAdapter());
return QWebEnginePermission(returnPrivate);
}
@@ -1834,41 +1824,42 @@ QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
void QQuickWebEngineView::grantFeaturePermission(const QUrl &securityOrigin, QQuickWebEngineView::Feature feature, bool granted)
{
Q_D(QQuickWebEngineView);
- QWebEnginePermission::Feature f;
+ QWebEnginePermission::PermissionType permissionType;
switch (feature) {
case QQuickWebEngineView::Notifications:
- f = QWebEnginePermission::Notifications;
+ permissionType = QWebEnginePermission::PermissionType::Notifications;
break;
case QQuickWebEngineView::Geolocation:
- f = QWebEnginePermission::Geolocation;
+ permissionType = QWebEnginePermission::PermissionType::Geolocation;
break;
case QQuickWebEngineView::MediaAudioCapture:
- f = QWebEnginePermission::MediaAudioCapture;
+ permissionType = QWebEnginePermission::PermissionType::MediaAudioCapture;
break;
case QQuickWebEngineView::MediaVideoCapture:
- f = QWebEnginePermission::MediaVideoCapture;
+ permissionType = QWebEnginePermission::PermissionType::MediaVideoCapture;
break;
case QQuickWebEngineView::MediaAudioVideoCapture:
- f = QWebEnginePermission::MediaAudioVideoCapture;
+ permissionType = QWebEnginePermission::PermissionType::MediaAudioVideoCapture;
break;
case QQuickWebEngineView::DesktopVideoCapture:
- f = QWebEnginePermission::DesktopVideoCapture;
+ permissionType = QWebEnginePermission::PermissionType::DesktopVideoCapture;
break;
case QQuickWebEngineView::DesktopAudioVideoCapture:
- f = QWebEnginePermission::DesktopAudioVideoCapture;
+ permissionType = QWebEnginePermission::PermissionType::DesktopAudioVideoCapture;
break;
case QQuickWebEngineView::ClipboardReadWrite:
- f = QWebEnginePermission::ClipboardReadWrite;
+ permissionType = QWebEnginePermission::PermissionType::ClipboardReadWrite;
break;
case QQuickWebEngineView::LocalFontsAccess:
- f = QWebEnginePermission::LocalFontsAccess;
+ permissionType = QWebEnginePermission::PermissionType::LocalFontsAccess;
break;
default:
Q_UNREACHABLE();
}
- d->adapter->setFeaturePermission(securityOrigin, f, granted ? QWebEnginePermission::Granted : QWebEnginePermission::Denied);
+ d->adapter->setPermission(securityOrigin, permissionType,
+ granted ? QWebEnginePermission::State::Granted : QWebEnginePermission::State::Denied);
}
QT_WARNING_POP
#endif // QT_DEPRECATED_SINCE(6, 8)
diff --git a/src/webenginequick/api/qquickwebengineview_p.h b/src/webenginequick/api/qquickwebengineview_p.h
index ea09dff9f..d15b8e82c 100644
--- a/src/webenginequick/api/qquickwebengineview_p.h
+++ b/src/webenginequick/api/qquickwebengineview_p.h
@@ -168,23 +168,18 @@ QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
QT_WARNING_POP
#endif
#if QT_DEPRECATED_SINCE(6, 8)
-QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
- enum QT_DEPRECATED_VERSION_X_6_8(
- "WebEnginePage::Feature has been deprecated. "
- "The updated permissions API uses WebEnginePermission::Feature.")
- Feature {
- MediaAudioCapture,
- MediaVideoCapture,
- MediaAudioVideoCapture,
- Geolocation,
- DesktopVideoCapture,
- DesktopAudioVideoCapture,
- Notifications,
- ClipboardReadWrite,
- LocalFontsAccess,
+ enum Feature {
+ MediaAudioCapture Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::PermissionType::MediaAudioCapture instead"),
+ MediaVideoCapture Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::PermissionType::MediaVideoCapture instead"),
+ MediaAudioVideoCapture Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::PermissionType::MediaAudioVideoCapture instead"),
+ Geolocation Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::PermissionType::Geolocation instead"),
+ DesktopVideoCapture Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::PermissionType::DesktopVideoCapture instead"),
+ DesktopAudioVideoCapture Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::PermissionType::DesktopAudioVideoCapture instead"),
+ Notifications Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::PermissionType::Notifications instead"),
+ ClipboardReadWrite Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::PermissionType::ClipboardReadWrite instead"),
+ LocalFontsAccess Q_DECL_ENUMERATOR_DEPRECATED_X("Use QWebEnginePermission::PermissionType::LocalFontsAccess instead"),
};
Q_ENUM(Feature)
-QT_WARNING_POP
#endif
enum WebAction {
@@ -497,15 +492,8 @@ public Q_SLOTS:
Q_REVISION(1,1) void findText(const QString &subString, FindFlags options = { }, const QJSValue &callback = QJSValue());
Q_REVISION(1,1) void fullScreenCancelled();
#if QT_DEPRECATED_SINCE(6, 8)
-#if !defined(Q_MOC_RUN)
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
-#endif // !defined(Q_MOC_RUN)
QT_DEPRECATED_VERSION_X_6_8("Setting permissions through WebEngineView has been deprecated. Please use WebEnginePermission instead.")
Q_REVISION(1,1) void grantFeaturePermission(const QUrl &securityOrigin, QQuickWebEngineView::Feature, bool granted);
-#if !defined(Q_MOC_RUN)
-QT_WARNING_POP
-#endif // !defined(Q_MOC_RUN)
#endif // QT_DEPRECATED_SINCE(6, 8)
Q_REVISION(1,2) void setActiveFocusOnPress(bool arg);
Q_REVISION(1,2) void triggerWebAction(WebAction action);
diff --git a/src/webenginequick/api/qquickwebengineview_p_p.h b/src/webenginequick/api/qquickwebengineview_p_p.h
index e61f32bcb..d78157597 100644
--- a/src/webenginequick/api/qquickwebengineview_p_p.h
+++ b/src/webenginequick/api/qquickwebengineview_p_p.h
@@ -114,7 +114,7 @@ public:
void allowCertificateError(const QWebEngineCertificateError &error) override;
void selectClientCert(const QSharedPointer<QtWebEngineCore::ClientCertSelectController>
&selectController) override;
- void runFeaturePermissionRequest(QWebEnginePermission::Feature feature, const QUrl &securityOrigin) override;
+ void runFeaturePermissionRequest(QWebEnginePermission::PermissionType permissionType, const QUrl &securityOrigin) 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 +139,7 @@ public:
const QRect &bounds, bool autoselectFirstSuggestion) override;
void hideAutofillPopup() override;
void showWebAuthDialog(QWebEngineWebAuthUxRequest *request) override;
- QWebEnginePermission createFeaturePermissionObject(const QUrl &securityOrigin, QWebEnginePermission::Feature feature) override;
+ QWebEnginePermission createFeaturePermissionObject(const QUrl &securityOrigin, QWebEnginePermission::PermissionType permissionType) override;
void updateAction(QQuickWebEngineView::WebAction) const;
bool adoptWebContents(QtWebEngineCore::WebContentsAdapter *webContents);
diff --git a/src/webenginequick/doc/src/webengine_permission.qdoc b/src/webenginequick/doc/src/webengine_permission.qdoc
index f59f57fa0..e36264240 100644
--- a/src/webenginequick/doc/src/webengine_permission.qdoc
+++ b/src/webenginequick/doc/src/webengine_permission.qdoc
@@ -15,26 +15,34 @@
\li When the user has made their decision, the application calls \l grant() or \l deny();
\endlist
- Alternatively, an application interested in modifying already granted permissions may use WebEngineProfile::listPermissions()
- to get a list of existing permissions associated with a profile, or WebEngineProfile::getPermission() to get
+ Alternatively, an application interested in modifying already granted permissions may use WebEngineProfile::listAllPermissions()
+ to get a list of existing permissions associated with a profile, or WebEngineProfile::queryPermission() to get
a webEnginePermission object for a specific permission.
The \l origin property can be used to query which origin the webEnginePermission is associated with, while the
- \l feature property describes the associated feature. A website origin is the combination of its scheme, hostname,
+ \l permissionType property describes the associated feature. A website origin is the combination of its scheme, hostname,
and port. Permissions are granted on a per-origin basis; thus, if the web page \c{https://www.example.com:12345/some/page.html}
requests a permission, it will be granted to the origin \c{https://www.example.com:12345/}.
- The usability lifetime of a webEnginePermission is tied either to its associated WebEngineView
- (for transient feature types), or WebEngineProfile (for permanent feature types). A transient permission is one which
- needs to be explicitly granted or denied every time it's needed (e.g. webcam/screen sharing permission), whereas a permanent
- one might be stored inside the current profile, depending on the value of WebEngineProfile::persistentPermissionsPolicy.
- You can check whether a webEnginePermission is in a valid state using its \l isValid() property. For invalid objects, calls to \l grant(),
- \l deny(), or \l reset() will do nothing, and their \l state() will always be WebEnginePermission.Invalid.
+ The \l permissionType enumeration describes all the permission types Qt WebEngine supports. Only some permission types
+ are remembered between browsing sessions; they are \e persistent. Non-persistent permissions query the user every time a
+ website requests them, and cannot be granted in advance. You can check whether a permission type is persistent at runtime
+ using the static method WebEnginePermission::isPersistent().
- The feature types Qt WebEngine supports are described in \l feature.
+ Persistent permissions are stored inside the active WebEngineProfile, and their lifetime depends on the value of
+ WebEngineProfile::persistentPermissionsPolicy. By default, named profiles store their permissions on disk, whereas
+ off-the-record ones store them in memory (and destroy them when the profile is destroyed). A stored permission will not
+ query the user the next time a website requests it; instead it will be automatically granted or denied, depending on
+ the resolution the user picked initially. To erase a stored permission, call \l reset() on it.
- \sa WebEngineView::permissionRequested, WebEngineProfile::getPermission(),
- WebEngineProfile::listPermissions()
+ A non-persistent permission, on the other hand, is only usable until the related WebEngineView performs a navigation to
+ a different URL, or is destroyed.
+
+ You can check whether a WebEnginePermission is in a valid state using its \l isValid property. For invalid objects, calls to \l grant(),
+ \l deny(), or \l reset() will do nothing, while calls to \l state will always return WebEnginePermission::Invalid.
+
+ \sa WebEngineView::permissionRequested, WebEngineProfile::queryPermission(),
+ WebEngineProfile::listAllPermissions()
*/
/*!
@@ -47,23 +55,24 @@
*/
/*!
- \qmlproperty enumeration webEnginePermission::feature
- \brief The feature type associated with this permission.
-
- \value WebEnginePermission.MediaAudioCapture Access to a microphone, or another audio source. This feature is transient.
- \value WebEnginePermission.MediaVideoCapture Access to a webcam, or another video source. This feature is transient.
- \value WebEnginePermission.MediaAudioVideoCapture Combination of \l MediaAudioCapture and \l MediaVideoCapture. This feature is transient.
- \value WebEnginePermission.DesktopVideoCapture Access to the contents of the user's screen. This feature is transient.
- \value WebEnginePermission.DesktopAudioVideoCapture Access to the contents of the user's screen, and application audio. This feature is transient.
- \value WebEnginePermission.MouseLock Locks the pointer inside an element on the web page. This feature is transient.
- \value WebEnginePermission.Notifications Allows the website to send notifications to the user.
- \value WebEnginePermission.Geolocation Access to the user's physical location.
- \value WebEnginePermission.ClipboardReadWrite Access to the user's clipboard.
- \value WebEnginePermission.LocalFontsAccess Access to the fonts installed on the user's machine. Only available on desktops.
+ \qmlproperty enumeration webEnginePermission::permissionType
+ \brief The permission type associated with this permission.
+
+ \value WebEnginePermission.MediaAudioCapture Access to a microphone, or another audio source. This permission is \e not persistent.
+ \value WebEnginePermission.MediaVideoCapture Access to a webcam, or another video source. This permission is \e not persistent.
+ \value WebEnginePermission.MediaAudioVideoCapture Combination of \e MediaAudioCapture and \e MediaVideoCapture. This permission is \e not persistent.
+ \value WebEnginePermission.DesktopVideoCapture Access to the contents of the user's screen. This permission is \e not persistent.
+ \value WebEnginePermission.DesktopAudioVideoCapture Access to the contents of the user's screen, and application audio. This permission is \e not persistent.
+ \value WebEnginePermission.Notifications Allows the website to send notifications to the user. This permission is persistent.
+ \value WebEnginePermission.Geolocation Access to the user's physical location. This permission is persistent.
+ \value WebEnginePermission.ClipboardReadWrite Access to the user's clipboard. This permission is persistent.
+ \value WebEnginePermission.LocalFontsAccess Access to the fonts installed on the user's machine. Only available on desktops. This permission is persistent.
\value WebEnginePermission.Unsupported An unsupported feature type.
+ \omitvalue WebEnginePermission.MouseLock
- \note Transient feature types are ones that will never be remembered by the underlying storage, and will trigger
- a permission request every time a website tries to use them.
+ \note Non-persistent permission types are ones that will never be remembered by the underlying storage, and will trigger
+ a permission request every time a website tries to use them. They can only be denied/granted as they're needed;
+ any attempts to pre-grant a non-persistent permission will fail.
*/
/*!
@@ -71,17 +80,17 @@
\brief The current state of the permission.
\value WebEnginePermission.Invalid Object is in an invalid state, and any attempts to modify the described permission will fail.
- \value WebEnginePermission.Ask Either the permission has not been requested before, or the feature() is transient.
+ \value WebEnginePermission.Ask Either the permission has not been requested before, or the \l permissionType is not persistent.
\value WebEnginePermission.Granted Permission has already been granted.
\value WebEnginePermission.Denied Permission has already been denied.
- If a permission for the specified \l feature and \l origin has already been granted or denied,
+ If a permission for the specified \l permissionType and \l origin has already been granted or denied,
the return value is WebEnginePermission.Granted, or WebEnginePermission.Denied, respectively.
- When this is the first time the permission is requested, or if the \l feature is transient,
+ When this is the first time the permission is requested, or if the \l permissionType is non-persistent,
the return value is WebEnginePermission.Ask. If the object is in an invalid state, the returned
value is WebEnginePermission.Invalid.
- \sa isValid, isTransient
+ \sa isValid, isPersistent
*/
/*!
@@ -90,19 +99,19 @@
An invalid webEnginePermission is either:
\list
- \li One whose \l feature is unsupported;
- \li One whose \l feature is transient, and the associated page/view has been destroyed;
- \li One whose \l feature is permanent, but the associated profile has been destroyed;
+ \li One whose \l permissionType is unsupported;
+ \li One whose \l permissionType is non-persistent, and the user has navigated away from the web page that triggered the request;
+ \li One whose \l permissionType is persistent, but the associated profile has been destroyed;
\li One whose \l origin is invalid.
\endlist
- \sa isTransient
+ \sa isPersistent
*/
/*!
\qmlmethod void webEnginePermission::grant()
- Allows the associated origin to access the requested feature. Does nothing when \l isValid evaluates to false.
+ Allows the associated origin to access the requested per. Does nothing when \l isValid evaluates to false.
\sa deny, reset, isValid
*/
@@ -130,8 +139,8 @@
*/
/*!
- \qmlmethod void webEnginePermission::isTransient(WebEnginePermission.Feature feature)
+ \qmlmethod void webEnginePermission::isPersistent(WebEnginePermission.PermissionType permissionType)
- Returns whether \a feature is transient, meaning that a permission will be requested
- every time the associated functionality is used by a web page.
+ Returns whether a \a permissionType is \e persistent, meaning that a permission's state will be remembered
+ and the user will not be queried the next time the website requests the same permission.
*/
diff --git a/src/webenginequick/doc/src/webengineview_lgpl.qdoc b/src/webenginequick/doc/src/webengineview_lgpl.qdoc
index f7b17fa7b..ac90bb018 100644
--- a/src/webenginequick/doc/src/webengineview_lgpl.qdoc
+++ b/src/webenginequick/doc/src/webengineview_lgpl.qdoc
@@ -513,9 +513,9 @@
\qmlsignal WebEngineView::permissionRequested(webEnginePermission permission)
\since QtWebEngine 6.8
- This signal is emitted when a web site requests to make use of a feature (e.g. geolocation access,
+ This signal is emitted when a web site fires a permission request (e.g. geolocation access,
permission to send notifications). The \a permission object can queried for the requesting URL
- and the \c{WebEnginePermission.Feature} it's asking for, as well as to grant or deny permission.
+ and the \c{WebEnginePermission.PermissionType} it's asking for, as well as to grant or deny permission.
*/
/*!
@@ -854,7 +854,7 @@
/*!
\qmlproperty enumeration WebEngineView::Feature
- \deprecated [6.8] Replaced by WebEnginePermission.Feature.
+ \deprecated [6.8] Replaced by WebEnginePermission.PermissionType.
Describes the platform feature access categories that the user may be asked to grant or deny
access to:
diff --git a/tests/auto/quick/publicapi/tst_publicapi.cpp b/tests/auto/quick/publicapi/tst_publicapi.cpp
index f27515c51..6abaac315 100644
--- a/tests/auto/quick/publicapi/tst_publicapi.cpp
+++ b/tests/auto/quick/publicapi/tst_publicapi.cpp
@@ -86,7 +86,7 @@ static const QList<const QMetaObject *> typesToCheck = QList<const QMetaObject *
static QList<QMetaEnum> knownEnumNames = QList<QMetaEnum>()
<< QWebEngineDownloadRequest::staticMetaObject.enumerator(QWebEngineDownloadRequest::staticMetaObject.indexOfEnumerator("SavePageFormat"))
- << QWebEnginePermission::staticMetaObject.enumerator(QWebEnginePermission::staticMetaObject.indexOfEnumerator("Feature"))
+ << QWebEnginePermission::staticMetaObject.enumerator(QWebEnginePermission::staticMetaObject.indexOfEnumerator("PermissionType"))
;
static const QStringList hardcodedTypes = QStringList()
@@ -371,29 +371,29 @@ static const QStringList expectedAPI = QStringList()
<< "QWebEngineNewWindowRequest.InNewDialog --> DestinationType"
<< "QWebEngineNewWindowRequest.InNewTab --> DestinationType"
<< "QWebEngineNewWindowRequest.InNewWindow --> DestinationType"
- << "QWebEnginePermission.Unsupported --> Feature"
- << "QWebEnginePermission.MediaAudioCapture --> Feature"
- << "QWebEnginePermission.MediaVideoCapture --> Feature"
- << "QWebEnginePermission.MediaAudioVideoCapture --> Feature"
- << "QWebEnginePermission.DesktopVideoCapture --> Feature"
- << "QWebEnginePermission.DesktopAudioVideoCapture --> Feature"
- << "QWebEnginePermission.MouseLock --> Feature"
- << "QWebEnginePermission.Notifications --> Feature"
- << "QWebEnginePermission.Geolocation --> Feature"
- << "QWebEnginePermission.ClipboardReadWrite --> Feature"
- << "QWebEnginePermission.LocalFontsAccess --> Feature"
- << "QWebEnginePermission.Invalid --> State"
- << "QWebEnginePermission.Ask --> State"
- << "QWebEnginePermission.Granted --> State"
- << "QWebEnginePermission.Denied --> State"
+ << "QWebEnginePermission.PermissionType.Unsupported --> PermissionType"
+ << "QWebEnginePermission.PermissionType.MediaAudioCapture --> PermissionType"
+ << "QWebEnginePermission.PermissionType.MediaVideoCapture --> PermissionType"
+ << "QWebEnginePermission.PermissionType.MediaAudioVideoCapture --> PermissionType"
+ << "QWebEnginePermission.PermissionType.DesktopVideoCapture --> PermissionType"
+ << "QWebEnginePermission.PermissionType.DesktopAudioVideoCapture --> PermissionType"
+ << "QWebEnginePermission.PermissionType.MouseLock --> PermissionType"
+ << "QWebEnginePermission.PermissionType.Notifications --> PermissionType"
+ << "QWebEnginePermission.PermissionType.Geolocation --> PermissionType"
+ << "QWebEnginePermission.PermissionType.ClipboardReadWrite --> PermissionType"
+ << "QWebEnginePermission.PermissionType.LocalFontsAccess --> PermissionType"
+ << "QWebEnginePermission.State.Invalid --> State"
+ << "QWebEnginePermission.State.Ask --> State"
+ << "QWebEnginePermission.State.Granted --> State"
+ << "QWebEnginePermission.State.Denied --> State"
<< "QWebEnginePermission.origin --> QUrl"
- << "QWebEnginePermission.feature --> QWebEnginePermission::Feature"
+ << "QWebEnginePermission.permissionType --> QWebEnginePermission::PermissionType"
<< "QWebEnginePermission.state --> QWebEnginePermission::State"
<< "QWebEnginePermission.isValid --> bool"
<< "QWebEnginePermission.grant() --> void"
<< "QWebEnginePermission.deny() --> void"
<< "QWebEnginePermission.reset() --> void"
- << "QWebEnginePermission.isTransient(QWebEnginePermission::Feature) --> bool"
+ << "QWebEnginePermission.isPersistent(QWebEnginePermission::PermissionType) --> bool"
<< "QQuickWebEngineNewWindowRequest.openIn(QQuickWebEngineView*) --> void"
<< "QQuickWebEngineProfile.AllowPersistentCookies --> PersistentCookiesPolicy"
<< "QQuickWebEngineProfile.DiskHttpCache --> HttpCacheType"
@@ -401,9 +401,9 @@ static const QStringList expectedAPI = QStringList()
<< "QQuickWebEngineProfile.MemoryHttpCache --> HttpCacheType"
<< "QQuickWebEngineProfile.NoCache --> HttpCacheType"
<< "QQuickWebEngineProfile.NoPersistentCookies --> PersistentCookiesPolicy"
- << "QQuickWebEngineProfile.NoPersistentPermissions --> PersistentPermissionsPolicy"
- << "QQuickWebEngineProfile.PersistentPermissionsInMemory --> PersistentPermissionsPolicy"
- << "QQuickWebEngineProfile.PersistentPermissionsOnDisk --> PersistentPermissionsPolicy"
+ << "QQuickWebEngineProfile.PersistentPermissionsPolicy.AskEveryTime --> PersistentPermissionsPolicy"
+ << "QQuickWebEngineProfile.PersistentPermissionsPolicy.StoreInMemory --> PersistentPermissionsPolicy"
+ << "QQuickWebEngineProfile.PersistentPermissionsPolicy.StoreOnDisk --> PersistentPermissionsPolicy"
<< "QQuickWebEngineProfile.cachePath --> QString"
<< "QQuickWebEngineProfile.cachePathChanged() --> void"
<< "QQuickWebEngineProfile.clearHttpCache() --> void"
@@ -413,10 +413,10 @@ static const QStringList expectedAPI = QStringList()
<< "QQuickWebEngineProfile.downloadRequested(QQuickWebEngineDownloadRequest*) --> void"
<< "QQuickWebEngineProfile.downloadPath --> QString"
<< "QQuickWebEngineProfile.downloadPathChanged() --> void"
- << "QQuickWebEngineProfile.getPermission(QUrl,QWebEnginePermission::Feature) --> QWebEnginePermission"
- << "QQuickWebEngineProfile.listPermissions() --> QList<QWebEnginePermission>"
- << "QQuickWebEngineProfile.listPermissions(QUrl) --> QList<QWebEnginePermission>"
- << "QQuickWebEngineProfile.listPermissions(QWebEnginePermission::Feature) --> QList<QWebEnginePermission>"
+ << "QQuickWebEngineProfile.queryPermission(QUrl,QWebEnginePermission::PermissionType) --> QWebEnginePermission"
+ << "QQuickWebEngineProfile.listAllPermissions() --> QList<QWebEnginePermission>"
+ << "QQuickWebEngineProfile.listPermissionsForOrigin(QUrl) --> QList<QWebEnginePermission>"
+ << "QQuickWebEngineProfile.listPermissionsForPermissionType(QWebEnginePermission::PermissionType) --> QList<QWebEnginePermission>"
<< "QQuickWebEngineProfile.persistentPermissionsPolicy --> QQuickWebEngineProfile::PersistentPermissionsPolicy"
<< "QQuickWebEngineProfile.persistentPermissionsPolicyChanged() --> void"
<< "QQuickWebEngineProfile.presentNotification(QWebEngineNotification*) --> void"
diff --git a/tests/auto/quick/qmltests/data/tst_geopermission.qml b/tests/auto/quick/qmltests/data/tst_geopermission.qml
index 1eb687497..2957367ed 100644
--- a/tests/auto/quick/qmltests/data/tst_geopermission.qml
+++ b/tests/auto/quick/qmltests/data/tst_geopermission.qml
@@ -13,7 +13,7 @@ TestWebEngineView {
property bool deniedGeolocation: false
property bool geoPermissionRequested: false
- profile.persistentPermissionsPolicy: WebEngineProfile.NoPersistentPermissions
+ profile.persistentPermissionsPolicy: WebEngineProfile.PersistentPermissionsPolicy.AskEveryTime
SignalSpy {
id: permissionSpy
@@ -22,7 +22,7 @@ TestWebEngineView {
}
onPermissionRequested: function(perm) {
- if (perm.feature === WebEnginePermission.Geolocation) {
+ if (perm.permissionType === WebEnginePermission.PermissionType.Geolocation) {
geoPermissionRequested = true
if (deniedGeolocation) {
perm.deny()
@@ -63,17 +63,17 @@ TestWebEngineView {
function test_geoPermissionRequest() {
compare(permissionSpy.count, 0)
webEngineView.url = Qt.resolvedUrl("geolocation.html")
- permissionSpy.wait()
+ tryCompare(permissionSpy, "count", 1)
verify(geoPermissionRequested)
- compare(permissionSpy.count, 1)
tryVerify(isHandled, 5000)
verify(getErrorMessage() === "")
}
function test_deniedGeolocationByUser() {
+ compare(permissionSpy.count, 0)
deniedGeolocation = true
webEngineView.url = Qt.resolvedUrl("geolocation.html")
- permissionSpy.wait()
+ tryCompare(permissionSpy, "count", 1)
tryVerify(isHandled, 5000)
compare(getErrorMessage(), "User denied Geolocation")
}
diff --git a/tests/auto/quick/qmltests/data/tst_getUserMedia.qml b/tests/auto/quick/qmltests/data/tst_getUserMedia.qml
index fbc863a45..371977ac7 100644
--- a/tests/auto/quick/qmltests/data/tst_getUserMedia.qml
+++ b/tests/auto/quick/qmltests/data/tst_getUserMedia.qml
@@ -11,7 +11,7 @@ TestWebEngineView {
height: 400
settings.screenCaptureEnabled: true
- profile.persistentPermissionsPolicy: WebEngineProfile.NoPersistentPermissions
+ profile.persistentPermissionsPolicy: WebEngineProfile.PersistentPermissionsPolicy.AskEveryTime
TestCase {
name: "GetUserMedia"
@@ -22,17 +22,17 @@ TestWebEngineView {
{
tag: "device audio",
constraints: { audio: true },
- feature: WebEnginePermission.MediaAudioCapture,
+ feature: WebEnginePermission.PermissionType.MediaAudioCapture,
},
{
tag: "device video",
constraints: { video: true },
- feature: WebEnginePermission.MediaVideoCapture,
+ feature: WebEnginePermission.PermissionType.MediaVideoCapture,
},
{
tag: "device audio+video",
constraints: { audio: true, video: true },
- feature: WebEnginePermission.MediaAudioVideoCapture,
+ feature: WebEnginePermission.PermissionType.MediaAudioVideoCapture,
},
{
tag: "desktop video",
@@ -43,7 +43,7 @@ TestWebEngineView {
}
}
},
- feature: WebEnginePermission.DesktopVideoCapture,
+ feature: WebEnginePermission.PermissionType.DesktopVideoCapture,
},
{
tag: "desktop audio+video",
@@ -59,7 +59,7 @@ TestWebEngineView {
}
}
},
- feature: WebEnginePermission.DesktopAudioVideoCapture,
+ feature: WebEnginePermission.PermissionType.DesktopAudioVideoCapture,
}
]
}
@@ -123,7 +123,7 @@ TestWebEngineView {
}
function gotFeatureRequest(expectedFeature) {
- return permissionObject && permissionObject.feature == expectedFeature
+ return permissionObject && permissionObject.permissionType == expectedFeature
}
function acceptPendingRequest() {
diff --git a/tests/auto/quick/qmltests/data/tst_notification.qml b/tests/auto/quick/qmltests/data/tst_notification.qml
index 4f064af3d..4795ac31d 100644
--- a/tests/auto/quick/qmltests/data/tst_notification.qml
+++ b/tests/auto/quick/qmltests/data/tst_notification.qml
@@ -15,7 +15,7 @@ TestWebEngineView {
property bool grantPermission: false
property var permissionObject
- profile.persistentPermissionsPolicy: WebEngineProfile.NoPersistentPermissions
+ profile.persistentPermissionsPolicy: WebEngineProfile.PersistentPermissionsPolicy.AskEveryTime
signal consoleMessage(string message)
@@ -26,7 +26,7 @@ TestWebEngineView {
}
onPermissionRequested: function(perm) {
- if (perm.feature === WebEnginePermission.Notifications) {
+ if (perm.permissionType === WebEnginePermission.PermissionType.Notifications) {
view.permissionRequested = true
view.permissionObject = perm
if (grantPermission)
@@ -70,9 +70,8 @@ TestWebEngineView {
tryCompare(result, 'permission', 'default')
view.runJavaScript('requestPermission()')
- spyRequest.wait()
+ tryCompare(spyRequest, "count", 1)
verify(permissionRequested)
- compare(spyRequest.count, 1)
view.runJavaScript('getPermission()', function (permission) { result.permission = permission })
tryCompare(result, 'permission', data.permission)
@@ -85,7 +84,7 @@ TestWebEngineView {
view.waitForLoadSucceeded()
view.runJavaScript('requestPermission()')
- spyRequest.wait()
+ tryCompare(spyRequest, "count", 1)
verify(permissionRequested)
let title = 'Title', message = 'Message', notification = null
diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
index 21bf19d4d..1958649d6 100644
--- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
+++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
@@ -485,7 +485,7 @@ void tst_QWebEnginePage::geolocationRequestJS()
QWebEngineView view;
JSTestPage *newPage = new JSTestPage(&view);
view.setPage(newPage);
- newPage->profile()->setPersistentPermissionsPolicy(QWebEngineProfile::NoPersistentPermissions);
+ newPage->profile()->setPersistentPermissionsPolicy(QWebEngineProfile::PersistentPermissionsPolicy::AskEveryTime);
newPage->setGeolocationPermission(allowed);
connect(newPage, SIGNAL(permissionRequested(QWebEnginePermission)),
@@ -1662,7 +1662,7 @@ public:
connect(this, &QWebEnginePage::loadFinished, [this](bool success){
m_loadSucceeded = success;
});
- profile()->setPersistentPermissionsPolicy(QWebEngineProfile::NoPersistentPermissions);
+ profile()->setPersistentPermissionsPolicy(QWebEngineProfile::PersistentPermissionsPolicy::AskEveryTime);
// We need to load content from a resource in order for the securityOrigin to be valid.
load(QUrl("qrc:///resources/content.html"));
}
@@ -1707,9 +1707,9 @@ public:
m_gotRequest = false;
}
- bool gotFeatureRequest(QWebEnginePermission::Feature feature)
+ bool gotFeatureRequest(QWebEnginePermission::PermissionType permissionType)
{
- return m_gotRequest && m_permission && m_permission->feature() == feature;
+ return m_gotRequest && m_permission && m_permission->permissionType() == permissionType;
}
bool gotFeatureRequest() const
@@ -1738,32 +1738,33 @@ private:
void tst_QWebEnginePage::getUserMediaRequest_data()
{
QTest::addColumn<QString>("call");
- QTest::addColumn<QWebEnginePermission::Feature>("feature");
+ QTest::addColumn<QWebEnginePermission::PermissionType>("permissionType");
QTest::addRow("device audio")
- << "getUserMedia({audio: true})" << QWebEnginePermission::MediaAudioCapture;
+ << "getUserMedia({audio: true})" << QWebEnginePermission::PermissionType::MediaAudioCapture;
QTest::addRow("device video")
- << "getUserMedia({video: true})" << QWebEnginePermission::MediaVideoCapture;
+ << "getUserMedia({video: true})" << QWebEnginePermission::PermissionType::MediaVideoCapture;
QTest::addRow("device audio+video")
- << "getUserMedia({audio: true, video: true})" << QWebEnginePermission::MediaAudioVideoCapture;
+ << "getUserMedia({audio: true, video: true})" << QWebEnginePermission::PermissionType::MediaAudioVideoCapture;
QTest::addRow("desktop video")
<< "getUserMedia({video: { mandatory: { chromeMediaSource: 'desktop' }}})"
- << QWebEnginePermission::DesktopVideoCapture;
+ << QWebEnginePermission::PermissionType::DesktopVideoCapture;
QTest::addRow("desktop audio+video")
<< "getUserMedia({audio: { mandatory: { chromeMediaSource: 'desktop' }}, video: { mandatory: { chromeMediaSource: 'desktop' }}})"
- << QWebEnginePermission::DesktopAudioVideoCapture;
+ << QWebEnginePermission::PermissionType::DesktopAudioVideoCapture;
QTest::addRow("display video")
- << "getDisplayMedia()" << QWebEnginePermission::DesktopVideoCapture;
+ << "getDisplayMedia()" << QWebEnginePermission::PermissionType::DesktopVideoCapture;
}
void tst_QWebEnginePage::getUserMediaRequest()
{
QFETCH(QString, call);
- QFETCH(QWebEnginePermission::Feature, feature);
+ QFETCH(QWebEnginePermission::PermissionType, permissionType);
GetUserMediaTestPage page;
QWebEngineView view;
- if (feature == QWebEnginePermission::DesktopVideoCapture || feature == QWebEnginePermission::DesktopAudioVideoCapture) {
+ if (permissionType == QWebEnginePermission::PermissionType::DesktopVideoCapture
+ || permissionType == QWebEnginePermission::PermissionType::DesktopAudioVideoCapture) {
// Desktop capture needs to be on a desktop.
view.setPage(&page);
view.resize(640, 480);
@@ -1776,7 +1777,7 @@ void tst_QWebEnginePage::getUserMediaRequest()
// 1. Rejecting request on C++ side should reject promise on JS side.
page.jsGetMedia(call);
- QTRY_VERIFY(page.gotFeatureRequest(feature));
+ QTRY_VERIFY(page.gotFeatureRequest(permissionType));
page.rejectPendingRequest();
QTRY_VERIFY(!page.jsPromiseFulfilled() && page.jsPromiseRejected());
@@ -1786,13 +1787,13 @@ void tst_QWebEnginePage::getUserMediaRequest()
// always be fulfilled, however in this case an error should be returned to
// JS instead of leaving the Promise in limbo.
page.jsGetMedia(call);
- QTRY_VERIFY(page.gotFeatureRequest(feature));
+ QTRY_VERIFY(page.gotFeatureRequest(permissionType));
page.acceptPendingRequest();
QTRY_VERIFY(page.jsPromiseFulfilled() || page.jsPromiseRejected());
- // 3. Media feature permissions are not remembered.
+ // 3. Media permissions are not remembered.
page.jsGetMedia(call);
- QTRY_VERIFY(page.gotFeatureRequest(feature));
+ QTRY_VERIFY(page.gotFeatureRequest(permissionType));
page.acceptPendingRequest();
QTRY_VERIFY(page.jsPromiseFulfilled() || page.jsPromiseRejected());
}
@@ -1833,7 +1834,7 @@ void tst_QWebEnginePage::getUserMediaRequestSettingDisabled()
void tst_QWebEnginePage::getUserMediaRequestDesktopVideoManyPages()
{
const QString constraints = QStringLiteral("{video: { mandatory: { chromeMediaSource: 'desktop' }}}");
- const QWebEnginePermission::Feature feature = QWebEnginePermission::DesktopVideoCapture;
+ const QWebEnginePermission::PermissionType permissionType = QWebEnginePermission::PermissionType::DesktopVideoCapture;
std::vector<GetUserMediaTestPage> pages(10);
// Desktop capture needs to be on a desktop
@@ -1854,7 +1855,7 @@ void tst_QWebEnginePage::getUserMediaRequestDesktopVideoManyPages()
for (GetUserMediaTestPage &page : pages)
page.jsGetUserMedia(constraints);
for (GetUserMediaTestPage &page : pages)
- QTRY_VERIFY(page.gotFeatureRequest(feature));
+ QTRY_VERIFY(page.gotFeatureRequest(permissionType));
for (GetUserMediaTestPage &page : pages)
page.acceptPendingRequest();
for (GetUserMediaTestPage &page : pages)
@@ -1866,7 +1867,7 @@ void tst_QWebEnginePage::getUserMediaRequestDesktopVideoManyPages()
void tst_QWebEnginePage::getUserMediaRequestDesktopVideoManyRequests()
{
const QString constraints = QStringLiteral("{video: { mandatory: { chromeMediaSource: 'desktop' }}}");
- const QWebEnginePermission::Feature feature = QWebEnginePermission::DesktopVideoCapture;
+ const QWebEnginePermission::PermissionType permissionType = QWebEnginePermission::PermissionType::DesktopVideoCapture;
GetUserMediaTestPage page;
// Desktop capture needs to be on a desktop
@@ -1880,7 +1881,7 @@ void tst_QWebEnginePage::getUserMediaRequestDesktopVideoManyRequests()
page.settings()->setAttribute(QWebEngineSettings::ScreenCaptureEnabled, true);
for (int i = 0; i != 100; ++i) {
page.jsGetUserMedia(constraints);
- QTRY_VERIFY(page.gotFeatureRequest(feature));
+ QTRY_VERIFY(page.gotFeatureRequest(permissionType));
page.acceptPendingRequest();
QTRY_VERIFY(page.jsPromiseFulfilled() || page.jsPromiseRejected());
}
@@ -3803,21 +3804,21 @@ public:
connect(this, &QWebEnginePage::permissionRequested,
[this] (QWebEnginePermission permission) {
- if (permission.feature() != QWebEnginePermission::Notifications)
+ if (permission.permissionType() != QWebEnginePermission::PermissionType::Notifications)
return;
if (spyRequest.wasCalled())
QFAIL("request executed twise!");
switch (policy) {
- case QWebEnginePermission::Granted:
+ case QWebEnginePermission::State::Granted:
permission.grant();
break;
- case QWebEnginePermission::Denied:
+ case QWebEnginePermission::State::Denied:
permission.deny();
break;
- case QWebEnginePermission::Ask:
+ case QWebEnginePermission::State::Ask:
permission.reset();
break;
- default:
+ case QWebEnginePermission::State::Invalid:
break;
}
spyRequest.ref()(permission.origin());
@@ -3842,10 +3843,10 @@ void tst_QWebEnginePage::notificationPermission_data()
QTest::addColumn<bool>("setOnInit");
QTest::addColumn<QWebEnginePermission::State>("policy");
QTest::addColumn<QString>("permission");
- QTest::newRow("denyOnInit") << true << QWebEnginePermission::Denied << "denied";
- QTest::newRow("deny") << false << QWebEnginePermission::Denied << "denied";
- QTest::newRow("grant") << false << QWebEnginePermission::Granted << "granted";
- QTest::newRow("grantOnInit") << true << QWebEnginePermission::Granted << "granted";
+ QTest::newRow("denyOnInit") << true << QWebEnginePermission::State::Denied << "denied";
+ QTest::newRow("deny") << false << QWebEnginePermission::State::Denied << "denied";
+ QTest::newRow("grant") << false << QWebEnginePermission::State::Granted << "granted";
+ QTest::newRow("grantOnInit") << true << QWebEnginePermission::State::Granted << "granted";
}
void tst_QWebEnginePage::notificationPermission()
@@ -3855,14 +3856,14 @@ void tst_QWebEnginePage::notificationPermission()
QFETCH(QString, permission);
QWebEngineProfile otr;
- otr.setPersistentPermissionsPolicy(QWebEngineProfile::NoPersistentPermissions);
+ otr.setPersistentPermissionsPolicy(QWebEngineProfile::PersistentPermissionsPolicy::AskEveryTime);
QWebEnginePage page(&otr, nullptr);
QUrl baseUrl("https://www.example.com/somepage.html");
bool permissionRequested = false, errorState = false;
connect(&page, &QWebEnginePage::permissionRequested, &page, [&] (QWebEnginePermission permission) {
- if (permission.feature() != QWebEnginePermission::Notifications)
+ if (permission.permissionType() != QWebEnginePermission::PermissionType::Notifications)
return;
if (permissionRequested || permission.origin() != baseUrl.url(QUrl::RemoveFilename)) {
qWarning() << "Unexpected case. Can't proceed." << setOnInit << permissionRequested << permission.origin();
@@ -3871,15 +3872,15 @@ void tst_QWebEnginePage::notificationPermission()
}
permissionRequested = true;
- if (policy == QWebEnginePermission::Granted)
+ if (policy == QWebEnginePermission::State::Granted)
permission.grant();
else
permission.deny();
});
- QWebEnginePermission permissionObject = otr.getPermission(baseUrl, QWebEnginePermission::Notifications);
+ QWebEnginePermission permissionObject = otr.queryPermission(baseUrl, QWebEnginePermission::PermissionType::Notifications);
if (setOnInit) {
- if (policy == QWebEnginePermission::Granted)
+ if (policy == QWebEnginePermission::State::Granted)
permissionObject.grant();
else
permissionObject.deny();
@@ -3892,7 +3893,7 @@ void tst_QWebEnginePage::notificationPermission()
QCOMPARE(evaluateJavaScriptSync(&page, QStringLiteral("Notification.permission")), setOnInit ? permission : QLatin1String("default"));
if (!setOnInit) {
- if (policy == QWebEnginePermission::Granted)
+ if (policy == QWebEnginePermission::State::Granted)
permissionObject.grant();
else
permissionObject.deny();
@@ -3909,7 +3910,7 @@ void tst_QWebEnginePage::notificationPermission()
void tst_QWebEnginePage::sendNotification()
{
- NotificationPage page(QWebEnginePermission::Granted);
+ NotificationPage page(QWebEnginePermission::State::Granted);
QVERIFY(page.spyLoad.waitForResult());
page.resetPermission();
@@ -3975,7 +3976,7 @@ void tst_QWebEnginePage::clipboardReadWritePermissionInitialState()
QFETCH(QString, permission);
QWebEngineProfile otr;
- otr.setPersistentPermissionsPolicy(QWebEngineProfile::NoPersistentPermissions);
+ otr.setPersistentPermissionsPolicy(QWebEngineProfile::PersistentPermissionsPolicy::AskEveryTime);
QWebEngineView view(&otr);
QWebEnginePage &page = *view.page();
view.settings()->setAttribute(QWebEngineSettings::FocusOnNavigationEnabled, true);
@@ -4003,28 +4004,28 @@ void tst_QWebEnginePage::clipboardReadWritePermission_data()
QTest::addColumn<QString>("finalPermission");
QTest::newRow("noAccessGrantGrant")
- << false << QWebEnginePermission::Granted << "granted"
- << QWebEnginePermission::Granted << "granted";
+ << false << QWebEnginePermission::State::Granted << "granted"
+ << QWebEnginePermission::State::Granted << "granted";
QTest::newRow("noAccessGrantDeny")
- << false << QWebEnginePermission::Granted << "granted"
- << QWebEnginePermission::Denied << "denied";
+ << false << QWebEnginePermission::State::Granted << "granted"
+ << QWebEnginePermission::State::Denied << "denied";
QTest::newRow("noAccessDenyGrant")
- << false << QWebEnginePermission::Denied << "denied"
- << QWebEnginePermission::Granted << "granted";
- QTest::newRow("noAccessDenyDeny") << false << QWebEnginePermission::Denied << "denied"
- << QWebEnginePermission::Denied << "denied";
- QTest::newRow("noAccessAskGrant") << false << QWebEnginePermission::Ask << "prompt"
- << QWebEnginePermission::Granted << "granted";
+ << false << QWebEnginePermission::State::Denied << "denied"
+ << QWebEnginePermission::State::Granted << "granted";
+ QTest::newRow("noAccessDenyDeny") << false << QWebEnginePermission::State::Denied << "denied"
+ << QWebEnginePermission::State::Denied << "denied";
+ QTest::newRow("noAccessAskGrant") << false << QWebEnginePermission::State::Ask << "prompt"
+ << QWebEnginePermission::State::Granted << "granted";
// All policies are ignored and overridden by setting JsCanAccessClipboard and JsCanPaste to
// true
QTest::newRow("accessGrantGrant")
- << true << QWebEnginePermission::Granted << "granted"
- << QWebEnginePermission::Granted << "granted";
- QTest::newRow("accessDenyDeny") << true << QWebEnginePermission::Denied << "granted"
- << QWebEnginePermission::Denied << "granted";
- QTest::newRow("accessAskAsk") << true << QWebEnginePermission::Ask << "granted"
- << QWebEnginePermission::Ask << "granted";
+ << true << QWebEnginePermission::State::Granted << "granted"
+ << QWebEnginePermission::State::Granted << "granted";
+ QTest::newRow("accessDenyDeny") << true << QWebEnginePermission::State::Denied << "granted"
+ << QWebEnginePermission::State::Denied << "granted";
+ QTest::newRow("accessAskAsk") << true << QWebEnginePermission::State::Ask << "granted"
+ << QWebEnginePermission::State::Ask << "granted";
}
void tst_QWebEnginePage::clipboardReadWritePermission()
@@ -4036,7 +4037,7 @@ void tst_QWebEnginePage::clipboardReadWritePermission()
QFETCH(QString, finalPermission);
QWebEngineProfile otr;
- otr.setPersistentPermissionsPolicy(QWebEngineProfile::NoPersistentPermissions);
+ otr.setPersistentPermissionsPolicy(QWebEngineProfile::PersistentPermissionsPolicy::AskEveryTime);
QWebEngineView view(&otr);
QWebEnginePage &page = *view.page();
view.settings()->setAttribute(QWebEngineSettings::FocusOnNavigationEnabled, true);
@@ -4052,7 +4053,7 @@ void tst_QWebEnginePage::clipboardReadWritePermission()
// if JavascriptCanAccessClipboard is true, this never fires
connect(&page, &QWebEnginePage::permissionRequested, &page,
[&](QWebEnginePermission permission) {
- if (permission.feature() != QWebEnginePermission::ClipboardReadWrite)
+ if (permission.permissionType() != QWebEnginePermission::PermissionType::ClipboardReadWrite)
return;
if (permission.origin() != baseUrl.url(QUrl::RemoveFilename)) {
qWarning() << "Unexpected case. Can't proceed." << permission.origin();
@@ -4061,13 +4062,13 @@ void tst_QWebEnginePage::clipboardReadWritePermission()
}
permissionRequestCount++;
switch (requestPolicy) {
- case QWebEnginePermission::Granted:
+ case QWebEnginePermission::State::Granted:
permission.grant();
break;
- case QWebEnginePermission::Denied:
+ case QWebEnginePermission::State::Denied:
permission.deny();
break;
- case QWebEnginePermission::Ask:
+ case QWebEnginePermission::State::Ask:
permission.reset();
break;
default:
@@ -4075,18 +4076,18 @@ void tst_QWebEnginePage::clipboardReadWritePermission()
}
});
- QWebEnginePermission permissionObject = otr.getPermission(baseUrl, QWebEnginePermission::ClipboardReadWrite);
+ QWebEnginePermission permissionObject = otr.queryPermission(baseUrl, QWebEnginePermission::PermissionType::ClipboardReadWrite);
switch (initialPolicy) {
- case QWebEnginePermission::Granted:
+ case QWebEnginePermission::State::Granted:
permissionObject.grant();
break;
- case QWebEnginePermission::Denied:
+ case QWebEnginePermission::State::Denied:
permissionObject.deny();
break;
- case QWebEnginePermission::Ask:
+ case QWebEnginePermission::State::Ask:
permissionObject.reset();
break;
- default:
+ case QWebEnginePermission::State::Invalid:
break;
}
@@ -4152,9 +4153,9 @@ void tst_QWebEnginePage::localFontAccessPermission_data()
QTest::addColumn<bool>("ignore");
QTest::addColumn<bool>("shouldBeEmpty");
- QTest::newRow("ignore") << QWebEnginePermission::Denied << true << true;
- QTest::newRow("setDeny") << QWebEnginePermission::Denied << false << true;
- QTest::newRow("setGrant") << QWebEnginePermission::Granted << false << false;
+ QTest::newRow("ignore") << QWebEnginePermission::State::Denied << true << true;
+ QTest::newRow("setDeny") << QWebEnginePermission::State::Denied << false << true;
+ QTest::newRow("setGrant") << QWebEnginePermission::State::Granted << false << false;
}
void tst_QWebEnginePage::localFontAccessPermission() {
@@ -4164,15 +4165,15 @@ void tst_QWebEnginePage::localFontAccessPermission() {
QWebEngineView view;
QWebEnginePage page(&view);
- page.profile()->setPersistentPermissionsPolicy(QWebEngineProfile::NoPersistentPermissions);
+ page.profile()->setPersistentPermissionsPolicy(QWebEngineProfile::PersistentPermissionsPolicy::AskEveryTime);
view.setPage(&page);
connect(&page, &QWebEnginePage::permissionRequested, &page, [&] (QWebEnginePermission permission) {
- if (permission.feature() != QWebEnginePermission::LocalFontsAccess)
+ if (permission.permissionType() != QWebEnginePermission::PermissionType::LocalFontsAccess)
return;
if (!ignore) {
- if (policy == QWebEnginePermission::Granted)
+ if (policy == QWebEnginePermission::State::Granted)
permission.grant();
else
permission.deny();
@@ -5776,7 +5777,7 @@ void tst_QWebEnginePage::chooseDesktopMedia()
QWebEnginePage page;
QSignalSpy loadFinishedSpy(&page, SIGNAL(loadFinished(bool)));
page.settings()->setAttribute(QWebEngineSettings::ScreenCaptureEnabled, true);
- page.profile()->setPersistentPermissionsPolicy(QWebEngineProfile::NoPersistentPermissions);
+ page.profile()->setPersistentPermissionsPolicy(QWebEngineProfile::PersistentPermissionsPolicy::AskEveryTime);
bool desktopMediaRequested = false;
bool permissionRequested = false;
diff --git a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
index 5303d99fc..6c9af1727 100644
--- a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
+++ b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
@@ -58,8 +58,8 @@ private Q_SLOTS:
void badDeleteOrder();
void permissionPersistence_data();
void permissionPersistence();
- void getPermission_data();
- void getPermission();
+ void queryPermission_data();
+ void queryPermission();
void listPermissions();
void qtbug_71895(); // this should be the last test
};
@@ -1025,10 +1025,10 @@ void tst_QWebEngineProfile::permissionPersistence_data()
QTest::addColumn<QWebEngineProfile::PersistentPermissionsPolicy>("policy");
QTest::addColumn<bool>("granted");
- QTest::newRow("noPersistenceNotificationsNoGrant") << QWebEngineProfile::NoPersistentPermissions << false;
- QTest::newRow("noPersistenceNotificationsGrant") << QWebEngineProfile::NoPersistentPermissions << true;
- QTest::newRow("memoryPersistenceNotificationsNoGrant") << QWebEngineProfile::PersistentPermissionsInMemory << false;
- QTest::newRow("diskPersistenceNotificationsGrant") << QWebEngineProfile::PersistentPermissionsOnDisk << true;
+ QTest::newRow("noPersistenceNotificationsNoGrant") << QWebEngineProfile::PersistentPermissionsPolicy::AskEveryTime << false;
+ QTest::newRow("noPersistenceNotificationsGrant") << QWebEngineProfile::PersistentPermissionsPolicy::AskEveryTime << true;
+ QTest::newRow("memoryPersistenceNotificationsNoGrant") << QWebEngineProfile::PersistentPermissionsPolicy::StoreInMemory << false;
+ QTest::newRow("diskPersistenceNotificationsGrant") << QWebEngineProfile::PersistentPermissionsPolicy::StoreOnDisk << true;
}
void tst_QWebEngineProfile::permissionPersistence()
@@ -1055,7 +1055,7 @@ void tst_QWebEngineProfile::permissionPersistence()
QVariant variant = granted ? "granted" : "denied";
QVariant defaultVariant = "default";
- QWebEnginePermission permissionObject = profile->getPermission(server.url("/hedgehog.html"), QWebEnginePermission::Notifications);
+ QWebEnginePermission permissionObject = profile->queryPermission(server.url("/hedgehog.html"), QWebEnginePermission::PermissionType::Notifications);
if (granted)
permissionObject.grant();
else
@@ -1067,7 +1067,7 @@ void tst_QWebEngineProfile::permissionPersistence()
loadSpy.reset();
bool expectSame = false;
- if (policy == QWebEngineProfile::PersistentPermissionsOnDisk) {
+ if (policy == QWebEngineProfile::PersistentPermissionsPolicy::StoreOnDisk) {
expectSame = true;
// File is written asynchronously, wait for it to be created
@@ -1085,7 +1085,7 @@ void tst_QWebEngineProfile::permissionPersistence()
expectSame ? variant : defaultVariant);
// Re-acquire the permission, since deleting the Profile makes it invalid
- permissionObject = profile->getPermission(server.url("/hedgehog.html"), QWebEnginePermission::Notifications);
+ permissionObject = profile->queryPermission(server.url("/hedgehog.html"), QWebEnginePermission::PermissionType::Notifications);
permissionObject.reset();
QCOMPARE(evaluateJavaScriptSync(page.get(), "Notification.permission"), defaultVariant);
@@ -1093,7 +1093,7 @@ void tst_QWebEngineProfile::permissionPersistence()
profile.reset();
loadSpy.reset();
- if (policy == QWebEngineProfile::PersistentPermissionsOnDisk) {
+ if (policy == QWebEngineProfile::PersistentPermissionsPolicy::StoreOnDisk) {
// Wait for file to be written to before deleting
QTest::qWait(1000);
storageDir.remove("permissions.json");
@@ -1102,81 +1102,86 @@ void tst_QWebEngineProfile::permissionPersistence()
QTRY_VERIFY(server.stop());
}
-void tst_QWebEngineProfile::getPermission_data()
+void tst_QWebEngineProfile::queryPermission_data()
{
- QTest::addColumn<QWebEnginePermission::Feature>("feature");
+ QTest::addColumn<QWebEnginePermission::PermissionType>("permissionType");
QTest::addColumn<QUrl>("url");
QTest::addColumn<bool>("expectedValid");
- QTest::newRow("badUrl") << QWebEnginePermission::Notifications << QUrl(QStringLiteral("//:bad-url")) << false;
- QTest::newRow("badFeature") << QWebEnginePermission::Unsupported << QUrl(QStringLiteral("qrc:/resources/hedgehog.html")) << false;
- QTest::newRow("transientFeature") << QWebEnginePermission::MouseLock << QUrl(QStringLiteral("qrc:/resources/hedgehog.html")) << false;
- QTest::newRow("good") << QWebEnginePermission::Notifications << QUrl(QStringLiteral("qrc:/resources/hedgehog.html")) << true;
+ QTest::newRow("badUrl")
+ << QWebEnginePermission::PermissionType::Notifications << QUrl(QStringLiteral("//:bad-url")) << false;
+ QTest::newRow("badFeature")
+ << QWebEnginePermission::PermissionType::Unsupported << QUrl(QStringLiteral("qrc:/resources/hedgehog.html")) << false;
+ QTest::newRow("transientFeature")
+ << QWebEnginePermission::PermissionType::MouseLock << QUrl(QStringLiteral("qrc:/resources/hedgehog.html")) << false;
+ QTest::newRow("good")
+ << QWebEnginePermission::PermissionType::Notifications << QUrl(QStringLiteral("qrc:/resources/hedgehog.html")) << true;
}
-void tst_QWebEngineProfile::getPermission()
+void tst_QWebEngineProfile::queryPermission()
{
- QFETCH(QWebEnginePermission::Feature, feature);
+ QFETCH(QWebEnginePermission::PermissionType, permissionType);
QFETCH(QUrl, url);
QFETCH(bool, expectedValid);
QWebEngineProfile profile;
// In-memory is the default for otr profiles
- QVERIFY(profile.persistentPermissionsPolicy() == QWebEngineProfile::PersistentPermissionsInMemory);
+ QVERIFY(profile.persistentPermissionsPolicy() == QWebEngineProfile::PersistentPermissionsPolicy::StoreInMemory);
- QWebEnginePermission permission = profile.getPermission(url, feature);
+ QWebEnginePermission permission = profile.queryPermission(url, permissionType);
bool valid = permission.isValid();
QVERIFY(valid == expectedValid);
if (!valid)
- QVERIFY(permission.state() == QWebEnginePermission::Invalid);
+ QVERIFY(permission.state() == QWebEnginePermission::State::Invalid);
// Verify that we can grant a valid permission, and we can't grant an invalid one...
permission.grant();
- QVERIFY(permission.state() == (valid ? QWebEnginePermission::Granted : QWebEnginePermission::Invalid));
+ QVERIFY(permission.state() == (valid ? QWebEnginePermission::State::Granted : QWebEnginePermission::State::Invalid));
// ...and that doing so twice doesn't mess up the state...
permission.grant();
- QVERIFY(permission.state() == (valid ? QWebEnginePermission::Granted : QWebEnginePermission::Invalid));
+ QVERIFY(permission.state() == (valid ? QWebEnginePermission::State::Granted : QWebEnginePermission::State::Invalid));
// ...and that the same thing applies to denying them...
permission.deny();
- QVERIFY(permission.state() == (valid ? QWebEnginePermission::Denied : QWebEnginePermission::Invalid));
+ QVERIFY(permission.state() == (valid ? QWebEnginePermission::State::Denied : QWebEnginePermission::State::Invalid));
permission.deny();
- QVERIFY(permission.state() == (valid ? QWebEnginePermission::Denied : QWebEnginePermission::Invalid));
+ QVERIFY(permission.state() == (valid ? QWebEnginePermission::State::Denied : QWebEnginePermission::State::Invalid));
// ...and that resetting works
permission.reset();
- QVERIFY(permission.state() == (valid ? QWebEnginePermission::Ask : QWebEnginePermission::Invalid));
+ QVERIFY(permission.state() == (valid ? QWebEnginePermission::State::Ask : QWebEnginePermission::State::Invalid));
permission.reset();
- QVERIFY(permission.state() == (valid ? QWebEnginePermission::Ask : QWebEnginePermission::Invalid));
+ QVERIFY(permission.state() == (valid ? QWebEnginePermission::State::Ask : QWebEnginePermission::State::Invalid));
}
void tst_QWebEngineProfile::listPermissions()
{
QWebEngineProfile profile;
// In-memory is the default for otr profiles
- QVERIFY(profile.persistentPermissionsPolicy() == QWebEngineProfile::PersistentPermissionsInMemory);
+ QVERIFY(profile.persistentPermissionsPolicy() == QWebEngineProfile::PersistentPermissionsPolicy::StoreInMemory);
QUrl commonUrl = QUrl(QStringLiteral("http://www.bing.com/maps"));
- QWebEnginePermission::Feature commonFeature = QWebEnginePermission::Notifications;
+ QWebEnginePermission::PermissionType commonType = QWebEnginePermission::PermissionType::Notifications;
// First, set several permissions at once
- profile.getPermission(commonUrl, QWebEnginePermission::Geolocation).deny();
- profile.getPermission(commonUrl, QWebEnginePermission::Unsupported).grant(); // Invalid
- profile.getPermission(commonUrl, commonFeature).grant();
- profile.getPermission(QUrl(QStringLiteral("http://www.google.com/translate")), commonFeature).grant();
+ profile.queryPermission(commonUrl, QWebEnginePermission::PermissionType::Geolocation).deny();
+ profile.queryPermission(commonUrl, QWebEnginePermission::PermissionType::Unsupported).grant(); // Invalid
+ profile.queryPermission(commonUrl, commonType).grant();
+ profile.queryPermission(QUrl(QStringLiteral("http://www.google.com/translate")), commonType).grant();
- QList<QWebEnginePermission> permissionsListAll = profile.listPermissions();
- QList<QWebEnginePermission> permissionsListUrl = profile.listPermissions(commonUrl);
- QList<QWebEnginePermission> permissionsListFeature = profile.listPermissions(commonFeature);
+ QList<QWebEnginePermission> permissionsListAll = profile.listAllPermissions();
+ QList<QWebEnginePermission> permissionsListUrl = profile.listPermissionsForOrigin(commonUrl);
+ QList<QWebEnginePermission> permissionsListFeature = profile.listPermissionsForPermissionType(commonType);
// Order of returned permissions is not guaranteed, so we must iterate until we find the one we need
auto findInList = [](QList<QWebEnginePermission> list, const QUrl &url,
- QWebEnginePermission::Feature feature, QWebEnginePermission::State state)
+ QWebEnginePermission::PermissionType permissionType, QWebEnginePermission::State state)
{
bool found = false;
for (auto &permission : list) {
- if (permission.origin().adjusted(QUrl::RemovePath) == url.adjusted(QUrl::RemovePath) && permission.feature() == feature && permission.state() == state) {
+ if (permission.origin().adjusted(QUrl::RemovePath) == url.adjusted(QUrl::RemovePath)
+ && permission.permissionType() == permissionType && permission.state() == state) {
found = true;
break;
}
@@ -1186,19 +1191,19 @@ void tst_QWebEngineProfile::listPermissions()
// Check full list
QVERIFY(permissionsListAll.size() == 3);
- QVERIFY(findInList(permissionsListAll, commonUrl, QWebEnginePermission::Geolocation, QWebEnginePermission::Denied));
- QVERIFY(findInList(permissionsListAll, commonUrl, commonFeature, QWebEnginePermission::Granted));
- QVERIFY(findInList(permissionsListAll, QUrl(QStringLiteral("http://www.google.com")), commonFeature, QWebEnginePermission::Granted));
+ QVERIFY(findInList(permissionsListAll, commonUrl, QWebEnginePermission::PermissionType::Geolocation, QWebEnginePermission::State::Denied));
+ QVERIFY(findInList(permissionsListAll, commonUrl, commonType, QWebEnginePermission::State::Granted));
+ QVERIFY(findInList(permissionsListAll, QUrl(QStringLiteral("http://www.google.com")), commonType, QWebEnginePermission::State::Granted));
// Check list filtered by URL
QVERIFY(permissionsListUrl.size() == 2);
- QVERIFY(findInList(permissionsListUrl, commonUrl, QWebEnginePermission::Geolocation, QWebEnginePermission::Denied));
- QVERIFY(findInList(permissionsListAll, commonUrl, commonFeature, QWebEnginePermission::Granted));
+ QVERIFY(findInList(permissionsListUrl, commonUrl, QWebEnginePermission::PermissionType::Geolocation, QWebEnginePermission::State::Denied));
+ QVERIFY(findInList(permissionsListAll, commonUrl, commonType, QWebEnginePermission::State::Granted));
// Check list filtered by feature
QVERIFY(permissionsListFeature.size() == 2);
- QVERIFY(findInList(permissionsListAll, commonUrl, commonFeature, QWebEnginePermission::Granted));
- QVERIFY(findInList(permissionsListAll, QUrl(QStringLiteral("http://www.google.com")), commonFeature, QWebEnginePermission::Granted));
+ QVERIFY(findInList(permissionsListAll, commonUrl, commonType, QWebEnginePermission::State::Granted));
+ QVERIFY(findInList(permissionsListAll, QUrl(QStringLiteral("http://www.google.com")), commonType, QWebEnginePermission::State::Granted));
}
void tst_QWebEngineProfile::qtbug_71895()
diff --git a/tests/manual/quick/geopermission/tst_geopermission.qml b/tests/manual/quick/geopermission/tst_geopermission.qml
index 6d6f4de8b..ff9c79f1d 100644
--- a/tests/manual/quick/geopermission/tst_geopermission.qml
+++ b/tests/manual/quick/geopermission/tst_geopermission.qml
@@ -14,7 +14,7 @@ WebEngineView {
property bool geoPermissionRequested: false
onPermissionRequested: function(perm) {
- if (perm.feature === WebEnginePermission.Geolocation) {
+ if (perm.permissionType === WebEnginePermission.PermissionType.Geolocation) {
geoPermissionRequested = true
if (deniedGeolocation) {
perm.deny()