From 6f24221c543574785819cb5cc9d21c9466be02bb Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Wed, 17 Aug 2016 17:53:14 +0200 Subject: [PATCH] Replace WebElement.frame() by .has_frame() --- qutebrowser/browser/hints.py | 12 ++++++++---- qutebrowser/browser/webelem.py | 5 ++--- qutebrowser/browser/webengine/webengineelem.py | 5 ++--- qutebrowser/browser/webkit/webkitelem.py | 4 ++-- tests/unit/browser/webkit/test_webkitelem.py | 9 +++++++-- 5 files changed, 21 insertions(+), 14 deletions(-) diff --git a/qutebrowser/browser/hints.py b/qutebrowser/browser/hints.py index f8ba189dc..6a941a57f 100644 --- a/qutebrowser/browser/hints.py +++ b/qutebrowser/browser/hints.py @@ -117,7 +117,7 @@ class HintLabel(QLabel): @pyqtSlot() def _move_to_elem(self): """Reposition the label to its element.""" - if self.elem.frame() is None: + if not self.elem.has_frame(): # This sometimes happens for some reason... log.hints.debug("Frame for {!r} vanished!".format(self)) self.hide() @@ -329,10 +329,14 @@ class HintActions(QObject): else: prompt = None + # FIXME:qtwebengine get a proper API for this + # pylint: disable=protected-access + page = elem._elem.webFrame().page() + # pylint: enable=protected-access + download_manager = objreg.get('download-manager', scope='window', window=self._win_id) - download_manager.get(url, page=elem.frame().page(), - prompt_download_directory=prompt) + download_manager.get(url, page=page, prompt_download_directory=prompt) def call_userscript(self, elem, context): """Call a userscript from a hint. @@ -897,7 +901,7 @@ class HintManager(QObject): } elem = self._context.labels[keystr].elem - if elem.frame() is None: + if not elem.has_frame(): message.error(self._win_id, "This element has no webframe.", immediately=True) diff --git a/qutebrowser/browser/webelem.py b/qutebrowser/browser/webelem.py index 766c1d9e1..d20863174 100644 --- a/qutebrowser/browser/webelem.py +++ b/qutebrowser/browser/webelem.py @@ -103,9 +103,8 @@ class AbstractWebElement(collections.abc.MutableMapping): html = None return utils.get_repr(self, html=html) - def frame(self): - """Get the main frame of this element.""" - # FIXME:qtwebengine get rid of this? + def has_frame(self): + """Check if this element has a valid frame attached.""" raise NotImplementedError def geometry(self): diff --git a/qutebrowser/browser/webengine/webengineelem.py b/qutebrowser/browser/webengine/webengineelem.py index 44eacdc71..640592cab 100644 --- a/qutebrowser/browser/webengine/webengineelem.py +++ b/qutebrowser/browser/webengine/webengineelem.py @@ -58,9 +58,8 @@ class WebEngineElement(webelem.AbstractWebElement): def __len__(self): return len(self._js_dict['attributes']) - def frame(self): - log.stub() - return None + def has_frame(self): + return True def geometry(self): log.stub() diff --git a/qutebrowser/browser/webkit/webkitelem.py b/qutebrowser/browser/webkit/webkitelem.py index 75b6559b3..ce5e9caea 100644 --- a/qutebrowser/browser/webkit/webkitelem.py +++ b/qutebrowser/browser/webkit/webkitelem.py @@ -83,9 +83,9 @@ class WebKitElement(webelem.AbstractWebElement): if self._elem.isNull(): raise IsNullError('Element {} vanished!'.format(self._elem)) - def frame(self): + def has_frame(self): self._check_vanished() - return self._elem.webFrame() + return self._elem.webFrame() is not None def geometry(self): self._check_vanished() diff --git a/tests/unit/browser/webkit/test_webkitelem.py b/tests/unit/browser/webkit/test_webkitelem.py index fb179c590..329c00ae6 100644 --- a/tests/unit/browser/webkit/test_webkitelem.py +++ b/tests/unit/browser/webkit/test_webkitelem.py @@ -255,7 +255,7 @@ class TestWebKitElement: lambda e: None in e, list, # __iter__ len, - lambda e: e.frame(), + lambda e: e.has_frame(), lambda e: e.geometry(), lambda e: e.style_property('visibility', strategy='computed'), lambda e: e.text(), @@ -394,7 +394,6 @@ class TestWebKitElement: assert elem.debug_text() == expected @pytest.mark.parametrize('attribute, code', [ - ('webFrame', lambda e: e.frame()), ('geometry', lambda e: e.geometry()), ('toOuterXml', lambda e: e.outer_xml()), ]) @@ -404,6 +403,12 @@ class TestWebKitElement: setattr(mock, 'return_value', sentinel) assert code(elem) is sentinel + @pytest.mark.parametrize('frame, expected', [ + (object(), True), (None, False)]) + def test_has_frame(self, elem, frame, expected): + elem._elem.webFrame.return_value = frame + assert elem.has_frame() == expected + def test_tag_name(self, elem): elem._elem.tagName.return_value = 'SPAN' assert elem.tag_name() == 'span'