- 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