From e9575322f8068b2dd2bc0b30a0f444f769a861b9 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Fri, 21 Mar 2014 14:43:21 +0100 Subject: Implement QWebEngineHistory serialization This does uses logic taken from Chromium's state save and restore code. The history version is incremented from the same method in QtWebKit in cases where the application would try loading a stream from a previous version using QtWebKit. In all cases where Chromium does a restore of a serialized history, it does so on a fresh WebContents instance, thus we must do the same and some of the initialization code has to be updated. Change-Id: I45abb052073bd44c9cb47bc2abcf4b558fe3dbbd Reviewed-by: Pierre Rossi --- src/webenginewidgets/api/qwebenginehistory.cpp | 6 ++---- src/webenginewidgets/api/qwebenginepage.cpp | 9 +++++++++ src/webenginewidgets/api/qwebenginepage_p.h | 1 + 3 files changed, 12 insertions(+), 4 deletions(-) (limited to 'src/webenginewidgets') diff --git a/src/webenginewidgets/api/qwebenginehistory.cpp b/src/webenginewidgets/api/qwebenginehistory.cpp index d9e9b9c9f..7079bdfc7 100644 --- a/src/webenginewidgets/api/qwebenginehistory.cpp +++ b/src/webenginewidgets/api/qwebenginehistory.cpp @@ -281,15 +281,13 @@ void QWebEngineHistory::setMaximumItemCount(int count) QDataStream& operator<<(QDataStream& stream, const QWebEngineHistory& history) { - Q_UNUSED(history); - qWarning("Not implemented: %s", __func__); + history.d_func()->page->webContents()->serializeNavigationHistory(stream); return stream; } QDataStream& operator>>(QDataStream& stream, QWebEngineHistory& history) { - Q_UNUSED(history); - qWarning("Not implemented: %s", __func__); + history.d_func()->page->recreateFromSerializedHistory(stream); return stream; } diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index b6c84de6c..e9ad17cf0 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -354,6 +354,15 @@ void QWebEnginePagePrivate::_q_webActionTriggered(bool checked) } #endif // QT_NO_ACTION +void QWebEnginePagePrivate::recreateFromSerializedHistory(QDataStream &input) +{ + QExplicitlySharedDataPointer newWebContents = WebContentsAdapter::createFromSerializedNavigationHistory(input, this, WebContentsAdapterClient::SoftwareRenderingMode); + if (newWebContents) { + adapter = newWebContents.data(); + adapter->initialize(this); + } +} + QWebEnginePage::QWebEnginePage(QObject* parent) : QObject(*new QWebEnginePagePrivate, parent) { diff --git a/src/webenginewidgets/api/qwebenginepage_p.h b/src/webenginewidgets/api/qwebenginepage_p.h index a69866cbd..927519008 100644 --- a/src/webenginewidgets/api/qwebenginepage_p.h +++ b/src/webenginewidgets/api/qwebenginepage_p.h @@ -142,6 +142,7 @@ public: void _q_webActionTriggered(bool checked); WebContentsAdapter *webContents() { return adapter.data(); } + void recreateFromSerializedHistory(QDataStream &input); QExplicitlySharedDataPointer adapter; QWebEngineHistory *history; -- cgit v1.2.1