Title: [170603] trunk/Source/WebKit2
Revision
170603
Author
[email protected]
Date
2014-06-30 15:14:35 -0700 (Mon, 30 Jun 2014)

Log Message

Implement the last pieces of encodeFrameStateNode
https://bugs.webkit.org/show_bug.cgi?id=134460

Reviewed by Andreas Kling.

* UIProcess/mac/LegacySessionStateCoding.cpp:
(WebKit::HistoryEntryDataEncoder::operator<<):
(WebKit::isValidEnum):
(WebKit::encodeFormDataElement):
(WebKit::encodeFormData):
(WebKit::encodeFrameStateNode):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (170602 => 170603)


--- trunk/Source/WebKit2/ChangeLog	2014-06-30 22:13:37 UTC (rev 170602)
+++ trunk/Source/WebKit2/ChangeLog	2014-06-30 22:14:35 UTC (rev 170603)
@@ -1,3 +1,17 @@
+2014-06-30  Anders Carlsson  <[email protected]>
+
+        Implement the last pieces of encodeFrameStateNode
+        https://bugs.webkit.org/show_bug.cgi?id=134460
+
+        Reviewed by Andreas Kling.
+
+        * UIProcess/mac/LegacySessionStateCoding.cpp:
+        (WebKit::HistoryEntryDataEncoder::operator<<):
+        (WebKit::isValidEnum):
+        (WebKit::encodeFormDataElement):
+        (WebKit::encodeFormData):
+        (WebKit::encodeFrameStateNode):
+
 2014-06-30  Benjamin Poulain  <[email protected]>
 
         [iOS][WK2] Move tap highlight to the inverseScaleRootView

Modified: trunk/Source/WebKit2/UIProcess/mac/LegacySessionStateCoding.cpp (170602 => 170603)


--- trunk/Source/WebKit2/UIProcess/mac/LegacySessionStateCoding.cpp	2014-06-30 22:13:37 UTC (rev 170602)
+++ trunk/Source/WebKit2/UIProcess/mac/LegacySessionStateCoding.cpp	2014-06-30 22:14:35 UTC (rev 170603)
@@ -119,6 +119,22 @@
         return *this;
     }
 
+    HistoryEntryDataEncoder& operator<<(const Vector<uint8_t>& value)
+    {
+        *this << static_cast<uint64_t>(value.size());
+        encodeFixedLengthData(value.data(), value.size(), 1);
+
+        return *this;
+    }
+
+    HistoryEntryDataEncoder& operator<<(const Vector<char>& value)
+    {
+        *this << static_cast<uint64_t>(value.size());
+        encodeFixedLengthData(reinterpret_cast<const uint8_t*>(value.data()), value.size(), 1);
+
+        return *this;
+    }
+
 #if PLATFORM(IOS)
     HistoryEntryDataEncoder& operator<<(WebCore::FloatRect value)
     {
@@ -157,6 +173,12 @@
     }
 #endif
 
+    template<typename T>
+    auto operator<<(T value) -> typename std::enable_if<std::is_enum<T>::value, HistoryEntryDataEncoder&>::type
+    {
+        return *this << static_cast<uint32_t>(value);
+    }
+
     MallocPtr<uint8_t> finishEncoding(size_t& size)
     {
         size = m_bufferSize;
@@ -212,29 +234,98 @@
     uint8_t* m_bufferPointer;
 };
 
+enum class FormDataElementType {
+    Data = ""
+    EncodedFile = 1,
+    EncodedBlob = 2,
+};
+
+static bool isValidEnum(FormDataElementType type)
+{
+    switch (type) {
+    case FormDataElementType::Data:
+    case FormDataElementType::EncodedFile:
+    case FormDataElementType::EncodedBlob:
+        return true;
+    }
+
+    return false;
+}
+
+static void encodeFormDataElement(HistoryEntryDataEncoder& encoder, const HTTPBody::Element& element)
+{
+    switch (element.type) {
+    case HTTPBody::Element::Type::Data:
+        encoder << FormDataElementType::Data;
+        encoder << element.data;
+        break;
+
+    case HTTPBody::Element::Type::File:
+        encoder << FormDataElementType::EncodedFile;
+        encoder << element.filePath;
+
+        // Used to be generatedFilename.
+        encoder << String();
+
+        // Used to be shouldGenerateFile.
+        encoder << false;
+
+        encoder << element.fileStart;
+        encoder << element.fileLength.valueOr(-1);
+        encoder << element.expectedFileModificationTime.valueOr(std::numeric_limits<double>::quiet_NaN());
+        break;
+
+    case HTTPBody::Element::Type::Blob:
+        encoder << FormDataElementType::EncodedBlob;
+        encoder << element.blobURLString;
+        break;
+    }
+}
+
+static void encodeFormData(HistoryEntryDataEncoder& encoder, const HTTPBody& formData)
+{
+    // Used to be alwaysStream.
+    encoder << false;
+
+    // Used to be boundary.
+    encoder << Vector<uint8_t>();
+
+    encoder << static_cast<uint64_t>(formData.elements.size());
+    for (const auto& element : formData.elements)
+        encodeFormDataElement(encoder, element);
+
+    // Used to be hasGeneratedFiles.
+    encoder << false;
+
+    // Used to be identifier.
+    encoder << static_cast<int64_t>(0);
+}
+
 static void encodeFrameStateNode(HistoryEntryDataEncoder& encoder, const FrameState& frameState)
 {
     encoder << static_cast<uint64_t>(frameState.children.size());
 
     for (const auto& childFrameState : frameState.children) {
-        // FIXME: Implement.
-        (void)childFrameState;
-        ASSERT_NOT_REACHED();
+        encoder << childFrameState.originalURLString;
+        encoder << childFrameState.urlString;
+
+        encodeFrameStateNode(encoder, childFrameState);
     }
 
     encoder << frameState.documentSequenceNumber;
 
     encoder << static_cast<uint64_t>(frameState.documentState.size());
-    for (const auto& documentState : frameState.documentState) {
-        // FIXME: Implement.
-        (void)documentState;
-        ASSERT_NOT_REACHED();
-    }
+    for (const auto& documentState : frameState.documentState)
+        encoder << documentState;
 
-    encoder << !!frameState.httpBody;
     if (frameState.httpBody) {
-        // FIXME: Implement.
-        ASSERT_NOT_REACHED();
+        encoder << frameState.httpBody.value().contentType;
+        encoder << true;
+
+        encodeFormData(encoder, frameState.httpBody.value());
+    } else {
+        encoder << String();
+        encoder << false;
     }
 
     encoder << frameState.itemSequenceNumber;
@@ -247,10 +338,8 @@
     encoder << frameState.pageScaleFactor;
 
     encoder << !!frameState.stateObjectData;
-    if (frameState.stateObjectData) {
-        // FIXME: Implement.
-        ASSERT_NOT_REACHED();
-    }
+    if (frameState.stateObjectData)
+        encoder << frameState.stateObjectData.value();
 
     encoder << frameState.target;
 
@@ -553,24 +642,6 @@
     const uint8_t* m_bufferEnd;
 };
 
-enum class FormDataElementType {
-    Data = ""
-    EncodedFile = 1,
-    EncodedBlob = 2,
-};
-
-static bool isValidEnum(FormDataElementType type)
-{
-    switch (type) {
-    case FormDataElementType::Data:
-    case FormDataElementType::EncodedFile:
-    case FormDataElementType::EncodedBlob:
-        return true;
-    }
-
-    return false;
-}
-
 static void decodeFormDataElement(HistoryEntryDataDecoder& decoder, HTTPBody::Element& formDataElement)
 {
     Optional<FormDataElementType> elementType;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to