QtWebEngine: Initial session implementation

This commit is contained in:
Florian Bruhin 2016-09-06 13:55:35 +02:00
parent 4f55b435f0
commit 1ed637a906
5 changed files with 11 additions and 17 deletions

View File

@ -24,7 +24,7 @@
import functools import functools
from PyQt5.QtCore import pyqtSlot, Qt, QEvent, QPoint, QUrl from PyQt5.QtCore import pyqtSlot, Qt, QEvent, QPoint, QUrl, QTimer
from PyQt5.QtGui import QKeyEvent, QIcon from PyQt5.QtGui import QKeyEvent, QIcon
# pylint: disable=no-name-in-module,import-error,useless-suppression # pylint: disable=no-name-in-module,import-error,useless-suppression
from PyQt5.QtWidgets import QOpenGLWidget from PyQt5.QtWidgets import QOpenGLWidget
@ -32,7 +32,7 @@ from PyQt5.QtWebEngineWidgets import QWebEnginePage, QWebEngineScript
# pylint: enable=no-name-in-module,import-error,useless-suppression # pylint: enable=no-name-in-module,import-error,useless-suppression
from qutebrowser.browser import browsertab, mouse from qutebrowser.browser import browsertab, mouse
from qutebrowser.browser.webengine import webview, webengineelem from qutebrowser.browser.webengine import webview, webengineelem, tabhistory
from qutebrowser.utils import usertypes, qtutils, log, javascript, utils from qutebrowser.utils import usertypes, qtutils, log, javascript, utils
@ -302,7 +302,15 @@ class WebEngineHistory(browsertab.AbstractHistory):
return qtutils.deserialize(data, self._history) return qtutils.deserialize(data, self._history)
def load_items(self, items): def load_items(self, items):
log.stub() stream, _data, cur_data = tabhistory.serialize(items)
qtutils.deserialize_stream(stream, self._history)
if cur_data is not None:
if 'zoom' in cur_data:
self._tab.zoom.set_factor(cur_data['zoom'])
if ('scroll-pos' in cur_data and
self._tab.scroller.pos_px() == QPoint(0, 0)):
QTimer.singleShot(0, functools.partial(
self._tab.scroller.to_point, cur_data['scroll-pos']))
class WebEngineZoom(browsertab.AbstractZoom): class WebEngineZoom(browsertab.AbstractZoom):

View File

@ -19,7 +19,6 @@ Feature: Going back and forward.
- active: true - active: true
url: http://localhost:*/data/backforward/2.txt url: http://localhost:*/data/backforward/2.txt
@qtwebengine_todo: FIXME why is this broken?
Scenario: Going back in a new tab Scenario: Going back in a new tab
Given I open data/backforward/1.txt Given I open data/backforward/1.txt
When I open data/backforward/2.txt When I open data/backforward/2.txt

View File

@ -408,8 +408,6 @@ def compare_session(request, quteproc, expected):
partial_compare is used, which means only the keys/values listed will be partial_compare is used, which means only the keys/values listed will be
compared. compared.
""" """
if request.config.webengine:
pytest.xfail(reason="QtWebEngine TODO: Sessions are not implemented")
quteproc.compare_session(expected) quteproc.compare_session(expected)
@ -473,8 +471,6 @@ def check_open_tabs(quteproc, request, tabs):
It expects a list of URLs, with an optional "(active)" suffix. It expects a list of URLs, with an optional "(active)" suffix.
""" """
if request.config.webengine:
pytest.xfail(reason="QtWebEngine TODO: Sessions are not implemented")
session = quteproc.get_session() session = quteproc.get_session()
active_suffix = ' (active)' active_suffix = ' (active)'
tabs = tabs.splitlines() tabs = tabs.splitlines()
@ -530,8 +526,6 @@ def _get_scroll_values(quteproc):
@bdd.then(bdd.parsers.re(r"the page should be scrolled " @bdd.then(bdd.parsers.re(r"the page should be scrolled "
r"(?P<direction>horizontally|vertically)")) r"(?P<direction>horizontally|vertically)"))
def check_scrolled(request, quteproc, direction): def check_scrolled(request, quteproc, direction):
if request.config.webengine:
pytest.xfail(reason="QtWebEngine TODO: Sessions are not implemented")
x, y = _get_scroll_values(quteproc) x, y = _get_scroll_values(quteproc)
if direction == 'horizontally': if direction == 'horizontally':
assert x != 0 assert x != 0
@ -543,8 +537,6 @@ def check_scrolled(request, quteproc, direction):
@bdd.then("the page should not be scrolled") @bdd.then("the page should not be scrolled")
def check_not_scrolled(request, quteproc): def check_not_scrolled(request, quteproc):
if request.config.webengine:
pytest.xfail(reason="QtWebEngine TODO: Sessions are not implemented")
x, y = _get_scroll_values(quteproc) x, y = _get_scroll_values(quteproc)
assert x == 0 assert x == 0
assert y == 0 assert y == 0

View File

@ -24,8 +24,6 @@ bdd.scenarios('marks.feature')
@bdd.then(bdd.parsers.parse("the page should be scrolled to {x} {y}")) @bdd.then(bdd.parsers.parse("the page should be scrolled to {x} {y}"))
def check_y(request, quteproc, x, y): def check_y(request, quteproc, x, y):
if request.config.webengine:
pytest.xfail(reason="QtWebEngine TODO: Sessions are not implemented")
data = quteproc.get_session() data = quteproc.get_session()
pos = data['windows'][0]['tabs'][0]['history'][-1]['scroll-pos'] pos = data['windows'][0]['tabs'][0]['history'][-1]['scroll-pos']
assert int(x) == pos['x'] assert int(x) == pos['x']

View File

@ -25,9 +25,6 @@ import pytest_bdd as bdd
bdd.scenarios('sessions.feature') bdd.scenarios('sessions.feature')
pytestmark = pytest.mark.qtwebengine_todo("Sessions are not implemented")
@bdd.when(bdd.parsers.parse('I have a "{name}" session file:\n{contents}')) @bdd.when(bdd.parsers.parse('I have a "{name}" session file:\n{contents}'))
def create_session_file(quteproc, name, contents): def create_session_file(quteproc, name, contents):
filename = os.path.join(quteproc.basedir, 'data', 'sessions', filename = os.path.join(quteproc.basedir, 'data', 'sessions',