Merge remote-tracking branch 'upstream/qt6-v2' into master-qt6

This commit is contained in:
toofar 2023-03-18 16:24:58 +13:00
commit 856fe781a1
9 changed files with 146 additions and 16 deletions

View File

@ -2779,8 +2779,6 @@ Valid values:
* +js-whatsapp-web+
* +js-discord+
* +js-string-replaceall+
* +js-globalthis+
* +js-object-fromentries+
* +js-array-at+
* +misc-krunker+
* +misc-mathml-darkmode+

View File

@ -54,6 +54,9 @@ qt_log_ignore =
# tests/unit/commands/test_userscripts.py::test_killed_command
# on Windows
^QProcess: Destroyed while process .* is still running\.
# Qt 6.5 debug build
# WORKAROUND for https://www.riverbankcomputing.com/pipermail/pyqt/2023-March/045215.html
^QObject::connect: Connecting from COMPAT signal \(QSocketNotifier::activated\(int\)\)$
xfail_strict = true
filterwarnings =
error

View File

@ -405,7 +405,8 @@ class TabBar(QTabBar):
def __init__(self, win_id, parent=None):
super().__init__(parent)
self._win_id = win_id
self.setStyle(TabBarStyle())
self._our_style = TabBarStyle()
self.setStyle(self._our_style)
self.vertical = False
self._auto_hide_timer = QTimer()
self._auto_hide_timer.setSingleShot(True)
@ -696,6 +697,29 @@ class TabBar(QTabBar):
qtutils.ensure_valid(size)
return size
def initStyleOption(self, opt, idx):
"""Override QTabBar.initStyleOption().
Used to calculate styling clues from a widget for the GUI layer.
"""
super().initStyleOption(opt, idx)
# Re-do the text elision that the base QTabBar does, but using a text
# rectangle computed by out TabBarStyle. With Qt6 the base class ends
# up using QCommonStyle directly for that which has a different opinon
# of how vertical tabs should work.
text_rect = self._our_style.subElementRect(
QStyle.SubElement.SE_TabBarTabText,
opt,
self,
)
opt.text = self.fontMetrics().elidedText(
self.tabText(idx),
self.elideMode(),
text_rect.width(),
Qt.TextFlag.TextShowMnemonic,
)
def paintEvent(self, event):
"""Override paintEvent to draw the tabs like we want to."""
p = QStylePainter(self)

View File

@ -84,12 +84,15 @@ class AsciiDoc:
dst = DOC_DIR / (src.stem + ".html")
files.append((src, dst))
# patch image links to use local copy
replacements = [
# patch image links to use local copy
("https://raw.githubusercontent.com/qutebrowser/qutebrowser/master/doc/img/cheatsheet-big.png",
"qute://help/img/cheatsheet-big.png"),
("https://raw.githubusercontent.com/qutebrowser/qutebrowser/master/doc/img/cheatsheet-small.png",
"qute://help/img/cheatsheet-small.png")
"qute://help/img/cheatsheet-small.png"),
# patch relative links to work with qute://help flat structure
("link:../", "link:"),
]
asciidoc_args = ['-a', 'source-highlighter=pygments']

View File

@ -212,7 +212,7 @@ def qapp_args():
"""Make QtWebEngine unit tests run on older Qt versions + newer kernels."""
if testutils.disable_seccomp_bpf_sandbox():
return [sys.argv[0], testutils.DISABLE_SECCOMP_BPF_FLAG]
return []
return [sys.argv[0]]
@pytest.fixture(scope='session')

View File

@ -61,6 +61,18 @@ def is_ignored_lowlevel_message(message):
# Qt 6.4, from certificate error below, but on separate lines
'----- Certificate i=0 (*,CN=localhost,O=qutebrowser test certificate) -----',
'ERROR: No matching issuer found',
# Qt 6.5 debug, overflow/linebreak from a JS message...
# IGNORED: [678403:678403:0315/203342.008878:INFO:CONSOLE(65)] "Refused
# to apply inline style because it violates the following Content
# Security Policy directive: "default-src none". Either the
# 'unsafe-inline' keyword, a hash
# ('sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU='), or a nonce
# ('nonce-...') is required to enable inline execution. Note also that
# 'style-src' was not explicitly set, so 'default-src' is used as a
# fallback.
# INVALID: ", source: userscript:_qute_stylesheet (65)
'", source: userscript:_qute_stylesheet (65)',
]
return any(testutils.pattern_match(pattern=pattern, value=message)
for pattern in ignored_messages)
@ -130,6 +142,59 @@ def is_ignored_chromium_message(line):
'CertVerifyProcBuiltin for localhost failed:',
# [320667:320667:1124/135621.718232:ERROR:interface_endpoint_client.cc(687)] Message 4 rejected by interface blink.mojom.WidgetHost
'Message 4 rejected by interface blink.mojom.WidgetHost',
# Qt 5.15.1 debug build (Chromium 83)
# '[314297:7:0929/214605.491958:ERROR:context_provider_command_buffer.cc(145)]
# GpuChannelHost failed to create command buffer.'
# Still present on Qt 6.5
'GpuChannelHost failed to create command buffer.',
# Qt 6.5 debug build
# [640812:640865:0315/200415.708148:WARNING:important_file_writer.cc(185)]
# Failed to create temporary file to update
# /tmp/qutebrowser-basedir-3kvto2eq/data/webengine/user_prefs.json: No
# such file or directory (2)
# [640812:640864:0315/200415.715398:WARNING:important_file_writer.cc(185)]
# Failed to create temporary file to update
# /tmp/qutebrowser-basedir-3kvto2eq/data/webengine/Network Persistent
# State: No such file or directory (2)
'Failed to create temporary file to update *user_prefs.json: No such file or directory (2)',
'Failed to create temporary file to update *Network Persistent State: No such file or directory (2)',
# Qt 6.5 debug build
# [645145:645198:0315/200704.324733:WARNING:simple_synchronous_entry.cc(1438)]
"Could not open platform files for entry.",
# Qt 6.5 debug build
# [664320:664320:0315/202235.943899:ERROR:node_channel.cc(861)]
# Dropping message on closed channel.
"Dropping message on closed channel.",
# Qt 6.5 debug build
# tests/end2end/features/test_misc_bdd.py::test_webrtc_renderer_process_crash
# [679056:14:0315/203418.631075:WARNING:media_session.cc(949)] RED
# codec red is missing an associated payload type.
"RED codec red is missing an associated payload type.",
# Qt 6.5 debug build
# tests/end2end/features/test_javascript_bdd.py::test_error_pages_without_js_enabled
# and others using internal URL schemes?
# [677785:1:0315/203308.328104:ERROR:html_media_element.cc(4874)]
# SetError: {code=4, message="MEDIA_ELEMENT_ERROR: Media load rejected
# by URL safety check"}
'SetError: {code=4, message="MEDIA_ELEMENT_ERROR: Media load rejected by URL safety check"}',
# Qt 6.5 debug build
# [714871:715010:0315/205751.155681:ERROR:surface_manager.cc(419)]
# Old/orphaned temporary reference to SurfaceId(FrameSinkId[](14, 3),
# LocalSurfaceId(3, 1, 5D04...))
"Old/orphaned temporary reference to SurfaceId(FrameSinkId[](*, *), LocalSurfaceId(*, *, *...))",
# Qt 6.5 debug build
# [758352:758352:0315/212511.747791:WARNING:render_widget_host_impl.cc(280)]
# Input request on unbound interface
"Input request on unbound interface",
]
return any(testutils.pattern_match(pattern=pattern, value=message)
for pattern in ignored_messages)

View File

@ -663,20 +663,20 @@ def test_cookies_store(quteproc_new, request, short_tmpdir, store):
'blank',
'lightness-hsl',
{
# FIXME:qt6 Why #121212 rather than #000000?
('6.4', None): testutils.Color(18, 18, 18),
('6.3', None): testutils.Color(18, 18, 18),
(None, None): testutils.Color(0, 0, 0),
('5.15', None): testutils.Color(0, 0, 0),
('6.2', None): testutils.Color(0, 0, 0),
# Qt 6.3+ (why #121212 rather than #000000?)
(None, None): testutils.Color(18, 18, 18),
}
),
(
'blank',
'brightness-rgb',
{
# FIXME:qt6 Why #121212 rather than #000000?
('6.4', None): testutils.Color(18, 18, 18),
('6.3', None): testutils.Color(18, 18, 18),
(None, None): testutils.Color(0, 0, 0)
('5.15', None): testutils.Color(0, 0, 0),
('6.2', None): testutils.Color(0, 0, 0),
# Qt 6.3+ (why #121212 rather than #000000?)
(None, None): testutils.Color(18, 18, 18),
}
),

View File

@ -23,8 +23,9 @@
import functools
import pytest
from qutebrowser.qt.gui import QIcon, QPixmap
from unittest.mock import Mock
from qutebrowser.qt.gui import QIcon, QPixmap
from qutebrowser.mainwindow import tabwidget
from qutebrowser.utils import usertypes
@ -71,6 +72,38 @@ class TestTabWidget:
assert first_size == widget.tabBar().tabSizeHint(i)
assert first_size_min == widget.tabBar().minimumTabSizeHint(i)
@pytest.fixture
def paint_spy(self, monkeypatch):
spy = Mock()
monkeypatch.setattr(tabwidget, "QStylePainter", spy)
return spy
def test_tab_text_edlided_for_narrow_tabs(self, paint_spy, widget, fake_web_tab):
"""Make sure text gets elided for narrow tabs."""
widget.setMaximumWidth(100)
widget.addTab(fake_web_tab(), "one two three four")
fake_paint_event = Mock()
fake_paint_event.region.return_value.intersects.return_value = True
widget.tabBar().paintEvent(fake_paint_event)
style_opt = paint_spy.return_value.drawControl.call_args_list[0][0][1]
assert len(style_opt.text) < len(widget.tabBar().tabText(0))
assert style_opt.text.endswith("")
assert len(style_opt.text) > len("")
def test_tab_text_not_edlided_for_wide_tabs(self, paint_spy, widget, fake_web_tab):
"""Make sure text doesn't get elided for wide tabs."""
widget.setMaximumWidth(200)
widget.addTab(fake_web_tab(), "one two three four")
fake_paint_event = Mock()
fake_paint_event.region.return_value.intersects.return_value = True
widget.tabBar().paintEvent(fake_paint_event)
style_opt = paint_spy.return_value.drawControl.call_args_list[0][0][1]
assert style_opt.text.endswith(widget.tabBar().tabText(0))
@pytest.mark.parametrize("shrink_pinned", [True, False])
@pytest.mark.parametrize("vertical", [True, False])
def test_pinned_size(self, widget, fake_web_tab, config_stub,

View File

@ -47,7 +47,7 @@ def test_format_sizes(fmt, expected):
@pytest.mark.skipif(not utils.is_linux, reason="Needs Linux")
def test_result(qapp, caplog):
def test_result(webengine_versions, qapp, caplog):
"""Test the real result of ELF parsing.
NOTE: If you're a distribution packager (or contributor) and see this test failing,
@ -60,6 +60,10 @@ def test_result(qapp, caplog):
pytest.importorskip('qutebrowser.qt.webenginecore')
versions = elf.parse_webenginecore()
if webengine_versions.webengine == utils.VersionNumber(6, 5):
assert versions is None
pytest.xfail("ELF file structure not supported")
assert versions is not None
# No failing mmap