commit: 40ecb1d4fbc755fbe7cf4a91412f4acec06fc13b Author: Ionen Wolkens <ionen <AT> gentoo <DOT> org> AuthorDate: Fri Nov 21 22:04:03 2025 +0000 Commit: Ionen Wolkens <ionen <AT> gentoo <DOT> org> CommitDate: Fri Nov 21 22:19:15 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=40ecb1d4
www-client/qutebrowser: backport Qt 6.10.1 :version crash workaround Does not affect normal usage, but getting an instant crash when just checking qutebrowser's version could make someone lose work and such so may as well backport, albeit qutebrowser-3.6.2 may not be far away. The actual bug is in qtwebengine, but due to jira migration it cannot be reported upstream at the moment. Either way likely will not bother backporting a fix + make everyone rebuild qtwebengine over this unless it affects more packages (they need to be messing with webextensions which is very rare, maybe falkon at most). Signed-off-by: Ionen Wolkens <ionen <AT> gentoo.org> .../files/qutebrowser-3.6.1-qt6.10.1.patch | 121 +++++++++++++++++++++ ...er-3.6.1.ebuild => qutebrowser-3.6.1-r1.ebuild} | 4 + 2 files changed, 125 insertions(+) diff --git a/www-client/qutebrowser/files/qutebrowser-3.6.1-qt6.10.1.patch b/www-client/qutebrowser/files/qutebrowser-3.6.1-qt6.10.1.patch new file mode 100644 index 000000000000..5a72167fd72f --- /dev/null +++ b/www-client/qutebrowser/files/qutebrowser-3.6.1-qt6.10.1.patch @@ -0,0 +1,121 @@ +https://github.com/qutebrowser/qutebrowser/issues/8785 +https://github.com/qutebrowser/qutebrowser/commit/0c34bf2f791b1 +--- a/qutebrowser/browser/webengine/webenginesettings.py ++++ b/qutebrowser/browser/webengine/webenginesettings.py +@@ -459,12 +459,16 @@ + + ++def default_qt_profile() -> QWebEngineProfile: ++ """Get the default profile from Qt.""" ++ if machinery.IS_QT6: ++ return QWebEngineProfile("Default") ++ else: ++ return QWebEngineProfile.defaultProfile() ++ ++ + def _init_default_profile(): + """Init the default QWebEngineProfile.""" + global default_profile +- +- if machinery.IS_QT6: +- default_profile = QWebEngineProfile("Default") +- else: +- default_profile = QWebEngineProfile.defaultProfile() ++ default_profile = default_qt_profile() + assert not default_profile.isOffTheRecord() + +--- a/qutebrowser/utils/version.py ++++ b/qutebrowser/utils/version.py +@@ -931,10 +931,16 @@ + if ( + objects.backend == usertypes.Backend.QtWebEngine +- and "avoid-chromium-init" not in objects.debug_flags + and machinery.IS_QT6 # mypy; TODO early return once Qt 5 is dropped + ): +- from qutebrowser.qt.webenginecore import QWebEngineProfile +- profile = QWebEngineProfile.defaultProfile() +- assert profile is not None # mypy ++ from qutebrowser.browser.webengine import webenginesettings ++ lines.append("WebExtensions:") ++ ++ if webenginesettings.default_profile: ++ profile = webenginesettings.default_profile ++ elif "avoid-chromium-init" in objects.debug_flags: ++ lines[0] += " unknown (avoiding init)" ++ return lines ++ else: ++ profile = webenginesettings.default_qt_profile() + + try: +@@ -945,5 +951,4 @@ + assert ext_manager is not None # mypy + +- lines.append("WebExtensions:") + if not ext_manager.extensions(): + lines[0] += " none" +--- a/tests/unit/utils/test_version.py ++++ b/tests/unit/utils/test_version.py +@@ -1450,9 +1450,7 @@ + if machinery.IS_QT6: + monkeypatch.setattr( +- QWebEngineProfile, +- "defaultProfile", +- lambda: FakeExtensionProfile( +- FakeExtensionManager([FakeExtensionInfo("ext1")]) +- ), ++ webenginesettings, ++ "default_profile", ++ FakeExtensionProfile(FakeExtensionManager([FakeExtensionInfo("ext1")])), + ) + substitutions['webextensions'] = ( +@@ -1593,18 +1591,33 @@ + + def test_qtwebkit(self, monkeypatch: pytest.MonkeyPatch) -> None: ++ assert webenginesettings.default_profile is None # -> default_qt_profile() used + monkeypatch.setattr(version.objects, "backend", usertypes.Backend.QtWebKit) +- monkeypatch.setattr(QWebEngineProfile, "defaultProfile", lambda: 1/0) ++ monkeypatch.setattr(webenginesettings, "default_qt_profile", lambda: 1 / 0) + assert not version._webengine_extensions() + + def test_avoid_chromium_init(self, monkeypatch: pytest.MonkeyPatch) -> None: ++ assert webenginesettings.default_profile is None # -> default_qt_profile() used + monkeypatch.setattr(version.objects, "backend", usertypes.Backend.QtWebEngine) + monkeypatch.setattr(objects, "debug_flags", {"avoid-chromium-init"}) +- monkeypatch.setattr(QWebEngineProfile, "defaultProfile", lambda: 1/0) +- assert not version._webengine_extensions() ++ monkeypatch.setattr(webenginesettings, "default_qt_profile", lambda: 1 / 0) ++ assert version._webengine_extensions() == [ ++ "WebExtensions: unknown (avoiding init)" ++ ] + + def test_no_extension_manager(self, monkeypatch: pytest.MonkeyPatch) -> None: +- monkeypatch.setattr(QWebEngineProfile, "defaultProfile", object) ++ assert webenginesettings.default_profile is None # -> default_qt_profile() used ++ monkeypatch.setattr(webenginesettings, "default_qt_profile", object) + assert not version._webengine_extensions() + ++ @pytest.mark.parametrize("avoid_init", [True, False]) ++ def test_preexisting_profile(self, monkeypatch: pytest.MonkeyPatch, avoid_init: bool) -> None: ++ """Test that we use the pre-existing profile if available.""" ++ monkeypatch.setattr(webenginesettings, "default_profile", FakeExtensionProfile(FakeExtensionManager([]))) ++ if avoid_init: ++ monkeypatch.setattr(objects, "debug_flags", {"avoid-chromium-init"}) ++ ++ result = version._webengine_extensions() ++ assert result == ["WebExtensions: none"] ++ + @pytest.mark.parametrize( + "extensions, expected", +@@ -1667,9 +1680,7 @@ + ) -> None: + monkeypatch.setattr( +- QWebEngineProfile, +- "defaultProfile", +- lambda: FakeExtensionProfile( +- FakeExtensionManager(extensions) +- ), ++ webenginesettings, ++ "default_profile", ++ FakeExtensionProfile(FakeExtensionManager(extensions)), + ) + assert version._webengine_extensions() == expected diff --git a/www-client/qutebrowser/qutebrowser-3.6.1.ebuild b/www-client/qutebrowser/qutebrowser-3.6.1-r1.ebuild similarity index 99% rename from www-client/qutebrowser/qutebrowser-3.6.1.ebuild rename to www-client/qutebrowser/qutebrowser-3.6.1-r1.ebuild index 170101720577..3e70ebcadf80 100644 --- a/www-client/qutebrowser/qutebrowser-3.6.1.ebuild +++ b/www-client/qutebrowser/qutebrowser-3.6.1-r1.ebuild @@ -66,6 +66,10 @@ fi EPYTEST_PLUGINS=( hypothesis pytest-{bdd,mock,qt,rerunfailures,xvfb} ) distutils_enable_tests pytest +PATCHES=( + "${FILESDIR}"/${P}-qt6.10.1.patch +) + src_prepare() { distutils-r1_src_prepare
