diff options
24 files changed, 109 insertions, 114 deletions
diff --git a/README.asciidoc b/README.asciidoc index 2a876a654..71da0db43 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -196,7 +196,7 @@ Active https://vimium.github.io/[Vimium], https://github.com/brookhong/Surfingkeys[Surfingkeys] * Firefox addons (based on WebExtensions): - https://github.com/cmcaine/tridactyl[Tridactyl], + https://github.com/tridactyl/tridactyl[Tridactyl], https://addons.mozilla.org/en-GB/firefox/addon/vimium-ff/[Vimium-FF] (experimental), https://github.com/brookhong/Surfingkeys[Surfingkeys], https://github.com/ueokande/vim-vixen[Vim Vixen], diff --git a/doc/changelog.asciidoc b/doc/changelog.asciidoc index 52234ac0c..ef908ab4b 100644 --- a/doc/changelog.asciidoc +++ b/doc/changelog.asciidoc @@ -27,6 +27,9 @@ Added Changed ~~~~~~~ +- The Windows/macOS releases now ship with Qt 5.13.0 and QtWebEngine 5.13.1. + QtWebEngine 5.13.1 is based on Chromium 73.0.3683.105 with security fixes up + to Chromium 76.0.3809.87. - The statusbar text for passthrough mode now shows all configured bindings to leave the mode, not only one. - When `:config-source` is used with a relative filename, the file is now @@ -38,7 +41,7 @@ Changed - Changes to userscripts: * qute-pass: Don't run `pass` if only a username is requested. * qute-pass: Support private domains like `myrouter.local`. - * readability: Improved CSS styling + * readability: Improved CSS styling. - Performance improvements in various areas: * Loading config files * Typing without any completion matches @@ -48,6 +51,10 @@ Changed - Hosts are now additionally looked up including their ports in netrc files. - With Qt 5.10 or newer, qutebrowser now doesn't force software rendering with Nouveau drivers anymore. However, QtWebEngine/Chromium still do so. +- The XSS Auditor is now disabled by default (`content.xss_auditing` = + `false`). This reflects a similar change in Chromium, see + their https://www.chromium.org/developers/design-documents/xss-auditor[XSS + Auditor Design Document] for details. Fixed ~~~~~ @@ -71,6 +78,9 @@ Fixed number hints on French keyboards. - With rapid hinting in number mode, backspace now edits the filter text after following a hint. +- A certain type of error ("locking protocol") while initializing sqlite now + isn't handled as crash anymore. +- Crash when showing a permission request in certain scenarios. Removed ~~~~~~~ @@ -79,14 +89,6 @@ Removed and 3.5.1 was dropped. -v1.7.1 (unreleased) -------------------- - -Fixed -~~~~~ - -- Crash when showing a permission request in certain scenarios. - v1.7.0 (2019-07-18) ------------------- diff --git a/doc/faq.asciidoc b/doc/faq.asciidoc index 9d4c928df..98331bedf 100644 --- a/doc/faq.asciidoc +++ b/doc/faq.asciidoc @@ -43,32 +43,31 @@ Google's https://www.chromium.org/Home[Chromium]. With an up-to-date Qt, it has much more man-power behind it than WebKitGTK+ has, and thus supports more modern web features - it's also arguably more secure. -What's wrong with https://www.mozilla.org/en-US/firefox/new/[Firefox] and link:http://bug.5digits.org/pentadactyl/[Pentadactyl]/link:http://www.vimperator.org/vimperator[Vimperator]?:: - Firefox likes to break compatibility with addons on each upgrade, gets - slower and more bloated with every upgrade, and has some - https://blog.mozilla.org/advancingcontent/2014/02/11/publisher-transformation-with-users-at-the-center/[horrible - ideas] lately. -+ -Also, developing addons for it is a nightmare. - -What's wrong with https://www.chromium.org/Home[Chromium] and https://vimium.github.io/[Vimium]?:: - The Chrome plugin API doesn't seem to allow much freedom for plugin - writers, which results in Vimium not really having all the features you'd - expect from a proper minimal, vim-like browser. +What's the difference to Firefox/Chromium addons like https://github.com/tridactyl/tridactyl[Tridactyl] or https://vimium.github.io/[Vimium]?:: + The WebExtensions API doesn't seem to allow much freedom for plugin + writers, which results in Vimium/Tridactyl not really having all the + features you'd expect from a proper minimal, vim-like browser. Due to the + same reason, those addons are quite inconsistent - on some pages, they + can't run and intercept keyboard inputs correctly. Tridactyl gets around + those limitations with various measures (such as a native messenger written + in Python doing some work which can't be done from the addon directly), but + there's only so much that can be done. Why Python?:: I enjoy writing Python since 2011, which made it one of the possible choices. I wanted to use https://www.qt.io/[Qt] because of https://wiki.qt.io/QtWebKit[QtWebKit] so I didn't have - https://wiki.qt.io/Category:LanguageBindings[many other choices]. I don't - like C++ and can't write it very well, so that wasn't an alternative. + https://wiki.qt.io/Category:LanguageBindings[many other choices]. At that + point, I wasn't comfortable with C++ so that wasn't an alternative. But isn't Python too slow for a browser?:: - https://www.infoworld.com/d/application-development/van-rossum-python-not-too-slow-188715[No.] - I believe efficiency while coding is a lot more important than efficiency - while running. Also, most of the heavy lifting of qutebrowser is done by Qt - and WebKit in C++, with the + https://www.infoworld.com/d/application-development/van-rossum-python-not-too-slow-188715[It's generally less of a problem than one would expect.] + Most of the heavy lifting of qutebrowser is done by Qt and + QtWebKit/QtWebEngine in C++, with the https://wiki.python.org/moin/GlobalInterpreterLock[GIL] released. ++ +It can be problematic in some areas, but various performance optimizations have +been carried out to problematic portions of the code. Is qutebrowser secure?:: Most security issues are in the backend (which handles networking, @@ -90,8 +89,8 @@ https://github.com/annulen/webkit/releases[in a while]. It also doesn't have any process isolation or sandboxing. See https://github.com/qutebrowser/qutebrowser/issues/4039[#4039] for more details. + -Security issues in qutebrowser's code happen very rarely (as per July 2018, -there have been three security issues caused by qutebrowser in over 4.5 years). +Security issues in qutebrowser's code happen very rarely (as per September 2019, +there have been three security issues caused by qutebrowser in almost 6 years). Those were handled appropriately (http://seclists.org/oss-sec/2018/q3/29[example]) and fixed timely. To report security bugs, please contact me directly at mail@qutebrowser.org, GPG ID @@ -124,10 +123,13 @@ How do I play Youtube videos with mpv?:: player - optionally even with hinting for links: + ---- -:bind m spawn mpv {url} -:bind M hint links spawn mpv {hint-url} +:bind ,m spawn mpv {url} +:bind ,M hint links spawn mpv {hint-url} ---- + +The comma prefix is used to make sure user-defined bindings don't conflict with +the built-in ones. ++ Note that you might need an additional package (e.g. https://www.archlinux.org/packages/community/any/youtube-dl/[youtube-dl] on Archlinux) to play web videos with mpv. @@ -141,8 +143,8 @@ You can find the script here: https://github.com/mpv-player/mpv/blob/master/TOOL It also works nicely with rapid hints: + ---- -:bind m spawn umpv {url} -:bind M hint links spawn umpv {hint-url} +:bind ,m spawn umpv {url} +:bind ,M hint links spawn umpv {hint-url} :bind ;M hint --rapid links spawn umpv {hint-url} ---- @@ -267,59 +269,37 @@ How do I change the `WM_CLASS` used by qutebrowser windows?:: == Troubleshooting -Unable to view flash content.:: - If you have flash installed for on your system, it's necessary to enable plugins +Unable to view Flash content.:: + If you have Flash installed for on your system, it's necessary to enable plugins to use the flash plugin. Using the command `:set content.plugins true` - in qutebrowser will enable plugins. Packages for flash should + in qutebrowser will enable plugins. Packages for Flash should be provided for your platform or it can be obtained from - https://get.adobe.com/flashplayer/[Adobe]. - -Experiencing freezing on sites like duckduckgo and youtube.:: - This issue could be caused by stale plugin files installed by `mozplugger` - if mozplugger was subsequently removed. - Try exiting qutebrowser and removing `~/.mozilla/plugins/mozplugger*.so`. - See https://github.com/qutebrowser/qutebrowser/issues/357[Issue #357] - for more details. - -When using QtWebEngine, qutebrowser reports "Render Process Crashed" and the console prints a traceback on Gentoo Linux or another Source-Based Distro:: - As stated in https://gcc.gnu.org/gcc-6/changes.html[GCC's Website] GCC 6 has introduced some optimizations that could break non-conforming codebases, like QtWebEngine. + - As a workaround, you can disable the nullpointer check optimization by adding the -fno-delete-null-pointer-checks flag while compiling. + - On gentoo, you just need to add it into your make.conf, like this: + - - CFLAGS="... -fno-delete-null-pointer-checks" - CXXFLAGS="... -fno-delete-null-pointer-checks" -+ -And then re-emerging qtwebengine with: + - - emerge -1 qtwebengine + https://get.adobe.com/flashplayer/[Adobe]. Note that QtWebEngine needs + PPAPI Flash, while QtWebKit needs NPAPI Flash. Unable to view DRM content (Netflix, Spotify, etc.).:: - You will need to install `widevine` and set `qt.args` to point to it. - Qt 5.9 currently only supports widevine up to Chrome version 61. -+ -On Arch, simply install `chromium-widevine` from the AUR. -+ -For other distributions, download the chromium tarball and widevine-cdm zip from -https://aur.archlinux.org/packages/chromium-widevine/[the AUR page], -extract `libwidevinecdmadapter.so` and `libwidevinecdm.so` files, respectively, -and move them to the `ppapi` plugin directory in your Qt library directory (create it if it does not exist). + On Arch Linux, simply install `chromium-widevine` from the AUR. + -Lastly, set your `qt.args` to point to that directory and restart qutebrowser: -+ ----- -:set qt.args '["ppapi-widevine-path=/usr/lib64/qt5/plugins/ppapi/libwidevinecdmadapter.so"]' -:restart ----- +For other distributions, it should be possible to obtain the needed +widevine files and store them in the correct places, but the details differ +wildly between various Qt versions. Unable to use `spawn` on MacOS.:: -When running qutebrowser from the prebuilt binary (`qutebrowser.app`) it *will -not* read any files that would alter your `$PATH` (e.g. `.profile`, `.bashrc`, -etc). This is not a bug, just that `.profile` is not propagated to GUI -applications in MacOS. + When running qutebrowser from the prebuilt binary (`qutebrowser.app`) it + *will not* read any files that would alter your `$PATH` (e.g. `.profile`, + `.bashrc`, etc). This is not a bug, just that `.profile` is not propagated + to GUI applications in MacOS. + See https://github.com/qutebrowser/qutebrowser/issues/4273[Issue #4273] for details and potential workarounds. +QtWebKit: Experiencing freezing on sites like DuckDuckGo and YouTube.:: + This issue could be caused by stale plugin files installed by `mozplugger` + if mozplugger was subsequently removed. + Try exiting qutebrowser and removing `~/.mozilla/plugins/mozplugger*.so`. + See https://github.com/qutebrowser/qutebrowser/issues/357[Issue #357] + for more details. + My issue is not listed.:: If you experience any segfaults or crashes, you can report the issue in https://github.com/qutebrowser/qutebrowser/issues[the issue tracker] or diff --git a/doc/help/settings.asciidoc b/doc/help/settings.asciidoc index 378aba5ec..fe86b577b 100644 --- a/doc/help/settings.asciidoc +++ b/doc/help/settings.asciidoc @@ -2249,12 +2249,13 @@ Default: +pass:[false]+ === content.xss_auditing Monitor load requests for cross-site scripting attempts. Suspicious scripts will be blocked and reported in the inspector's JavaScript console. +Note that bypasses for the XSS auditor are widely known and it can be abused for cross-site info leaks in some scenarios, see: https://www.chromium.org/developers/design-documents/xss-auditor This setting supports URL patterns. Type: <<types,Bool>> -Default: +pass:[true]+ +Default: +pass:[false]+ [[downloads.location.directory]] === downloads.location.directory diff --git a/misc/requirements/requirements-codecov.txt b/misc/requirements/requirements-codecov.txt index 7931351b2..2b891e0ab 100644 --- a/misc/requirements/requirements-codecov.txt +++ b/misc/requirements/requirements-codecov.txt @@ -1,9 +1,9 @@ # This file is automatically generated by scripts/dev/recompile_requirements.py -certifi==2019.6.16 +certifi==2019.9.11 chardet==3.0.4 codecov==2.0.15 coverage==4.5.4 idna==2.8 requests==2.22.0 -urllib3==1.25.3 +urllib3==1.25.5 diff --git a/misc/requirements/requirements-dev.txt b/misc/requirements/requirements-dev.txt index 6566d949f..e417be46c 100644 --- a/misc/requirements/requirements-dev.txt +++ b/misc/requirements/requirements-dev.txt @@ -2,7 +2,7 @@ asn1crypto==0.24.0 bump2version==0.5.11 -certifi==2019.6.16 +certifi==2019.9.11 cffi==1.12.3 chardet==3.0.4 colorama==0.4.1 @@ -20,4 +20,4 @@ python-dateutil==2.8.0 requests==2.22.0 six==1.12.0 uritemplate==3.0.0 -urllib3==1.25.3 +urllib3==1.25.5 diff --git a/misc/requirements/requirements-mypy.txt b/misc/requirements/requirements-mypy.txt index 4d68606dc..cdea36d1d 100644 --- a/misc/requirements/requirements-mypy.txt +++ b/misc/requirements/requirements-mypy.txt @@ -3,7 +3,7 @@ mypy==0.720 mypy-extensions==0.4.1 # PyQt5==5.11.3 -# PyQt5-sip==4.19.18 +# PyQt5-sip==4.19.19 -e git+https://github.com/qutebrowser/PyQt5-stubs.git@wip#egg=PyQt5_stubs typed-ast==1.4.0 typing-extensions==3.7.4 diff --git a/misc/requirements/requirements-pip.txt b/misc/requirements/requirements-pip.txt index ebbeb9e1d..9be637f4f 100644 --- a/misc/requirements/requirements-pip.txt +++ b/misc/requirements/requirements-pip.txt @@ -1,7 +1,7 @@ # This file is automatically generated by scripts/dev/recompile_requirements.py appdirs==1.4.3 -packaging==19.1 +packaging==19.2 pyparsing==2.4.2 setuptools==41.2.0 six==1.12.0 diff --git a/misc/requirements/requirements-pylint.txt b/misc/requirements/requirements-pylint.txt index 321c3c415..2005756a3 100644 --- a/misc/requirements/requirements-pylint.txt +++ b/misc/requirements/requirements-pylint.txt @@ -2,7 +2,7 @@ asn1crypto==0.24.0 astroid==2.2.5 -certifi==2019.6.16 +certifi==2019.9.11 cffi==1.12.3 chardet==3.0.4 cryptography==2.7 @@ -20,5 +20,5 @@ requests==2.22.0 six==1.12.0 typed-ast==1.4.0 uritemplate==3.0.0 -urllib3==1.25.3 +urllib3==1.25.5 wrapt==1.11.2 diff --git a/misc/requirements/requirements-pyqt-5.11.txt b/misc/requirements/requirements-pyqt-5.11.txt index 4124de41f..f4be2fd88 100644 --- a/misc/requirements/requirements-pyqt-5.11.txt +++ b/misc/requirements/requirements-pyqt-5.11.txt @@ -1,4 +1,4 @@ # This file is automatically generated by scripts/dev/recompile_requirements.py PyQt5==5.11.3 # rq.filter: < 5.12 -PyQt5-sip==4.19.18 +PyQt5-sip==4.19.19 diff --git a/misc/requirements/requirements-pyqt-5.12.txt b/misc/requirements/requirements-pyqt-5.12.txt index bdb8ffbf3..dec26ca96 100644 --- a/misc/requirements/requirements-pyqt-5.12.txt +++ b/misc/requirements/requirements-pyqt-5.12.txt @@ -1,5 +1,5 @@ # This file is automatically generated by scripts/dev/recompile_requirements.py PyQt5==5.12.3 # rq.filter: < 5.13 -PyQt5-sip==4.19.18 +PyQt5-sip==4.19.19 PyQtWebEngine==5.12.1 # rq.filter: < 5.13 diff --git a/misc/requirements/requirements-pyqt-5.13.txt b/misc/requirements/requirements-pyqt-5.13.txt index 5a23d8f1f..3d2fe90a8 100644 --- a/misc/requirements/requirements-pyqt-5.13.txt +++ b/misc/requirements/requirements-pyqt-5.13.txt @@ -1,5 +1,5 @@ # This file is automatically generated by scripts/dev/recompile_requirements.py -PyQt5==5.13.0 # rq.filter: < 5.14 -PyQt5-sip==4.19.18 -PyQtWebEngine==5.13.0 # rq.filter: < 5.14 +PyQt5==5.13.0 # rq.filter: < 5.14, != 5.13.1 +PyQt5-sip==4.19.19 +PyQtWebEngine==5.13.1 # rq.filter: < 5.14 diff --git a/misc/requirements/requirements-pyqt-5.13.txt-raw b/misc/requirements/requirements-pyqt-5.13.txt-raw index e60db7edb..7aed4a6c7 100644 --- a/misc/requirements/requirements-pyqt-5.13.txt-raw +++ b/misc/requirements/requirements-pyqt-5.13.txt-raw @@ -1,4 +1,4 @@ -#@ filter: PyQt5 < 5.14 +#@ filter: PyQt5 < 5.14, != 5.13.1 #@ filter: PyQtWebEngine < 5.14 -PyQt5 >= 5.13, < 5.14 +PyQt5 >= 5.13, < 5.14, != 5.13.1 PyQtWebEngine >= 5.13, < 5.14 diff --git a/misc/requirements/requirements-pyqt.txt b/misc/requirements/requirements-pyqt.txt index 0e8bcd476..fb5e06925 100644 --- a/misc/requirements/requirements-pyqt.txt +++ b/misc/requirements/requirements-pyqt.txt @@ -1,5 +1,5 @@ # This file is automatically generated by scripts/dev/recompile_requirements.py -PyQt5==5.13.0 -PyQt5-sip==4.19.18 -PyQtWebEngine==5.13.0 +PyQt5==5.13.0 # rq.filter: != 5.13.1 +PyQt5-sip==4.19.19 +PyQtWebEngine==5.13.1 diff --git a/misc/requirements/requirements-pyqt.txt-raw b/misc/requirements/requirements-pyqt.txt-raw index 9c6afbf16..70f9f2e75 100644 --- a/misc/requirements/requirements-pyqt.txt-raw +++ b/misc/requirements/requirements-pyqt.txt-raw @@ -1,2 +1,3 @@ -PyQt5 +#@ filter: PyQt5 != 5.13.1 +PyQt5 != 5.13.1 PyQtWebEngine diff --git a/misc/requirements/requirements-sphinx.txt b/misc/requirements/requirements-sphinx.txt index dfd650d0d..8dc71c3b6 100644 --- a/misc/requirements/requirements-sphinx.txt +++ b/misc/requirements/requirements-sphinx.txt @@ -3,14 +3,14 @@ alabaster==0.7.12 attrs==19.1.0 Babel==2.7.0 -certifi==2019.6.16 +certifi==2019.9.11 chardet==3.0.4 docutils==0.15.2 idna==2.8 imagesize==1.1.0 Jinja2==2.10.1 MarkupSafe==1.1.1 -packaging==19.1 +packaging==19.2 Pygments==2.4.2 pyparsing==2.4.2 pytz==2019.2 @@ -24,4 +24,4 @@ sphinxcontrib-htmlhelp==1.0.2 sphinxcontrib-jsmath==1.0.1 sphinxcontrib-qthelp==1.0.2 sphinxcontrib-serializinghtml==1.1.3 -urllib3==1.25.3 +urllib3==1.25.5 diff --git a/misc/requirements/requirements-tests.txt b/misc/requirements/requirements-tests.txt index 893bfa26e..c7aba7a8c 100644 --- a/misc/requirements/requirements-tests.txt +++ b/misc/requirements/requirements-tests.txt @@ -12,22 +12,22 @@ EasyProcess==0.2.7 Flask==1.1.1 glob2==0.7 hunter==3.0.1 -hypothesis==4.35.0 -importlib-metadata==0.20 +hypothesis==4.36.2 +importlib-metadata==0.23 itsdangerous==1.1.0 # Jinja2==2.10.1 Mako==1.1.0 manhole==1.6.0 # MarkupSafe==1.1.1 more-itertools==7.2.0 -packaging==19.1 +packaging==19.2 parse==1.12.1 parse-type==0.5.2 -pluggy==0.12.0 +pluggy==0.13.0 py==1.8.0 py-cpuinfo==5.0.0 pyparsing==2.4.2 -pytest==5.1.2 +pytest==5.1.3 pytest-bdd==3.2.1 pytest-benchmark==3.2.2 pytest-cov==2.7.1 @@ -41,7 +41,7 @@ pytest-xvfb==1.2.0 PyVirtualDisplay==0.2.4 six==1.12.0 soupsieve==1.9.3 -vulture==1.0 +vulture==1.1 wcwidth==0.1.7 -Werkzeug==0.15.6 +Werkzeug==0.16.0 zipp==0.6.0 diff --git a/misc/requirements/requirements-tox.txt b/misc/requirements/requirements-tox.txt index dd21aca6e..96cf1d2a3 100644 --- a/misc/requirements/requirements-tox.txt +++ b/misc/requirements/requirements-tox.txt @@ -2,10 +2,10 @@ attrs==19.1.0 filelock==3.0.12 -importlib-metadata==0.20 +importlib-metadata==0.23 more-itertools==7.2.0 -packaging==19.1 -pluggy==0.12.0 +packaging==19.2 +pluggy==0.13.0 py==1.8.0 pyparsing==2.4.2 six==1.12.0 diff --git a/misc/requirements/requirements-vulture.txt b/misc/requirements/requirements-vulture.txt index 74ce34551..d85dea6c2 100644 --- a/misc/requirements/requirements-vulture.txt +++ b/misc/requirements/requirements-vulture.txt @@ -1,3 +1,3 @@ # This file is automatically generated by scripts/dev/recompile_requirements.py -vulture==1.0 +vulture==1.1 diff --git a/misc/userscripts/readability-js b/misc/userscripts/readability-js index 7f0349181..0c33453ad 100755 --- a/misc/userscripts/readability-js +++ b/misc/userscripts/readability-js @@ -7,7 +7,8 @@ // // # Prerequisites // -// - NODE_PATH might be required to point to your global node libraries (e.g. /usr/lib/node_modules) +// - NODE_PATH might be required to point to your global node libraries: +// export NODE_PATH=$NODE_PATH:$(npm root -g) // - Mozilla's readability library (npm install -g https://github.com/mozilla/readability.git) // NOTE: You might have to *login* as root for a system-wide installation to work (e.g. sudo -s) // - jsdom (npm install -g jsdom) diff --git a/qutebrowser/config/configdata.yml b/qutebrowser/config/configdata.yml index 65bc168ad..f48cac189 100644 --- a/qutebrowser/config/configdata.yml +++ b/qutebrowser/config/configdata.yml @@ -780,7 +780,7 @@ content.webrtc_ip_handling_policy: content.xss_auditing: type: Bool - default: true + default: false supports_pattern: true desc: >- Monitor load requests for cross-site scripting attempts. @@ -788,6 +788,10 @@ content.xss_auditing: Suspicious scripts will be blocked and reported in the inspector's JavaScript console. + Note that bypasses for the XSS auditor are widely known and it can be + abused for cross-site info leaks in some scenarios, see: + https://www.chromium.org/developers/design-documents/xss-auditor + content.mute: default: false type: Bool diff --git a/qutebrowser/misc/sql.py b/qutebrowser/misc/sql.py index c9b260502..da509fa8c 100644 --- a/qutebrowser/misc/sql.py +++ b/qutebrowser/misc/sql.py @@ -43,6 +43,7 @@ class SqliteErrorCode: CORRUPT = '11' # database disk image is malformed FULL = '13' # database or disk is full CANTOPEN = '14' # unable to open database file + PROTOCOL = '15' # locking protocol error CONSTRAINT = '19' # UNIQUE constraint failed @@ -102,6 +103,7 @@ def raise_sqlite_error(msg, error): SqliteErrorCode.CORRUPT, SqliteErrorCode.FULL, SqliteErrorCode.CANTOPEN, + SqliteErrorCode.PROTOCOL, ] # WORKAROUND for https://bugreports.qt.io/browse/QTBUG-70506 diff --git a/qutebrowser/utils/version.py b/qutebrowser/utils/version.py index bee3934e6..3d784dd91 100644 --- a/qutebrowser/utils/version.py +++ b/qutebrowser/utils/version.py @@ -217,6 +217,7 @@ def _module_versions(): ('cssutils', ['__version__']), ('attr', ['__version__']), ('PyQt5.QtWebEngineWidgets', []), + ('PyQt5.QtWebEngine', ['PYQT_WEBENGINE_VERSION_STR']), ('PyQt5.QtWebKitWidgets', []), ]) for modname, attributes in modules.items(): diff --git a/tests/unit/utils/test_version.py b/tests/unit/utils/test_version.py index d3fec166d..89dcc4bf8 100644 --- a/tests/unit/utils/test_version.py +++ b/tests/unit/utils/test_version.py @@ -539,10 +539,13 @@ class ImportFake: ('cssutils', True), ('attr', True), ('PyQt5.QtWebEngineWidgets', True), + ('PyQt5.QtWebEngine', True), ('PyQt5.QtWebKitWidgets', True), ]) - self.no_version_attribute = ['sip', 'PyQt5.QtWebEngineWidgets', - 'PyQt5.QtWebKitWidgets'] + self.no_version_attribute = ['sip', + 'PyQt5.QtWebEngineWidgets', + 'PyQt5.QtWebKitWidgets', + 'PyQt5.QtWebEngine'] self.version_attribute = '__version__' self.version = '1.2.3' self._real_import = builtins.__import__ |