summaryrefslogtreecommitdiff
path: root/qutebrowser/browser/webengine/webenginetab.py
diff options
context:
space:
mode:
Diffstat (limited to 'qutebrowser/browser/webengine/webenginetab.py')
-rw-r--r--qutebrowser/browser/webengine/webenginetab.py238
1 files changed, 115 insertions, 123 deletions
diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py
index 7d355d10e..a0a83d7a7 100644
--- a/qutebrowser/browser/webengine/webenginetab.py
+++ b/qutebrowser/browser/webengine/webenginetab.py
@@ -25,12 +25,7 @@ import dataclasses
import re
import html as html_utils
from typing import cast, Union, Optional
-
-from PyQt5.QtCore import (pyqtSignal, pyqtSlot, Qt, QPoint, QPointF, QTimer, QUrl,
- QObject)
-from PyQt5.QtNetwork import QAuthenticator
-from PyQt5.QtWidgets import QWidget
-from PyQt5.QtWebEngineWidgets import QWebEnginePage, QWebEngineScript, QWebEngineHistory
+from qutebrowser.qt import QtWidgets, QtWebEngineWidgets, QtWebEngineCore, QtNetwork
from qutebrowser.config import config
from qutebrowser.browser import browsertab, eventfilter, shared, webelem, greasemonkey
@@ -40,16 +35,16 @@ from qutebrowser.browser.webengine import (webview, webengineelem, tabhistory,
from qutebrowser.utils import (usertypes, qtutils, log, javascript, utils,
resources, message, jinja, debug, version)
-from qutebrowser.qt import sip
+from qutebrowser.qt import QtCore, sip
from qutebrowser.misc import objects, miscwidgets
# Mapping worlds from usertypes.JsWorld to QWebEngineScript world IDs.
_JS_WORLD_MAP = {
- usertypes.JsWorld.main: QWebEngineScript.MainWorld,
- usertypes.JsWorld.application: QWebEngineScript.ApplicationWorld,
- usertypes.JsWorld.user: QWebEngineScript.UserWorld,
- usertypes.JsWorld.jseval: QWebEngineScript.UserWorld + 1,
+ usertypes.JsWorld.main: QtWebEngineWidgets.QWebEngineScript.MainWorld,
+ usertypes.JsWorld.application: QtWebEngineWidgets.QWebEngineScript.ApplicationWorld,
+ usertypes.JsWorld.user: QtWebEngineWidgets.QWebEngineScript.UserWorld,
+ usertypes.JsWorld.jseval: QtWebEngineWidgets.QWebEngineScript.UserWorld + 1,
}
@@ -57,22 +52,22 @@ class WebEngineAction(browsertab.AbstractAction):
"""QtWebEngine implementations related to web actions."""
- action_class = QWebEnginePage
- action_base = QWebEnginePage.WebAction
+ action_class = QtWebEngineWidgets.QWebEnginePage
+ action_base = QtWebEngineWidgets.QWebEnginePage.WebAction
def exit_fullscreen(self):
- self._widget.triggerPageAction(QWebEnginePage.ExitFullScreen)
+ self._widget.triggerPageAction(QtWebEngineWidgets.QWebEnginePage.ExitFullScreen)
def save_page(self):
"""Save the current page."""
- self._widget.triggerPageAction(QWebEnginePage.SavePage)
+ self._widget.triggerPageAction(QtWebEngineWidgets.QWebEnginePage.SavePage)
def show_source(self, pygments=False):
if pygments:
self._show_source_pygments()
return
- self._widget.triggerPageAction(QWebEnginePage.ViewSource)
+ self._widget.triggerPageAction(QtWebEngineWidgets.QWebEnginePage.ViewSource)
class WebEnginePrinting(browsertab.AbstractPrinting):
@@ -125,8 +120,7 @@ class _WebEngineSearchWrapHandler:
return
try:
- # pylint: disable=unused-import
- from PyQt5.QtWebEngineCore import QWebEngineFindTextResult
+ pass
except ImportError:
# WORKAROUND for some odd PyQt/packaging bug where the
# findTextResult signal is available, but QWebEngineFindTextResult
@@ -199,14 +193,14 @@ class WebEngineSearch(browsertab.AbstractSearch):
self._wrap_handler = _WebEngineSearchWrapHandler()
def _empty_flags(self):
- return 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()
if self._is_case_sensitive(ignore_case):
- flags |= QWebEnginePage.FindCaseSensitively
+ flags |= QtWebEngineWidgets.QWebEnginePage.FindCaseSensitively
if reverse:
- flags |= QWebEnginePage.FindBackward
+ flags |= QtWebEngineWidgets.QWebEnginePage.FindBackward
return flags
def connect_signals(self):
@@ -238,7 +232,7 @@ class WebEngineSearch(browsertab.AbstractSearch):
found_text = 'found' if found else "didn't find"
if flags:
flag_text = 'with flags {}'.format(debug.qflags_key(
- QWebEnginePage, flags, klass=QWebEnginePage.FindFlag))
+ QtWebEngineWidgets.QWebEnginePage, flags, klass=QtWebEngineWidgets.QWebEnginePage.FindFlag))
else:
flag_text = ''
log.webview.debug(' '.join([caller, found_text, text, flag_text])
@@ -275,20 +269,20 @@ class WebEngineSearch(browsertab.AbstractSearch):
def prev_result(self, *, result_cb=None):
# The int() here makes sure we get a copy of the flags.
- flags = QWebEnginePage.FindFlags(
+ flags = QtWebEngineWidgets.QWebEnginePage.FindFlags(
int(self._flags)) # type: ignore[call-overload]
- if flags & QWebEnginePage.FindBackward:
+ if flags & QtWebEngineWidgets.QWebEnginePage.FindBackward:
if self._wrap_handler.prevent_wrapping(going_up=False):
return
- flags &= ~QWebEnginePage.FindBackward
+ flags &= ~QtWebEngineWidgets.QWebEnginePage.FindBackward
else:
if self._wrap_handler.prevent_wrapping(going_up=True):
return
- flags |= QWebEnginePage.FindBackward
+ flags |= QtWebEngineWidgets.QWebEnginePage.FindBackward
self._find(self.text, flags, result_cb, 'prev_result')
def next_result(self, *, result_cb=None):
- going_up = self._flags & QWebEnginePage.FindBackward
+ going_up = self._flags & QtWebEngineWidgets.QWebEnginePage.FindBackward
if self._wrap_handler.prevent_wrapping(going_up=going_up):
return
self._find(self.text, self._flags, result_cb, 'next_result')
@@ -307,7 +301,7 @@ class WebEngineCaret(browsertab.AbstractCaret):
flags.add('windows')
return list(flags)
- @pyqtSlot(usertypes.KeyMode)
+ @QtCore.pyqtSlot(usertypes.KeyMode)
def _on_mode_entered(self, mode):
if mode != usertypes.KeyMode.caret:
return
@@ -335,7 +329,7 @@ class WebEngineCaret(browsertab.AbstractCaret):
else:
self.selection_toggled.emit(browsertab.SelectionState.none)
- @pyqtSlot(usertypes.KeyMode)
+ @QtCore.pyqtSlot(usertypes.KeyMode)
def _on_mode_left(self, mode):
if mode != usertypes.KeyMode.caret:
return
@@ -496,7 +490,7 @@ class WebEngineScroller(browsertab.AbstractScroller):
def __init__(self, tab, parent=None):
super().__init__(tab, parent)
self._pos_perc = (0, 0)
- self._pos_px = QPoint()
+ self._pos_px = QtCore.QPoint()
self._at_bottom = False
def _init_widget(self, widget):
@@ -504,12 +498,12 @@ class WebEngineScroller(browsertab.AbstractScroller):
page = widget.page()
page.scrollPositionChanged.connect(self._update_pos)
- def _repeated_key_press(self, key, count=1, modifier=Qt.NoModifier):
+ def _repeated_key_press(self, key, count=1, modifier=QtCore.Qt.NoModifier):
"""Send count fake key presses to this scroller's WebEngineTab."""
for _ in range(min(count, 1000)):
self._tab.fake_key_press(key, modifier)
- @pyqtSlot(QPointF)
+ @QtCore.pyqtSlot(QtCore.QPointF)
def _update_pos(self, pos):
"""Update the scroll position attributes when it changed."""
self._pos_px = pos.toPoint()
@@ -583,28 +577,28 @@ class WebEngineScroller(browsertab.AbstractScroller):
self._tab.run_js_async(js_code)
def up(self, count=1):
- self._repeated_key_press(Qt.Key_Up, count)
+ self._repeated_key_press(QtCore.Qt.Key_Up, count)
def down(self, count=1):
- self._repeated_key_press(Qt.Key_Down, count)
+ self._repeated_key_press(QtCore.Qt.Key_Down, count)
def left(self, count=1):
- self._repeated_key_press(Qt.Key_Left, count)
+ self._repeated_key_press(QtCore.Qt.Key_Left, count)
def right(self, count=1):
- self._repeated_key_press(Qt.Key_Right, count)
+ self._repeated_key_press(QtCore.Qt.Key_Right, count)
def top(self):
- self._tab.fake_key_press(Qt.Key_Home)
+ self._tab.fake_key_press(QtCore.Qt.Key_Home)
def bottom(self):
- self._tab.fake_key_press(Qt.Key_End)
+ self._tab.fake_key_press(QtCore.Qt.Key_End)
def page_up(self, count=1):
- self._repeated_key_press(Qt.Key_PageUp, count)
+ self._repeated_key_press(QtCore.Qt.Key_PageUp, count)
def page_down(self, count=1):
- self._repeated_key_press(Qt.Key_PageDown, count)
+ self._repeated_key_press(QtCore.Qt.Key_PageDown, count)
def at_top(self):
return self.pos_px().y() == 0
@@ -619,7 +613,7 @@ class WebEngineHistoryPrivate(browsertab.AbstractHistoryPrivate):
def __init__(self, tab: 'WebEngineTab') -> None:
self._tab = tab
- self._history = cast(QWebEngineHistory, None)
+ self._history = cast(QtWebEngineWidgets.QWebEngineHistory, None)
def serialize(self):
return qtutils.serialize(self._history)
@@ -659,7 +653,7 @@ class WebEngineHistoryPrivate(browsertab.AbstractHistoryPrivate):
stream, _data, cur_data = tabhistory.serialize(items)
qtutils.deserialize_stream(stream, self._history)
- @pyqtSlot()
+ @QtCore.pyqtSlot()
def _on_load_finished():
self._tab.scroller.to_point(cur_data['scroll-pos'])
self._tab.load_finished.disconnect(_on_load_finished)
@@ -668,7 +662,7 @@ class WebEngineHistoryPrivate(browsertab.AbstractHistoryPrivate):
if 'zoom' in cur_data:
self._tab.zoom.set_factor(cur_data['zoom'])
if ('scroll-pos' in cur_data and
- self._tab.scroller.pos_px() == QPoint(0, 0)):
+ self._tab.scroller.pos_px() == QtCore.QPoint(0, 0)):
self._tab.load_finished.connect(_on_load_finished)
@@ -806,7 +800,7 @@ class WebEngineAudio(browsertab.AbstractAudio):
# Implements the intended two-second delay specified at
# https://doc.qt.io/qt-5/qwebenginepage.html#recentlyAudibleChanged
delay_ms = 2000
- self._silence_timer = QTimer(self)
+ self._silence_timer = QtCore.QTimer(self)
self._silence_timer.setSingleShot(True)
self._silence_timer.setInterval(delay_ms)
@@ -854,7 +848,7 @@ class WebEngineAudio(browsertab.AbstractAudio):
page = self._widget.page()
return page.recentlyAudible()
- @pyqtSlot(QUrl)
+ @QtCore.pyqtSlot(QtCore.QUrl)
def _on_url_changed(self, url):
if self._overridden or not url.isValid():
return
@@ -866,7 +860,7 @@ class WebEngineAudio(browsertab.AbstractAudio):
self._on_url_changed(self._tab.url())
-class _WebEnginePermissions(QObject):
+class _WebEnginePermissions(QtCore.QObject):
"""Handling of various permission-related signals."""
@@ -875,30 +869,30 @@ class _WebEnginePermissions(QObject):
_options = {
0: 'content.notifications.enabled',
- 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',
+ 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',
}
_messages = {
0: 'show notifications',
- 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',
+ 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',
}
def __init__(self, tab, parent=None):
super().__init__(parent)
self._tab = tab
- self._widget = cast(QWidget, None)
+ self._widget = cast(QtWidgets.QWidget, None)
assert self._options.keys() == self._messages.keys()
def connect_signals(self):
@@ -913,7 +907,7 @@ class _WebEnginePermissions(QObject):
page.registerProtocolHandlerRequested.connect(
self._on_register_protocol_handler_requested)
- @pyqtSlot('QWebEngineFullScreenRequest')
+ @QtCore.pyqtSlot('QWebEngineFullScreenRequest')
def _on_fullscreen_requested(self, request):
request.accept()
on = request.toggleOn()
@@ -927,18 +921,18 @@ class _WebEnginePermissions(QObject):
notif.set_timeout(timeout)
notif.show()
- @pyqtSlot(QUrl, 'QWebEnginePage::Feature')
+ @QtCore.pyqtSlot(QtCore.QUrl, 'QWebEnginePage::Feature')
def _on_feature_permission_requested(self, url, feature):
"""Ask the user for approval for geolocation/media/etc.."""
page = self._widget.page()
grant_permission = functools.partial(
page.setFeaturePermission, url, feature,
- QWebEnginePage.PermissionGrantedByUser)
+ QtWebEngineWidgets.QWebEnginePage.PermissionGrantedByUser)
deny_permission = functools.partial(
page.setFeaturePermission, url, feature,
- QWebEnginePage.PermissionDeniedByUser)
+ QtWebEngineWidgets.QWebEnginePage.PermissionDeniedByUser)
- permission_str = debug.qenum_key(QWebEnginePage, feature)
+ permission_str = debug.qenum_key(QtWebEngineWidgets.QWebEnginePage, feature)
if not url.isValid():
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-85116
@@ -946,7 +940,7 @@ class _WebEnginePermissions(QObject):
compiled=False,
exact=True) and
self._tab.is_private and
- feature == QWebEnginePage.Notifications)
+ feature == QtWebEngineWidgets.QWebEnginePage.Notifications)
logger = log.webview.debug if is_qtbug else log.webview.warning
logger("Ignoring feature permission {} for invalid URL {}".format(
permission_str, url))
@@ -960,8 +954,8 @@ class _WebEnginePermissions(QObject):
return
if (
- feature in [QWebEnginePage.DesktopVideoCapture,
- QWebEnginePage.DesktopAudioVideoCapture] and
+ feature in [QtWebEngineWidgets.QWebEnginePage.DesktopVideoCapture,
+ QtWebEngineWidgets.QWebEnginePage.DesktopAudioVideoCapture] and
qtutils.version_check('5.13', compiled=False) and
not qtutils.version_check('5.13.2', compiled=False)
):
@@ -972,7 +966,7 @@ class _WebEnginePermissions(QObject):
return
question = shared.feature_permission(
- url=url.adjusted(QUrl.RemovePath),
+ url=url.adjusted(QtCore.QUrl.RemovePath),
option=self._options[feature], msg=self._messages[feature],
yes_action=grant_permission, no_action=deny_permission,
abort_on=[self._tab.abort_questions])
@@ -999,7 +993,7 @@ class _WebEnginePermissions(QObject):
def _on_quota_requested(self, request):
size = utils.format_size(request.requestedSize())
shared.feature_permission(
- url=request.origin().adjusted(QUrl.RemovePath),
+ url=request.origin().adjusted(QtCore.QUrl.RemovePath),
option='content.persistent_storage',
msg='use {} of persistent storage'.format(size),
yes_action=request.accept, no_action=request.reject,
@@ -1008,7 +1002,7 @@ class _WebEnginePermissions(QObject):
def _on_register_protocol_handler_requested(self, request):
shared.feature_permission(
- url=request.origin().adjusted(QUrl.RemovePath),
+ url=request.origin().adjusted(QtCore.QUrl.RemovePath),
option='content.register_protocol_handler',
msg='open all {} links'.format(request.scheme()),
yes_action=request.accept, no_action=request.reject,
@@ -1020,9 +1014,9 @@ class _WebEnginePermissions(QObject):
class _Quirk:
filename: str
- injection_point: QWebEngineScript.InjectionPoint = (
- QWebEngineScript.DocumentCreation)
- world: QWebEngineScript.ScriptWorldId = QWebEngineScript.MainWorld
+ injection_point: QtWebEngineWidgets.QWebEngineScript.InjectionPoint = (
+ QtWebEngineWidgets.QWebEngineScript.DocumentCreation)
+ world: QtWebEngineWidgets.QWebEngineScript.ScriptWorldId = QtWebEngineWidgets.QWebEngineScript.MainWorld
predicate: bool = True
name: Optional[str] = None
@@ -1031,12 +1025,12 @@ class _Quirk:
self.name = f"js-{self.filename.replace('_', '-')}"
-class _WebEngineScripts(QObject):
+class _WebEngineScripts(QtCore.QObject):
def __init__(self, tab, parent=None):
super().__init__(parent)
self._tab = tab
- self._widget = cast(QWidget, None)
+ self._widget = cast(QtWidgets.QWidget, None)
self._greasemonkey = greasemonkey.gm_manager
def connect_signals(self):
@@ -1047,13 +1041,13 @@ class _WebEngineScripts(QObject):
self._update_stylesheet, searching=False))
self._tab.search.finished.connect(self._update_stylesheet)
- @pyqtSlot(str)
+ @QtCore.pyqtSlot(str)
def _on_config_changed(self, option):
if option in ['scrolling.bar', 'content.user_stylesheets']:
self._init_stylesheet()
self._update_stylesheet()
- @pyqtSlot(bool)
+ @QtCore.pyqtSlot(bool)
def _update_stylesheet(self, searching=False):
"""Update the custom stylesheet in existing tabs."""
css = shared.get_user_stylesheet(searching=searching)
@@ -1061,11 +1055,11 @@ class _WebEngineScripts(QObject):
self._tab.run_js_async(code)
def _inject_js(self, name, js_code, *,
- world=QWebEngineScript.ApplicationWorld,
- injection_point=QWebEngineScript.DocumentCreation,
+ world=QtWebEngineWidgets.QWebEngineScript.ApplicationWorld,
+ injection_point=QtWebEngineWidgets.QWebEngineScript.DocumentCreation,
subframes=False):
"""Inject the given script to run early on a page load."""
- script = QWebEngineScript()
+ script = QtWebEngineWidgets.QWebEngineScript()
script.setInjectionPoint(injection_point)
script.setSourceCode(js_code)
script.setWorldId(world)
@@ -1112,7 +1106,7 @@ class _WebEngineScripts(QObject):
)
self._inject_js('stylesheet', js_code, subframes=True)
- @pyqtSlot()
+ @QtCore.pyqtSlot()
def _inject_all_greasemonkey_scripts(self):
scripts = self._greasemonkey.all_scripts()
self._inject_greasemonkey_scripts(scripts)
@@ -1149,7 +1143,7 @@ class _WebEngineScripts(QObject):
script.dedup_suffix += 1
seen_names.add(script.full_name())
- new_script = QWebEngineScript()
+ new_script = QtWebEngineWidgets.QWebEngineScript()
try:
world = int(script.jsworld)
@@ -1177,7 +1171,7 @@ class _WebEngineScripts(QObject):
# NOTE that this needs to be done before setSourceCode, so that
# QtWebEngine's parsing of GreaseMonkey tags will override it if there is a
# @run-at comment.
- new_script.setInjectionPoint(QWebEngineScript.DocumentReady)
+ new_script.setInjectionPoint(QtWebEngineWidgets.QWebEngineScript.DocumentReady)
new_script.setSourceCode(script.code())
new_script.setName(script.full_name())
@@ -1186,7 +1180,7 @@ class _WebEngineScripts(QObject):
if script.needs_document_end_workaround():
log.greasemonkey.debug(
f"Forcing @run-at document-end for {script.name}")
- new_script.setInjectionPoint(QWebEngineScript.DocumentReady)
+ new_script.setInjectionPoint(QtWebEngineWidgets.QWebEngineScript.DocumentReady)
log.greasemonkey.debug(f'adding script: {new_script.name()}')
page_scripts.insert(new_script)
@@ -1200,8 +1194,8 @@ class _WebEngineScripts(QObject):
quirks = [
_Quirk(
'whatsapp_web',
- injection_point=QWebEngineScript.DocumentReady,
- world=QWebEngineScript.ApplicationWorld,
+ injection_point=QtWebEngineWidgets.QWebEngineScript.DocumentReady,
+ world=QtWebEngineWidgets.QWebEngineScript.ApplicationWorld,
),
_Quirk('discord'),
_Quirk(
@@ -1273,7 +1267,7 @@ class WebEngineTab(browsertab.AbstractTab):
down.
"""
- abort_questions = pyqtSignal()
+ abort_questions = QtCore.pyqtSignal()
def __init__(self, *, win_id, mode_manager, private, parent=None):
super().__init__(win_id=win_id,
@@ -1322,7 +1316,7 @@ class WebEngineTab(browsertab.AbstractTab):
parent=self)
self._widget.installEventFilter(self._child_event_filter)
- @pyqtSlot()
+ @QtCore.pyqtSlot()
def _restore_zoom(self):
if sip.isdeleted(self._widget):
# https://github.com/qutebrowser/qutebrowser/issues/3498
@@ -1359,9 +1353,9 @@ class WebEngineTab(browsertab.AbstractTab):
self._widget.page().toHtml(callback)
def run_js_async(self, code, callback=None, *, world=None):
- world_id_type = Union[QWebEngineScript.ScriptWorldId, int]
+ world_id_type = Union[QtWebEngineWidgets.QWebEngineScript.ScriptWorldId, int]
if world is None:
- world_id: world_id_type = QWebEngineScript.ApplicationWorld
+ world_id: world_id_type = QtWebEngineWidgets.QWebEngineScript.ApplicationWorld
elif isinstance(world, int):
world_id = world
if not 0 <= world_id <= qtutils.MAX_WORLD_ID:
@@ -1378,9 +1372,9 @@ class WebEngineTab(browsertab.AbstractTab):
def reload(self, *, force=False):
if force:
- action = QWebEnginePage.ReloadAndBypassCache
+ action = QtWebEngineWidgets.QWebEnginePage.ReloadAndBypassCache
else:
- action = QWebEnginePage.Reload
+ action = QtWebEngineWidgets.QWebEnginePage.Reload
self._widget.triggerPageAction(action)
def stop(self):
@@ -1400,7 +1394,7 @@ class WebEngineTab(browsertab.AbstractTab):
def icon(self):
return self._widget.icon()
- def set_html(self, html, base_url=QUrl()):
+ def set_html(self, html, base_url=QtCore.QUrl()):
# FIXME:qtwebengine
# check this and raise an exception if too big:
# Warning: The content will be percent encoded before being sent to the
@@ -1418,7 +1412,7 @@ class WebEngineTab(browsertab.AbstractTab):
url=url_string, error=error)
self.set_html(error_page)
- @pyqtSlot()
+ @QtCore.pyqtSlot()
def _on_history_trigger(self):
try:
self._widget.page()
@@ -1434,10 +1428,10 @@ class WebEngineTab(browsertab.AbstractTab):
# Don't save the title if it's generated from the URL
title = self.title()
- title_url = QUrl(url)
+ title_url = QtCore.QUrl(url)
title_url.setScheme('')
title_url_str = title_url.toDisplayString(
- QUrl.RemoveScheme) # type: ignore[arg-type]
+ QtCore.QUrl.RemoveScheme) # type: ignore[arg-type]
if title == title_url_str.strip('/'):
title = ""
@@ -1448,26 +1442,26 @@ class WebEngineTab(browsertab.AbstractTab):
self.history_item_triggered.emit(url, requested_url, title)
- @pyqtSlot(QUrl, 'QAuthenticator*', 'QString')
+ @QtCore.pyqtSlot(QtCore.QUrl, 'QAuthenticator*', 'QString')
def _on_proxy_authentication_required(self, url, authenticator,
proxy_host):
"""Called when a proxy needs authentication."""
msg = "<b>{}</b> requires a username and password.".format(
html_utils.escape(proxy_host))
- urlstr = url.toString(QUrl.RemovePassword | QUrl.FullyEncoded)
+ urlstr = url.toString(QtCore.QUrl.RemovePassword | QtCore.QUrl.FullyEncoded)
answer = message.ask(
title="Proxy authentication required", text=msg,
mode=usertypes.PromptMode.user_pwd,
abort_on=[self.abort_questions], url=urlstr)
if answer is None:
- sip.assign(authenticator, QAuthenticator())
+ sip.assign(authenticator, QtNetwork.QAuthenticator())
return
authenticator.setUser(answer.user)
authenticator.setPassword(answer.password)
- @pyqtSlot(QUrl, 'QAuthenticator*')
+ @QtCore.pyqtSlot(QtCore.QUrl, 'QAuthenticator*')
def _on_authentication_required(self, url, authenticator):
log.network.debug("Authentication requested for {}, netrc_used {}"
.format(url.toDisplayString(), self.data.netrc_used))
@@ -1483,9 +1477,9 @@ class WebEngineTab(browsertab.AbstractTab):
url, authenticator, abort_on=[self.abort_questions])
if not netrc_success and answer is None:
log.network.debug("Aborting auth")
- sip.assign(authenticator, QAuthenticator())
+ sip.assign(authenticator, QtNetwork.QAuthenticator())
- @pyqtSlot()
+ @QtCore.pyqtSlot()
def _on_load_started(self):
"""Clear search when a new load is started if needed."""
# WORKAROUND for
@@ -1495,27 +1489,27 @@ class WebEngineTab(browsertab.AbstractTab):
super()._on_load_started()
self.data.netrc_used = False
- @pyqtSlot('qint64')
+ @QtCore.pyqtSlot('qint64')
def _on_renderer_process_pid_changed(self, pid):
log.webview.debug("Renderer process PID for tab {}: {}"
.format(self.tab_id, pid))
- @pyqtSlot(QWebEnginePage.RenderProcessTerminationStatus, int)
+ @QtCore.pyqtSlot(QtWebEngineWidgets.QWebEnginePage.RenderProcessTerminationStatus, int)
def _on_render_process_terminated(self, status, exitcode):
"""Show an error when the renderer process terminated."""
- if (status == QWebEnginePage.AbnormalTerminationStatus and
+ if (status == QtWebEngineWidgets.QWebEnginePage.AbnormalTerminationStatus and
exitcode == 256):
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-58697
- status = QWebEnginePage.CrashedTerminationStatus
+ status = QtWebEngineWidgets.QWebEnginePage.CrashedTerminationStatus
status_map = {
- QWebEnginePage.NormalTerminationStatus:
+ QtWebEngineWidgets.QWebEnginePage.NormalTerminationStatus:
browsertab.TerminationStatus.normal,
- QWebEnginePage.AbnormalTerminationStatus:
+ QtWebEngineWidgets.QWebEnginePage.AbnormalTerminationStatus:
browsertab.TerminationStatus.abnormal,
- QWebEnginePage.CrashedTerminationStatus:
+ QtWebEngineWidgets.QWebEnginePage.CrashedTerminationStatus:
browsertab.TerminationStatus.crashed,
- QWebEnginePage.KilledTerminationStatus:
+ QtWebEngineWidgets.QWebEnginePage.KilledTerminationStatus:
browsertab.TerminationStatus.killed,
-1:
browsertab.TerminationStatus.unknown,
@@ -1543,7 +1537,7 @@ class WebEngineTab(browsertab.AbstractTab):
self._show_error_page(self.url(), error=error)
- @pyqtSlot(int)
+ @QtCore.pyqtSlot(int)
def _on_load_progress(self, perc: int) -> None:
"""QtWebEngine-specific loadProgress workarounds.
@@ -1554,7 +1548,7 @@ class WebEngineTab(browsertab.AbstractTab):
self.load_status() != usertypes.LoadStatus.error):
self._update_load_status(ok=True)
- @pyqtSlot(bool)
+ @QtCore.pyqtSlot(bool)
def _on_load_finished(self, ok: bool) -> None:
"""QtWebEngine-specific loadFinished workarounds."""
super()._on_load_finished(ok)
@@ -1567,7 +1561,7 @@ class WebEngineTab(browsertab.AbstractTab):
self._error_page_workaround,
self.settings.test_attribute('content.javascript.enabled')))
- @pyqtSlot(certificateerror.CertificateErrorWrapper)
+ @QtCore.pyqtSlot(certificateerror.CertificateErrorWrapper)
def _on_ssl_errors(self, error):
url = error.url()
self._insecure_hosts.add(url.host())
@@ -1613,11 +1607,11 @@ class WebEngineTab(browsertab.AbstractTab):
# have happened when loading some resource.
is_resource = (
first_party_url.isValid() and
- url.matches(first_party_url, QUrl.RemoveScheme))
+ url.matches(first_party_url, QtCore.QUrl.RemoveScheme))
if show_non_overr_cert_error and is_resource:
self._show_error_page(url, str(error))
- @pyqtSlot()
+ @QtCore.pyqtSlot()
def _on_print_requested(self):
"""Slot for window.print() in JS."""
try:
@@ -1625,8 +1619,8 @@ class WebEngineTab(browsertab.AbstractTab):
except browsertab.WebTabError as e:
message.error(str(e))
- @pyqtSlot(QUrl)
- def _on_url_changed(self, url: QUrl) -> None:
+ @QtCore.pyqtSlot(QtCore.QUrl)
+ def _on_url_changed(self, url: QtCore.QUrl) -> None:
"""Update settings for the current URL.
Normally this is done below in _on_navigation_request, but we also need
@@ -1642,7 +1636,7 @@ class WebEngineTab(browsertab.AbstractTab):
not qtutils.version_check('5.14')):
self.settings.update_for_url(url)
- @pyqtSlot(usertypes.NavigationRequest)
+ @QtCore.pyqtSlot(usertypes.NavigationRequest)
def _on_navigation_request(self, navigation):
super()._on_navigation_request(navigation)
@@ -1699,9 +1693,7 @@ class WebEngineTab(browsertab.AbstractTab):
page.printRequested.connect(self._on_print_requested)
try:
- # pylint: disable=unused-import
- from PyQt5.QtWebEngineWidgets import (
- QWebEngineClientCertificateSelection)
+ pass
except ImportError:
pass
else: