diff options
-rw-r--r-- | qutebrowser/browser/webengine/interceptor.py | 44 | ||||
-rw-r--r-- | qutebrowser/browser/webengine/webengineinspector.py | 5 | ||||
-rw-r--r-- | qutebrowser/browser/webengine/webenginequtescheme.py | 24 | ||||
-rw-r--r-- | qutebrowser/browser/webengine/webenginesettings.py | 83 | ||||
-rw-r--r-- | qutebrowser/browser/webengine/webenginetab.py | 46 | ||||
-rw-r--r-- | qutebrowser/browser/webengine/webview.py | 51 | ||||
-rw-r--r-- | qutebrowser/browser/webkit/network/webkitqutescheme.py | 11 | ||||
-rw-r--r-- | qutebrowser/browser/webkit/webpage.py | 19 | ||||
-rw-r--r-- | qutebrowser/misc/earlyinit.py | 3 | ||||
-rw-r--r-- | tests/unit/utils/test_qtutils.py | 4 |
10 files changed, 159 insertions, 131 deletions
diff --git a/qutebrowser/browser/webengine/interceptor.py b/qutebrowser/browser/webengine/interceptor.py index 7f24eebd4..ad99f1eef 100644 --- a/qutebrowser/browser/webengine/interceptor.py +++ b/qutebrowser/browser/webengine/interceptor.py @@ -67,37 +67,39 @@ class RequestInterceptor(QtWebEngineCore.QWebEngineUrlRequestInterceptor): def __init__(self, parent=None): super().__init__(parent) + req_info = QtWebEngineCore.QWebEngineUrlRequestInfo + resource_type = interceptors.ResourceType # This dict should be from QWebEngine Resource Types to qutebrowser # extension ResourceTypes. If a ResourceType is added to Qt, this table # should be updated too. self._resource_types = { - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypeMainFrame: interceptors.ResourceType.main_frame, - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypeSubFrame: interceptors.ResourceType.sub_frame, - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypeStylesheet: interceptors.ResourceType.stylesheet, - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypeScript: interceptors.ResourceType.script, - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypeImage: interceptors.ResourceType.image, - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypeFontResource: interceptors.ResourceType.font_resource, - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypeSubResource: interceptors.ResourceType.sub_resource, - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypeObject: interceptors.ResourceType.object, - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypeMedia: interceptors.ResourceType.media, - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypeWorker: interceptors.ResourceType.worker, - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypeSharedWorker: interceptors.ResourceType.shared_worker, - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypePrefetch: interceptors.ResourceType.prefetch, - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypeFavicon: interceptors.ResourceType.favicon, - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypeXhr: interceptors.ResourceType.xhr, - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypePing: interceptors.ResourceType.ping, - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypeServiceWorker: interceptors.ResourceType.service_worker, - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypeCspReport: interceptors.ResourceType.csp_report, - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypePluginResource: interceptors.ResourceType.plugin_resource, - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypeUnknown: interceptors.ResourceType.unknown, + req_info.ResourceTypeMainFrame: resource_type.main_frame, + req_info.ResourceTypeSubFrame: resource_type.sub_frame, + req_info.ResourceTypeStylesheet: resource_type.stylesheet, + req_info.ResourceTypeScript: resource_type.script, + req_info.ResourceTypeImage: resource_type.image, + req_info.ResourceTypeFontResource: resource_type.font_resource, + req_info.ResourceTypeSubResource: resource_type.sub_resource, + req_info.ResourceTypeObject: resource_type.object, + req_info.ResourceTypeMedia: resource_type.media, + req_info.ResourceTypeWorker: resource_type.worker, + req_info.ResourceTypeSharedWorker: resource_type.shared_worker, + req_info.ResourceTypePrefetch: resource_type.prefetch, + req_info.ResourceTypeFavicon: resource_type.favicon, + req_info.ResourceTypeXhr: resource_type.xhr, + req_info.ResourceTypePing: resource_type.ping, + req_info.ResourceTypeServiceWorker: resource_type.service_worker, + req_info.ResourceTypeCspReport: resource_type.csp_report, + req_info.ResourceTypePluginResource: resource_type.plugin_resource, + req_info.ResourceTypeUnknown: resource_type.unknown, } try: preload_main_frame = ( - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypeNavigationPreloadMainFrame + req_info.ResourceTypeNavigationPreloadMainFrame ) preload_sub_frame = ( - QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceTypeNavigationPreloadSubFrame + req_info.ResourceTypeNavigationPreloadSubFrame ) except AttributeError: # Added in Qt 5.14 diff --git a/qutebrowser/browser/webengine/webengineinspector.py b/qutebrowser/browser/webengine/webengineinspector.py index 4cdd564d8..3361ef19b 100644 --- a/qutebrowser/browser/webengine/webengineinspector.py +++ b/qutebrowser/browser/webengine/webengineinspector.py @@ -100,7 +100,10 @@ class WebEngineInspector(inspector.AbstractWebInspector): "please install the qt5-qtwebengine-devtools " "Fedora package.") - def inspect(self, page: QtWebEngineWidgets.QWebEnginePage) -> None: # type: ignore[override] + def inspect( + self, + page: QtWebEngineWidgets.QWebEnginePage, + ) -> None: # type: ignore[override] inspector_page = self._widget.page() inspector_page.setInspectedPage(page) self._settings.update_for_url(inspector_page.requestedUrl()) diff --git a/qutebrowser/browser/webengine/webenginequtescheme.py b/qutebrowser/browser/webengine/webenginequtescheme.py index 8e15dd1ad..4fbbb1c55 100644 --- a/qutebrowser/browser/webengine/webenginequtescheme.py +++ b/qutebrowser/browser/webengine/webenginequtescheme.py @@ -92,12 +92,13 @@ class QuteSchemeHandler(QtWebEngineCore.QWebEngineUrlSchemeHandler): try: mimetype, data = qutescheme.data_for_url(url) except qutescheme.Error as e: + url_request_job = QtWebEngineCore.QWebEngineUrlRequestJob errors = { - qutescheme.NotFoundError: QtWebEngineCore.QWebEngineUrlRequestJob.UrlNotFound, - qutescheme.UrlInvalidError: QtWebEngineCore.QWebEngineUrlRequestJob.UrlInvalid, - qutescheme.RequestDeniedError: QtWebEngineCore.QWebEngineUrlRequestJob.RequestDenied, - qutescheme.SchemeOSError: QtWebEngineCore.QWebEngineUrlRequestJob.UrlNotFound, - qutescheme.Error: QtWebEngineCore.QWebEngineUrlRequestJob.RequestFailed, + qutescheme.NotFoundError: url_request_job.UrlNotFound, + qutescheme.UrlInvalidError: url_request_job.UrlInvalid, + qutescheme.RequestDeniedError: url_request_job.RequestDenied, + qutescheme.SchemeOSError: url_request_job.UrlNotFound, + qutescheme.Error: url_request_job.RequestFailed, } exctype = type(e) log.network.error(f"{exctype.__name__} while handling qute://* URL: {e}") @@ -125,11 +126,12 @@ def init(): Note this needs to be called early, before constructing any QtWebEngine classes. """ - if QtWebEngineCore.QWebEngineUrlScheme is not None: - assert not QtWebEngineCore.QWebEngineUrlScheme.schemeByName(b'qute').name() - scheme = QtWebEngineCore.QWebEngineUrlScheme(b'qute') + url_scheme = QtWebEngineCore.QWebEngineUrlScheme + if url_scheme is not None: + assert not url_scheme.schemeByName(b'qute').name() + scheme = url_scheme(b'qute') scheme.setFlags( - QtWebEngineCore.QWebEngineUrlScheme.LocalScheme - | QtWebEngineCore.QWebEngineUrlScheme.LocalAccessAllowed # type: ignore[arg-type] + url_scheme.LocalScheme + | url_scheme.LocalAccessAllowed # type: ignore[arg-type] ) - QtWebEngineCore.QWebEngineUrlScheme.registerScheme(scheme) + url_scheme.registerScheme(scheme) diff --git a/qutebrowser/browser/webengine/webenginesettings.py b/qutebrowser/browser/webengine/webenginesettings.py index ca544a67e..4eb4ce091 100644 --- a/qutebrowser/browser/webengine/webenginesettings.py +++ b/qutebrowser/browser/webengine/webenginesettings.py @@ -40,6 +40,10 @@ from qutebrowser.utils import (standarddir, qtutils, message, log, if TYPE_CHECKING: from qutebrowser.browser.webengine import interceptor + +QWebEngineSettings = QtWebEngineWidgets.QWebEngineSettings + + # The default QWebEngineProfile default_profile = cast(QtWebEngineWidgets.QWebEngineProfile, None) # The QWebEngineProfile used for private (off-the-record) windows @@ -108,93 +112,96 @@ class WebEngineSettings(websettings.AbstractSettings): _ATTRIBUTES = { 'content.xss_auditing': Attr( - QtWebEngineWidgets.QWebEngineSettings.XSSAuditingEnabled + QWebEngineSettings.XSSAuditingEnabled ), - 'content.images': Attr(QtWebEngineWidgets.QWebEngineSettings.AutoLoadImages), + 'content.images': Attr(QWebEngineSettings.AutoLoadImages), 'content.javascript.enabled': Attr( - QtWebEngineWidgets.QWebEngineSettings.JavascriptEnabled + QWebEngineSettings.JavascriptEnabled ), 'content.javascript.can_open_tabs_automatically': Attr( - QtWebEngineWidgets.QWebEngineSettings.JavascriptCanOpenWindows + QWebEngineSettings.JavascriptCanOpenWindows ), 'content.javascript.can_access_clipboard': Attr( - QtWebEngineWidgets.QWebEngineSettings.JavascriptCanAccessClipboard + QWebEngineSettings.JavascriptCanAccessClipboard ), - 'content.plugins': Attr(QtWebEngineWidgets.QWebEngineSettings.PluginsEnabled), + 'content.plugins': Attr(QWebEngineSettings.PluginsEnabled), 'content.hyperlink_auditing': Attr( - QtWebEngineWidgets.QWebEngineSettings.HyperlinkAuditingEnabled + QWebEngineSettings.HyperlinkAuditingEnabled ), 'content.local_content_can_access_remote_urls': Attr( - QtWebEngineWidgets.QWebEngineSettings.LocalContentCanAccessRemoteUrls + QWebEngineSettings.LocalContentCanAccessRemoteUrls ), 'content.local_content_can_access_file_urls': Attr( - QtWebEngineWidgets.QWebEngineSettings.LocalContentCanAccessFileUrls + QWebEngineSettings.LocalContentCanAccessFileUrls ), - 'content.webgl': Attr(QtWebEngineWidgets.QWebEngineSettings.WebGLEnabled), + 'content.webgl': Attr(QWebEngineSettings.WebGLEnabled), 'content.local_storage': Attr( - QtWebEngineWidgets.QWebEngineSettings.LocalStorageEnabled + QWebEngineSettings.LocalStorageEnabled ), 'content.desktop_capture': Attr( - QtWebEngineWidgets.QWebEngineSettings.ScreenCaptureEnabled, + QWebEngineSettings.ScreenCaptureEnabled, converter=lambda val: True if val == 'ask' else val, ), # 'ask' is handled via the permission system 'input.spatial_navigation': Attr( - QtWebEngineWidgets.QWebEngineSettings.SpatialNavigationEnabled + QWebEngineSettings.SpatialNavigationEnabled ), 'input.links_included_in_focus_chain': Attr( - QtWebEngineWidgets.QWebEngineSettings.LinksIncludedInFocusChain + QWebEngineSettings.LinksIncludedInFocusChain ), 'scrolling.smooth': Attr( - QtWebEngineWidgets.QWebEngineSettings.ScrollAnimatorEnabled + QWebEngineSettings.ScrollAnimatorEnabled ), 'content.print_element_backgrounds': Attr( - QtWebEngineWidgets.QWebEngineSettings.PrintElementBackgrounds + QWebEngineSettings.PrintElementBackgrounds ), 'content.autoplay': Attr( - QtWebEngineWidgets.QWebEngineSettings.PlaybackRequiresUserGesture, + QWebEngineSettings.PlaybackRequiresUserGesture, converter=operator.not_, ), 'content.dns_prefetch': Attr( - QtWebEngineWidgets.QWebEngineSettings.DnsPrefetchEnabled + QWebEngineSettings.DnsPrefetchEnabled ), 'tabs.favicons.show': Attr( - QtWebEngineWidgets.QWebEngineSettings.AutoLoadIconsForPage, + QWebEngineSettings.AutoLoadIconsForPage, converter=lambda val: val != 'never', ), } _FONT_SIZES = { - 'fonts.web.size.minimum': QtWebEngineWidgets.QWebEngineSettings.MinimumFontSize, - 'fonts.web.size.minimum_logical': QtWebEngineWidgets.QWebEngineSettings.MinimumLogicalFontSize, - 'fonts.web.size.default': QtWebEngineWidgets.QWebEngineSettings.DefaultFontSize, - 'fonts.web.size.default_fixed': QtWebEngineWidgets.QWebEngineSettings.DefaultFixedFontSize, + 'fonts.web.size.minimum': QWebEngineSettings.MinimumFontSize, + 'fonts.web.size.minimum_logical': QWebEngineSettings.MinimumLogicalFontSize, + 'fonts.web.size.default': QWebEngineSettings.DefaultFontSize, + 'fonts.web.size.default_fixed': QWebEngineSettings.DefaultFixedFontSize, } _FONT_FAMILIES = { - 'fonts.web.family.standard': QtWebEngineWidgets.QWebEngineSettings.StandardFont, - 'fonts.web.family.fixed': QtWebEngineWidgets.QWebEngineSettings.FixedFont, - 'fonts.web.family.serif': QtWebEngineWidgets.QWebEngineSettings.SerifFont, - 'fonts.web.family.sans_serif': QtWebEngineWidgets.QWebEngineSettings.SansSerifFont, - 'fonts.web.family.cursive': QtWebEngineWidgets.QWebEngineSettings.CursiveFont, - 'fonts.web.family.fantasy': QtWebEngineWidgets.QWebEngineSettings.FantasyFont, + 'fonts.web.family.standard': QWebEngineSettings.StandardFont, + 'fonts.web.family.fixed': QWebEngineSettings.FixedFont, + 'fonts.web.family.serif': QWebEngineSettings.SerifFont, + 'fonts.web.family.sans_serif': QWebEngineSettings.SansSerifFont, + 'fonts.web.family.cursive': QWebEngineSettings.CursiveFont, + 'fonts.web.family.fantasy': QWebEngineSettings.FantasyFont, } _UNKNOWN_URL_SCHEME_POLICY = { - 'disallow': QtWebEngineWidgets.QWebEngineSettings.DisallowUnknownUrlSchemes, - 'allow-from-user-interaction': QtWebEngineWidgets.QWebEngineSettings.AllowUnknownUrlSchemesFromUserInteraction, - 'allow-all': QtWebEngineWidgets.QWebEngineSettings.AllowAllUnknownUrlSchemes, + 'disallow': QWebEngineSettings.DisallowUnknownUrlSchemes, + 'allow-from-user-interaction': getattr( # noqa: B009 + QWebEngineSettings, + "AllowUnknownUrlSchemesFromUserInteraction", + ), + 'allow-all': QWebEngineSettings.AllowAllUnknownUrlSchemes, } # Mapping from WebEngineSettings::initDefaults in # qtwebengine/src/core/web_engine_settings.cpp _FONT_TO_QFONT = { - QtWebEngineWidgets.QWebEngineSettings.StandardFont: QtGui.QFont.Serif, - QtWebEngineWidgets.QWebEngineSettings.FixedFont: QtGui.QFont.Monospace, - QtWebEngineWidgets.QWebEngineSettings.SerifFont: QtGui.QFont.Serif, - QtWebEngineWidgets.QWebEngineSettings.SansSerifFont: QtGui.QFont.SansSerif, - QtWebEngineWidgets.QWebEngineSettings.CursiveFont: QtGui.QFont.Cursive, - QtWebEngineWidgets.QWebEngineSettings.FantasyFont: QtGui.QFont.Fantasy, + QWebEngineSettings.StandardFont: QtGui.QFont.Serif, + QWebEngineSettings.FixedFont: QtGui.QFont.Monospace, + QWebEngineSettings.SerifFont: QtGui.QFont.Serif, + QWebEngineSettings.SansSerifFont: QtGui.QFont.SansSerif, + QWebEngineSettings.CursiveFont: QtGui.QFont.Cursive, + QWebEngineSettings.FantasyFont: QtGui.QFont.Fantasy, } def set_unknown_url_scheme_policy( diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index fa8d9288f..8e9e51e5d 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -39,6 +39,9 @@ from qutebrowser.qt import QtCore, sip from qutebrowser.misc import objects, miscwidgets +QWebEnginePage = QtWebEngineWidgets.QWebEnginePage + + # Mapping worlds from usertypes.JsWorld to QWebEngineScript world IDs. _JS_WORLD_MAP = { usertypes.JsWorld.main: QtWebEngineWidgets.QWebEngineScript.MainWorld, @@ -191,7 +194,9 @@ class WebEngineSearch(browsertab.AbstractSearch): self._wrap_handler = _WebEngineSearchWrapHandler() def _empty_flags(self): - return QtWebEngineWidgets.QWebEnginePage.FindFlags(0) # type: ignore[call-overload] + return QtWebEngineWidgets.QWebEnginePage.FindFlags( + 0 + ) # type: ignore[call-overload] def _args_to_flags(self, reverse, ignore_case): flags = self._empty_flags() @@ -874,24 +879,24 @@ class _WebEnginePermissions(QtCore.QObject): _options = { 0: 'content.notifications.enabled', - QtWebEngineWidgets.QWebEnginePage.Geolocation: 'content.geolocation', - QtWebEngineWidgets.QWebEnginePage.MediaAudioCapture: 'content.media.audio_capture', - QtWebEngineWidgets.QWebEnginePage.MediaVideoCapture: 'content.media.video_capture', - QtWebEngineWidgets.QWebEnginePage.MediaAudioVideoCapture: 'content.media.audio_video_capture', - QtWebEngineWidgets.QWebEnginePage.MouseLock: 'content.mouse_lock', - QtWebEngineWidgets.QWebEnginePage.DesktopVideoCapture: 'content.desktop_capture', - QtWebEngineWidgets.QWebEnginePage.DesktopAudioVideoCapture: 'content.desktop_capture', + QWebEnginePage.Geolocation: 'content.geolocation', + QWebEnginePage.MediaAudioCapture: 'content.media.audio_capture', + QWebEnginePage.MediaVideoCapture: 'content.media.video_capture', + QWebEnginePage.MediaAudioVideoCapture: 'content.media.audio_video_capture', + QWebEnginePage.MouseLock: 'content.mouse_lock', + QWebEnginePage.DesktopVideoCapture: 'content.desktop_capture', + QWebEnginePage.DesktopAudioVideoCapture: 'content.desktop_capture', } _messages = { 0: 'show notifications', - QtWebEngineWidgets.QWebEnginePage.Geolocation: 'access your location', - QtWebEngineWidgets.QWebEnginePage.MediaAudioCapture: 'record audio', - QtWebEngineWidgets.QWebEnginePage.MediaVideoCapture: 'record video', - QtWebEngineWidgets.QWebEnginePage.MediaAudioVideoCapture: 'record audio/video', - QtWebEngineWidgets.QWebEnginePage.MouseLock: 'hide your mouse pointer', - QtWebEngineWidgets.QWebEnginePage.DesktopVideoCapture: 'capture your desktop', - QtWebEngineWidgets.QWebEnginePage.DesktopAudioVideoCapture: 'capture your desktop and audio', + QWebEnginePage.Geolocation: 'access your location', + QWebEnginePage.MediaAudioCapture: 'record audio', + QWebEnginePage.MediaVideoCapture: 'record video', + QWebEnginePage.MediaAudioVideoCapture: 'record audio/video', + QWebEnginePage.MouseLock: 'hide your mouse pointer', + QWebEnginePage.DesktopVideoCapture: 'capture your desktop', + QWebEnginePage.DesktopAudioVideoCapture: 'capture your desktop and audio', } def __init__(self, tab, parent=None): @@ -1536,12 +1541,13 @@ class WebEngineTab(browsertab.AbstractTab): # WORKAROUND for https://bugreports.qt.io/browse/QTBUG-58697 status = QtWebEngineWidgets.QWebEnginePage.CrashedTerminationStatus + term_status = browsertab.TerminationStatus status_map = { - QtWebEngineWidgets.QWebEnginePage.NormalTerminationStatus: browsertab.TerminationStatus.normal, - QtWebEngineWidgets.QWebEnginePage.AbnormalTerminationStatus: browsertab.TerminationStatus.abnormal, - QtWebEngineWidgets.QWebEnginePage.CrashedTerminationStatus: browsertab.TerminationStatus.crashed, - QtWebEngineWidgets.QWebEnginePage.KilledTerminationStatus: browsertab.TerminationStatus.killed, - -1: browsertab.TerminationStatus.unknown, + QWebEnginePage.NormalTerminationStatus: term_status.normal, + QWebEnginePage.AbnormalTerminationStatus: term_status.abnormal, + QWebEnginePage.CrashedTerminationStatus: term_status.crashed, + QWebEnginePage.KilledTerminationStatus: term_status.killed, + -1: term_status.unknown, } self.renderer_process_terminated.emit(status_map[status], exitcode) diff --git a/qutebrowser/browser/webengine/webview.py b/qutebrowser/browser/webengine/webview.py index f6e266523..fdcbb224d 100644 --- a/qutebrowser/browser/webengine/webview.py +++ b/qutebrowser/browser/webengine/webview.py @@ -29,9 +29,12 @@ from qutebrowser.utils import log, debug, usertypes from qutebrowser.qt import QtCore +QWebEnginePage = QtWebEngineWidgets.QWebEnginePage + + _QB_FILESELECTION_MODES = { - QtWebEngineWidgets.QWebEnginePage.FileSelectOpen: shared.FileSelectionMode.single_file, - QtWebEngineWidgets.QWebEnginePage.FileSelectOpenMultiple: shared.FileSelectionMode.multiple_files, + QWebEnginePage.FileSelectOpen: shared.FileSelectionMode.single_file, + QWebEnginePage.FileSelectOpenMultiple: shared.FileSelectionMode.multiple_files, # WORKAROUND for https://bugreports.qt.io/browse/QTBUG-91489 # # QtWebEngine doesn't expose this value from its internal @@ -39,7 +42,7 @@ _QB_FILESELECTION_MODES = { # the public QWebEnginePage::FileSelectionMode enum). # However, QWebEnginePage::chooseFiles is still called with the matching value # (2) when a file input with "webkitdirectory" is used. - QtWebEngineWidgets.QWebEnginePage.FileSelectionMode( + QWebEnginePage.FileSelectionMode( 2 ): shared.FileSelectionMode.folder, } @@ -97,27 +100,27 @@ class WebEngineView(QtWebEngineWidgets.QWebEngineView): Return: The new QWebEngineView object. """ - debug_type = debug.qenum_key(QtWebEngineWidgets.QWebEnginePage, wintype) + debug_type = debug.qenum_key(QWebEnginePage, wintype) background = config.val.tabs.background log.webview.debug("createWindow with type {}, background {}".format( debug_type, background)) - if wintype == QtWebEngineWidgets.QWebEnginePage.WebBrowserWindow: + if wintype == QWebEnginePage.WebBrowserWindow: # Shift-Alt-Click target = usertypes.ClickTarget.window - elif wintype == QtWebEngineWidgets.QWebEnginePage.WebDialog: + elif wintype == QWebEnginePage.WebDialog: log.webview.warning("{} requested, but we don't support " "that!".format(debug_type)) target = usertypes.ClickTarget.tab - elif wintype == QtWebEngineWidgets.QWebEnginePage.WebBrowserTab: + elif wintype == QWebEnginePage.WebBrowserTab: # Middle-click / Ctrl-Click with Shift # FIXME:qtwebengine this also affects target=_blank links... if background: target = usertypes.ClickTarget.tab else: target = usertypes.ClickTarget.tab_bg - elif wintype == QtWebEngineWidgets.QWebEnginePage.WebBrowserBackgroundTab: + elif wintype == QWebEnginePage.WebBrowserBackgroundTab: # Middle-click / Ctrl-Click if background: target = usertypes.ClickTarget.tab_bg @@ -137,7 +140,7 @@ class WebEngineView(QtWebEngineWidgets.QWebEngineView): super().contextMenuEvent(ev) -class WebEnginePage(QtWebEngineWidgets.QWebEnginePage): +class WebEnginePage(QWebEnginePage): """Custom QWebEnginePage subclass with qutebrowser-specific features. @@ -214,46 +217,46 @@ class WebEnginePage(QtWebEngineWidgets.QWebEnginePage): def javaScriptConsoleMessage(self, level, msg, line, source): """Log javascript messages to qutebrowser's log.""" level_map = { - QtWebEngineWidgets.QWebEnginePage.InfoMessageLevel: usertypes.JsLogLevel.info, - QtWebEngineWidgets.QWebEnginePage.WarningMessageLevel: usertypes.JsLogLevel.warning, - QtWebEngineWidgets.QWebEnginePage.ErrorMessageLevel: usertypes.JsLogLevel.error, + QWebEnginePage.InfoMessageLevel: usertypes.JsLogLevel.info, + QWebEnginePage.WarningMessageLevel: usertypes.JsLogLevel.warning, + QWebEnginePage.ErrorMessageLevel: usertypes.JsLogLevel.error, } shared.javascript_log_message(level_map[level], source, line, msg) def acceptNavigationRequest( self, url: QtCore.QUrl, - typ: QtWebEngineWidgets.QWebEnginePage.NavigationType, + typ: QWebEnginePage.NavigationType, is_main_frame: bool, ) -> bool: """Override acceptNavigationRequest to forward it to the tab API.""" + nav_request_type = usertypes.NavigationRequest.Type type_map = { - QtWebEngineWidgets.QWebEnginePage.NavigationTypeLinkClicked: usertypes.NavigationRequest.Type.link_clicked, - QtWebEngineWidgets.QWebEnginePage.NavigationTypeTyped: usertypes.NavigationRequest.Type.typed, - QtWebEngineWidgets.QWebEnginePage.NavigationTypeFormSubmitted: usertypes.NavigationRequest.Type.form_submitted, - QtWebEngineWidgets.QWebEnginePage.NavigationTypeBackForward: usertypes.NavigationRequest.Type.back_forward, - QtWebEngineWidgets.QWebEnginePage.NavigationTypeReload: usertypes.NavigationRequest.Type.reloaded, - QtWebEngineWidgets.QWebEnginePage.NavigationTypeOther: usertypes.NavigationRequest.Type.other, + QWebEnginePage.NavigationTypeLinkClicked: nav_request_type.link_clicked, + QWebEnginePage.NavigationTypeTyped: nav_request_type.typed, + QWebEnginePage.NavigationTypeFormSubmitted: nav_request_type.form_submitted, + QWebEnginePage.NavigationTypeBackForward: nav_request_type.back_forward, + QWebEnginePage.NavigationTypeReload: nav_request_type.reloaded, + QWebEnginePage.NavigationTypeOther: nav_request_type.other, } try: type_map[ - QtWebEngineWidgets.QWebEnginePage.NavigationTypeRedirect - ] = usertypes.NavigationRequest.Type.redirect + QWebEnginePage.NavigationTypeRedirect + ] = nav_request_type.redirect except AttributeError: # Added in Qt 5.14 pass navigation = usertypes.NavigationRequest( url=url, - navigation_type=type_map.get( - typ, usertypes.NavigationRequest.Type.other), + navigation_type=type_map.get(typ, nav_request_type.other), is_main_frame=is_main_frame) self.navigation_request.emit(navigation) return navigation.accepted def chooseFiles( self, - mode: QtWebEngineWidgets.QWebEnginePage.FileSelectionMode, + mode: QWebEnginePage.FileSelectionMode, old_files: Iterable[str], accepted_mimetypes: Iterable[str], ) -> List[str]: diff --git a/qutebrowser/browser/webkit/network/webkitqutescheme.py b/qutebrowser/browser/webkit/network/webkitqutescheme.py index cbd0baa18..fa9678ea7 100644 --- a/qutebrowser/browser/webkit/network/webkitqutescheme.py +++ b/qutebrowser/browser/webkit/network/webkitqutescheme.py @@ -61,12 +61,13 @@ def handler(request, operation, current_url): try: mimetype, data = qutescheme.data_for_url(url) except qutescheme.Error as e: + qnet_reply = QtNetwork.QNetworkReply errors = { - qutescheme.NotFoundError: QtNetwork.QNetworkReply.ContentNotFoundError, - qutescheme.UrlInvalidError: QtNetwork.QNetworkReply.ContentOperationNotPermittedError, - qutescheme.RequestDeniedError: QtNetwork.QNetworkReply.ContentAccessDenied, - qutescheme.SchemeOSError: QtNetwork.QNetworkReply.ContentNotFoundError, - qutescheme.Error: QtNetwork.QNetworkReply.InternalServerError, + qutescheme.NotFoundError: qnet_reply.ContentNotFoundError, + qutescheme.UrlInvalidError: qnet_reply.ContentOperationNotPermittedError, + qutescheme.RequestDeniedError: qnet_reply.ContentAccessDenied, + qutescheme.SchemeOSError: qnet_reply.ContentNotFoundError, + qutescheme.Error: qnet_reply.InternalServerError, } exctype = type(e) log.misc.error("{} while handling qute://* URL".format( diff --git a/qutebrowser/browser/webkit/webpage.py b/qutebrowser/browser/webkit/webpage.py index 3c732a2dd..fd41c701e 100644 --- a/qutebrowser/browser/webkit/webpage.py +++ b/qutebrowser/browser/webkit/webpage.py @@ -61,9 +61,10 @@ class BrowserPage(QtWebKitWidgets.QWebPage): self._win_id = win_id self._tabdata = tabdata self._is_shutting_down = False + webpage = QtWebKitWidgets.QWebPage self._extension_handlers = { - QtWebKitWidgets.QWebPage.ErrorPageExtension: self._handle_errorpage, - QtWebKitWidgets.QWebPage.ChooseMultipleFilesExtension: self._handle_multiple_files, + webpage.ErrorPageExtension: self._handle_errorpage, + webpage.ChooseMultipleFilesExtension: self._handle_multiple_files, } self._ignore_load_started = False self.error_occurred = False @@ -523,13 +524,15 @@ class BrowserPage(QtWebKitWidgets.QWebPage): Checks if it should open it in a tab (middle-click or control) or not, and then conditionally opens the URL here or in another tab/window. """ + webpage = QtWebKitWidgets.QWebPage + nav_request = usertypes.NavigationRequest type_map = { - QtWebKitWidgets.QWebPage.NavigationTypeLinkClicked: usertypes.NavigationRequest.Type.link_clicked, - QtWebKitWidgets.QWebPage.NavigationTypeFormSubmitted: usertypes.NavigationRequest.Type.form_submitted, - QtWebKitWidgets.QWebPage.NavigationTypeFormResubmitted: usertypes.NavigationRequest.Type.form_resubmitted, - QtWebKitWidgets.QWebPage.NavigationTypeBackOrForward: usertypes.NavigationRequest.Type.back_forward, - QtWebKitWidgets.QWebPage.NavigationTypeReload: usertypes.NavigationRequest.Type.reloaded, - QtWebKitWidgets.QWebPage.NavigationTypeOther: usertypes.NavigationRequest.Type.other, + webpage.NavigationTypeLinkClicked: nav_request.Type.link_clicked, + webpage.NavigationTypeFormSubmitted: nav_request.Type.form_submitted, + webpage.NavigationTypeFormResubmitted: nav_request.Type.form_resubmitted, + webpage.NavigationTypeBackOrForward: nav_request.Type.back_forward, + webpage.NavigationTypeReload: nav_request.Type.reloaded, + webpage.NavigationTypeOther: nav_request.Type.other, } is_main_frame = frame is self.mainFrame() navigation = usertypes.NavigationRequest(url=request.url(), diff --git a/qutebrowser/misc/earlyinit.py b/qutebrowser/misc/earlyinit.py index 7ebe2c69f..1b4360156 100644 --- a/qutebrowser/misc/earlyinit.py +++ b/qutebrowser/misc/earlyinit.py @@ -186,7 +186,8 @@ def check_qt_version(): from qutebrowser.qt import QtCore try: qt_ver = QtCore.QLibraryInfo.version().normalized() - recent_qt_runtime = qt_ver >= QtCore.QVersionNumber(5, 12) # type: ignore[operator] + qt_512_ver = QtCore.QVersionNumber(5, 12) + recent_qt_runtime = qt_ver >= qt_512_ver # type: ignore[operator] except (ImportError, AttributeError): # QVersionNumber was added in Qt 5.6, QLibraryInfo.version() in 5.8 recent_qt_runtime = False diff --git a/tests/unit/utils/test_qtutils.py b/tests/unit/utils/test_qtutils.py index 84084de33..8a0071970 100644 --- a/tests/unit/utils/test_qtutils.py +++ b/tests/unit/utils/test_qtutils.py @@ -216,12 +216,12 @@ def test_ensure_valid(obj, raising, exc_reason, exc_str): ( QtCore.QDataStream.ReadCorruptData, True, - "The data stream has read corrupt " "data.", + "The data stream has read corrupt data.", ), ( QtCore.QDataStream.WriteFailed, True, - "The data stream cannot write to the " "underlying device.", + "The data stream cannot write to the underlying device.", ), ], ) |