Title: [170644] trunk/Source/WebKit2
Revision
170644
Author
ander...@apple.com
Date
2014-07-01 10:04:30 -0700 (Tue, 01 Jul 2014)

Log Message

Use an std::function for filtering session state data
https://bugs.webkit.org/show_bug.cgi?id=134481

Reviewed by Sam Weinig.

* UIProcess/API/C/WKPage.cpp:
(WKPageCopySessionState):
* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _sessionState]):
* UIProcess/WebBackForwardList.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::sessionStateData):
* UIProcess/WebPageProxy.h:
* UIProcess/cf/WebBackForwardListCF.cpp:
(WebKit::WebBackForwardList::createCFDictionaryRepresentation):
* UIProcess/cf/WebPageProxyCF.cpp:
(WebKit::WebPageProxy::sessionStateData):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (170643 => 170644)


--- trunk/Source/WebKit2/ChangeLog	2014-07-01 16:59:00 UTC (rev 170643)
+++ trunk/Source/WebKit2/ChangeLog	2014-07-01 17:04:30 UTC (rev 170644)
@@ -1,3 +1,23 @@
+2014-06-30  Anders Carlsson  <ander...@apple.com>
+
+        Use an std::function for filtering session state data
+        https://bugs.webkit.org/show_bug.cgi?id=134481
+
+        Reviewed by Sam Weinig.
+
+        * UIProcess/API/C/WKPage.cpp:
+        (WKPageCopySessionState):
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView _sessionState]):
+        * UIProcess/WebBackForwardList.h:
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::sessionStateData):
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/cf/WebBackForwardListCF.cpp:
+        (WebKit::WebBackForwardList::createCFDictionaryRepresentation):
+        * UIProcess/cf/WebPageProxyCF.cpp:
+        (WebKit::WebPageProxy::sessionStateData):
+
 2014-07-01  Rohit Kumar  <kumar.ro...@samsung.com>
 
         Clean up the WebKit build from unused parameter warning in Webkit2/UIProcess module

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp (170643 => 170644)


--- trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp	2014-07-01 16:59:00 UTC (rev 170643)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp	2014-07-01 17:04:30 UTC (rev 170644)
@@ -351,7 +351,15 @@
 
 WKDataRef WKPageCopySessionState(WKPageRef pageRef, void *context, WKPageSessionStateFilterCallback filter)
 {
-    return toAPI(toImpl(pageRef)->sessionStateData(filter, context).leakRef());
+    return toAPI(toImpl(pageRef)->sessionStateData([pageRef, context, filter](WebBackForwardListItem& item) {
+        if (!filter(pageRef, WKPageGetSessionBackForwardListItemValueType(), toAPI(&item), context))
+            return false;
+
+        if (!filter(pageRef, WKPageGetSessionHistoryURLValueType(), toURLRef(item.originalURL().impl()), context))
+            return false;
+
+        return true;
+    }).leakRef());
 }
 
 void WKPageRestoreFromSessionState(WKPageRef pageRef, WKDataRef sessionStateData)

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (170643 => 170644)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm	2014-07-01 16:59:00 UTC (rev 170643)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm	2014-07-01 17:04:30 UTC (rev 170644)
@@ -1560,7 +1560,7 @@
 
 - (NSData *)_sessionState
 {
-    return [wrapper(*_page->sessionStateData(nullptr, nullptr).leakRef()) autorelease];
+    return [wrapper(*_page->sessionStateData(nullptr).leakRef()) autorelease];
 }
 
 static void releaseNSData(unsigned char*, const void* data)

Modified: trunk/Source/WebKit2/UIProcess/WebBackForwardList.h (170643 => 170644)


--- trunk/Source/WebKit2/UIProcess/WebBackForwardList.h	2014-07-01 16:59:00 UTC (rev 170643)
+++ trunk/Source/WebKit2/UIProcess/WebBackForwardList.h	2014-07-01 17:04:30 UTC (rev 170644)
@@ -73,7 +73,7 @@
     PassRefPtr<API::Array> forwardListAsAPIArrayWithLimit(unsigned limit) const;
 
 #if USE(CF)
-    CFDictionaryRef createCFDictionaryRepresentation(WebPageProxy::WebPageProxySessionStateFilterCallback, void* context) const;
+    CFDictionaryRef createCFDictionaryRepresentation(std::function<bool (WebBackForwardListItem&)>) const;
     bool restoreFromCFDictionaryRepresentation(CFDictionaryRef);
     bool restoreFromV0CFDictionaryRepresentation(CFDictionaryRef);
     bool restoreFromV1CFDictionaryRepresentation(CFDictionaryRef);

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (170643 => 170644)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2014-07-01 16:59:00 UTC (rev 170643)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2014-07-01 17:04:30 UTC (rev 170644)
@@ -1834,7 +1834,7 @@
 }
 
 #if !USE(CF)
-PassRefPtr<API::Data> WebPageProxy::sessionStateData(WebPageProxySessionStateFilterCallback, void* /*context*/) const
+PassRefPtr<API::Data> WebPageProxy::sessionStateData(std::function<bool (WebBackForwardListItem&)>) const
 {
     // FIXME: Return session state data for saving Page state.
     return 0;

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (170643 => 170644)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2014-07-01 16:59:00 UTC (rev 170643)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2014-07-01 17:04:30 UTC (rev 170644)
@@ -550,8 +550,7 @@
 
     void terminateProcess();
 
-    typedef bool (*WebPageProxySessionStateFilterCallback)(WKPageRef, WKStringRef type, WKTypeRef object, void* context);
-    PassRefPtr<API::Data> sessionStateData(WebPageProxySessionStateFilterCallback, void* context) const;
+    PassRefPtr<API::Data> sessionStateData(std::function<bool (WebBackForwardListItem&)>) const;
     void restoreFromSessionStateData(API::Data*);
     void restoreFromState(SessionState);
 

Modified: trunk/Source/WebKit2/UIProcess/cf/WebBackForwardListCF.cpp (170643 => 170644)


--- trunk/Source/WebKit2/UIProcess/cf/WebBackForwardListCF.cpp	2014-07-01 16:59:00 UTC (rev 170643)
+++ trunk/Source/WebKit2/UIProcess/cf/WebBackForwardListCF.cpp	2014-07-01 17:04:30 UTC (rev 170644)
@@ -63,7 +63,7 @@
     return CFDictionaryCreate(0, keys, values, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
 }
 
-CFDictionaryRef WebBackForwardList::createCFDictionaryRepresentation(WebPageProxy::WebPageProxySessionStateFilterCallback filter, void* context) const
+CFDictionaryRef WebBackForwardList::createCFDictionaryRepresentation(std::function<bool (WebBackForwardListItem&)> filter) const
 {
     ASSERT(!m_hasCurrentIndex || m_currentIndex < m_entries.size());
 
@@ -86,13 +86,10 @@
             return 0;
         }
 
-        if (filter) {
-            if (!filter(toAPI(m_page), WKPageGetSessionBackForwardListItemValueType(), toAPI(m_entries[i].get()), context)
-                || !filter(toAPI(m_page), WKPageGetSessionHistoryURLValueType(), toURLRef(m_entries[i]->originalURL().impl()), context)) {
-                if (i <= m_currentIndex)
-                    currentIndex--;
-                continue;
-            }
+        if (filter && !filter(*m_entries[i])) {
+            if (i <= m_currentIndex)
+                currentIndex--;
+            continue;
         }
         
         RetainPtr<CFStringRef> url = ""

Modified: trunk/Source/WebKit2/UIProcess/cf/WebPageProxyCF.cpp (170643 => 170644)


--- trunk/Source/WebKit2/UIProcess/cf/WebPageProxyCF.cpp	2014-07-01 16:59:00 UTC (rev 170643)
+++ trunk/Source/WebKit2/UIProcess/cf/WebPageProxyCF.cpp	2014-07-01 17:04:30 UTC (rev 170644)
@@ -46,13 +46,13 @@
 
 static const UInt32 CurrentSessionStateDataVersion = 2;
 
-PassRefPtr<API::Data> WebPageProxy::sessionStateData(WebPageProxySessionStateFilterCallback filter, void* context) const
+PassRefPtr<API::Data> WebPageProxy::sessionStateData(std::function<bool (WebBackForwardListItem&)> filter) const
 {
     const void* keys[2];
     const void* values[2];
     CFIndex numValues = 0;
 
-    RetainPtr<CFDictionaryRef> sessionHistoryDictionary = adoptCF(m_backForwardList->createCFDictionaryRepresentation(filter, context));
+    RetainPtr<CFDictionaryRef> sessionHistoryDictionary = adoptCF(m_backForwardList->createCFDictionaryRepresentation(std::move(filter)));
     if (sessionHistoryDictionary) {
         keys[numValues] = sessionHistoryKey;
         values[numValues] = sessionHistoryDictionary.get();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to