diff options
author | Florian Bruhin <me@the-compiler.org> | 2019-07-05 23:20:22 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2019-07-06 17:30:09 +0200 |
commit | d4e5c9aebdbb21aa5f88954be1934e7767d82d57 (patch) | |
tree | 1efa69086efc02ba84601fe1288c72512c0a4583 | |
parent | 8a0f031fe74708de8a172350f3aecc339e43fd58 (diff) | |
download | qutebrowser-d4e5c9aebdbb21aa5f88954be1934e7767d82d57.tar.gz qutebrowser-d4e5c9aebdbb21aa5f88954be1934e7767d82d57.zip |
Add test for permission workaround
-rw-r--r-- | qutebrowser/browser/webengine/webenginetab.py | 102 | ||||
-rw-r--r-- | tests/unit/browser/webengine/test_webenginetab.py | 14 |
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' |