parent
4f40a8b46b
commit
8ae5e3d83b
|
|
@ -28,6 +28,8 @@ Fixed
|
||||||
|
|
||||||
- The version info now includes the Wayland compositor name if wayland-client is
|
- The version info now includes the Wayland compositor name if wayland-client is
|
||||||
available under a different name than `libwayland-client.so` (#8771).
|
available under a different name than `libwayland-client.so` (#8771).
|
||||||
|
- The list of Chromium extensions in `--version` / `:version` now uses the
|
||||||
|
correct Chromium data profile, also fixing a crash with Qt 6.10.1 (#8785).
|
||||||
|
|
||||||
[[v3.6.1]]
|
[[v3.6.1]]
|
||||||
v3.6.1 (2025-11-03)
|
v3.6.1 (2025-11-03)
|
||||||
|
|
|
||||||
|
|
@ -458,14 +458,18 @@ def _clear_webengine_permissions_json():
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
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():
|
def _init_default_profile():
|
||||||
"""Init the default QWebEngineProfile."""
|
"""Init the default QWebEngineProfile."""
|
||||||
global default_profile
|
global default_profile
|
||||||
|
default_profile = default_qt_profile()
|
||||||
if machinery.IS_QT6:
|
|
||||||
default_profile = QWebEngineProfile("Default")
|
|
||||||
else:
|
|
||||||
default_profile = QWebEngineProfile.defaultProfile()
|
|
||||||
assert not default_profile.isOffTheRecord()
|
assert not default_profile.isOffTheRecord()
|
||||||
|
|
||||||
assert parsed_user_agent is None # avoid earlier profile initialization
|
assert parsed_user_agent is None # avoid earlier profile initialization
|
||||||
|
|
|
||||||
|
|
@ -931,12 +931,18 @@ def _webengine_extensions() -> Sequence[str]:
|
||||||
lines: list[str] = []
|
lines: list[str] = []
|
||||||
if (
|
if (
|
||||||
objects.backend == usertypes.Backend.QtWebEngine
|
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
|
and machinery.IS_QT6 # mypy; TODO early return once Qt 5 is dropped
|
||||||
):
|
):
|
||||||
from qutebrowser.qt.webenginecore import QWebEngineProfile
|
from qutebrowser.browser.webengine import webenginesettings
|
||||||
profile = QWebEngineProfile.defaultProfile()
|
lines.append("WebExtensions:")
|
||||||
assert profile is not None # mypy
|
|
||||||
|
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:
|
try:
|
||||||
ext_manager = profile.extensionManager()
|
ext_manager = profile.extensionManager()
|
||||||
|
|
@ -945,7 +951,6 @@ def _webengine_extensions() -> Sequence[str]:
|
||||||
return []
|
return []
|
||||||
assert ext_manager is not None # mypy
|
assert ext_manager is not None # mypy
|
||||||
|
|
||||||
lines.append("WebExtensions:")
|
|
||||||
if not ext_manager.extensions():
|
if not ext_manager.extensions():
|
||||||
lines[0] += " none"
|
lines[0] += " none"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1449,11 +1449,9 @@ def test_version_info(params, stubs, monkeypatch, config_stub):
|
||||||
monkeypatch.delattr(version, 'qtutils.qWebKitVersion', raising=False)
|
monkeypatch.delattr(version, 'qtutils.qWebKitVersion', raising=False)
|
||||||
if machinery.IS_QT6:
|
if machinery.IS_QT6:
|
||||||
monkeypatch.setattr(
|
monkeypatch.setattr(
|
||||||
QWebEngineProfile,
|
webenginesettings,
|
||||||
"defaultProfile",
|
"default_profile",
|
||||||
lambda: FakeExtensionProfile(
|
FakeExtensionProfile(FakeExtensionManager([FakeExtensionInfo("ext1")])),
|
||||||
FakeExtensionManager([FakeExtensionInfo("ext1")])
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
substitutions['webextensions'] = (
|
substitutions['webextensions'] = (
|
||||||
"\n"
|
"\n"
|
||||||
|
|
@ -1592,20 +1590,35 @@ class TestOpenGLInfo:
|
||||||
class TestWebEngineExtensions:
|
class TestWebEngineExtensions:
|
||||||
|
|
||||||
def test_qtwebkit(self, monkeypatch: pytest.MonkeyPatch) -> None:
|
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(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()
|
assert not version._webengine_extensions()
|
||||||
|
|
||||||
def test_avoid_chromium_init(self, monkeypatch: pytest.MonkeyPatch) -> None:
|
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(version.objects, "backend", usertypes.Backend.QtWebEngine)
|
||||||
monkeypatch.setattr(objects, "debug_flags", {"avoid-chromium-init"})
|
monkeypatch.setattr(objects, "debug_flags", {"avoid-chromium-init"})
|
||||||
monkeypatch.setattr(QWebEngineProfile, "defaultProfile", lambda: 1/0)
|
monkeypatch.setattr(webenginesettings, "default_qt_profile", lambda: 1 / 0)
|
||||||
assert not version._webengine_extensions()
|
assert version._webengine_extensions() == [
|
||||||
|
"WebExtensions: unknown (avoiding init)"
|
||||||
|
]
|
||||||
|
|
||||||
def test_no_extension_manager(self, monkeypatch: pytest.MonkeyPatch) -> None:
|
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()
|
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(
|
@pytest.mark.parametrize(
|
||||||
"extensions, expected",
|
"extensions, expected",
|
||||||
[
|
[
|
||||||
|
|
@ -1666,11 +1679,9 @@ class TestWebEngineExtensions:
|
||||||
expected: list[str],
|
expected: list[str],
|
||||||
) -> None:
|
) -> None:
|
||||||
monkeypatch.setattr(
|
monkeypatch.setattr(
|
||||||
QWebEngineProfile,
|
webenginesettings,
|
||||||
"defaultProfile",
|
"default_profile",
|
||||||
lambda: FakeExtensionProfile(
|
FakeExtensionProfile(FakeExtensionManager(extensions)),
|
||||||
FakeExtensionManager(extensions)
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
assert version._webengine_extensions() == expected
|
assert version._webengine_extensions() == expected
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue