From f0568ece57a7feb496c54610d3a69d05cf8fd360 Mon Sep 17 00:00:00 2001 From: Jay Kamat Date: Thu, 20 Sep 2018 18:24:22 -0700 Subject: [PATCH] Make convert_js_arg public and use it for dispatch_element in webkit --- qutebrowser/browser/webengine/webengineelem.py | 1 - qutebrowser/browser/webkit/webkitelem.py | 9 +++++---- qutebrowser/javascript/webelem.js | 1 - qutebrowser/utils/javascript.py | 4 ++-- tests/unit/utils/test_javascript.py | 4 ++-- 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/qutebrowser/browser/webengine/webengineelem.py b/qutebrowser/browser/webengine/webengineelem.py index ad23c9337..4ef20da18 100644 --- a/qutebrowser/browser/webengine/webengineelem.py +++ b/qutebrowser/browser/webengine/webengineelem.py @@ -135,7 +135,6 @@ class WebEngineElement(webelem.AbstractWebElement): def set_value(self, value): self._js_call('set_value', value) - def dispatch_event(self, event, bubbles=False, cancelable=False, composed=False): self._js_call('dispatch_event', event, bubbles, cancelable, composed) diff --git a/qutebrowser/browser/webkit/webkitelem.py b/qutebrowser/browser/webkit/webkitelem.py index 151cdb1dc..b9f2c55c2 100644 --- a/qutebrowser/browser/webkit/webkitelem.py +++ b/qutebrowser/browser/webkit/webkitelem.py @@ -132,12 +132,13 @@ class WebKitElement(webelem.AbstractWebElement): cancelable=False, composed=False): self._check_vanished() log.webelem.debug("Firing event on {!r} via javascript.".format(self)) - event = javascript.string_escape(event) self._elem.evaluateJavaScript( - "this.dispatchEvent(new Event('{}', " + "this.dispatchEvent(new Event({}, " "{{'bubbles': {}, 'cancelable': {}, 'composed': {}}}))" - .format(event, str(bubbles).lower(), str(cancelable).lower(), - str(composed).lower())) + .format(javascript.convert_js_arg(event), + javascript.convert_js_arg(bubbles), + javascript.convert_js_arg(cancelable), + javascript.convert_js_arg(composed))) def caret_position(self): """Get the text caret position for the current element.""" diff --git a/qutebrowser/javascript/webelem.js b/qutebrowser/javascript/webelem.js index 7c7e9ad09..4b9a8e8cd 100644 --- a/qutebrowser/javascript/webelem.js +++ b/qutebrowser/javascript/webelem.js @@ -362,7 +362,6 @@ window._qutebrowser.webelem = (function() { document.execCommand("insertText", false, text); }; - funcs.dispatch_event = (id, event, bubbles = false, cancelable = false, composed = false) => { const elem = elements[id]; diff --git a/qutebrowser/utils/javascript.py b/qutebrowser/utils/javascript.py index 93df8e70f..0ee9b6274 100644 --- a/qutebrowser/utils/javascript.py +++ b/qutebrowser/utils/javascript.py @@ -49,7 +49,7 @@ def string_escape(text): return text -def _convert_js_arg(arg): +def convert_js_arg(arg): """Convert the given argument so it's the equivalent in JS.""" if arg is None: return 'undefined' @@ -66,7 +66,7 @@ def _convert_js_arg(arg): def assemble(module, function, *args): """Assemble a javascript file and a function call.""" - js_args = ', '.join(_convert_js_arg(arg) for arg in args) + js_args = ', '.join(convert_js_arg(arg) for arg in args) if module == 'window': parts = ['window', function] else: diff --git a/tests/unit/utils/test_javascript.py b/tests/unit/utils/test_javascript.py index 29e090fd0..9d227a386 100644 --- a/tests/unit/utils/test_javascript.py +++ b/tests/unit/utils/test_javascript.py @@ -88,9 +88,9 @@ class TestStringEscape: def test_convert_js_arg(arg, expected): if expected is TypeError: with pytest.raises(TypeError): - javascript._convert_js_arg(arg) + javascript.convert_js_arg(arg) else: - assert javascript._convert_js_arg(arg) == expected + assert javascript.convert_js_arg(arg) == expected @pytest.mark.parametrize('base, expected_base', [