From e780efb3d97aa901e05e1226c8f21de9f0f53cc5 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Wed, 3 Jun 2015 15:03:04 +0200 Subject: [PATCH] Handle javascript in qute:settings more gracefully. Fixes #727. --- qutebrowser/browser/network/qutescheme.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/qutebrowser/browser/network/qutescheme.py b/qutebrowser/browser/network/qutescheme.py index 0432fa6fc..48b3dbd5f 100644 --- a/qutebrowser/browser/network/qutescheme.py +++ b/qutebrowser/browser/network/qutescheme.py @@ -34,6 +34,7 @@ import configparser from PyQt5.QtCore import pyqtSlot, QObject from PyQt5.QtNetwork import QNetworkReply +from PyQt5.QtWebKit import QWebSettings import qutebrowser from qutebrowser.browser.network import schemehandler, networkreply @@ -96,6 +97,12 @@ class JSBridge(QObject): @pyqtSlot(int, str, str, str) def set(self, win_id, sectname, optname, value): """Slot to set a setting from qute:settings.""" + # https://github.com/The-Compiler/qutebrowser/issues/727 + if (sectname, optname == 'content', 'allow-javascript' and + value == 'false'): + message.error(win_id, "Refusing to disable javascript via " + "qute:settings as it needs javascript support.") + return try: objreg.get('config').set('conf', sectname, optname, value) except (configexc.Error, configparser.Error) as e: @@ -172,10 +179,18 @@ def qute_help(win_id, request): def qute_settings(win_id, _request): """Handler for qute:settings. View/change qute configuration.""" - config_getter = functools.partial(objreg.get('config').get, raw=True) - html = jinja.env.get_template('settings.html').render( - win_id=win_id, title='settings', config=configdata, - confget=config_getter) + if not QWebSettings.globalSettings().testAttribute( + QWebSettings.JavascriptEnabled): + # https://github.com/The-Compiler/qutebrowser/issues/727 + template = jinja.env.get_template('pre.html') + html = template.render( + title='Failed to open qute:settings.', + content="qute:settings needs javascript enabled to work.") + else: + config_getter = functools.partial(objreg.get('config').get, raw=True) + html = jinja.env.get_template('settings.html').render( + win_id=win_id, title='settings', config=configdata, + confget=config_getter) return html.encode('UTF-8', errors='xmlcharrefreplace')