From a16c5a6a25c2bb804031d8124d84441c4d21fbf8 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Mon, 12 Sep 2016 15:59:03 +0200 Subject: [PATCH] Add a world argument to tab.run_js_async --- qutebrowser/browser/browsertab.py | 8 +++++++- qutebrowser/browser/webengine/webenginetab.py | 18 ++++++++++++++---- qutebrowser/browser/webkit/webkittab.py | 4 +++- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/qutebrowser/browser/browsertab.py b/qutebrowser/browser/browsertab.py index 454e2f33c..dffdfa271 100644 --- a/qutebrowser/browser/browsertab.py +++ b/qutebrowser/browser/browsertab.py @@ -747,11 +747,17 @@ class AbstractTab(QWidget): """ raise NotImplementedError - def run_js_async(self, code, callback=None): + def run_js_async(self, code, callback=None, *, world=None): """Run javascript async. The given callback will be called with the result when running JS is complete. + + Args: + code: The javascript code to run. + callback: The callback to call with the result, or None. + world: An int world ID to run the JS in the main world or in another + isolated world. """ raise NotImplementedError diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 9f2958668..5fcc4dacb 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -475,14 +475,24 @@ class WebEngineTab(browsertab.AbstractTab): else: self._widget.page().toHtml(callback) - def run_js_async(self, code, callback=None): - world = QWebEngineScript.ApplicationWorld + def run_js_async(self, code, callback=None, *, world=None): + if world is None: + world_id = QWebEngineScript.ApplicationWorld + else: + # We need to make this sure here, as otherwise we get an unexpected + # TypeError later... + if not isinstance(world, int): + raise TypeError("Expected int as world id, got {!r}".format( + world)) + world_id = world try: if callback is None: - self._widget.page().runJavaScript(code, world) + self._widget.page().runJavaScript(code, world_id) else: - self._widget.page().runJavaScript(code, world, callback) + self._widget.page().runJavaScript(code, world_id, callback) except TypeError: + if world is not None: + log.webview.warning("Ignoring world ID on Qt < 5.7") # Qt < 5.7 if callback is None: self._widget.page().runJavaScript(code) diff --git a/qutebrowser/browser/webkit/webkittab.py b/qutebrowser/browser/webkit/webkittab.py index c2d64a343..46800f501 100644 --- a/qutebrowser/browser/webkit/webkittab.py +++ b/qutebrowser/browser/webkit/webkittab.py @@ -621,7 +621,9 @@ class WebKitTab(browsertab.AbstractTab): else: callback(frame.toHtml()) - def run_js_async(self, code, callback=None): + def run_js_async(self, code, callback=None, *, world=None): + if world is not None: + log.webview.warning("Ignoring world ID {}".format(world)) result = self._widget.page().mainFrame().evaluateJavaScript(code) if callback is not None: callback(result)