From 3f69bf43c45e54789ce6cdc4a2f01ea129e6287c Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Fri, 21 Mar 2014 14:11:50 +0100 Subject: Do not store a WebContentsAdapter directly in QWebEngineHistory The adapter might change, while the page association should always remain. Change-Id: Ib2b49c599d497864484dd6758f47473d70fe4cb3 Reviewed-by: Andras Becsi --- src/webenginewidgets/api/qwebenginehistory.cpp | 46 +++++++++++++------------- src/webenginewidgets/api/qwebenginehistory_p.h | 11 +++--- src/webenginewidgets/api/qwebenginepage.cpp | 3 +- src/webenginewidgets/api/qwebenginepage_p.h | 2 ++ 4 files changed, 31 insertions(+), 31 deletions(-) (limited to 'src/webenginewidgets') diff --git a/src/webenginewidgets/api/qwebenginehistory.cpp b/src/webenginewidgets/api/qwebenginehistory.cpp index be2534de4..d9e9b9c9f 100644 --- a/src/webenginewidgets/api/qwebenginehistory.cpp +++ b/src/webenginewidgets/api/qwebenginehistory.cpp @@ -51,8 +51,8 @@ QT_BEGIN_NAMESPACE -QWebEngineHistoryItemPrivate::QWebEngineHistoryItemPrivate(WebContentsAdapter *adapter, int index) - : adapter(adapter) +QWebEngineHistoryItemPrivate::QWebEngineHistoryItemPrivate(QWebEnginePagePrivate *page, int index) + : page(page) , index(index) { } @@ -80,19 +80,19 @@ QWebEngineHistoryItem::~QWebEngineHistoryItem() QUrl QWebEngineHistoryItem::originalUrl() const { Q_D(const QWebEngineHistoryItem); - return d->adapter ? d->adapter->getNavigationEntryOriginalUrl(d->index) : QUrl(); + return d->page ? d->page->webContents()->getNavigationEntryOriginalUrl(d->index) : QUrl(); } QUrl QWebEngineHistoryItem::url() const { Q_D(const QWebEngineHistoryItem); - return d->adapter ? d->adapter->getNavigationEntryUrl(d->index) : QUrl(); + return d->page ? d->page->webContents()->getNavigationEntryUrl(d->index) : QUrl(); } QString QWebEngineHistoryItem::title() const { Q_D(const QWebEngineHistoryItem); - return d->adapter ? d->adapter->getNavigationEntryTitle(d->index) : QString(); + return d->page ? d->page->webContents()->getNavigationEntryTitle(d->index) : QString(); } QDateTime QWebEngineHistoryItem::lastVisited() const @@ -121,13 +121,13 @@ void QWebEngineHistoryItem::setUserData(const QVariant& userData) bool QWebEngineHistoryItem::isValid() const { Q_D(const QWebEngineHistoryItem); - if (!d->adapter) + if (!d->page) return false; - return d->index >= 0 && d->index < d->adapter->navigationEntryCount(); + return d->index >= 0 && d->index < d->page->webContents()->navigationEntryCount(); } -QWebEngineHistoryPrivate::QWebEngineHistoryPrivate(WebContentsAdapter *adapter) - : adapter(adapter) +QWebEngineHistoryPrivate::QWebEngineHistoryPrivate(QWebEnginePagePrivate *page) + : page(page) { } @@ -136,21 +136,21 @@ QWebEngineHistoryPrivate::~QWebEngineHistoryPrivate() // Invalidate shared item references possibly still out there. QList::iterator it, end; for (it = items.begin(), end = items.end(); it != end; ++it) - it->d->adapter = 0; + it->d->page = 0; } void QWebEngineHistoryPrivate::updateItems() const { // Keep track of items we return to be able to invalidate them - // and avoid dangling references to our adapter. - int entryCount = adapter->navigationEntryCount(); + // and avoid dangling references to our page. + int entryCount = page->webContents()->navigationEntryCount(); while (items.size() > entryCount) { - items.last().d->adapter = 0; + items.last().d->page = 0; items.removeLast(); } while (items.size() < entryCount) { int nextIndex = items.size(); - items.append(QWebEngineHistoryItem(new QWebEngineHistoryItemPrivate(adapter, nextIndex))); + items.append(QWebEngineHistoryItem(new QWebEngineHistoryItemPrivate(page, nextIndex))); } } @@ -166,7 +166,7 @@ QWebEngineHistory::~QWebEngineHistory() void QWebEngineHistory::clear() { Q_D(const QWebEngineHistory); - d->adapter->clearNavigationHistory(); + d->page->webContents()->clearNavigationHistory(); } QList QWebEngineHistory::items() const @@ -197,32 +197,32 @@ QList QWebEngineHistory::forwardItems(int maxItems) const bool QWebEngineHistory::canGoBack() const { Q_D(const QWebEngineHistory); - return d->adapter->canGoBack(); + return d->page->webContents()->canGoBack(); } bool QWebEngineHistory::canGoForward() const { Q_D(const QWebEngineHistory); - return d->adapter->canGoForward(); + return d->page->webContents()->canGoForward(); } void QWebEngineHistory::back() { Q_D(const QWebEngineHistory); - d->adapter->navigateToOffset(-1); + d->page->webContents()->navigateToOffset(-1); } void QWebEngineHistory::forward() { Q_D(const QWebEngineHistory); - d->adapter->navigateToOffset(1); + d->page->webContents()->navigateToOffset(1); } void QWebEngineHistory::goToItem(const QWebEngineHistoryItem &item) { Q_D(const QWebEngineHistory); - Q_ASSERT(item.d->adapter == d->adapter); - d->adapter->navigateToIndex(item.d->index); + Q_ASSERT(item.d->page == d->page); + d->page->webContents()->navigateToIndex(item.d->index); } QWebEngineHistoryItem QWebEngineHistory::backItem() const @@ -259,13 +259,13 @@ QWebEngineHistoryItem QWebEngineHistory::itemAt(int i) const int QWebEngineHistory::currentItemIndex() const { Q_D(const QWebEngineHistory); - return d->adapter->currentNavigationEntryIndex(); + return d->page->webContents()->currentNavigationEntryIndex(); } int QWebEngineHistory::count() const { Q_D(const QWebEngineHistory); - return d->adapter->navigationEntryCount(); + return d->page->webContents()->navigationEntryCount(); } int QWebEngineHistory::maximumItemCount() const diff --git a/src/webenginewidgets/api/qwebenginehistory_p.h b/src/webenginewidgets/api/qwebenginehistory_p.h index 42f3ff73c..fd15f103f 100644 --- a/src/webenginewidgets/api/qwebenginehistory_p.h +++ b/src/webenginewidgets/api/qwebenginehistory_p.h @@ -44,27 +44,26 @@ #include -class WebContentsAdapter; - QT_BEGIN_NAMESPACE +class QWebEnginePagePrivate; class QWebEngineHistoryItemPrivate : public QSharedData { public: - QWebEngineHistoryItemPrivate(WebContentsAdapter *adapter = 0, int index = 0); + QWebEngineHistoryItemPrivate(QWebEnginePagePrivate *page = 0, int index = 0); - WebContentsAdapter *adapter; + QWebEnginePagePrivate *page; int index; }; class QWebEngineHistoryPrivate { public: - QWebEngineHistoryPrivate(WebContentsAdapter *adapter); + QWebEngineHistoryPrivate(QWebEnginePagePrivate *page); ~QWebEngineHistoryPrivate(); void updateItems() const; - WebContentsAdapter *adapter; + QWebEnginePagePrivate *page; mutable QList items; }; diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index a514882d6..b6c84de6c 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -149,7 +149,7 @@ void CallbackDirectory::CallbackSharedDataPointer::doDeref() QWebEnginePagePrivate::QWebEnginePagePrivate() : QObjectPrivate(QObjectPrivateVersion) , adapter(new WebContentsAdapter(SoftwareRenderingMode)) - , history(new QWebEngineHistory(new QWebEngineHistoryPrivate(adapter.data()))) + , history(new QWebEngineHistory(new QWebEngineHistoryPrivate(this))) , view(0) { memset(actions, 0, sizeof(actions)); @@ -252,7 +252,6 @@ void QWebEnginePagePrivate::adoptNewWindow(WebContentsAdapter *newWebContents, W // Overwrite the new page's WebContents with ours. if (newPage) { newPage->d_func()->adapter = newWebContents; - newPage->history()->d_func()->adapter = newWebContents; newWebContents->initialize(newPage->d_func()); if (!initialGeometry.isEmpty()) emit newPage->geometryChangeRequested(initialGeometry); diff --git a/src/webenginewidgets/api/qwebenginepage_p.h b/src/webenginewidgets/api/qwebenginepage_p.h index 0e06f1685..a69866cbd 100644 --- a/src/webenginewidgets/api/qwebenginepage_p.h +++ b/src/webenginewidgets/api/qwebenginepage_p.h @@ -141,6 +141,8 @@ public: void updateNavigationActions(); void _q_webActionTriggered(bool checked); + WebContentsAdapter *webContents() { return adapter.data(); } + QExplicitlySharedDataPointer adapter; QWebEngineHistory *history; QWebEngineView *view; -- cgit v1.2.3