Title: [170664] trunk/Source/WebKit2
Revision
170664
Author
ander...@apple.com
Date
2014-07-01 14:07:40 -0700 (Tue, 01 Jul 2014)

Log Message

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:

Modified Paths

Added Paths

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);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to