diff options
Diffstat (limited to 'qutebrowser/browser/webkit/webpage.py')
-rw-r--r-- | qutebrowser/browser/webkit/webpage.py | 100 |
1 files changed, 47 insertions, 53 deletions
diff --git a/qutebrowser/browser/webkit/webpage.py b/qutebrowser/browser/webkit/webpage.py index 2dd4551b9..a71063526 100644 --- a/qutebrowser/browser/webkit/webpage.py +++ b/qutebrowser/browser/webkit/webpage.py @@ -24,23 +24,17 @@ import html import functools - -from qutebrowser.qt.core import pyqtSlot, pyqtSignal, Qt, QUrl, QPoint -from qutebrowser.qt.gui import QDesktopServices -from qutebrowser.qt.network import QNetworkReply, QNetworkRequest -from qutebrowser.qt.widgets import QFileDialog -from qutebrowser.qt.printsupport import QPrintDialog -from qutebrowser.qt.webkitwidgets import QWebPage, QWebFrame +from qutebrowser.qt import widgets, webkitwidgets, printsupport, network, gui from qutebrowser.config import websettings, config from qutebrowser.browser import pdfjs, shared, downloads, greasemonkey from qutebrowser.browser.webkit import http from qutebrowser.browser.webkit.network import networkmanager from qutebrowser.utils import message, usertypes, log, jinja, objreg -from qutebrowser.qt import sip +from qutebrowser.qt import core, sip -class BrowserPage(QWebPage): +class BrowserPage(webkitwidgets.QWebPage): """Our own QWebPage with advanced features. @@ -60,9 +54,9 @@ class BrowserPage(QWebPage): navigation_request: Emitted on acceptNavigationRequest. """ - shutting_down = pyqtSignal() - reloading = pyqtSignal(QUrl) - navigation_request = pyqtSignal(usertypes.NavigationRequest) + shutting_down = core.pyqtSignal() + reloading = core.pyqtSignal(core.QUrl) + navigation_request = core.pyqtSignal(usertypes.NavigationRequest) def __init__(self, win_id, tab_id, tabdata, private, parent=None): super().__init__(parent) @@ -70,8 +64,8 @@ class BrowserPage(QWebPage): self._tabdata = tabdata self._is_shutting_down = False self._extension_handlers = { - QWebPage.Extension.ErrorPageExtension: self._handle_errorpage, - QWebPage.Extension.ChooseMultipleFilesExtension: self._handle_multiple_files, + webkitwidgets.QWebPage.Extension.ErrorPageExtension: self._handle_errorpage, + webkitwidgets.QWebPage.Extension.ChooseMultipleFilesExtension: self._handle_multiple_files, } self._ignore_load_started = False self.error_occurred = False @@ -99,7 +93,7 @@ class BrowserPage(QWebPage): self.frameCreated.connect( # type: ignore[attr-defined] self._connect_userjs_signals) - @pyqtSlot('QWebFrame*') + @core.pyqtSlot('QWebFrame*') def _connect_userjs_signals(self, frame): """Connect userjs related signals to `frame`. @@ -137,27 +131,27 @@ class BrowserPage(QWebPage): False if no error page should be displayed, True otherwise. """ ignored_errors = [ - (QWebPage.ErrorDomain.QtNetwork, QNetworkReply.NetworkError.OperationCanceledError), + (webkitwidgets.QWebPage.ErrorDomain.QtNetwork, network.QNetworkReply.NetworkError.OperationCanceledError), # "Loading is handled by the media engine" - (QWebPage.ErrorDomain.WebKit, 203), + (webkitwidgets.QWebPage.ErrorDomain.WebKit, 203), # "Frame load interrupted by policy change" - (QWebPage.ErrorDomain.WebKit, 102), + (webkitwidgets.QWebPage.ErrorDomain.WebKit, 102), ] errpage.baseUrl = info.url urlstr = info.url.toDisplayString() - if (info.domain, info.error) == (QWebPage.ErrorDomain.QtNetwork, - QNetworkReply.NetworkError.ProtocolUnknownError): + if (info.domain, info.error) == (webkitwidgets.QWebPage.ErrorDomain.QtNetwork, + network.QNetworkReply.NetworkError.ProtocolUnknownError): # For some reason, we get a segfault when we use # QDesktopServices::openUrl with info.url directly - however it # works when we construct a copy of it. - url = QUrl(info.url) + url = core.QUrl(info.url) scheme = url.scheme() message.confirm_async( title="Open external application for {}-link?".format(scheme), text="URL: <b>{}</b>".format( html.escape(url.toDisplayString())), - yes_action=functools.partial(QDesktopServices.openUrl, url), - url=info.url.toString(QUrl.UrlFormattingOption.RemovePassword | QUrl.ComponentFormattingOption.FullyEncoded)) + yes_action=functools.partial(gui.QDesktopServices.openUrl, url), + url=info.url.toString(core.QUrl.UrlFormattingOption.RemovePassword | core.QUrl.ComponentFormattingOption.FullyEncoded)) return True elif (info.domain, info.error) in ignored_errors: log.webview.debug("Ignored error on {}: {} (error domain: {}, " @@ -176,7 +170,7 @@ class BrowserPage(QWebPage): # any space. We can't hide the frame's documentElement # directly though. for elem in main_frame.documentElement().findAll('iframe'): - if QUrl(elem.attribute('src')) == info.url: + if core.QUrl(elem.attribute('src')) == info.url: elem.setAttribute('style', 'display: none') return False else: @@ -194,7 +188,7 @@ class BrowserPage(QWebPage): errpage.encoding = 'utf-8' return True - def chooseFile(self, parent_frame: QWebFrame, suggested_file: str) -> str: + def chooseFile(self, parent_frame: webkitwidgets.QWebFrame, suggested_file: str) -> str: """Override chooseFile to (optionally) invoke custom file uploader.""" handler = config.val.fileselect.handler if handler == "default": @@ -226,7 +220,7 @@ class BrowserPage(QWebPage): if info.suggestedFileNames: suggested_file = info.suggestedFileNames[0] - files.fileNames, _ = QFileDialog.getOpenFileNames( + files.fileNames, _ = widgets.QFileDialog.getOpenFileNames( None, None, suggested_file) # type: ignore[arg-type] return True @@ -253,8 +247,8 @@ class BrowserPage(QWebPage): def on_print_requested(self, frame): """Handle printing when requested via javascript.""" - printdiag = QPrintDialog() - printdiag.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose) + printdiag = printsupport.QPrintDialog() + printdiag.setAttribute(core.Qt.WidgetAttribute.WA_DeleteOnClose) printdiag.open(lambda: frame.print(printdiag.printer())) def on_download_requested(self, request): @@ -265,11 +259,11 @@ class BrowserPage(QWebPage): soon as the user has entered the filename, as Qt seems to delete it after this slot returns. """ - req = QNetworkRequest(request) + req = network.QNetworkRequest(request) download_manager = objreg.get('qtnetwork-download-manager') download_manager.get_request(req, qnam=self.networkAccessManager()) - @pyqtSlot('QNetworkReply*') + @core.pyqtSlot('QNetworkReply*') def on_unsupported_content(self, reply): """Handle an unsupportedContent signal. @@ -306,7 +300,7 @@ class BrowserPage(QWebPage): download_manager.fetch(reply, suggested_filename=suggested_filename) - @pyqtSlot() + @core.pyqtSlot() def on_load_started(self): """Reset error_occurred when loading of a new page started.""" if self._ignore_load_started: @@ -349,10 +343,10 @@ class BrowserPage(QWebPage): log.webview.debug(f'Running GM script: {script}') frame.evaluateJavaScript(script.code()) - @pyqtSlot('QWebFrame*', 'QWebPage::Feature') + @core.pyqtSlot('QWebFrame*', 'QWebPage::Feature') def _on_feature_permission_requested(self, frame, feature): """Ask the user for approval for geolocation/notifications.""" - if not isinstance(frame, QWebFrame): # pragma: no cover + if not isinstance(frame, webkitwidgets.QWebFrame): # pragma: no cover # This makes no sense whatsoever, but someone reported this being # called with a QBuffer... log.misc.error("on_feature_permission_requested got called with " @@ -360,24 +354,24 @@ class BrowserPage(QWebPage): return options = { - QWebPage.Feature.Notifications: 'content.notifications.enabled', - QWebPage.Feature.Geolocation: 'content.geolocation', + webkitwidgets.QWebPage.Feature.Notifications: 'content.notifications.enabled', + webkitwidgets.QWebPage.Feature.Geolocation: 'content.geolocation', } messages = { - QWebPage.Feature.Notifications: 'show notifications', - QWebPage.Feature.Geolocation: 'access your location', + webkitwidgets.QWebPage.Feature.Notifications: 'show notifications', + webkitwidgets.QWebPage.Feature.Geolocation: 'access your location', } yes_action = functools.partial( self.setFeaturePermission, frame, feature, - QWebPage.PermissionPolicy.PermissionGrantedByUser) + webkitwidgets.QWebPage.PermissionPolicy.PermissionGrantedByUser) no_action = functools.partial( self.setFeaturePermission, frame, feature, - QWebPage.PermissionPolicy.PermissionDeniedByUser) + webkitwidgets.QWebPage.PermissionPolicy.PermissionDeniedByUser) - url = frame.url().adjusted(QUrl.UrlFormattingOption.RemoveUserInfo | # type: ignore[operator] - QUrl.UrlFormattingOption.RemovePath | - QUrl.UrlFormattingOption.RemoveQuery | - QUrl.UrlFormattingOption.RemoveFragment) + url = frame.url().adjusted(core.QUrl.UrlFormattingOption.RemoveUserInfo | # type: ignore[operator] + core.QUrl.UrlFormattingOption.RemovePath | + core.QUrl.UrlFormattingOption.RemoveQuery | + core.QUrl.UrlFormattingOption.RemoveFragment) question = shared.feature_permission( url=url, option=options[feature], msg=messages[feature], @@ -431,7 +425,7 @@ class BrowserPage(QWebPage): return if 'zoom' in data: frame.page().view().tab.zoom.set_factor(data['zoom']) - if 'scroll-pos' in data and frame.scrollPosition() == QPoint(0, 0): + if 'scroll-pos' in data and frame.scrollPosition() == core.QPoint(0, 0): frame.setScrollPosition(data['scroll-pos']) def userAgentForUrl(self, url): @@ -497,9 +491,9 @@ class BrowserPage(QWebPage): source, line, msg) def acceptNavigationRequest(self, - frame: QWebFrame, - request: QNetworkRequest, - typ: QWebPage.NavigationType) -> bool: + frame: webkitwidgets.QWebFrame, + request: network.QNetworkRequest, + typ: webkitwidgets.QWebPage.NavigationType) -> bool: """Override acceptNavigationRequest to handle clicked links. Setting linkDelegationPolicy to DelegateAllLinks and using a slot bound @@ -510,17 +504,17 @@ class BrowserPage(QWebPage): and then conditionally opens the URL here or in another tab/window. """ type_map = { - QWebPage.NavigationType.NavigationTypeLinkClicked: + webkitwidgets.QWebPage.NavigationType.NavigationTypeLinkClicked: usertypes.NavigationRequest.Type.link_clicked, - QWebPage.NavigationType.NavigationTypeFormSubmitted: + webkitwidgets.QWebPage.NavigationType.NavigationTypeFormSubmitted: usertypes.NavigationRequest.Type.form_submitted, - QWebPage.NavigationType.NavigationTypeFormResubmitted: + webkitwidgets.QWebPage.NavigationType.NavigationTypeFormResubmitted: usertypes.NavigationRequest.Type.form_resubmitted, - QWebPage.NavigationType.NavigationTypeBackOrForward: + webkitwidgets.QWebPage.NavigationType.NavigationTypeBackOrForward: usertypes.NavigationRequest.Type.back_forward, - QWebPage.NavigationType.NavigationTypeReload: + webkitwidgets.QWebPage.NavigationType.NavigationTypeReload: usertypes.NavigationRequest.Type.reload, - QWebPage.NavigationType.NavigationTypeOther: + webkitwidgets.QWebPage.NavigationType.NavigationTypeOther: usertypes.NavigationRequest.Type.other, } is_main_frame = frame is self.mainFrame() |