Fix input.insert_mode.auto_load race / test_auto_load flakiness

Fixes #8145, see #5390.

As long as we don't have a solution to get notified about focus happening
(#2471 possibly?), it looks like there is no better way to get notified
about this, so a delay will need to do for now.
This commit is contained in:
Florian Bruhin 2024-03-27 12:34:30 +01:00
parent 0b220117e2
commit 982b8bdcec
4 changed files with 17 additions and 3 deletions

View File

@ -32,6 +32,12 @@ Changed
`:quickmark-*`, `:bookmark-*`, `:tab-take` and `:tab-select` (for the quick
and bookmark categories). (#7955)
Fixed
~~~~~
- `input.insert_mode.auto_load` sometimes not triggering due to a race
condition.
[[v3.1.1]]
v3.1.1 (unreleased)
-------------------

View File

@ -14,7 +14,7 @@ from typing import (cast, TYPE_CHECKING, Any, Callable, Iterable, List, Optional
from qutebrowser.qt import machinery
from qutebrowser.qt.core import (pyqtSignal, pyqtSlot, QUrl, QObject, QSizeF, Qt,
QEvent, QPoint, QRect)
QEvent, QPoint, QRect, QTimer)
from qutebrowser.qt.gui import QKeyEvent, QIcon, QPixmap
from qutebrowser.qt.widgets import QApplication, QWidget
from qutebrowser.qt.printsupport import QPrintDialog, QPrinter
@ -902,7 +902,13 @@ class AbstractTabPrivate:
modeman.enter(self._tab.win_id, usertypes.KeyMode.insert,
'load finished', only_if_normal=True)
self._tab.elements.find_focused(_auto_insert_mode_cb)
# There seems to be a race between loadFinished being called,
# and the autoload attribute on websites actually focusing anything.
# Thus, we delay this by a bit. Locally, a delay of 13ms caused no races
# with 5000 test reruns (even with simultaneous CPU stress testing),
# so 65ms should be a safe bet and still not be too noticeable.
QTimer.singleShot(
65, lambda: self._tab.elements.find_focused(_auto_insert_mode_cb))
def clear_ssl_errors(self) -> None:
raise NotImplementedError

View File

@ -10,6 +10,9 @@
elem.addEventListener('input', function() {
console.log("contents: " + elem.value);
});
elem.addEventListener('focus', function() {
console.log("autofocus element focused");
});
}
</script>
</head>

View File

@ -43,7 +43,6 @@ def test_insert_mode(file_name, elem_id, source, input_text, zoom,
(True, False, True), # enabled and foreground tab
(True, True, False), # background tab
])
@pytest.mark.flaky
def test_auto_load(quteproc, auto_load, background, insert_mode):
quteproc.set_setting('input.insert_mode.auto_load', str(auto_load))
url_path = 'data/insert_mode_settings/html/autofocus.html'