From efadbe64b5076463630e848e5030f6882c3818ff Mon Sep 17 00:00:00 2001 From: Kevin Velghe Date: Thu, 20 Oct 2016 15:54:06 +0200 Subject: [PATCH 1/5] insert_text doesn't need javascript to be enabled It runs in the context of an element, which seems possible, even without javascript enabled (in qtwebkit?). --- qutebrowser/browser/commands.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/qutebrowser/browser/commands.py b/qutebrowser/browser/commands.py index dc17c598f..f1849b0bf 100644 --- a/qutebrowser/browser/commands.py +++ b/qutebrowser/browser/commands.py @@ -1539,8 +1539,6 @@ class CommandDispatcher: text: The text to insert. """ tab = self._current_widget() - if not tab.has_js(): - raise cmdexc.CommandError("This command needs javascript enabled.") def _insert_text_cb(elem): if elem is None: From 2d6c443b1a476c91b0cb9c5e6a0aef40ec7503ca Mon Sep 17 00:00:00 2001 From: Kevin Velghe Date: Fri, 21 Oct 2016 00:42:06 +0200 Subject: [PATCH 2/5] Add test for insert-text with javascript disabled --- tests/end2end/features/yankpaste.feature | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/end2end/features/yankpaste.feature b/tests/end2end/features/yankpaste.feature index bc9bc7ab6..cf22e205b 100644 --- a/tests/end2end/features/yankpaste.feature +++ b/tests/end2end/features/yankpaste.feature @@ -256,6 +256,16 @@ Feature: Yanking and pasting. # Compare Then the javascript message "textarea contents: Hello world" should be logged + Scenario: Inserting text into an empty text field with javascript disabled + When I set general -> log-javascript-console to info + And I set content -> allow-javascript to false + And I open data/paste_primary.html + And I run :click-element id qute-textarea + And I wait for "Clicked editable element!" in the log + And I run :insert-text Hello world + # Compare + Then the javascript message "textarea contents: Hello world" should be logged + Scenario: Inserting text into a text field at specific position When I set general -> log-javascript-console to info And I open data/paste_primary.html From 18420c69784160252a2ff1f141df6197963b5977 Mon Sep 17 00:00:00 2001 From: Kevin Velghe Date: Sun, 30 Oct 2016 16:11:48 +0100 Subject: [PATCH 3/5] Test content of textarea without javascript --- tests/end2end/features/yankpaste.feature | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/end2end/features/yankpaste.feature b/tests/end2end/features/yankpaste.feature index cf22e205b..45644b7eb 100644 --- a/tests/end2end/features/yankpaste.feature +++ b/tests/end2end/features/yankpaste.feature @@ -263,8 +263,10 @@ Feature: Yanking and pasting. And I run :click-element id qute-textarea And I wait for "Clicked editable element!" in the log And I run :insert-text Hello world + And I press the keys "" + And I run :yank selection # Compare - Then the javascript message "textarea contents: Hello world" should be logged + Then the clipboard should contain "Hello world" Scenario: Inserting text into a text field at specific position When I set general -> log-javascript-console to info From 598278765143093f79e74ac3b92ea2983e0bc92d Mon Sep 17 00:00:00 2001 From: Kevin Velghe Date: Sun, 30 Oct 2016 17:46:12 +0100 Subject: [PATCH 4/5] Enable javascript again after the test --- tests/end2end/features/yankpaste.feature | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/end2end/features/yankpaste.feature b/tests/end2end/features/yankpaste.feature index 45644b7eb..f67c65103 100644 --- a/tests/end2end/features/yankpaste.feature +++ b/tests/end2end/features/yankpaste.feature @@ -265,6 +265,7 @@ Feature: Yanking and pasting. And I run :insert-text Hello world And I press the keys "" And I run :yank selection + And I set content -> allow-javascript to true # Compare Then the clipboard should contain "Hello world" From 0caee949944b1c4eb7c9df7fd1812bbd288e8ddf Mon Sep 17 00:00:00 2001 From: Kevin Velghe Date: Sun, 30 Oct 2016 18:54:34 +0100 Subject: [PATCH 5/5] Remove has_js --- qutebrowser/browser/browsertab.py | 4 ---- qutebrowser/browser/webengine/webenginetab.py | 4 ---- qutebrowser/browser/webkit/webkittab.py | 4 ---- 3 files changed, 12 deletions(-) diff --git a/qutebrowser/browser/browsertab.py b/qutebrowser/browser/browsertab.py index 29b82d969..22f1c7e51 100644 --- a/qutebrowser/browser/browsertab.py +++ b/qutebrowser/browser/browsertab.py @@ -761,10 +761,6 @@ class AbstractTab(QWidget): """ raise NotImplementedError - def has_js(self): - """Check if qutebrowser can run javascript in this tab.""" - raise NotImplementedError - def shutdown(self): raise NotImplementedError diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 81f5604ad..8d1a1ac1c 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -528,10 +528,6 @@ class WebEngineTab(browsertab.AbstractTab): else: self._widget.page().runJavaScript(code, callback) - def has_js(self): - # QtWebEngine can run JS even if the page can't - return True - def shutdown(self): log.stub() diff --git a/qutebrowser/browser/webkit/webkittab.py b/qutebrowser/browser/webkit/webkittab.py index 507a9ba94..b46ec0409 100644 --- a/qutebrowser/browser/webkit/webkittab.py +++ b/qutebrowser/browser/webkit/webkittab.py @@ -628,10 +628,6 @@ class WebKitTab(browsertab.AbstractTab): if callback is not None: callback(result) - def has_js(self): - settings = QWebSettings.globalSettings() - return settings.testAttribute(QWebSettings.JavascriptEnabled) - def icon(self): return self._widget.icon()