Add a backend warning when using QtWebKit

This commit is contained in:
Florian Bruhin 2017-05-30 08:42:37 +02:00
parent 4cb82af11e
commit 1c6fd6f725
3 changed files with 129 additions and 11 deletions

View File

@ -53,7 +53,7 @@ from qutebrowser.browser.webkit.network import networkmanager
from qutebrowser.keyinput import macros from qutebrowser.keyinput import macros
from qutebrowser.mainwindow import mainwindow, prompt from qutebrowser.mainwindow import mainwindow, prompt
from qutebrowser.misc import (readline, ipc, savemanager, sessions, from qutebrowser.misc import (readline, ipc, savemanager, sessions,
crashsignal, earlyinit) crashsignal, earlyinit, objects)
from qutebrowser.misc import utilcmds # pylint: disable=unused-import from qutebrowser.misc import utilcmds # pylint: disable=unused-import
from qutebrowser.utils import (log, version, message, utils, qtutils, urlutils, from qutebrowser.utils import (log, version, message, utils, qtutils, urlutils,
objreg, usertypes, standarddir, error, debug) objreg, usertypes, standarddir, error, debug)
@ -202,7 +202,7 @@ def _process_args(args):
process_pos_args(args.command) process_pos_args(args.command)
_open_startpage() _open_startpage()
_open_quickstart(args) _open_special_pages(args)
delta = datetime.datetime.now() - earlyinit.START_TIME delta = datetime.datetime.now() - earlyinit.START_TIME
log.init.debug("Init finished after {}s".format(delta.total_seconds())) log.init.debug("Init finished after {}s".format(delta.total_seconds()))
@ -319,23 +319,40 @@ def _open_startpage(win_id=None):
tabbed_browser.tabopen(url) tabbed_browser.tabopen(url)
def _open_quickstart(args): def _open_special_pages(args):
"""Open quickstart if it's the first start. """Open special notification pages which are only shown once.
Currently this is:
- Quickstart page if it's the first start.
- Legacy QtWebKit warning if needed.
Args: Args:
args: The argparse namespace. args: The argparse namespace.
""" """
if args.basedir is not None: if args.basedir is not None:
# With --basedir given, don't open quickstart. # With --basedir given, don't open anything.
return return
state_config = objreg.get('state-config') state_config = objreg.get('state-config')
try: tabbed_browser = objreg.get('tabbed-browser', scope='window',
quickstart_done = state_config['general']['quickstart-done'] == '1' window='last-focused')
except KeyError:
quickstart_done = False # Legacy QtWebKit warning
needs_warning = (objects.backend == usertypes.Backend.QtWebKit and
not qtutils.is_qtwebkit_ng())
warning_shown = state_config['general'].get('backend-warning-shown') == '1'
if not warning_shown and needs_warning:
tabbed_browser.tabopen(QUrl('qute://backend-warning'),
background=False)
state_config['general']['backend-warning-shown'] = '1'
# Quickstart page
quickstart_done = state_config['general'].get('quickstart-done') == '1'
if not quickstart_done: if not quickstart_done:
tabbed_browser = objreg.get('tabbed-browser', scope='window',
window='last-focused')
tabbed_browser.tabopen( tabbed_browser.tabopen(
QUrl('https://www.qutebrowser.org/quickstart.html')) QUrl('https://www.qutebrowser.org/quickstart.html'))
state_config['general']['quickstart-done'] = '1' state_config['general']['quickstart-done'] = '1'

View File

@ -30,6 +30,7 @@ import sys
import time import time
import urllib.parse import urllib.parse
import datetime import datetime
import pkg_resources
from PyQt5.QtCore import QUrlQuery, QUrl from PyQt5.QtCore import QUrlQuery, QUrl
@ -431,3 +432,13 @@ def qute_help(url):
else: else:
data = utils.read_file(path) data = utils.read_file(path)
return 'text/html', data return 'text/html', data
@add_handler('backend-warning')
def qute_backend_warning(url):
"""Handler for qute://backend-warning."""
html = jinja.render('backend-warning.html',
distribution=version.distribution(),
Distribution=version.Distribution,
version=pkg_resources.parse_version)
return 'text/html', html

View File

@ -0,0 +1,90 @@
{% extends "styled.html" %}
{% block style %}
{{super()}}
.note {
font-size: smaller;
color: grey;
}
.mono {
font-family: monospace;
}
{% endblock %}
{% block content %}
<h1>Legacy QtWebKit backend</h1>
<span class="note">Note this warning will only appear once. Use <span class="mono">:open
qute://backend-warning</span> to show it again at a later time.</span>
<p>
You're using qutebrowser with the legacy QtWebKit backend. It's still the
default until a few remaining issues are sorted out. If you can, it's
strongly suggested to switch earlier, as legacy QtWebKit has known security
issues and also breaks things on various websites.
</p>
<h2>Using QtWebEngine instead</h2>
<span class="note">This is usually the better choice if you aren't using Nouveau graphics, and
don't need any features which are currently unavailable with QtWebEngine (like
the <span class="mono">qute://settings</span> page or caret browsing).</span>
{% macro install_webengine(package) -%}
You should be able to install <span class="mono">{{ package }}</span> and start qutebrowser with <span class="mono">--backend webengine</span> to use the new backend.
{%- endmacro %}
{% macro please_open_issue() -%}
If you know more, please <a href="https://github.com/qutebrowser/qutebrowser/issues/new">open an issue</a>!
{%- endmacro %}
<p>
{% if distribution.parsed == Distribution.ubuntu %}
{% if distribution.version >= version('17.04') %}
{{ install_webengine('python3-pyqt5.qtwebengine') }}
{% elif distribution.version >= version('16.04') %}
QtWebEngine is only available in Ubuntu's repositories since 17.04, but you can <a href="https://github.com/qutebrowser/qutebrowser/blob/master/INSTALL.asciidoc#installing-qutebrowser-with-tox">install qutebrowser via tox</a> with <span class="mono">tox -e mkvenv-pypi</span> to use the new backend.
{% else %}
Unfortunately, no easy way is known to install QtWebEngine on Ubuntu &lt; 16.04. {{ please_open_issue() }}
{% endif %}
{% elif distribution.parsed == Distribution.debian %}
{% if distribution.version >= version('9') %}
{{ install_webengine('python3-pyqt5.qtwebengine') }}
{% else %}
Unfortunately, no easy way is known to install QtWebEngine on Debian &lt; 9. {{ please_open_issue() }}
{% endif %}
{% elif distribution.parsed in [Distribution.arch, Distribution.manjaro] %}
{{ install_webengine('qt5-webengine') }}
{% elif distribution.parsed == Distribution.void %}
{{ install_webengine('python-PyQt5-webengine') }}
{% elif distribution.parsed == Distribution.fedora %}
{{ install_webengine('qt5-qtwebengine') }}
{% elif distribution.parsed == Distribution.opensuse %}
{{ install_webengine('libqt5-qtwebengine') }}
{% else %}
There's no information available for your system. {{ please_open_issue() }}
{% endif %}
</p>
<h2>Using QtWebKit-NG instead</h2>
<span class="note" >This is a drop-in replacement for legacy QtWebKit. Note <b>private browsing won't work with it properly</b> until its next release.</span>
<p>
{% if distribution.parsed == Distribution.debian and distribution.version >= version('9') %}
There are unofficial QtWebKit-NG packages <a href="http://repo.paretje.be/unstable/">available</a>.
{% elif distribution.parsed in [Distribution.ubuntu, Distribution.debian] %}
No easy way is known to install QtWebKit-NG on your system.
There are unofficial QtWebKit-NG packages <a href="http://repo.paretje.be/unstable/">available</a>, but they are intended for Debian Unstable.
{{ please_open_issue() }}
{% elif distribution.parsed in [Distribution.arch, Distribution.manjaro] %}
You should be able to install <span class="mono">qt5-webkit-ng</span> via <span class="mono">pacman</span>.
{% elif distribution.parsed == Distribution.gentoo %}
There's an unofficial <a href="https://gist.github.com/annulen/309569fb61e5d64a703c055c1e726f71">ebuild</a> available.
{% else %}
There's no information available for your system. {{ please_open_issue() }}
{% endif %}
</p>
{% endblock %}