Changeset 160381 in webkit


Ignore:
Timestamp:
Dec 10, 2013 1:07:26 PM (10 years ago)
Author:
andersca@apple.com
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.

Location:
trunk/Source/WebKit2
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r160378 r160381  
     12013-12-10  Anders Carlsson  <andersca@apple.com>
     2
     3        Add more API object types to UserData
     4        https://bugs.webkit.org/show_bug.cgi?id=125532
     5
     6        Reviewed by Beth Dakin.
     7
     8        * Shared/UserData.cpp:
     9        (WebKit::UserData::transform):
     10        Handle dictionaries.
     11
     12        (WebKit::UserData::encode):
     13        (WebKit::UserData::decode):
     14        Handle more API::Objects.
     15
    1162013-12-10  Anders Carlsson  <andersca@apple.com>
    217
  • trunk/Source/WebKit2/Shared/UserData.cpp

    r160378 r160381  
    3131#include "ArgumentCoders.h"
    3232#include "ArgumentEncoder.h"
     33#include "MutableDictionary.h"
    3334#include "WebNumber.h"
     35#include "WebSerializedScriptValue.h"
     36#include "WebString.h"
    3437#include "WebURL.h"
    3538
     
    5962
    6063        return API::Array::create(std::move(elements));
     64    }
     65
     66    if (object->type() == API::Object::Type::Dictionary) {
     67        auto& dictionary = static_cast<ImmutableDictionary&>(*object);
     68
     69        ImmutableDictionary::MapType map;
     70        for (const auto& keyValuePair : dictionary.map())
     71            map.add(keyValuePair.key, transform(keyValuePair.value.get(), transformer));
     72
     73        return ImmutableDictionary::adopt(map);
    6174    }
    6275
     
    107120    }
    108121
     122    case API::Object::Type::Dictionary: {
     123        auto& dictionary = static_cast<const ImmutableDictionary&>(object);
     124        auto& map = dictionary.map();
     125
     126        encoder << map.size();
     127        for (const auto& keyValuePair : map) {
     128            encoder << keyValuePair.key;
     129            encode(encoder, keyValuePair.value.get());
     130        }
     131        break;
     132    }
     133
    109134    case API::Object::Type::FrameHandle: {
    110135        auto& frameHandle = static_cast<const API::FrameHandle&>(object);
    111136        encoder << frameHandle.frameID();
     137        break;
     138    }
     139
     140    case API::Object::Type::SerializedScriptValue: {
     141        auto& serializedScriptValue = static_cast<const WebSerializedScriptValue&>(object);
     142        encoder << serializedScriptValue.dataReference();
     143        break;
     144    }
     145
     146    case API::Object::Type::String: {
     147        auto& string = static_cast<const WebString&>(object);
     148        encoder << string.string();
    112149        break;
    113150    }
     
    164201    }
    165202
     203    case API::Object::Type::Dictionary: {
     204        uint64_t size;
     205        if (!decoder.decode(size))
     206            return false;
     207
     208        ImmutableDictionary::MapType map;
     209        for (size_t i = 0; i < size; ++i) {
     210            String key;
     211            if (!decoder.decode(key))
     212                return false;
     213
     214            RefPtr<API::Object> value;
     215            if (!decode(decoder, value))
     216                return false;
     217
     218            if (!map.add(std::move(key), std::move(value)).isNewEntry)
     219                return false;
     220        }
     221
     222        result = ImmutableDictionary::adopt(map);
     223        break;
     224    }
     225
    166226    case API::Object::Type::FrameHandle: {
    167227        uint64_t frameID;
     
    177237        break;
    178238
     239    case API::Object::Type::SerializedScriptValue: {
     240        CoreIPC::DataReference dataReference;
     241        if (!decoder.decode(dataReference))
     242            return false;
     243
     244        auto vector = dataReference.vector();
     245        result = WebSerializedScriptValue::adopt(vector);
     246        break;
     247    }
     248
     249    case API::Object::Type::String: {
     250        String string;
     251        if (!decoder.decode(string))
     252            return false;
     253
     254        result = WebString::create(string);
     255        break;
     256    }
     257
    179258    case API::Object::Type::URL: {
    180259        String string;
Note: See TracChangeset for help on using the changeset viewer.