Diff
Modified: trunk/Source/WebKit2/ChangeLog (170663 => 170664)
--- trunk/Source/WebKit2/ChangeLog 2014-07-01 20:45:47 UTC (rev 170663)
+++ trunk/Source/WebKit2/ChangeLog 2014-07-01 21:07:40 UTC (rev 170664)
@@ -1,3 +1,19 @@
+2014-07-01 Anders Carlsson <ander...@apple.com>
+
+ Add a function for restoring page state given a SessionState object
+ https://bugs.webkit.org/show_bug.cgi?id=134509
+
+ Reviewed by Tim Horton.
+
+ * Shared/WebBackForwardListItem.h:
+ (WebKit::WebBackForwardListItem::itemState):
+ * UIProcess/WebBackForwardList.cpp:
+ (WebKit::WebBackForwardList::saveState):
+ * UIProcess/WebBackForwardList.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::saveState):
+ * UIProcess/WebPageProxy.h:
+
2014-07-01 Dan Bernstein <m...@apple.com>
[Cocoa] Navigation parameter in navigation delegate messages is nil for navigations started by the Web Content process
Modified: trunk/Source/WebKit2/Shared/WebBackForwardListItem.h (170663 => 170664)
--- trunk/Source/WebKit2/Shared/WebBackForwardListItem.h 2014-07-01 20:45:47 UTC (rev 170663)
+++ trunk/Source/WebKit2/Shared/WebBackForwardListItem.h 2014-07-01 21:07:40 UTC (rev 170664)
@@ -54,6 +54,7 @@
virtual ~WebBackForwardListItem();
uint64_t itemID() const { return m_itemID; }
+ const BackForwardListItemState& itemState() { return m_itemState; }
void setPageState(PageState pageState) { m_itemState.pageState = std::move(pageState); }
Modified: trunk/Source/WebKit2/UIProcess/WebBackForwardList.cpp (170663 => 170664)
--- trunk/Source/WebKit2/UIProcess/WebBackForwardList.cpp 2014-07-01 20:45:47 UTC (rev 170663)
+++ trunk/Source/WebKit2/UIProcess/WebBackForwardList.cpp 2014-07-01 21:07:40 UTC (rev 170664)
@@ -380,6 +380,30 @@
m_page->didChangeBackForwardList(nullptr, std::move(removedItems));
}
+BackForwardListState WebBackForwardList::backForwardListState(const std::function<bool (WebBackForwardListItem&)>& filter) const
+{
+ ASSERT(!m_hasCurrentIndex || m_currentIndex < m_entries.size());
+
+ BackForwardListState backForwardListState;
+ if (m_hasCurrentIndex)
+ backForwardListState.currentIndex = m_currentIndex;
+
+ for (size_t i = 0; i < m_entries.size(); ++i) {
+ auto& entry = *m_entries[i];
+
+ if (filter && !filter(entry)) {
+ if (backForwardListState.currentIndex && i <= backForwardListState.currentIndex.value())
+ --backForwardListState.currentIndex.value();
+
+ continue;
+ }
+
+ backForwardListState.items.append(entry.itemState());
+ }
+
+ return backForwardListState;
+}
+
void WebBackForwardList::restoreFromState(BackForwardListState backForwardListState)
{
Vector<RefPtr<WebBackForwardListItem>> items;
Modified: trunk/Source/WebKit2/UIProcess/WebBackForwardList.h (170663 => 170664)
--- trunk/Source/WebKit2/UIProcess/WebBackForwardList.h 2014-07-01 20:45:47 UTC (rev 170663)
+++ trunk/Source/WebKit2/UIProcess/WebBackForwardList.h 2014-07-01 21:07:40 UTC (rev 170664)
@@ -79,6 +79,7 @@
bool restoreFromV1CFDictionaryRepresentation(CFDictionaryRef);
#endif
+ BackForwardListState backForwardListState(const std::function<bool (WebBackForwardListItem&)>&) const;
void restoreFromState(BackForwardListState);
private:
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (170663 => 170664)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2014-07-01 20:45:47 UTC (rev 170663)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2014-07-01 21:07:40 UTC (rev 170664)
@@ -1847,6 +1847,22 @@
}
#endif
+SessionState WebPageProxy::sessionState(const std::function<bool (WebBackForwardListItem&)>& filter) const
+{
+ SessionState sessionState;
+
+ sessionState.backForwardListState = m_backForwardList->backForwardListState(filter);
+
+ String provisionalURLString = m_pageLoadState.pendingAPIRequestURL();
+ if (provisionalURLString.isEmpty())
+ provisionalURLString = m_pageLoadState.provisionalURL();
+
+ if (!provisionalURLString.isEmpty())
+ sessionState.provisionalURL = URL(URL(), provisionalURLString);
+
+ return sessionState;
+}
+
uint64_t WebPageProxy::restoreFromState(SessionState sessionState)
{
m_backForwardList->restoreFromState(std::move(sessionState.backForwardListState));
Added: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp.rej (0 => 170664)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp.rej (rev 0)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp.rej 2014-07-01 21:07:40 UTC (rev 170664)
@@ -0,0 +1,44 @@
+***************
+*** 515,536 ****
+
+ #if ENABLE(INSPECTOR_SERVER)
+- if (pageGroup().preferences()->developerExtrasEnabled())
+ inspector()->enableRemoteInspection();
+ #endif
+
+- if (pageGroup().addProcess(process()))
+- process().addWebPageGroup(pageGroup());
+-
+ initializeCreationParameters();
+- process().send(Messages::WebProcess::CreateWebPage(m_pageID, m_creationParameters), 0);
+
+ #if ENABLE(PAGE_VISIBILITY_API)
+- process().send(Messages::WebPage::SetVisibilityState(m_visibilityState, /* isInitialState */ true), m_pageID);
+ #elif ENABLE(HIDDEN_PAGE_DOM_TIMER_THROTTLING)
+- process().send(Messages::WebPage::SetVisibilityState(isViewVisible() ? PageVisibilityStateVisible : PageVisibilityStateHidden, /* isInitialState */ true), m_pageID);
+ #endif
+
+ #if PLATFORM(MAC)
+- process().send(Messages::WebPage::SetSmartInsertDeleteEnabled(m_isSmartInsertDeleteEnabled), m_pageID);
+ #endif
+ }
+--- 515,533 ----
+
+ #if ENABLE(INSPECTOR_SERVER)
++ if (m_pageGroup->preferences()->developerExtrasEnabled())
+ inspector()->enableRemoteInspection();
+ #endif
+
+ initializeCreationParameters();
++ m_process->send(Messages::WebProcess::CreateWebPage(m_pageID, m_creationParameters), 0);
+
+ #if ENABLE(PAGE_VISIBILITY_API)
++ m_process->send(Messages::WebPage::SetVisibilityState(m_visibilityState, /* isInitialState */ true), m_pageID);
+ #elif ENABLE(HIDDEN_PAGE_DOM_TIMER_THROTTLING)
++ m_process->send(Messages::WebPage::SetVisibilityState(isViewVisible() ? PageVisibilityStateVisible : PageVisibilityStateHidden, /* isInitialState */ true), m_pageID);
+ #endif
+
+ #if PLATFORM(MAC)
++ m_process->send(Messages::WebPage::SetSmartInsertDeleteEnabled(m_isSmartInsertDeleteEnabled), m_pageID);
+ #endif
+ }
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (170663 => 170664)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2014-07-01 20:45:47 UTC (rev 170663)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2014-07-01 21:07:40 UTC (rev 170664)
@@ -550,6 +550,7 @@
void terminateProcess();
+ SessionState sessionState(const std::function<bool (WebBackForwardListItem&)>&) const;
PassRefPtr<API::Data> sessionStateData(std::function<bool (WebBackForwardListItem&)>) const;
uint64_t restoreFromSessionStateData(API::Data*);
uint64_t restoreFromState(SessionState);