Diff
Modified: trunk/Source/WebKit2/ChangeLog (170715 => 170716)
--- trunk/Source/WebKit2/ChangeLog 2014-07-02 19:55:22 UTC (rev 170715)
+++ trunk/Source/WebKit2/ChangeLog 2014-07-02 20:19:06 UTC (rev 170716)
@@ -1,5 +1,30 @@
2014-07-02 Anders Carlsson <[email protected]>
+ Use legacy state coding directly in WKWebView
+ https://bugs.webkit.org/show_bug.cgi?id=134553
+
+ Reviewed by Dan Bernstein.
+
+ * UIProcess/API/C/WKPage.cpp:
+ (WKPageRestoreFromSessionState):
+ * UIProcess/API/C/WKSessionStateRef.cpp:
+ (WKSessionStateCreateFromData):
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView _sessionStateData]):
+ (-[WKWebView _sessionState]):
+ (-[WKWebView _restoreFromSessionStateData:]):
+ (-[WKWebView _restoreFromSessionState:]):
+ (releaseNSData): Deleted.
+ * UIProcess/LegacySessionStateCoding.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::restoreFromSessionState):
+ (WebKit::WebPageProxy::restoreFromState): Deleted.
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/mac/LegacySessionStateCoding.cpp:
+ (WebKit::decodeLegacySessionState):
+
+2014-07-02 Anders Carlsson <[email protected]>
+
Add -[WKWebView _sessionStateData] and -[WKWebView _restoreFromSessionStateData:]
https://bugs.webkit.org/show_bug.cgi?id=134549
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp (170715 => 170716)
--- trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp 2014-07-02 19:55:22 UTC (rev 170715)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp 2014-07-02 20:19:06 UTC (rev 170716)
@@ -381,7 +381,7 @@
// FIXME: This is for backwards compatibility with Safari. Remove it once Safari no longer depends on it.
if (toImpl(sessionStateRef)->type() == API::Object::Type::Data) {
- if (!decodeLegacySessionState(*toImpl(static_cast<WKDataRef>(sessionStateRef)), sessionState))
+ if (!decodeLegacySessionState(toImpl(static_cast<WKDataRef>(sessionStateRef))->bytes(), toImpl(static_cast<WKDataRef>(sessionStateRef))->size(), sessionState))
return;
} else {
ASSERT(toImpl(sessionStateRef)->type() == API::Object::Type::SessionState);
@@ -389,7 +389,7 @@
sessionState = toImpl(static_cast<WKSessionStateRef>(sessionStateRef))->sessionState();
}
- toImpl(pageRef)->restoreFromState(std::move(sessionState));
+ toImpl(pageRef)->restoreFromSessionState(std::move(sessionState));
}
double WKPageGetTextZoomFactor(WKPageRef pageRef)
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKSessionStateRef.cpp (170715 => 170716)
--- trunk/Source/WebKit2/UIProcess/API/C/WKSessionStateRef.cpp 2014-07-02 19:55:22 UTC (rev 170715)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKSessionStateRef.cpp 2014-07-02 20:19:06 UTC (rev 170716)
@@ -40,7 +40,7 @@
WKSessionStateRef WKSessionStateCreateFromData(WKDataRef data)
{
WebKit::SessionState sessionState;
- if (!WebKit::decodeLegacySessionState(*WebKit::toImpl(data), sessionState))
+ if (!WebKit::decodeLegacySessionState(WebKit::toImpl(data)->bytes(), WebKit::toImpl(data)->size(), sessionState))
return nullptr;
return WebKit::toAPI(API::SessionState::create(std::move(sessionState)).leakRef());
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (170715 => 170716)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm 2014-07-02 19:55:22 UTC (rev 170715)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm 2014-07-02 20:19:06 UTC (rev 170716)
@@ -30,6 +30,7 @@
#import "APIFormClient.h"
#import "FindClient.h"
+#import "LegacySessionStateCoding.h"
#import "NavigationState.h"
#import "RemoteLayerTreeTransaction.h"
#import "RemoteObjectRegistry.h"
@@ -1564,30 +1565,36 @@
- (NSData *)_sessionStateData
{
- return [self _sessionState];
+ WebKit::SessionState sessionState = _page->sessionState();
+
+ // FIXME: This should not use the legacy session state encoder.
+ return [wrapper(*WebKit::encodeLegacySessionState(sessionState).release().leakRef()) autorelease];
}
+// FIXME: This should return a _WKSessionState object.
- (NSData *)_sessionState
{
- return [wrapper(*_page->sessionStateData(nullptr).leakRef()) autorelease];
+ return [self _sessionStateData];
}
-static void releaseNSData(unsigned char*, const void* data)
+- (void)_restoreFromSessionStateData:(NSData *)sessionStateData
{
- [(NSData *)data release];
-}
+ // FIXME: This should not use the legacy session state decoder.
+ WebKit::SessionState sessionState;
+ if (!WebKit::decodeLegacySessionState(static_cast<const uint8_t*>(sessionStateData.bytes), sessionStateData.length, sessionState))
+ return;
-- (void)_restoreFromSessionStateData:(NSData *)sessionState
-{
- [self _restoreFromSessionState:sessionState];
+ uint64_t navigationID = _page->restoreFromSessionState(std::move(sessionState));
+ if (navigationID) {
+ // FIXME: This is not necessarily always a reload navigation.
+ _navigationState->createReloadNavigation(navigationID);
+ }
}
+// FIXME: This should take a _WKSessionState object.
- (void)_restoreFromSessionState:(NSData *)sessionStateData
{
- [sessionStateData retain];
- uint64_t navigationID = _page->restoreFromSessionStateData(API::Data::createWithoutCopying((const unsigned char*)sessionStateData.bytes, sessionStateData.length, releaseNSData, sessionStateData).get());
- if (navigationID)
- _navigationState->createReloadNavigation(navigationID);
+ [self _restoreFromSessionStateData:sessionStateData];
}
- (void)_close
Modified: trunk/Source/WebKit2/UIProcess/LegacySessionStateCoding.h (170715 => 170716)
--- trunk/Source/WebKit2/UIProcess/LegacySessionStateCoding.h 2014-07-02 19:55:22 UTC (rev 170715)
+++ trunk/Source/WebKit2/UIProcess/LegacySessionStateCoding.h 2014-07-02 20:19:06 UTC (rev 170716)
@@ -40,7 +40,7 @@
RefPtr<API::Data> encodeLegacySessionState(const SessionState&);
RefPtr<API::Data> encodeLegacySessionHistoryEntryData(const FrameState&);
-bool decodeLegacySessionState(const API::Data&, SessionState&);
+bool decodeLegacySessionState(const uint8_t* data, size_t, SessionState&);
bool decodeLegacySessionHistoryEntryData(const uint8_t* data, size_t, FrameState&);
} // namespace WebKit
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (170715 => 170716)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2014-07-02 19:55:22 UTC (rev 170715)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2014-07-02 20:19:06 UTC (rev 170716)
@@ -1863,7 +1863,7 @@
return sessionState;
}
-uint64_t WebPageProxy::restoreFromState(SessionState sessionState)
+uint64_t WebPageProxy::restoreFromSessionState(SessionState sessionState)
{
bool hasBackForwardList = !!sessionState.backForwardListState.currentIndex;
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (170715 => 170716)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2014-07-02 19:55:22 UTC (rev 170715)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2014-07-02 20:19:06 UTC (rev 170716)
@@ -550,10 +550,10 @@
void terminateProcess();
- SessionState sessionState(const std::function<bool (WebBackForwardListItem&)>&) const;
+ SessionState sessionState(const std::function<bool (WebBackForwardListItem&)>& = nullptr) const;
PassRefPtr<API::Data> sessionStateData(std::function<bool (WebBackForwardListItem&)>) const;
uint64_t restoreFromSessionStateData(API::Data*);
- uint64_t restoreFromState(SessionState);
+ uint64_t restoreFromSessionState(SessionState);
bool supportsTextZoom() const;
double textZoomFactor() const { return m_textZoomFactor; }
Modified: trunk/Source/WebKit2/UIProcess/mac/LegacySessionStateCoding.cpp (170715 => 170716)
--- trunk/Source/WebKit2/UIProcess/mac/LegacySessionStateCoding.cpp 2014-07-02 19:55:22 UTC (rev 170715)
+++ trunk/Source/WebKit2/UIProcess/mac/LegacySessionStateCoding.cpp 2014-07-02 20:19:06 UTC (rev 170716)
@@ -1072,11 +1072,8 @@
return false;
}
-bool decodeLegacySessionState(const API::Data& data, SessionState& sessionState)
+bool decodeLegacySessionState(const uint8_t* bytes, size_t size, SessionState& sessionState)
{
- size_t size = data.size();
- const uint8_t* bytes = data.bytes();
-
if (size < sizeof(uint32_t))
return false;