Title: [160381] trunk/Source/WebKit2
Revision
160381
Author
ander...@apple.com
Date
2013-12-10 13:07:26 -0800 (Tue, 10 Dec 2013)

Log Message

Add more API object types to UserData
https://bugs.webkit.org/show_bug.cgi?id=125532

Reviewed by Beth Dakin.

* Shared/UserData.cpp:
(WebKit::UserData::transform):
Handle dictionaries.

(WebKit::UserData::encode):
(WebKit::UserData::decode):
Handle more API::Objects.

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (160380 => 160381)


--- trunk/Source/WebKit2/ChangeLog	2013-12-10 20:12:56 UTC (rev 160380)
+++ trunk/Source/WebKit2/ChangeLog	2013-12-10 21:07:26 UTC (rev 160381)
@@ -1,5 +1,20 @@
 2013-12-10  Anders Carlsson  <ander...@apple.com>
 
+        Add more API object types to UserData
+        https://bugs.webkit.org/show_bug.cgi?id=125532
+
+        Reviewed by Beth Dakin.
+
+        * Shared/UserData.cpp:
+        (WebKit::UserData::transform):
+        Handle dictionaries.
+
+        (WebKit::UserData::encode):
+        (WebKit::UserData::decode):
+        Handle more API::Objects.
+
+2013-12-10  Anders Carlsson  <ander...@apple.com>
+
         More UserData work
         https://bugs.webkit.org/show_bug.cgi?id=125524
 

Modified: trunk/Source/WebKit2/Shared/UserData.cpp (160380 => 160381)


--- trunk/Source/WebKit2/Shared/UserData.cpp	2013-12-10 20:12:56 UTC (rev 160380)
+++ trunk/Source/WebKit2/Shared/UserData.cpp	2013-12-10 21:07:26 UTC (rev 160381)
@@ -30,7 +30,10 @@
 #include "APIFrameHandle.h"
 #include "ArgumentCoders.h"
 #include "ArgumentEncoder.h"
+#include "MutableDictionary.h"
 #include "WebNumber.h"
+#include "WebSerializedScriptValue.h"
+#include "WebString.h"
 #include "WebURL.h"
 
 namespace WebKit {
@@ -60,6 +63,16 @@
         return API::Array::create(std::move(elements));
     }
 
+    if (object->type() == API::Object::Type::Dictionary) {
+        auto& dictionary = static_cast<ImmutableDictionary&>(*object);
+
+        ImmutableDictionary::MapType map;
+        for (const auto& keyValuePair : dictionary.map())
+            map.add(keyValuePair.key, transform(keyValuePair.value.get(), transformer));
+
+        return ImmutableDictionary::adopt(map);
+    }
+
     if (auto transformedObject = transformer(*object))
         return transformedObject;
 
@@ -106,12 +119,36 @@
         break;
     }
 
+    case API::Object::Type::Dictionary: {
+        auto& dictionary = static_cast<const ImmutableDictionary&>(object);
+        auto& map = dictionary.map();
+
+        encoder << map.size();
+        for (const auto& keyValuePair : map) {
+            encoder << keyValuePair.key;
+            encode(encoder, keyValuePair.value.get());
+        }
+        break;
+    }
+
     case API::Object::Type::FrameHandle: {
         auto& frameHandle = static_cast<const API::FrameHandle&>(object);
         encoder << frameHandle.frameID();
         break;
     }
 
+    case API::Object::Type::SerializedScriptValue: {
+        auto& serializedScriptValue = static_cast<const WebSerializedScriptValue&>(object);
+        encoder << serializedScriptValue.dataReference();
+        break;
+    }
+
+    case API::Object::Type::String: {
+        auto& string = static_cast<const WebString&>(object);
+        encoder << string.string();
+        break;
+    }
+
     case API::Object::Type::URL: {
         auto& url = "" WebURL&>(object);
         encoder << url.string();
@@ -163,6 +200,29 @@
         break;
     }
 
+    case API::Object::Type::Dictionary: {
+        uint64_t size;
+        if (!decoder.decode(size))
+            return false;
+
+        ImmutableDictionary::MapType map;
+        for (size_t i = 0; i < size; ++i) {
+            String key;
+            if (!decoder.decode(key))
+                return false;
+
+            RefPtr<API::Object> value;
+            if (!decode(decoder, value))
+                return false;
+
+            if (!map.add(std::move(key), std::move(value)).isNewEntry)
+                return false;
+        }
+
+        result = ImmutableDictionary::adopt(map);
+        break;
+    }
+
     case API::Object::Type::FrameHandle: {
         uint64_t frameID;
         if (!decoder.decode(frameID))
@@ -176,6 +236,25 @@
         result = nullptr;
         break;
 
+    case API::Object::Type::SerializedScriptValue: {
+        CoreIPC::DataReference dataReference;
+        if (!decoder.decode(dataReference))
+            return false;
+
+        auto vector = dataReference.vector();
+        result = WebSerializedScriptValue::adopt(vector);
+        break;
+    }
+
+    case API::Object::Type::String: {
+        String string;
+        if (!decoder.decode(string))
+            return false;
+
+        result = WebString::create(string);
+        break;
+    }
+
     case API::Object::Type::URL: {
         String string;
         if (!decoder.decode(string))
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to