Title: [158978] trunk/Source
Revision
158978
Author
[email protected]
Date
2013-11-08 16:51:54 -0800 (Fri, 08 Nov 2013)

Log Message

KeyedEncoder should be able to encoder objects
https://bugs.webkit.org/show_bug.cgi?id=124085

Reviewed by Sam Weinig.

Source/WebCore:

* history/HistoryItem.cpp:
(WebCore::HistoryItem::encodeBackForwardTree):
Encode the root object.

(WebCore::HistoryItem::encodeBackForwardTreeNode):
Encode the target.

* history/HistoryItem.h:
Add new members.

* platform/KeyedCoding.h:
(WebCore::KeyedEncoder::encodeObject):
Call beginObject, call the functor and then call endObject().

Source/WebKit2:

Add a dictionary stack to KeyedEncoder that's pushed and popped by
beginObject/endObject.

* Shared/cf/KeyedEncoder.cpp:
(WebKit::KeyedEncoder::KeyedEncoder):
(WebKit::KeyedEncoder::~KeyedEncoder):
(WebKit::KeyedEncoder::encodeUInt32):
(WebKit::KeyedEncoder::encodeString):
(WebKit::KeyedEncoder::beginObject):
(WebKit::KeyedEncoder::endObject):
* Shared/cf/KeyedEncoder.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (158977 => 158978)


--- trunk/Source/WebCore/ChangeLog	2013-11-09 00:42:05 UTC (rev 158977)
+++ trunk/Source/WebCore/ChangeLog	2013-11-09 00:51:54 UTC (rev 158978)
@@ -1,3 +1,24 @@
+2013-11-08  Anders Carlsson  <[email protected]>
+
+        KeyedEncoder should be able to encoder objects
+        https://bugs.webkit.org/show_bug.cgi?id=124085
+
+        Reviewed by Sam Weinig.
+
+        * history/HistoryItem.cpp:
+        (WebCore::HistoryItem::encodeBackForwardTree):
+        Encode the root object.
+
+        (WebCore::HistoryItem::encodeBackForwardTreeNode):
+        Encode the target.
+
+        * history/HistoryItem.h:
+        Add new members.
+
+        * platform/KeyedCoding.h:
+        (WebCore::KeyedEncoder::encodeObject):
+        Call beginObject, call the functor and then call endObject().
+
 2013-11-08  Sam Weinig  <[email protected]>
 
         Teach CanvasObserver about references

Modified: trunk/Source/WebCore/history/HistoryItem.cpp (158977 => 158978)


--- trunk/Source/WebCore/history/HistoryItem.cpp	2013-11-09 00:42:05 UTC (rev 158977)
+++ trunk/Source/WebCore/history/HistoryItem.cpp	2013-11-09 00:51:54 UTC (rev 158978)
@@ -687,7 +687,9 @@
 {
     encoder.encodeUInt32("version", backForwardTreeEncodingVersion);
 
-    // FIXME: Encode the tree.
+    encoder.encodeObject("root", *this, [](KeyedEncoder& encoder, const HistoryItem& item) {
+        item.encodeBackForwardTreeNode(encoder);
+    });
 }
 
 void HistoryItem::encodeBackForwardTreeNode(Encoder& encoder) const
@@ -733,6 +735,13 @@
     encoder.encodeString(m_target);
 }
 
+void HistoryItem::encodeBackForwardTreeNode(KeyedEncoder& encoder) const
+{
+    // FIXME: Implement.
+
+    encoder.encodeString("target", m_target);
+}
+
 struct DecodeRecursionStackElement {
     RefPtr<HistoryItem> node;
     size_t i;

Modified: trunk/Source/WebCore/history/HistoryItem.h (158977 => 158978)


--- trunk/Source/WebCore/history/HistoryItem.h	2013-11-09 00:42:05 UTC (rev 158977)
+++ trunk/Source/WebCore/history/HistoryItem.h	2013-11-09 00:51:54 UTC (rev 158978)
@@ -223,11 +223,8 @@
     HistoryItem* findTargetItem();
 
     void encodeBackForwardTreeNode(Encoder&) const;
+    void encodeBackForwardTreeNode(KeyedEncoder&) const;
 
-    /* When adding new member variables to this class, please notify the Qt team.
-     * qt/HistoryItemQt.cpp contains code to serialize history items.
-     */
-
     String m_urlString;
     String m_originalURLString;
     String m_referrer;

Modified: trunk/Source/WebCore/platform/KeyedCoding.h (158977 => 158978)


--- trunk/Source/WebCore/platform/KeyedCoding.h	2013-11-09 00:42:05 UTC (rev 158977)
+++ trunk/Source/WebCore/platform/KeyedCoding.h	2013-11-09 00:51:54 UTC (rev 158978)
@@ -36,6 +36,20 @@
 
 public:
     virtual void encodeUInt32(const String& key, uint32_t) = 0;
+
+    virtual void encodeString(const String& key, const String&) = 0;
+
+    template<typename T, typename F>
+    void encodeObject(const String& key, const T& object, F function)
+    {
+        this->beginObject(key);
+        function(*this, object);
+        this->endObject();
+    }
+
+private:
+    virtual void beginObject(const String& key) = 0;
+    virtual void endObject() = 0;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebKit2/ChangeLog (158977 => 158978)


--- trunk/Source/WebKit2/ChangeLog	2013-11-09 00:42:05 UTC (rev 158977)
+++ trunk/Source/WebKit2/ChangeLog	2013-11-09 00:51:54 UTC (rev 158978)
@@ -1,3 +1,22 @@
+2013-11-08  Anders Carlsson  <[email protected]>
+
+        KeyedEncoder should be able to encoder objects
+        https://bugs.webkit.org/show_bug.cgi?id=124085
+
+        Reviewed by Sam Weinig.
+
+        Add a dictionary stack to KeyedEncoder that's pushed and popped by
+        beginObject/endObject.
+
+        * Shared/cf/KeyedEncoder.cpp:
+        (WebKit::KeyedEncoder::KeyedEncoder):
+        (WebKit::KeyedEncoder::~KeyedEncoder):
+        (WebKit::KeyedEncoder::encodeUInt32):
+        (WebKit::KeyedEncoder::encodeString):
+        (WebKit::KeyedEncoder::beginObject):
+        (WebKit::KeyedEncoder::endObject):
+        * Shared/cf/KeyedEncoder.h:
+
 2013-11-08  Alexandru Chiculita  <[email protected]>
 
         Web Inspector: It should be possible to debug the Inspector code

Modified: trunk/Source/WebKit2/Shared/cf/KeyedEncoder.cpp (158977 => 158978)


--- trunk/Source/WebKit2/Shared/cf/KeyedEncoder.cpp	2013-11-09 00:42:05 UTC (rev 158977)
+++ trunk/Source/WebKit2/Shared/cf/KeyedEncoder.cpp	2013-11-09 00:51:54 UTC (rev 158978)
@@ -39,16 +39,37 @@
 KeyedEncoder::KeyedEncoder()
     : m_rootDictionary(createDictionary())
 {
+    m_dictionaryStack.append(m_rootDictionary.get());
 }
     
 KeyedEncoder::~KeyedEncoder()
 {
+    ASSERT(m_dictionaryStack.size() == 1);
+    ASSERT(m_dictionaryStack.last() == m_rootDictionary);
 }
 
 void KeyedEncoder::encodeUInt32(const String& key, uint32_t value)
 {
     RetainPtr<CFNumberRef> number = adoptCF(CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &value));
-    CFDictionarySetValue(m_rootDictionary.get(), key.createCFString().get(), number.get());
+    CFDictionarySetValue(m_dictionaryStack.last(), key.createCFString().get(), number.get());
 }
 
+void KeyedEncoder::encodeString(const String& key, const String& value)
+{
+    CFDictionarySetValue(m_dictionaryStack.last(), key.createCFString().get(), value.createCFString().get());
+}
+
+void KeyedEncoder::beginObject(const String& key)
+{
+    auto dictionary = createDictionary();
+    CFDictionarySetValue(m_dictionaryStack.last(), key.createCFString().get(), dictionary.get());
+
+    m_dictionaryStack.append(dictionary.get());
+}
+
+void KeyedEncoder::endObject()
+{
+    m_dictionaryStack.removeLast();
+}
+
 } // namespace WebKit

Modified: trunk/Source/WebKit2/Shared/cf/KeyedEncoder.h (158977 => 158978)


--- trunk/Source/WebKit2/Shared/cf/KeyedEncoder.h	2013-11-09 00:42:05 UTC (rev 158977)
+++ trunk/Source/WebKit2/Shared/cf/KeyedEncoder.h	2013-11-09 00:51:54 UTC (rev 158978)
@@ -28,6 +28,7 @@
 
 #include <WebCore/KeyedCoding.h>
 #include <wtf/RetainPtr.h>
+#include <wtf/Vector.h>
 
 namespace WebKit {
 
@@ -38,8 +39,13 @@
 
 private:
     virtual void encodeUInt32(const String& key, uint32_t) OVERRIDE;
+    virtual void encodeString(const String& key, const String&) OVERRIDE;
 
+    virtual void beginObject(const String& key) OVERRIDE;
+    virtual void endObject() OVERRIDE;
+
     RetainPtr<CFMutableDictionaryRef> m_rootDictionary;
+    Vector<CFMutableDictionaryRef, 16> m_dictionaryStack;
 };
 
 } // namespace WebKit
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to