summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <git@the-compiler.org>2017-12-26 15:45:00 +0100
committerFlorian Bruhin <git@the-compiler.org>2017-12-26 15:45:00 +0100
commit73b6dea1f420e4e786e0d9d5abe66cfe2e5aa611 (patch)
tree2156636bfab45dc0e99485a2ad20b1380438c5f6
parentaa68e97922bd5a5a0eab0a85ada5616c1d8ec2ef (diff)
parent46f6336e6ea82c841060168cc2d09c490ebdb499 (diff)
downloadqutebrowser-73b6dea1f420e4e786e0d9d5abe66cfe2e5aa611.tar.gz
qutebrowser-73b6dea1f420e4e786e0d9d5abe66cfe2e5aa611.zip
Merge remote-tracking branch 'origin/pr/3427'
-rw-r--r--qutebrowser/browser/webengine/webenginetab.py47
-rw-r--r--tests/end2end/features/marks.feature2
2 files changed, 43 insertions, 6 deletions
diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py
index 813f1eb9c..9328698bc 100644
--- a/qutebrowser/browser/webengine/webenginetab.py
+++ b/qutebrowser/browser/webengine/webenginetab.py
@@ -24,7 +24,8 @@ import functools
import html as html_utils
import sip
-from PyQt5.QtCore import pyqtSlot, Qt, QEvent, QPoint, QPointF, QUrl, QTimer
+from PyQt5.QtCore import (pyqtSignal, pyqtSlot, Qt, QEvent, QPoint, QPointF,
+ QUrl, QTimer)
from PyQt5.QtGui import QKeyEvent
from PyQt5.QtNetwork import QAuthenticator
from PyQt5.QtWidgets import QApplication
@@ -539,7 +540,15 @@ class WebEngineElements(browsertab.AbstractElements):
class WebEngineTab(browsertab.AbstractTab):
- """A QtWebEngine tab in the browser."""
+ """A QtWebEngine tab in the browser.
+
+ Signals:
+ _load_finished_fake:
+ Used in place of unreliable loadFinished
+ """
+
+ # WORKAROUND for https://bugreports.qt.io/browse/QTBUG-65223
+ _load_finished_fake = pyqtSignal(bool)
def __init__(self, *, win_id, mode_manager, private, parent=None):
super().__init__(win_id=win_id, mode_manager=mode_manager,
@@ -793,6 +802,24 @@ class WebEngineTab(browsertab.AbstractTab):
}
self.renderer_process_terminated.emit(status_map[status], exitcode)
+ @pyqtSlot(int)
+ def _on_load_progress_workaround(self, perc):
+ """Use loadProgress(100) to emit loadFinished(True).
+
+ See https://bugreports.qt.io/browse/QTBUG-65223
+ """
+ if perc == 100 and self.load_status() != usertypes.LoadStatus.error:
+ self._load_finished_fake.emit(True)
+
+ @pyqtSlot(bool)
+ def _on_load_finished_workaround(self, ok):
+ """Use only loadFinished(False).
+
+ See https://bugreports.qt.io/browse/QTBUG-65223
+ """
+ if not ok:
+ self._load_finished_fake.emit(False)
+
def _connect_signals(self):
view = self._widget
page = view.page()
@@ -801,9 +828,6 @@ class WebEngineTab(browsertab.AbstractTab):
page.linkHovered.connect(self.link_hovered)
page.loadProgress.connect(self._on_load_progress)
page.loadStarted.connect(self._on_load_started)
- page.loadFinished.connect(self._on_history_trigger)
- page.loadFinished.connect(self._restore_zoom)
- page.loadFinished.connect(self._on_load_finished)
page.certificate_error.connect(self._on_ssl_errors)
page.authenticationRequired.connect(self._on_authentication_required)
page.proxyAuthenticationRequired.connect(
@@ -816,6 +840,19 @@ class WebEngineTab(browsertab.AbstractTab):
view.renderProcessTerminated.connect(
self._on_render_process_terminated)
view.iconChanged.connect(self.icon_changed)
+ # WORKAROUND for https://bugreports.qt.io/browse/QTBUG-65223
+ if qtutils.version_check('5.10', compiled=False):
+ page.loadProgress.connect(self._on_load_progress_workaround)
+ self._load_finished_fake.connect(self._on_history_trigger)
+ self._load_finished_fake.connect(self._restore_zoom)
+ self._load_finished_fake.connect(self._on_load_finished)
+ page.loadFinished.connect(self._on_load_finished_workaround)
+ else:
+ # for older Qt versions which break with the above
+ page.loadProgress.connect(self._on_load_progress)
+ page.loadFinished.connect(self._on_history_trigger)
+ page.loadFinished.connect(self._restore_zoom)
+ page.loadFinished.connect(self._on_load_finished)
def event_target(self):
return self._widget.focusProxy()
diff --git a/tests/end2end/features/marks.feature b/tests/end2end/features/marks.feature
index 605bd3971..f7da07255 100644
--- a/tests/end2end/features/marks.feature
+++ b/tests/end2end/features/marks.feature
@@ -86,7 +86,7 @@ Feature: Setting positional marks
And I wait until the scroll position changed to 10/10
Then the page should be scrolled to 10 10
- @qtwebengine_todo: Does not emit loaded signal for fragments?
+ @qtwebengine_skip: Does not emit loaded signal for fragments?
Scenario: Jumping back after following a link
When I hint with args "links normal" and follow s
And I wait until data/marks.html#bottom is loaded