From 5518ead68d8b83260914401c9d4bef0243508721 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Fri, 12 Mar 2021 10:27:51 +0100 Subject: Add site-specific quirk for Wikipedia in dark mode Fixes #6260 --- doc/changelog.asciidoc | 7 ++ qutebrowser/browser/shared.py | 13 ++- tests/end2end/data/darkmode/mathml.html | 14 +++ tests/end2end/data/darkmode/mathml.svg | 159 ++++++++++++++++++++++++++++++++ tests/end2end/test_invocations.py | 5 +- 5 files changed, 195 insertions(+), 3 deletions(-) create mode 100644 tests/end2end/data/darkmode/mathml.html create mode 100644 tests/end2end/data/darkmode/mathml.svg diff --git a/doc/changelog.asciidoc b/doc/changelog.asciidoc index 7122716c9..3427a3757 100644 --- a/doc/changelog.asciidoc +++ b/doc/changelog.asciidoc @@ -122,6 +122,13 @@ Fixed - The `hist_importer.py` script didn't work correctly after qutebrowser v2.0.0 and resulted in a history database qutebrowser couldn't read properly. It now works properly again. +- With certain QtWebEngine versions (5.15.0 based on Chromium 80 and 5.15.3 + based on Chromium 87), Chromium's dark mode doesn't invert certain SVG images, + even with `colors.wegpage.darkmode.policy.images` set to `smart`. + Most notably, this causes formulae on Wikipedia to display black on (almost) + black. If `content.site_specific_quirks` is enabled, qutebrowser now injects + some CSS as a workaround, which inverts all math formula images on Wikipedia + (and potentially other sites, if they use the same CSS class). [[v2.0.2]] v2.0.2 (2021-02-04) diff --git a/qutebrowser/browser/shared.py b/qutebrowser/browser/shared.py index 94332ffcb..cfff01836 100644 --- a/qutebrowser/browser/shared.py +++ b/qutebrowser/browser/shared.py @@ -30,9 +30,9 @@ from PyQt5.QtCore import QUrl from qutebrowser.config import config from qutebrowser.utils import (usertypes, message, log, objreg, jinja, utils, - qtutils) + qtutils, version) from qutebrowser.mainwindow import mainwindow -from qutebrowser.misc import guiprocess +from qutebrowser.misc import guiprocess, objects class CallSuper(Exception): @@ -298,6 +298,15 @@ def get_user_stylesheet(searching=False): if setting == 'never' or setting == 'when-searching' and not searching: css += '\nhtml > ::-webkit-scrollbar { width: 0px; height: 0px; }' + if (objects.backend == usertypes.Backend.QtWebEngine and + version.qtwebengine_versions().chromium_major in [80, 87] and + config.val.colors.webpage.darkmode.enabled and + config.val.colors.webpage.darkmode.policy.images == 'smart' and + config.val.content.site_specific_quirks): + # WORKAROUND for MathML-output on Wikipedia being black on black. + # See https://bugs.chromium.org/p/chromium/issues/detail?id=1126606 + css += '\nimg.mwe-math-fallback-image-inline { filter: invert(100%); }' + return css diff --git a/tests/end2end/data/darkmode/mathml.html b/tests/end2end/data/darkmode/mathml.html new file mode 100644 index 000000000..4a7cd548c --- /dev/null +++ b/tests/end2end/data/darkmode/mathml.html @@ -0,0 +1,14 @@ + + + + + MathML-like SVG + + + + Pythagorean theorem + + diff --git a/tests/end2end/data/darkmode/mathml.svg b/tests/end2end/data/darkmode/mathml.svg new file mode 100644 index 000000000..30b03ffac --- /dev/null +++ b/tests/end2end/data/darkmode/mathml.svg @@ -0,0 +1,159 @@ + + + + + + image/svg+xml + + {\displaystyle a^{2}+b^{2}=c^{2}.} + + + + + {\displaystyle a^{2}+b^{2}=c^{2}.} + + + + diff --git a/tests/end2end/test_invocations.py b/tests/end2end/test_invocations.py index 01014618f..f55bfbd51 100644 --- a/tests/end2end/test_invocations.py +++ b/tests/end2end/test_invocations.py @@ -645,6 +645,8 @@ def test_cookies_store(quteproc_new, request, short_tmpdir, store): ), ('yellow', 'lightness-hsl', {None: testutils.Color(204, 204, 0)}), ('yellow', 'brightness-rgb', {None: testutils.Color(0, 0, 204)}), + + ('mathml', None, {None: testutils.Color(255, 255, 255)}), ]) def test_dark_mode(webengine_versions, quteproc_new, request, filename, algorithm, colors): @@ -654,8 +656,9 @@ def test_dark_mode(webengine_versions, quteproc_new, request, args = _base_args(request.config) + [ '--temp-basedir', '-s', 'colors.webpage.darkmode.enabled', 'true', - '-s', 'colors.webpage.darkmode.algorithm', algorithm, ] + if algorithm is not None: + args += ['-s', 'colors.webpage.darkmode.algorithm', algorithm] quteproc_new.start(args) ver = webengine_versions.webengine -- cgit v1.2.3-54-g00ecf