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();