Changeset 199072 in webkit


Ignore:
Timestamp:
Apr 5, 2016 2:27:05 PM (8 years ago)
Author:
beidson@apple.com
Message:

Modern IDB: Replace use of SerializedScriptValue with IDBValue.
https://bugs.webkit.org/show_bug.cgi?id=156242

Reviewed by Alex Christensen.

Source/WebCore:

No new tests (No change in behavior).

  • Modules/indexeddb/IDBTransaction.cpp:

(WebCore::IDBTransaction::putOrAddOnServer):

  • Modules/indexeddb/IDBValue.cpp:

(WebCore::IDBValue::IDBValue):
(WebCore::IDBValue::isolatedCopy):

  • Modules/indexeddb/IDBValue.h:

(WebCore::IDBValue::data):
(WebCore::IDBValue::encode):
(WebCore::IDBValue::decode):

  • Modules/indexeddb/client/IDBConnectionToServer.cpp:

(WebCore::IDBClient::IDBConnectionToServer::putOrAdd):

  • Modules/indexeddb/client/IDBConnectionToServer.h:
  • Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
  • Modules/indexeddb/server/IDBServer.cpp:

(WebCore::IDBServer::IDBServer::putOrAdd):

  • Modules/indexeddb/server/IDBServer.h:
  • Modules/indexeddb/server/UniqueIDBDatabase.cpp:

(WebCore::IDBServer::UniqueIDBDatabase::putOrAdd):
(WebCore::IDBServer::UniqueIDBDatabase::performPutOrAdd):

  • Modules/indexeddb/server/UniqueIDBDatabase.h:
  • Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:

(WebCore::IDBServer::UniqueIDBDatabaseTransaction::putOrAdd):

  • Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
  • Modules/indexeddb/shared/InProcessIDBServer.cpp:

(WebCore::InProcessIDBServer::putOrAdd):

  • Modules/indexeddb/shared/InProcessIDBServer.h:
  • WebCore.xcodeproj/project.pbxproj:
  • platform/CrossThreadCopier.cpp:

(WebCore::IDBValue>::copy):

  • platform/CrossThreadCopier.h:
  • platform/ThreadSafeDataBuffer.h:

(WebCore::ThreadSafeDataBuffer::encode):
(WebCore::ThreadSafeDataBuffer::decode):

Source/WebKit2:

  • DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:

(WebKit::WebIDBConnectionToClient::putOrAdd):

  • DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h:
  • DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in:
  • WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:

(WebKit::WebIDBConnectionToServer::putOrAdd):

  • WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
Location:
trunk/Source
Files:
25 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r199071 r199072  
     12016-04-05  Brady Eidson  <beidson@apple.com>
     2
     3        Modern IDB: Replace use of SerializedScriptValue with IDBValue.
     4        https://bugs.webkit.org/show_bug.cgi?id=156242
     5
     6        Reviewed by Alex Christensen.
     7
     8        No new tests (No change in behavior).
     9
     10        * Modules/indexeddb/IDBTransaction.cpp:
     11        (WebCore::IDBTransaction::putOrAddOnServer):
     12
     13        * Modules/indexeddb/IDBValue.cpp:
     14        (WebCore::IDBValue::IDBValue):
     15        (WebCore::IDBValue::isolatedCopy):
     16        * Modules/indexeddb/IDBValue.h:
     17        (WebCore::IDBValue::data):
     18        (WebCore::IDBValue::encode):
     19        (WebCore::IDBValue::decode):
     20
     21        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
     22        (WebCore::IDBClient::IDBConnectionToServer::putOrAdd):
     23        * Modules/indexeddb/client/IDBConnectionToServer.h:
     24        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
     25
     26        * Modules/indexeddb/server/IDBServer.cpp:
     27        (WebCore::IDBServer::IDBServer::putOrAdd):
     28        * Modules/indexeddb/server/IDBServer.h:
     29
     30        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
     31        (WebCore::IDBServer::UniqueIDBDatabase::putOrAdd):
     32        (WebCore::IDBServer::UniqueIDBDatabase::performPutOrAdd):
     33        * Modules/indexeddb/server/UniqueIDBDatabase.h:
     34
     35        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
     36        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::putOrAdd):
     37        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
     38
     39        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
     40        (WebCore::InProcessIDBServer::putOrAdd):
     41        * Modules/indexeddb/shared/InProcessIDBServer.h:
     42
     43        * WebCore.xcodeproj/project.pbxproj:
     44
     45        * platform/CrossThreadCopier.cpp:
     46        (WebCore::IDBValue>::copy):
     47        * platform/CrossThreadCopier.h:
     48
     49        * platform/ThreadSafeDataBuffer.h:
     50        (WebCore::ThreadSafeDataBuffer::encode):
     51        (WebCore::ThreadSafeDataBuffer::decode):
     52
    1532016-04-05  Said Abou-Hallawa  <sabouhallawa@apple.com>
    254
  • trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.cpp

    r199043 r199072  
    4343#include "IDBRequest.h"
    4444#include "IDBResultData.h"
     45#include "IDBValue.h"
    4546#include "JSDOMWindowBase.h"
    4647#include "Logging.h"
     
    870871    ASSERT(value);
    871872
     873    if (!value->hasBlobURLs()) {
     874        serverConnection().putOrAdd(operation, key.get(), *value, overwriteMode);
     875        return;
     876    }
     877
    872878    RefPtr<IDBTransaction> protector(this);
    873879    RefPtr<IDBClient::TransactionOperation> operationRef(&operation);
  • trunk/Source/WebCore/Modules/indexeddb/IDBValue.cpp

    r199043 r199072  
    2929#if ENABLE(INDEXED_DATABASE)
    3030
     31#include "SerializedScriptValue.h"
     32
    3133namespace WebCore {
    3234
     
    3537}
    3638
     39IDBValue::IDBValue(const SerializedScriptValue& scriptValue)
     40    : m_data(ThreadSafeDataBuffer::copyVector(scriptValue.data()))
     41{
     42}
     43
     44IDBValue IDBValue::isolatedCopy() const
     45{
     46    IDBValue result;
     47    result.m_data = m_data;
     48    return result;
     49}
     50
    3751} // namespace WebCore
    3852
  • trunk/Source/WebCore/Modules/indexeddb/IDBValue.h

    r199043 r199072  
    2727#if ENABLE(INDEXED_DATABASE)
    2828
     29#include "ThreadSafeDataBuffer.h"
     30
    2931namespace WebCore {
     32
     33class SerializedScriptValue;
    3034
    3135class IDBValue {
    3236public:
    33     IDBValue();
     37    WEBCORE_EXPORT IDBValue();
     38    IDBValue(const SerializedScriptValue&);
     39
     40    IDBValue isolatedCopy() const;
     41
     42    const ThreadSafeDataBuffer& data() const { return m_data; }
     43
     44    template<class Encoder> void encode(Encoder&) const;
     45    template<class Decoder> static bool decode(Decoder&, IDBValue&);
     46
     47private:
     48    ThreadSafeDataBuffer m_data;
    3449};
     50
     51
     52template<class Encoder>
     53void IDBValue::encode(Encoder& encoder) const
     54{
     55    encoder << m_data;
     56}
     57
     58template<class Decoder>
     59bool IDBValue::decode(Decoder& decoder, IDBValue& result)
     60{
     61    if (!decoder.decode(result.m_data))
     62        return false;
     63
     64    return true;
     65}
    3566
    3667} // namespace WebCore
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp

    r199043 r199072  
    172172}
    173173
    174 void IDBConnectionToServer::putOrAdd(TransactionOperation& operation, IDBKey* key, SerializedScriptValue& value, const IndexedDB::ObjectStoreOverwriteMode overwriteMode)
     174void IDBConnectionToServer::putOrAdd(TransactionOperation& operation, IDBKey* key, const IDBValue& value, const IndexedDB::ObjectStoreOverwriteMode overwriteMode)
    175175{
    176176    LOG(IndexedDB, "IDBConnectionToServer::putOrAdd");
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h

    r199043 r199072  
    4646class IDBResultData;
    4747class IDBTransaction;
     48class IDBValue;
    4849
    4950namespace IDBClient {
     
    7879    WEBCORE_EXPORT void didDeleteIndex(const IDBResultData&);
    7980
    80     void putOrAdd(TransactionOperation&, IDBKey*, SerializedScriptValue&, const IndexedDB::ObjectStoreOverwriteMode);
     81    void putOrAdd(TransactionOperation&, IDBKey*, const IDBValue&, const IndexedDB::ObjectStoreOverwriteMode);
    8182    WEBCORE_EXPORT void didPutOrAdd(const IDBResultData&);
    8283
  • trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h

    r194904 r199072  
    4141class IDBResourceIdentifier;
    4242class IDBTransactionInfo;
    43 class SerializedScriptValue;
     43class IDBValue;
    4444
    4545namespace IndexedDB {
     
    6666    virtual void createIndex(const IDBRequestData&, const IDBIndexInfo&) = 0;
    6767    virtual void deleteIndex(const IDBRequestData&, uint64_t objectStoreIdentifier, const String& indexName) = 0;
    68     virtual void putOrAdd(const IDBRequestData&, IDBKey*, SerializedScriptValue&, const IndexedDB::ObjectStoreOverwriteMode) = 0;
     68    virtual void putOrAdd(const IDBRequestData&, IDBKey*, const IDBValue&, const IndexedDB::ObjectStoreOverwriteMode) = 0;
    6969    virtual void getRecord(const IDBRequestData&, const IDBKeyRangeData&) = 0;
    7070    virtual void getCount(const IDBRequestData&, const IDBKeyRangeData&) = 0;
  • trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp

    r197474 r199072  
    239239}
    240240
    241 void IDBServer::putOrAdd(const IDBRequestData& requestData, const IDBKeyData& keyData, const ThreadSafeDataBuffer& valueData, IndexedDB::ObjectStoreOverwriteMode overwriteMode)
     241void IDBServer::putOrAdd(const IDBRequestData& requestData, const IDBKeyData& keyData, const IDBValue& value, IndexedDB::ObjectStoreOverwriteMode overwriteMode)
    242242{
    243243    LOG(IndexedDB, "IDBServer::putOrAdd");
     
    247247        return;
    248248
    249     transaction->putOrAdd(requestData, keyData, valueData, overwriteMode);
     249    transaction->putOrAdd(requestData, keyData, value, overwriteMode);
    250250}
    251251
  • trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h

    r197474 r199072  
    4646class IDBCursorInfo;
    4747class IDBRequestData;
     48class IDBValue;
    4849
    4950namespace IDBServer {
     
    6869    WEBCORE_EXPORT void createIndex(const IDBRequestData&, const IDBIndexInfo&);
    6970    WEBCORE_EXPORT void deleteIndex(const IDBRequestData&, uint64_t objectStoreIdentifier, const String& indexName);
    70     WEBCORE_EXPORT void putOrAdd(const IDBRequestData&, const IDBKeyData&, const ThreadSafeDataBuffer& valueData, IndexedDB::ObjectStoreOverwriteMode);
     71    WEBCORE_EXPORT void putOrAdd(const IDBRequestData&, const IDBKeyData&, const IDBValue&, IndexedDB::ObjectStoreOverwriteMode);
    7172    WEBCORE_EXPORT void getRecord(const IDBRequestData&, const IDBKeyRangeData&);
    7273    WEBCORE_EXPORT void getCount(const IDBRequestData&, const IDBKeyRangeData&);
  • trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp

    r197474 r199072  
    3434#include "IDBServer.h"
    3535#include "IDBTransactionInfo.h"
     36#include "IDBValue.h"
    3637#include "Logging.h"
    3738#include "ScopeGuard.h"
     
    684685}
    685686
    686 void UniqueIDBDatabase::putOrAdd(const IDBRequestData& requestData, const IDBKeyData& keyData, const ThreadSafeDataBuffer& valueData, IndexedDB::ObjectStoreOverwriteMode overwriteMode, KeyDataCallback callback)
     687void UniqueIDBDatabase::putOrAdd(const IDBRequestData& requestData, const IDBKeyData& keyData, const IDBValue& value, IndexedDB::ObjectStoreOverwriteMode overwriteMode, KeyDataCallback callback)
    687688{
    688689    ASSERT(isMainThread());
     
    690691
    691692    uint64_t callbackID = storeCallback(callback);
    692     m_server.postDatabaseTask(createCrossThreadTask(*this, &UniqueIDBDatabase::performPutOrAdd, callbackID, requestData.transactionIdentifier(), requestData.objectStoreIdentifier(), keyData, valueData, overwriteMode));
     693    m_server.postDatabaseTask(createCrossThreadTask(*this, &UniqueIDBDatabase::performPutOrAdd, callbackID, requestData.transactionIdentifier(), requestData.objectStoreIdentifier(), keyData, value, overwriteMode));
    693694}
    694695
     
    710711}
    711712
    712 void UniqueIDBDatabase::performPutOrAdd(uint64_t callbackIdentifier, const IDBResourceIdentifier& transactionIdentifier, uint64_t objectStoreIdentifier, const IDBKeyData& keyData, const ThreadSafeDataBuffer& originalRecordValue, IndexedDB::ObjectStoreOverwriteMode overwriteMode)
     713void UniqueIDBDatabase::performPutOrAdd(uint64_t callbackIdentifier, const IDBResourceIdentifier& transactionIdentifier, uint64_t objectStoreIdentifier, const IDBKeyData& keyData, const IDBValue& originalRecordValue, IndexedDB::ObjectStoreOverwriteMode overwriteMode)
    713714{
    714715    ASSERT(!isMainThread());
     
    765766        JSLockHolder locker(databaseThreadVM());
    766767
    767         JSValue value = deserializeIDBValueDataToJSValue(databaseThreadExecState(), originalRecordValue);
     768        JSValue value = deserializeIDBValueDataToJSValue(databaseThreadExecState(), originalRecordValue.data());
    768769        if (value.isUndefined()) {
    769770            m_server.postDatabaseTaskReply(createCrossThreadTask(*this, &UniqueIDBDatabase::didPerformPutOrAdd, callbackIdentifier, IDBError(IDBDatabaseException::ConstraintError, ASCIILiteral("Unable to deserialize record value for record key injection")), usedKey));
     
    795796    }
    796797
    797     error = m_backingStore->addRecord(transactionIdentifier, *objectStoreInfo, usedKey, injectedRecordValue.data() ? injectedRecordValue : originalRecordValue);
     798    error = m_backingStore->addRecord(transactionIdentifier, *objectStoreInfo, usedKey, injectedRecordValue.data() ? injectedRecordValue : originalRecordValue.data());
    798799    if (!error.isNull()) {
    799800        m_server.postDatabaseTaskReply(createCrossThreadTask(*this, &UniqueIDBDatabase::didPerformPutOrAdd, callbackIdentifier, error, usedKey));
  • trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h

    r197474 r199072  
    8686    void createIndex(UniqueIDBDatabaseTransaction&, const IDBIndexInfo&, ErrorCallback);
    8787    void deleteIndex(UniqueIDBDatabaseTransaction&, uint64_t objectStoreIdentifier, const String& indexName, ErrorCallback);
    88     void putOrAdd(const IDBRequestData&, const IDBKeyData&, const ThreadSafeDataBuffer& valueData, IndexedDB::ObjectStoreOverwriteMode, KeyDataCallback);
     88    void putOrAdd(const IDBRequestData&, const IDBKeyData&, const IDBValue&, IndexedDB::ObjectStoreOverwriteMode, KeyDataCallback);
    8989    void getRecord(const IDBRequestData&, const IDBKeyRangeData&, GetResultCallback);
    9090    void getCount(const IDBRequestData&, const IDBKeyRangeData&, CountCallback);
     
    135135    void performCreateIndex(uint64_t callbackIdentifier, const IDBResourceIdentifier& transactionIdentifier, const IDBIndexInfo&);
    136136    void performDeleteIndex(uint64_t callbackIdentifier, const IDBResourceIdentifier& transactionIdentifier, uint64_t objectStoreIdentifier, uint64_t indexIdentifier);
    137     void performPutOrAdd(uint64_t callbackIdentifier, const IDBResourceIdentifier& transactionIdentifier, uint64_t objectStoreIdentifier, const IDBKeyData&, const ThreadSafeDataBuffer& valueData, IndexedDB::ObjectStoreOverwriteMode);
     137    void performPutOrAdd(uint64_t callbackIdentifier, const IDBResourceIdentifier& transactionIdentifier, uint64_t objectStoreIdentifier, const IDBKeyData&, const IDBValue&, IndexedDB::ObjectStoreOverwriteMode);
    138138    void performGetRecord(uint64_t callbackIdentifier, const IDBResourceIdentifier& transactionIdentifier, uint64_t objectStoreIdentifier, const IDBKeyRangeData&);
    139139    void performGetIndexRecord(uint64_t callbackIdentifier, const IDBResourceIdentifier& transactionIdentifier, uint64_t objectStoreIdentifier, uint64_t indexIdentifier, IndexedDB::IndexRecordType, const IDBKeyRangeData&);
  • trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp

    r197057 r199072  
    188188}
    189189
    190 void UniqueIDBDatabaseTransaction::putOrAdd(const IDBRequestData& requestData, const IDBKeyData& keyData, const ThreadSafeDataBuffer& valueData, IndexedDB::ObjectStoreOverwriteMode overwriteMode)
     190void UniqueIDBDatabaseTransaction::putOrAdd(const IDBRequestData& requestData, const IDBKeyData& keyData, const IDBValue& value, IndexedDB::ObjectStoreOverwriteMode overwriteMode)
    191191{
    192192    LOG(IndexedDB, "UniqueIDBDatabaseTransaction::putOrAdd");
     
    196196
    197197    RefPtr<UniqueIDBDatabaseTransaction> self(this);
    198     m_databaseConnection->database().putOrAdd(requestData, keyData, valueData, overwriteMode, [this, self, requestData](const IDBError& error, const IDBKeyData& key) {
     198    m_databaseConnection->database().putOrAdd(requestData, keyData, value, overwriteMode, [this, self, requestData](const IDBError& error, const IDBKeyData& key) {
    199199        LOG(IndexedDB, "UniqueIDBDatabaseTransaction::putOrAdd (callback)");
    200200
  • trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h

    r194904 r199072  
    4343class IDBObjectStoreInfo;
    4444class IDBRequestData;
    45 class ThreadSafeDataBuffer;
     45class IDBValue;
    4646
    4747struct IDBKeyRangeData;
     
    7373    void createIndex(const IDBRequestData&, const IDBIndexInfo&);
    7474    void deleteIndex(const IDBRequestData&, uint64_t objectStoreIdentifier, const String& indexName);
    75     void putOrAdd(const IDBRequestData&, const IDBKeyData&, const ThreadSafeDataBuffer& valueData, IndexedDB::ObjectStoreOverwriteMode);
     75    void putOrAdd(const IDBRequestData&, const IDBKeyData&, const IDBValue&, IndexedDB::ObjectStoreOverwriteMode);
    7676    void getRecord(const IDBRequestData&, const IDBKeyRangeData&);
    7777    void getCount(const IDBRequestData&, const IDBKeyRangeData&);
  • trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp

    r198762 r199072  
    3636#include "IDBRequestData.h"
    3737#include "IDBResultData.h"
     38#include "IDBValue.h"
    3839#include "Logging.h"
    3940#include <wtf/RunLoop.h>
     
    288289}
    289290
    290 void InProcessIDBServer::putOrAdd(const IDBRequestData& requestData, IDBKey* key, SerializedScriptValue& value, const IndexedDB::ObjectStoreOverwriteMode overwriteMode)
     291void InProcessIDBServer::putOrAdd(const IDBRequestData& requestData, IDBKey* key, const IDBValue& value, const IndexedDB::ObjectStoreOverwriteMode overwriteMode)
    291292{
    292293    RefPtr<InProcessIDBServer> self(this);
    293294    IDBKeyData keyData(key);
    294     auto valueData = ThreadSafeDataBuffer::copyVector(value.data());
    295 
    296     RunLoop::current().dispatch([this, self, requestData, keyData, valueData, overwriteMode] {
    297         m_server->putOrAdd(requestData, keyData, valueData, overwriteMode);
     295
     296    RunLoop::current().dispatch([this, self, requestData, keyData, value, overwriteMode] {
     297        m_server->putOrAdd(requestData, keyData, value, overwriteMode);
    298298    });
    299299}
  • trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.h

    r198762 r199072  
    6666    void createIndex(const IDBRequestData&, const IDBIndexInfo&) final;
    6767    void deleteIndex(const IDBRequestData&, uint64_t objectStoreIdentifier, const String& indexName) final;
    68     void putOrAdd(const IDBRequestData&, IDBKey*, SerializedScriptValue&, const IndexedDB::ObjectStoreOverwriteMode) final;
     68    void putOrAdd(const IDBRequestData&, IDBKey*, const IDBValue&, const IndexedDB::ObjectStoreOverwriteMode) final;
    6969    void getRecord(const IDBRequestData&, const IDBKeyRangeData&) final;
    7070    void getCount(const IDBRequestData&, const IDBKeyRangeData&) final;
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r199043 r199072  
    20462046                516071321BD8308B00DBC4F2 /* TransactionOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5160712B1BD8305300DBC4F2 /* TransactionOperation.h */; settings = {ATTRIBUTES = (Private, ); }; };
    20472047                5160F4980B0AA75F00C1D2AF /* HistoryItemMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5160F4970B0AA75F00C1D2AF /* HistoryItemMac.mm */; };
    2048                 516103AF1CADBA770016B4C7 /* IDBValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 516103AE1CADB9A30016B4C7 /* IDBValue.h */; };
     2048                516103AF1CADBA770016B4C7 /* IDBValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 516103AE1CADB9A30016B4C7 /* IDBValue.h */; settings = {ATTRIBUTES = (Private, ); }; };
    20492049                516103B01CADBA7A0016B4C7 /* IDBValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 516103AD1CADB9A30016B4C7 /* IDBValue.cpp */; };
    20502050                5162C7F411F77EFB00612EFE /* SchemeRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5162C7F211F77EFA00612EFE /* SchemeRegistry.cpp */; };
  • trunk/Source/WebCore/platform/CrossThreadCopier.cpp

    r197131 r199072  
    5555#include "IDBResourceIdentifier.h"
    5656#include "IDBTransactionInfo.h"
     57#include "IDBValue.h"
    5758#endif
    5859
     
    164165{
    165166    return info.isolatedCopy();
     167}
     168
     169CrossThreadCopierBase<false, false, IDBValue>::Type CrossThreadCopierBase<false, false, IDBValue>::copy(const IDBValue& value)
     170{
     171    return value.isolatedCopy();
    166172}
    167173
  • trunk/Source/WebCore/platform/CrossThreadCopier.h

    r197131 r199072  
    228228    };
    229229
     230    class IDBValue;
     231    template<> struct WEBCORE_EXPORT CrossThreadCopierBase<false, false, IDBValue> {
     232        typedef IDBValue Type;
     233        static Type copy(const IDBValue&);
     234    };
     235
    230236#endif
    231237
  • trunk/Source/WebCore/platform/ThreadSafeDataBuffer.h

    r191635 r199072  
    7272    }
    7373
     74    template<class Encoder> void encode(Encoder&) const;
     75    template<class Decoder> static bool decode(Decoder&, ThreadSafeDataBuffer&);
     76
    7477private:
    7578    explicit ThreadSafeDataBuffer(Vector<uint8_t>& data, ThreadSafeDataBufferImpl::AdoptVectorTag tag)
     
    8689};
    8790
     91template<class Encoder>
     92void ThreadSafeDataBuffer::encode(Encoder& encoder) const
     93{
     94    bool hasData = m_impl;
     95    encoder << hasData;
     96
     97    if (hasData)
     98        encoder << m_impl->m_data;
     99}
     100
     101template<class Decoder>
     102bool ThreadSafeDataBuffer::decode(Decoder& decoder, ThreadSafeDataBuffer& result)
     103{
     104    bool hasData;
     105    if (!decoder.decode(hasData))
     106        return false;
     107
     108    if (hasData) {
     109        Vector<uint8_t> data;
     110        if (!decoder.decode(data))
     111            return false;
     112
     113        result = ThreadSafeDataBuffer::adoptVector(data);
     114    }
     115
     116    return true;
     117}
     118
    88119} // namespace WebCore
    89120
  • trunk/Source/WebKit2/ChangeLog

    r199062 r199072  
     12016-04-05  Brady Eidson  <beidson@apple.com>
     2
     3        Modern IDB: Replace use of SerializedScriptValue with IDBValue.
     4        https://bugs.webkit.org/show_bug.cgi?id=156242
     5
     6        Reviewed by Alex Christensen.
     7
     8        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
     9        (WebKit::WebIDBConnectionToClient::putOrAdd):
     10        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h:
     11        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in:
     12
     13        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
     14        (WebKit::WebIDBConnectionToServer::putOrAdd):
     15        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
     16
    1172016-04-05  Antoine Quint  <graouts@apple.com>
    218
  • trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp

    r196779 r199072  
    3535#include <WebCore/IDBError.h>
    3636#include <WebCore/IDBResultData.h>
     37#include <WebCore/IDBValue.h>
    3738#include <WebCore/ThreadSafeDataBuffer.h>
    3839#include <WebCore/UniqueIDBDatabaseConnection.h>
     
    215216}
    216217
    217 void WebIDBConnectionToClient::putOrAdd(const IDBRequestData& request, const IDBKeyData& key, const IPC::DataReference& data, unsigned overwriteMode)
     218void WebIDBConnectionToClient::putOrAdd(const IDBRequestData& request, const IDBKeyData& key, const IDBValue& value, unsigned overwriteMode)
    218219{
    219220    if (overwriteMode != static_cast<unsigned>(IndexedDB::ObjectStoreOverwriteMode::NoOverwrite)
     
    226227
    227228    IndexedDB::ObjectStoreOverwriteMode mode = static_cast<IndexedDB::ObjectStoreOverwriteMode>(overwriteMode);
    228     auto buffer = ThreadSafeDataBuffer::copyVector(data.vector());
    229 
    230     DatabaseProcess::singleton().idbServer().putOrAdd(request, key, buffer, mode);
     229
     230    DatabaseProcess::singleton().idbServer().putOrAdd(request, key, value, mode);
    231231}
    232232
  • trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h

    r197566 r199072  
    4040class IDBRequestData;
    4141class IDBTransactionInfo;
     42class IDBValue;
    4243class SerializedScriptValue;
    4344struct IDBKeyRangeData;
     
    9192    void createIndex(const WebCore::IDBRequestData&, const WebCore::IDBIndexInfo&);
    9293    void deleteIndex(const WebCore::IDBRequestData&, uint64_t objectStoreIdentifier, const String& indexName);
    93     void putOrAdd(const WebCore::IDBRequestData&, const WebCore::IDBKeyData&, const IPC::DataReference& value, unsigned overwriteMode);
     94    void putOrAdd(const WebCore::IDBRequestData&, const WebCore::IDBKeyData&, const WebCore::IDBValue&, unsigned overwriteMode);
    9495    void getRecord(const WebCore::IDBRequestData&, const WebCore::IDBKeyRangeData&);
    9596    void getCount(const WebCore::IDBRequestData&, const WebCore::IDBKeyRangeData&);
  • trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in

    r196771 r199072  
    3434    CreateIndex(WebCore::IDBRequestData requestData, WebCore::IDBIndexInfo info);
    3535    DeleteIndex(WebCore::IDBRequestData requestData, uint64_t objectStoreIdentifier, String indexName);
    36     PutOrAdd(WebCore::IDBRequestData requestData, WebCore::IDBKeyData key, IPC::DataReference value, unsigned overwriteMode);
     36    PutOrAdd(WebCore::IDBRequestData requestData, WebCore::IDBKeyData key, WebCore::IDBValue value, unsigned overwriteMode);
    3737    GetRecord(WebCore::IDBRequestData requestData, struct WebCore::IDBKeyRangeData range);
    3838    GetCount(WebCore::IDBRequestData requestData, struct WebCore::IDBKeyRangeData range);
  • trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp

    r198762 r199072  
    4545#include <WebCore/IDBResultData.h>
    4646#include <WebCore/IDBTransactionInfo.h>
     47#include <WebCore/IDBValue.h>
    4748
    4849using namespace WebCore;
     
    129130}
    130131
    131 void WebIDBConnectionToServer::putOrAdd(const IDBRequestData& requestData, IDBKey* key, SerializedScriptValue& value, const IndexedDB::ObjectStoreOverwriteMode mode)
     132void WebIDBConnectionToServer::putOrAdd(const IDBRequestData& requestData, IDBKey* key, const IDBValue& value, const IndexedDB::ObjectStoreOverwriteMode mode)
    132133{
    133134    IDBKeyData keyData(key);
    134     IPC::DataReference valueData(value.data());
    135     send(Messages::WebIDBConnectionToClient::PutOrAdd(requestData, keyData, valueData, static_cast<unsigned>(mode)));
     135    send(Messages::WebIDBConnectionToClient::PutOrAdd(requestData, keyData, value, static_cast<unsigned>(mode)));
    136136}
    137137
  • trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h

    r197566 r199072  
    5555    void createIndex(const WebCore::IDBRequestData&, const WebCore::IDBIndexInfo&) final;
    5656    void deleteIndex(const WebCore::IDBRequestData&, uint64_t objectStoreIdentifier, const String& indexName) final;
    57     void putOrAdd(const WebCore::IDBRequestData&, WebCore::IDBKey*, WebCore::SerializedScriptValue&, const WebCore::IndexedDB::ObjectStoreOverwriteMode) final;
     57    void putOrAdd(const WebCore::IDBRequestData&, WebCore::IDBKey*, const WebCore::IDBValue&, const WebCore::IndexedDB::ObjectStoreOverwriteMode) final;
    5858    void getRecord(const WebCore::IDBRequestData&, const WebCore::IDBKeyRangeData&) final;
    5959    void getCount(const WebCore::IDBRequestData&, const WebCore::IDBKeyRangeData&) final;
Note: See TracChangeset for help on using the changeset viewer.