summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2019-07-05 23:20:22 +0200
committerFlorian Bruhin <me@the-compiler.org>2019-07-06 17:30:09 +0200
commitd4e5c9aebdbb21aa5f88954be1934e7767d82d57 (patch)
tree1efa69086efc02ba84601fe1288c72512c0a4583
parent8a0f031fe74708de8a172350f3aecc339e43fd58 (diff)
downloadqutebrowser-d4e5c9aebdbb21aa5f88954be1934e7767d82d57.tar.gz
qutebrowser-d4e5c9aebdbb21aa5f88954be1934e7767d82d57.zip
Add test for permission workaround
-rw-r--r--qutebrowser/browser/webengine/webenginetab.py102
-rw-r--r--tests/unit/browser/webengine/test_webenginetab.py14
2 files changed, 67 insertions, 49 deletions
diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py
index b9b87cb3f..6046b0a02 100644
--- a/qutebrowser/browser/webengine/webenginetab.py
+++ b/qutebrowser/browser/webengine/webenginetab.py
@@ -726,11 +726,61 @@ class _WebEnginePermissions(QObject):
"""Handling of various permission-related signals."""
+ # Using 0 as WORKAROUND for:
+ # https://www.riverbankcomputing.com/pipermail/pyqt/2019-July/041903.html
+
+ _options = {
+ 0: 'content.notifications',
+ QWebEnginePage.Geolocation: 'content.geolocation',
+ QWebEnginePage.MediaAudioCapture: 'content.media_capture',
+ QWebEnginePage.MediaVideoCapture: 'content.media_capture',
+ QWebEnginePage.MediaAudioVideoCapture: 'content.media_capture',
+ }
+
+ _messages = {
+ 0: 'show notifications',
+ QWebEnginePage.Geolocation: 'access your location',
+ QWebEnginePage.MediaAudioCapture: 'record audio',
+ QWebEnginePage.MediaVideoCapture: 'record video',
+ QWebEnginePage.MediaAudioVideoCapture: 'record audio/video',
+ }
+
def __init__(self, tab, parent=None):
super().__init__(parent)
self._tab = tab
self._widget = None
+ try:
+ self._options.update({
+ QWebEnginePage.MouseLock:
+ 'content.mouse_lock',
+ })
+ self._messages.update({
+ QWebEnginePage.MouseLock:
+ 'hide your mouse pointer',
+ })
+ except AttributeError:
+ # Added in Qt 5.8
+ pass
+ try:
+ self._options.update({
+ QWebEnginePage.DesktopVideoCapture:
+ 'content.desktop_capture',
+ QWebEnginePage.DesktopAudioVideoCapture:
+ 'content.desktop_capture',
+ })
+ self._messages.update({
+ QWebEnginePage.DesktopVideoCapture:
+ 'capture your desktop',
+ QWebEnginePage.DesktopAudioVideoCapture:
+ 'capture your desktop and audio',
+ })
+ except AttributeError:
+ # Added in Qt 5.10
+ pass
+
+ assert self._options.keys() == self._messages.keys()
+
def connect_signals(self):
"""Connect related signals from the QWebEnginePage."""
page = self._widget.page()
@@ -760,56 +810,9 @@ class _WebEnginePermissions(QObject):
@pyqtSlot(QUrl, 'QWebEnginePage::Feature')
def _on_feature_permission_requested(self, url, feature):
"""Ask the user for approval for geolocation/media/etc.."""
- # Using 0 as WORKAROUND for:
- # https://www.riverbankcomputing.com/pipermail/pyqt/2019-July/041903.html
- options = {
- 0: 'content.notifications',
- QWebEnginePage.Geolocation: 'content.geolocation',
- QWebEnginePage.MediaAudioCapture: 'content.media_capture',
- QWebEnginePage.MediaVideoCapture: 'content.media_capture',
- QWebEnginePage.MediaAudioVideoCapture: 'content.media_capture',
- }
- messages = {
- 0: 'show notifications',
- QWebEnginePage.Geolocation: 'access your location',
- QWebEnginePage.MediaAudioCapture: 'record audio',
- QWebEnginePage.MediaVideoCapture: 'record video',
- QWebEnginePage.MediaAudioVideoCapture: 'record audio/video',
- }
- try:
- options.update({
- QWebEnginePage.MouseLock:
- 'content.mouse_lock',
- })
- messages.update({
- QWebEnginePage.MouseLock:
- 'hide your mouse pointer',
- })
- except AttributeError:
- # Added in Qt 5.8
- pass
- try:
- options.update({
- QWebEnginePage.DesktopVideoCapture:
- 'content.desktop_capture',
- QWebEnginePage.DesktopAudioVideoCapture:
- 'content.desktop_capture',
- })
- messages.update({
- QWebEnginePage.DesktopVideoCapture:
- 'capture your desktop',
- QWebEnginePage.DesktopAudioVideoCapture:
- 'capture your desktop and audio',
- })
- except AttributeError:
- # Added in Qt 5.10
- pass
-
- assert options.keys() == messages.keys()
-
page = self._widget.page()
- if feature not in options:
+ if feature not in self._options:
log.webview.error("Unhandled feature permission {}".format(
debug.qenum_key(QWebEnginePage, feature)))
page.setFeaturePermission(url, feature,
@@ -824,7 +827,8 @@ class _WebEnginePermissions(QObject):
QWebEnginePage.PermissionDeniedByUser)
question = shared.feature_permission(
- url=url, option=options[feature], msg=messages[feature],
+ url=url,
+ option=self._options[feature], msg=self._messages[feature],
yes_action=yes_action, no_action=no_action,
abort_on=[self._tab.abort_questions])
diff --git a/tests/unit/browser/webengine/test_webenginetab.py b/tests/unit/browser/webengine/test_webenginetab.py
index 380bb8641..8de6b5bc5 100644
--- a/tests/unit/browser/webengine/test_webenginetab.py
+++ b/tests/unit/browser/webengine/test_webenginetab.py
@@ -29,6 +29,8 @@ QWebEngineScript = QtWebEngineWidgets.QWebEngineScript
from qutebrowser.browser import greasemonkey
from qutebrowser.utils import usertypes
+webenginetab = pytest.importorskip(
+ "qutebrowser.browser.webengine.webenginetab")
pytestmark = pytest.mark.usefixtures('greasemonkey_manager')
@@ -116,3 +118,15 @@ class TestWebengineScripts:
collection = webengine_scripts._widget.page().scripts()
script = collection.toList()[-1]
assert script.injectionPoint() == QWebEngineScript.DocumentReady
+
+
+def test_notification_permission_workaround():
+ """Make sure the value for QWebEnginePage::Notifications is correct."""
+ try:
+ notifications = QWebEnginePage.Notifications
+ except AttributeError:
+ pytest.skip("No Notifications member")
+
+ permissions = webenginetab._WebEnginePermissions
+ assert permissions._options[notifications] == 'content.notifications'
+ assert permissions._messages[notifications] == 'show notifications'