Title: [170716] trunk/Source/WebKit2
Revision
170716
Author
[email protected]
Date
2014-07-02 13:19:06 -0700 (Wed, 02 Jul 2014)

Log Message

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):

Modified Paths

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;
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to