Changeset 195235 in webkit


Ignore:
Timestamp:
Jan 18, 2016 12:26:42 PM (8 years ago)
Author:
commit-queue@webkit.org
Message:

Sink the Vector<uint8_t> buffer into the SerializedScriptValue constructor
https://bugs.webkit.org/show_bug.cgi?id=142634

Patch by Zan Dobersek <zdobersek@igalia.com> on 2016-01-18
Reviewed by Darin Adler.

Source/WebCore:

Have the SerializedScriptValue constructor take in the Vector<uint8_t> buffer
through an rvalue reference, avoiding the copying into the m_data member. The
three-parameter constructor now takes in the Vector<String> blob URL object
via const reference, and the std::unique_ptr<> object via a rvalue reference.

Adjust all the call sites and affected code to now either move or copy a
non-movable object into the SerializedScriptValue constructor or the helper
methods.

No new tests -- no change in behavior.

  • bindings/js/IDBBindingUtilities.cpp:

(WebCore::deserializeIDBValueDataToJSValue):
(WebCore::deserializeIDBValueBuffer):
(WebCore::idbValueDataToJSValue):

  • bindings/js/IDBBindingUtilities.h:
  • bindings/js/SerializedScriptValue.cpp:

(WebCore::SerializedScriptValue::SerializedScriptValue):
(WebCore::SerializedScriptValue::create):
(WebCore::SerializedScriptValue::numberValue):
(WebCore::SerializedScriptValue::undefinedValue):
(WebCore::SerializedScriptValue::nullValue):

  • bindings/js/SerializedScriptValue.h:
  • testing/Internals.cpp:

(WebCore::Internals::deserializeBuffer):

Source/WebKit2:

Update API::SerializedScriptValue::adopt() to take in a Vector<uint8_t>
rvalue, moving it into the WebCore::SerializedScriptValue::adopt() call.

Update other places that are affected by the SerializedScriptValue changes.

  • DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:

(WebKit::UniqueIDBDatabaseBackingStoreSQLite::createIndex):

  • Shared/API/APISerializedScriptValue.h:

(API::SerializedScriptValue::adopt):

  • Shared/UserData.cpp:

(WebKit::UserData::decode):

  • UIProcess/UserContent/WebUserContentControllerProxy.cpp:

(WebKit::WebUserContentControllerProxy::didPostMessage):

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::scriptValueCallback):

  • WebProcess/WebCoreSupport/SessionStateConversion.cpp:

(WebKit::applyFrameState):

Location:
trunk/Source
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r195234 r195235  
     12016-01-18  Zan Dobersek  <zdobersek@igalia.com>
     2
     3        Sink the Vector<uint8_t> buffer into the SerializedScriptValue constructor
     4        https://bugs.webkit.org/show_bug.cgi?id=142634
     5
     6        Reviewed by Darin Adler.
     7
     8        Have the SerializedScriptValue constructor take in the Vector<uint8_t> buffer
     9        through an rvalue reference, avoiding the copying into the m_data member. The
     10        three-parameter constructor now takes in the Vector<String> blob URL object
     11        via const reference, and the std::unique_ptr<> object via a rvalue reference.
     12
     13        Adjust all the call sites and affected code to now either move or copy a
     14        non-movable object into the SerializedScriptValue constructor or the helper
     15        methods.
     16
     17        No new tests -- no change in behavior.
     18
     19        * bindings/js/IDBBindingUtilities.cpp:
     20        (WebCore::deserializeIDBValueDataToJSValue):
     21        (WebCore::deserializeIDBValueBuffer):
     22        (WebCore::idbValueDataToJSValue):
     23        * bindings/js/IDBBindingUtilities.h:
     24        * bindings/js/SerializedScriptValue.cpp:
     25        (WebCore::SerializedScriptValue::SerializedScriptValue):
     26        (WebCore::SerializedScriptValue::create):
     27        (WebCore::SerializedScriptValue::numberValue):
     28        (WebCore::SerializedScriptValue::undefinedValue):
     29        (WebCore::SerializedScriptValue::nullValue):
     30        * bindings/js/SerializedScriptValue.h:
     31        * testing/Internals.cpp:
     32        (WebCore::Internals::deserializeBuffer):
     33
    1342016-01-18  Olivier Blin  <olivier.blin@softathome.com>
    235
  • trunk/Source/WebCore/bindings/js/IDBBindingUtilities.cpp

    r194789 r195235  
    449449    JSValue result;
    450450    if (data.size()) {
    451         RefPtr<SerializedScriptValue> serializedValue = SerializedScriptValue::createFromWireBytes(data);
     451        RefPtr<SerializedScriptValue> serializedValue = SerializedScriptValue::createFromWireBytes(Vector<uint8_t>(data));
    452452
    453453        exec.vm().apiLock().lock();
     
    465465        Vector<uint8_t> value;
    466466        value.append(prpBuffer->data(), prpBuffer->size());
    467         return deserializeIDBValueBuffer(requestState->exec(), value, keyIsDefined);
     467        return deserializeIDBValueBuffer(requestState->exec(), WTFMove(value), keyIsDefined);
    468468    }
    469469
     
    471471}
    472472
    473 static JSValue idbValueDataToJSValue(JSC::ExecState& exec, const Vector<uint8_t>& buffer)
     473static JSValue idbValueDataToJSValue(JSC::ExecState& exec, Vector<uint8_t>&& buffer)
    474474{
    475475    if (buffer.isEmpty())
    476476        return jsNull();
    477477
    478     RefPtr<SerializedScriptValue> serializedValue = SerializedScriptValue::createFromWireBytes(buffer);
     478    RefPtr<SerializedScriptValue> serializedValue = SerializedScriptValue::createFromWireBytes(WTFMove(buffer));
    479479    return serializedValue->deserialize(&exec, exec.lexicalGlobalObject(), 0, NonThrowing);
    480480}
    481481
    482 Deprecated::ScriptValue deserializeIDBValueBuffer(JSC::ExecState* exec, const Vector<uint8_t>& buffer, bool keyIsDefined)
     482Deprecated::ScriptValue deserializeIDBValueBuffer(JSC::ExecState* exec, Vector<uint8_t>&& buffer, bool keyIsDefined)
    483483{
    484484    ASSERT(exec);
     
    491491    }
    492492
    493     JSValue result = idbValueDataToJSValue(*exec, buffer);
     493    JSValue result = idbValueDataToJSValue(*exec, WTFMove(buffer));
    494494    return Deprecated::ScriptValue(exec->vm(), result);
    495495}
     
    500500        return jsUndefined();
    501501
    502     return idbValueDataToJSValue(exec, *valueData.data());
     502    return idbValueDataToJSValue(exec, Vector<uint8_t>(*valueData.data()));
    503503}
    504504
  • trunk/Source/WebCore/bindings/js/IDBBindingUtilities.h

    r192798 r195235  
    6161Deprecated::ScriptValue deserializeIDBValueData(ScriptExecutionContext&, const ThreadSafeDataBuffer& valueData);
    6262Deprecated::ScriptValue deserializeIDBValueBuffer(DOMRequestState*, PassRefPtr<SharedBuffer>, bool keyIsDefined);
    63 WEBCORE_EXPORT Deprecated::ScriptValue deserializeIDBValueBuffer(JSC::ExecState*, const Vector<uint8_t>&, bool keyIsDefined);
     63WEBCORE_EXPORT Deprecated::ScriptValue deserializeIDBValueBuffer(JSC::ExecState*, Vector<uint8_t>&&, bool keyIsDefined);
    6464
    6565JSC::JSValue deserializeIDBValueDataToJSValue(JSC::ExecState&, const ThreadSafeDataBuffer& valueData);
  • trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp

    r194625 r195235  
    25962596}
    25972597
    2598 SerializedScriptValue::SerializedScriptValue(const Vector<uint8_t>& buffer)
    2599     : m_data(buffer)
    2600 {
    2601 }
    2602 
    2603 SerializedScriptValue::SerializedScriptValue(Vector<uint8_t>& buffer)
    2604 {
    2605     m_data.swap(buffer);
    2606 }
    2607 
    2608 SerializedScriptValue::SerializedScriptValue(Vector<uint8_t>& buffer, Vector<String>& blobURLs)
    2609 {
    2610     m_data.swap(buffer);
     2598SerializedScriptValue::SerializedScriptValue(Vector<uint8_t>&& buffer)
     2599    : m_data(WTFMove(buffer))
     2600{
     2601}
     2602
     2603SerializedScriptValue::SerializedScriptValue(Vector<uint8_t>&& buffer, const Vector<String>& blobURLs)
     2604    : m_data(WTFMove(buffer))
     2605{
    26112606    for (auto& string : blobURLs)
    26122607        addBlobURL(string);
    26132608}
    26142609
    2615 SerializedScriptValue::SerializedScriptValue(Vector<uint8_t>& buffer, Vector<String>& blobURLs, std::unique_ptr<ArrayBufferContentsArray> arrayBufferContentsArray)
    2616     : m_arrayBufferContentsArray(WTFMove(arrayBufferContentsArray))
    2617 {
    2618     m_data.swap(buffer);
     2610SerializedScriptValue::SerializedScriptValue(Vector<uint8_t>&& buffer, const Vector<String>& blobURLs, std::unique_ptr<ArrayBufferContentsArray>&& arrayBufferContentsArray)
     2611    : m_data(WTFMove(buffer))
     2612    , m_arrayBufferContentsArray(WTFMove(arrayBufferContentsArray))
     2613{
    26192614    for (auto& string : blobURLs)
    26202615        addBlobURL(string);
     
    26672662        return nullptr;
    26682663
    2669     return adoptRef(*new SerializedScriptValue(buffer, blobURLs, WTFMove(arrayBufferContentsArray)));
     2664    return adoptRef(*new SerializedScriptValue(WTFMove(buffer), blobURLs, WTFMove(arrayBufferContentsArray)));
    26702665}
    26712666
     
    26752670    if (!CloneSerializer::serialize(string, buffer))
    26762671        return nullptr;
    2677     return adoptRef(*new SerializedScriptValue(buffer));
     2672    return adoptRef(*new SerializedScriptValue(WTFMove(buffer)));
    26782673}
    26792674
     
    26832678    Vector<uint8_t> buffer;
    26842679    CloneSerializer::serializeNumber(value, buffer);
    2685     return adoptRef(*new SerializedScriptValue(buffer));
     2680    return adoptRef(*new SerializedScriptValue(WTFMove(buffer)));
    26862681}
    26872682
     
    26902685    Vector<uint8_t> buffer;
    26912686    CloneSerializer::serializeUndefined(buffer);
    2692     return adoptRef(*new SerializedScriptValue(buffer));
     2687    return adoptRef(*new SerializedScriptValue(WTFMove(buffer)));
    26932688}
    26942689#endif
     
    27422737Ref<SerializedScriptValue> SerializedScriptValue::nullValue()
    27432738{
    2744     Vector<uint8_t> buffer;
    2745     return adoptRef(*new SerializedScriptValue(buffer));
     2739    return adoptRef(*new SerializedScriptValue(Vector<uint8_t>()));
    27462740}
    27472741
  • trunk/Source/WebCore/bindings/js/SerializedScriptValue.h

    r188187 r195235  
    7070
    7171    WEBCORE_EXPORT static RefPtr<SerializedScriptValue> create(const String&);
    72     static Ref<SerializedScriptValue> adopt(Vector<uint8_t>& buffer)
     72    static Ref<SerializedScriptValue> adopt(Vector<uint8_t>&& buffer)
    7373    {
    74         return adoptRef(*new SerializedScriptValue(buffer));
     74        return adoptRef(*new SerializedScriptValue(WTFMove(buffer)));
    7575    }
    7676
     
    9797#endif
    9898
    99     static Ref<SerializedScriptValue> createFromWireBytes(const Vector<uint8_t>& data)
     99    static Ref<SerializedScriptValue> createFromWireBytes(Vector<uint8_t>&& data)
    100100    {
    101         return adoptRef(*new SerializedScriptValue(data));
     101        return adoptRef(*new SerializedScriptValue(WTFMove(data)));
    102102    }
    103103    const Vector<uint8_t>& toWireBytes() const { return m_data; }
     
    112112    void addBlobURL(const String&);
    113113
    114     SerializedScriptValue(const Vector<unsigned char>&);
    115     WEBCORE_EXPORT SerializedScriptValue(Vector<unsigned char>&);
    116     SerializedScriptValue(Vector<unsigned char>&, Vector<String>& blobURLs);
    117     SerializedScriptValue(Vector<unsigned char>&, Vector<String>& blobURLs, std::unique_ptr<ArrayBufferContentsArray>);
     114    WEBCORE_EXPORT SerializedScriptValue(Vector<unsigned char>&&);
     115    SerializedScriptValue(Vector<unsigned char>&&, const Vector<String>& blobURLs);
     116    SerializedScriptValue(Vector<unsigned char>&&, const Vector<String>& blobURLs, std::unique_ptr<ArrayBufferContentsArray>&&);
    118117
    119118    Vector<unsigned char> m_data;
  • trunk/Source/WebCore/testing/Internals.cpp

    r195180 r195235  
    25032503    Vector<uint8_t> bytes;
    25042504    bytes.append(static_cast<const uint8_t*>(buffer->data()), buffer->byteLength());
    2505     return SerializedScriptValue::adopt(bytes);
     2505    return SerializedScriptValue::adopt(WTFMove(bytes));
    25062506}
    25072507
  • trunk/Source/WebKit2/ChangeLog

    r195231 r195235  
     12016-01-18  Zan Dobersek  <zdobersek@igalia.com>
     2
     3        Sink the Vector<uint8_t> buffer into the SerializedScriptValue constructor
     4        https://bugs.webkit.org/show_bug.cgi?id=142634
     5
     6        Reviewed by Darin Adler.
     7
     8        Update API::SerializedScriptValue::adopt() to take in a Vector<uint8_t>
     9        rvalue, moving it into the WebCore::SerializedScriptValue::adopt() call.
     10
     11        Update other places that are affected by the SerializedScriptValue changes.
     12
     13        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:
     14        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::createIndex):
     15        * Shared/API/APISerializedScriptValue.h:
     16        (API::SerializedScriptValue::adopt):
     17        * Shared/UserData.cpp:
     18        (WebKit::UserData::decode):
     19        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
     20        (WebKit::WebUserContentControllerProxy::didPostMessage):
     21        * UIProcess/WebPageProxy.cpp:
     22        (WebKit::WebPageProxy::scriptValueCallback):
     23        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
     24        (WebKit::applyFrameState):
     25
    1262016-01-18  Olivier Blin  <olivier.blin@softathome.com>
    227
  • trunk/Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp

    r192783 r195235  
    777777            locker = std::make_unique<JSLockHolder>(m_vm.get());
    778778
    779         Deprecated::ScriptValue value = deserializeIDBValueBuffer(m_globalObject->globalExec(), valueBuffer, true);
     779        Deprecated::ScriptValue value = deserializeIDBValueBuffer(m_globalObject->globalExec(), Vector<uint8_t>(valueBuffer), true);
    780780        Vector<IDBKeyData> indexKeys;
    781781        generateIndexKeysForValue(m_globalObject->globalExec(), metadata, value, indexKeys);
  • trunk/Source/WebKit2/Shared/API/APISerializedScriptValue.h

    r186229 r195235  
    5050    }
    5151   
    52     static Ref<SerializedScriptValue> adopt(Vector<uint8_t>& buffer)
     52    static Ref<SerializedScriptValue> adopt(Vector<uint8_t>&& buffer)
    5353    {
    54         return adoptRef(*new SerializedScriptValue(WebCore::SerializedScriptValue::adopt(buffer)));
     54        return adoptRef(*new SerializedScriptValue(WebCore::SerializedScriptValue::adopt(WTFMove(buffer))));
    5555    }
    5656   
  • trunk/Source/WebKit2/Shared/UserData.cpp

    r194496 r195235  
    531531            return false;
    532532
    533         auto vector = dataReference.vector();
    534         result = API::SerializedScriptValue::adopt(vector);
     533        result = API::SerializedScriptValue::adopt(dataReference.vector());
    535534        break;
    536535    }
  • trunk/Source/WebKit2/UIProcess/UserContent/WebUserContentControllerProxy.cpp

    r194496 r195235  
    178178        return;
    179179
    180     auto buffer = dataReference.vector();
    181     RefPtr<WebCore::SerializedScriptValue> value = WebCore::SerializedScriptValue::adopt(buffer);
    182 
    183     handler->client().didPostMessage(*page, *frame, securityOrigin, *value);
     180    handler->client().didPostMessage(*page, *frame, securityOrigin,
     181        WebCore::SerializedScriptValue::adopt(dataReference.vector()));
    184182}
    185183
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r195078 r195235  
    47044704    }
    47054705
     4706    if (dataReference.isEmpty()) {
     4707        callback->performCallbackWithReturnValue(nullptr, hadException, details);
     4708        return;
     4709    }
     4710
    47064711    Vector<uint8_t> data;
    47074712    data.reserveInitialCapacity(dataReference.size());
    47084713    data.append(dataReference.data(), dataReference.size());
    47094714
    4710     callback->performCallbackWithReturnValue(data.size() ? API::SerializedScriptValue::adopt(data).ptr() : nullptr, hadException, details);
     4715    callback->performCallbackWithReturnValue(API::SerializedScriptValue::adopt(WTFMove(data)).ptr(), hadException, details);
    47114716}
    47124717
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/SessionStateConversion.cpp

    r194496 r195235  
    155155    if (frameState.stateObjectData) {
    156156        Vector<uint8_t> stateObjectData = frameState.stateObjectData.value();
    157         historyItem.setStateObject(SerializedScriptValue::adopt(stateObjectData));
     157        historyItem.setStateObject(SerializedScriptValue::adopt(WTFMove(stateObjectData)));
    158158    }
    159159
Note: See TracChangeset for help on using the changeset viewer.