From 0ace4a5fee8994fbce55edb6617ec150d7fa2b1e Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Mon, 9 May 2022 16:54:35 +0200 Subject: [PATCH] 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 1106d82591136279e48d56b50832dacb93bfae8e. TODO: Changelog TODO: Pick to master? --- qutebrowser/browser/webengine/webenginetab.py | 18 ++++++++++++------ qutebrowser/mainwindow/tabbedbrowser.py | 13 +++++++++---- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 5331f7f1a..2974e486f 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -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'))) diff --git a/qutebrowser/mainwindow/tabbedbrowser.py b/qutebrowser/mainwindow/tabbedbrowser.py index bce66db2a..41d4e01d2 100644 --- a/qutebrowser/mainwindow/tabbedbrowser.py +++ b/qutebrowser/mainwindow/tabbedbrowser.py @@ -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()))