Disable loadFinished workaround on unaffected versions

With QtWebEngine 5.15.5+, we shouldn't need the workaround anymore.

This also seems to fix flakiness in
tests/end2end/features/test_navigate_bdd.py::test_navigating_up_in_qutehelp
where sometimes no loadFinished signal was found.

Relevant commits: git log -G 65223
Partially reverts 1106d82591.

TODO: Changelog
TODO: Pick to master?
This commit is contained in:
Florian Bruhin 2022-05-09 16:54:35 +02:00
parent e4bc609ff4
commit 0ace4a5fee
2 changed files with 21 additions and 10 deletions

View File

@ -1294,6 +1294,9 @@ class WebEngineTab(browsertab.AbstractTab):
self._child_event_filter = None
self._saved_zoom = None
self._scripts.init()
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-65223
self._needs_qtbug65223_workaround = (
version.qtwebengine_versions().webengine < utils.VersionNumber(5, 15, 5))
def _set_widget(self, widget):
# pylint: disable=protected-access
@ -1533,22 +1536,25 @@ class WebEngineTab(browsertab.AbstractTab):
def _on_load_progress(self, perc: int) -> None:
"""QtWebEngine-specific loadProgress workarounds.
WORKAROUND for https://bugreports.qt.io/browse/QTBUG-65223
"""
super()._on_load_progress(perc)
if (perc == 100 and
self.load_status() != usertypes.LoadStatus.error):
if (
self._needs_qtbug65223_workaround and
perc == 100 and
self.load_status() != usertypes.LoadStatus.error
):
self._update_load_status(ok=True)
@pyqtSlot(bool)
def _on_load_finished(self, ok: bool) -> None:
"""QtWebEngine-specific loadFinished workarounds."""
"""QtWebEngine-specific loadFinished code."""
super()._on_load_finished(ok)
if not ok:
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-65223
if not self._needs_qtbug65223_workaround or not ok:
# With the workaround, this should only run with ok=False
self._update_load_status(ok)
if not ok:
self.dump_async(functools.partial(
self._error_page_workaround,
self.settings.test_attribute('content.javascript.enabled')))

View File

@ -36,7 +36,7 @@ from qutebrowser.mainwindow import tabwidget, mainwindow
from qutebrowser.browser import signalfilter, browsertab, history
from qutebrowser.utils import (log, usertypes, utils, qtutils, objreg,
urlutils, message, jinja, version)
from qutebrowser.misc import quitter
from qutebrowser.misc import quitter, objects
@dataclasses.dataclass
@ -227,9 +227,14 @@ class TabbedBrowser(QWidget):
self.widget.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
# load_finished instead of load_started as WORKAROUND for
# https://bugreports.qt.io/browse/QTBUG-65223
self.cur_load_finished.connect(self._leave_modes_on_load)
if (
objects.backend == usertypes.Backend.QtWebEngine and
version.qtwebengine_versions().webengine < utils.VersionNumber(5, 15, 5)
):
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-65223
self.cur_load_finished.connect(self._leave_modes_on_load)
else:
self.cur_load_started.connect(self._leave_modes_on_load)
# handle mode_override
self.current_tab_changed.connect(lambda tab: self._mode_override(tab.url()))