Diff
Modified: trunk/Source/WebCore/ChangeLog (195234 => 195235)
--- trunk/Source/WebCore/ChangeLog 2016-01-18 19:22:07 UTC (rev 195234)
+++ trunk/Source/WebCore/ChangeLog 2016-01-18 20:26:42 UTC (rev 195235)
@@ -1,3 +1,36 @@
+2016-01-18 Zan Dobersek <[email protected]>
+
+ Sink the Vector<uint8_t> buffer into the SerializedScriptValue constructor
+ https://bugs.webkit.org/show_bug.cgi?id=142634
+
+ Reviewed by Darin Adler.
+
+ 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):
+
2016-01-18 Olivier Blin <[email protected]>
[GStreamer] Remove unused m_endTime
Modified: trunk/Source/WebCore/bindings/js/IDBBindingUtilities.cpp (195234 => 195235)
--- trunk/Source/WebCore/bindings/js/IDBBindingUtilities.cpp 2016-01-18 19:22:07 UTC (rev 195234)
+++ trunk/Source/WebCore/bindings/js/IDBBindingUtilities.cpp 2016-01-18 20:26:42 UTC (rev 195235)
@@ -448,7 +448,7 @@
const Vector<uint8_t>& data = ""
JSValue result;
if (data.size()) {
- RefPtr<SerializedScriptValue> serializedValue = SerializedScriptValue::createFromWireBytes(data);
+ RefPtr<SerializedScriptValue> serializedValue = SerializedScriptValue::createFromWireBytes(Vector<uint8_t>(data));
exec.vm().apiLock().lock();
result = serializedValue->deserialize(&exec, exec.lexicalGlobalObject(), 0, NonThrowing);
@@ -464,22 +464,22 @@
if (prpBuffer) {
Vector<uint8_t> value;
value.append(prpBuffer->data(), prpBuffer->size());
- return deserializeIDBValueBuffer(requestState->exec(), value, keyIsDefined);
+ return deserializeIDBValueBuffer(requestState->exec(), WTFMove(value), keyIsDefined);
}
return Deprecated::ScriptValue(requestState->exec()->vm(), jsNull());
}
-static JSValue idbValueDataToJSValue(JSC::ExecState& exec, const Vector<uint8_t>& buffer)
+static JSValue idbValueDataToJSValue(JSC::ExecState& exec, Vector<uint8_t>&& buffer)
{
if (buffer.isEmpty())
return jsNull();
- RefPtr<SerializedScriptValue> serializedValue = SerializedScriptValue::createFromWireBytes(buffer);
+ RefPtr<SerializedScriptValue> serializedValue = SerializedScriptValue::createFromWireBytes(WTFMove(buffer));
return serializedValue->deserialize(&exec, exec.lexicalGlobalObject(), 0, NonThrowing);
}
-Deprecated::ScriptValue deserializeIDBValueBuffer(JSC::ExecState* exec, const Vector<uint8_t>& buffer, bool keyIsDefined)
+Deprecated::ScriptValue deserializeIDBValueBuffer(JSC::ExecState* exec, Vector<uint8_t>&& buffer, bool keyIsDefined)
{
ASSERT(exec);
@@ -490,7 +490,7 @@
return Deprecated::ScriptValue(exec->vm(), jsUndefined());
}
- JSValue result = idbValueDataToJSValue(*exec, buffer);
+ JSValue result = idbValueDataToJSValue(*exec, WTFMove(buffer));
return Deprecated::ScriptValue(exec->vm(), result);
}
@@ -499,7 +499,7 @@
if (!valueData.data())
return jsUndefined();
- return idbValueDataToJSValue(exec, *valueData.data());
+ return idbValueDataToJSValue(exec, Vector<uint8_t>(*valueData.data()));
}
Deprecated::ScriptValue idbKeyToScriptValue(DOMRequestState* requestState, PassRefPtr<IDBKey> key)
Modified: trunk/Source/WebCore/bindings/js/IDBBindingUtilities.h (195234 => 195235)
--- trunk/Source/WebCore/bindings/js/IDBBindingUtilities.h 2016-01-18 19:22:07 UTC (rev 195234)
+++ trunk/Source/WebCore/bindings/js/IDBBindingUtilities.h 2016-01-18 20:26:42 UTC (rev 195235)
@@ -60,7 +60,7 @@
Deprecated::ScriptValue deserializeIDBValue(DOMRequestState*, PassRefPtr<SerializedScriptValue>);
Deprecated::ScriptValue deserializeIDBValueData(ScriptExecutionContext&, const ThreadSafeDataBuffer& valueData);
Deprecated::ScriptValue deserializeIDBValueBuffer(DOMRequestState*, PassRefPtr<SharedBuffer>, bool keyIsDefined);
-WEBCORE_EXPORT Deprecated::ScriptValue deserializeIDBValueBuffer(JSC::ExecState*, const Vector<uint8_t>&, bool keyIsDefined);
+WEBCORE_EXPORT Deprecated::ScriptValue deserializeIDBValueBuffer(JSC::ExecState*, Vector<uint8_t>&&, bool keyIsDefined);
JSC::JSValue deserializeIDBValueDataToJSValue(JSC::ExecState&, const ThreadSafeDataBuffer& valueData);
Modified: trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp (195234 => 195235)
--- trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp 2016-01-18 19:22:07 UTC (rev 195234)
+++ trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp 2016-01-18 20:26:42 UTC (rev 195235)
@@ -2595,27 +2595,22 @@
{
}
-SerializedScriptValue::SerializedScriptValue(const Vector<uint8_t>& buffer)
- : m_data(buffer)
+SerializedScriptValue::SerializedScriptValue(Vector<uint8_t>&& buffer)
+ : m_data(WTFMove(buffer))
{
}
-SerializedScriptValue::SerializedScriptValue(Vector<uint8_t>& buffer)
+SerializedScriptValue::SerializedScriptValue(Vector<uint8_t>&& buffer, const Vector<String>& blobURLs)
+ : m_data(WTFMove(buffer))
{
- m_data.swap(buffer);
-}
-
-SerializedScriptValue::SerializedScriptValue(Vector<uint8_t>& buffer, Vector<String>& blobURLs)
-{
- m_data.swap(buffer);
for (auto& string : blobURLs)
addBlobURL(string);
}
-SerializedScriptValue::SerializedScriptValue(Vector<uint8_t>& buffer, Vector<String>& blobURLs, std::unique_ptr<ArrayBufferContentsArray> arrayBufferContentsArray)
- : m_arrayBufferContentsArray(WTFMove(arrayBufferContentsArray))
+SerializedScriptValue::SerializedScriptValue(Vector<uint8_t>&& buffer, const Vector<String>& blobURLs, std::unique_ptr<ArrayBufferContentsArray>&& arrayBufferContentsArray)
+ : m_data(WTFMove(buffer))
+ , m_arrayBufferContentsArray(WTFMove(arrayBufferContentsArray))
{
- m_data.swap(buffer);
for (auto& string : blobURLs)
addBlobURL(string);
}
@@ -2666,7 +2661,7 @@
if (!serializationDidCompleteSuccessfully(code))
return nullptr;
- return adoptRef(*new SerializedScriptValue(buffer, blobURLs, WTFMove(arrayBufferContentsArray)));
+ return adoptRef(*new SerializedScriptValue(WTFMove(buffer), blobURLs, WTFMove(arrayBufferContentsArray)));
}
RefPtr<SerializedScriptValue> SerializedScriptValue::create(const String& string)
@@ -2674,7 +2669,7 @@
Vector<uint8_t> buffer;
if (!CloneSerializer::serialize(string, buffer))
return nullptr;
- return adoptRef(*new SerializedScriptValue(buffer));
+ return adoptRef(*new SerializedScriptValue(WTFMove(buffer)));
}
#if ENABLE(INDEXED_DATABASE)
@@ -2682,14 +2677,14 @@
{
Vector<uint8_t> buffer;
CloneSerializer::serializeNumber(value, buffer);
- return adoptRef(*new SerializedScriptValue(buffer));
+ return adoptRef(*new SerializedScriptValue(WTFMove(buffer)));
}
Ref<SerializedScriptValue> SerializedScriptValue::undefinedValue()
{
Vector<uint8_t> buffer;
CloneSerializer::serializeUndefined(buffer);
- return adoptRef(*new SerializedScriptValue(buffer));
+ return adoptRef(*new SerializedScriptValue(WTFMove(buffer)));
}
#endif
@@ -2741,8 +2736,7 @@
Ref<SerializedScriptValue> SerializedScriptValue::nullValue()
{
- Vector<uint8_t> buffer;
- return adoptRef(*new SerializedScriptValue(buffer));
+ return adoptRef(*new SerializedScriptValue(Vector<uint8_t>()));
}
void SerializedScriptValue::maybeThrowExceptionIfSerializationFailed(ExecState* exec, SerializationReturnCode code)
Modified: trunk/Source/WebCore/bindings/js/SerializedScriptValue.h (195234 => 195235)
--- trunk/Source/WebCore/bindings/js/SerializedScriptValue.h 2016-01-18 19:22:07 UTC (rev 195234)
+++ trunk/Source/WebCore/bindings/js/SerializedScriptValue.h 2016-01-18 20:26:42 UTC (rev 195235)
@@ -69,9 +69,9 @@
WEBCORE_EXPORT static RefPtr<SerializedScriptValue> create(JSC::ExecState*, JSC::JSValue, MessagePortArray*, ArrayBufferArray*, SerializationErrorMode = Throwing);
WEBCORE_EXPORT static RefPtr<SerializedScriptValue> create(const String&);
- static Ref<SerializedScriptValue> adopt(Vector<uint8_t>& buffer)
+ static Ref<SerializedScriptValue> adopt(Vector<uint8_t>&& buffer)
{
- return adoptRef(*new SerializedScriptValue(buffer));
+ return adoptRef(*new SerializedScriptValue(WTFMove(buffer)));
}
static Ref<SerializedScriptValue> nullValue();
@@ -96,9 +96,9 @@
static Ref<SerializedScriptValue> undefinedValue();
#endif
- static Ref<SerializedScriptValue> createFromWireBytes(const Vector<uint8_t>& data)
+ static Ref<SerializedScriptValue> createFromWireBytes(Vector<uint8_t>&& data)
{
- return adoptRef(*new SerializedScriptValue(data));
+ return adoptRef(*new SerializedScriptValue(WTFMove(data)));
}
const Vector<uint8_t>& toWireBytes() const { return m_data; }
@@ -111,10 +111,9 @@
static std::unique_ptr<ArrayBufferContentsArray> transferArrayBuffers(JSC::ExecState*, ArrayBufferArray&, SerializationReturnCode&);
void addBlobURL(const String&);
- SerializedScriptValue(const Vector<unsigned char>&);
- WEBCORE_EXPORT SerializedScriptValue(Vector<unsigned char>&);
- SerializedScriptValue(Vector<unsigned char>&, Vector<String>& blobURLs);
- SerializedScriptValue(Vector<unsigned char>&, Vector<String>& blobURLs, std::unique_ptr<ArrayBufferContentsArray>);
+ WEBCORE_EXPORT SerializedScriptValue(Vector<unsigned char>&&);
+ SerializedScriptValue(Vector<unsigned char>&&, const Vector<String>& blobURLs);
+ SerializedScriptValue(Vector<unsigned char>&&, const Vector<String>& blobURLs, std::unique_ptr<ArrayBufferContentsArray>&&);
Vector<unsigned char> m_data;
std::unique_ptr<ArrayBufferContentsArray> m_arrayBufferContentsArray;
Modified: trunk/Source/WebCore/testing/Internals.cpp (195234 => 195235)
--- trunk/Source/WebCore/testing/Internals.cpp 2016-01-18 19:22:07 UTC (rev 195234)
+++ trunk/Source/WebCore/testing/Internals.cpp 2016-01-18 20:26:42 UTC (rev 195235)
@@ -2502,7 +2502,7 @@
{
Vector<uint8_t> bytes;
bytes.append(static_cast<const uint8_t*>(buffer->data()), buffer->byteLength());
- return SerializedScriptValue::adopt(bytes);
+ return SerializedScriptValue::adopt(WTFMove(bytes));
}
bool Internals::isFromCurrentWorld(Deprecated::ScriptValue value) const
Modified: trunk/Source/WebKit2/ChangeLog (195234 => 195235)
--- trunk/Source/WebKit2/ChangeLog 2016-01-18 19:22:07 UTC (rev 195234)
+++ trunk/Source/WebKit2/ChangeLog 2016-01-18 20:26:42 UTC (rev 195235)
@@ -1,3 +1,28 @@
+2016-01-18 Zan Dobersek <[email protected]>
+
+ Sink the Vector<uint8_t> buffer into the SerializedScriptValue constructor
+ https://bugs.webkit.org/show_bug.cgi?id=142634
+
+ Reviewed by Darin Adler.
+
+ 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):
+
2016-01-18 Olivier Blin <[email protected]>
[EFL][GTK][WK2] Fix UIProcess build with GStreamer and without VIDEO
Modified: trunk/Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp (195234 => 195235)
--- trunk/Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp 2016-01-18 19:22:07 UTC (rev 195234)
+++ trunk/Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp 2016-01-18 20:26:42 UTC (rev 195235)
@@ -776,7 +776,7 @@
if (!locker)
locker = std::make_unique<JSLockHolder>(m_vm.get());
- Deprecated::ScriptValue value = deserializeIDBValueBuffer(m_globalObject->globalExec(), valueBuffer, true);
+ Deprecated::ScriptValue value = deserializeIDBValueBuffer(m_globalObject->globalExec(), Vector<uint8_t>(valueBuffer), true);
Vector<IDBKeyData> indexKeys;
generateIndexKeysForValue(m_globalObject->globalExec(), metadata, value, indexKeys);
Modified: trunk/Source/WebKit2/Shared/API/APISerializedScriptValue.h (195234 => 195235)
--- trunk/Source/WebKit2/Shared/API/APISerializedScriptValue.h 2016-01-18 19:22:07 UTC (rev 195234)
+++ trunk/Source/WebKit2/Shared/API/APISerializedScriptValue.h 2016-01-18 20:26:42 UTC (rev 195235)
@@ -49,9 +49,9 @@
return adoptRef(*new SerializedScriptValue(serializedValue.get()));
}
- static Ref<SerializedScriptValue> adopt(Vector<uint8_t>& buffer)
+ static Ref<SerializedScriptValue> adopt(Vector<uint8_t>&& buffer)
{
- return adoptRef(*new SerializedScriptValue(WebCore::SerializedScriptValue::adopt(buffer)));
+ return adoptRef(*new SerializedScriptValue(WebCore::SerializedScriptValue::adopt(WTFMove(buffer))));
}
JSValueRef deserialize(JSContextRef context, JSValueRef* exception)
Modified: trunk/Source/WebKit2/Shared/UserData.cpp (195234 => 195235)
--- trunk/Source/WebKit2/Shared/UserData.cpp 2016-01-18 19:22:07 UTC (rev 195234)
+++ trunk/Source/WebKit2/Shared/UserData.cpp 2016-01-18 20:26:42 UTC (rev 195235)
@@ -530,8 +530,7 @@
if (!decoder.decode(dataReference))
return false;
- auto vector = dataReference.vector();
- result = API::SerializedScriptValue::adopt(vector);
+ result = API::SerializedScriptValue::adopt(dataReference.vector());
break;
}
Modified: trunk/Source/WebKit2/UIProcess/UserContent/WebUserContentControllerProxy.cpp (195234 => 195235)
--- trunk/Source/WebKit2/UIProcess/UserContent/WebUserContentControllerProxy.cpp 2016-01-18 19:22:07 UTC (rev 195234)
+++ trunk/Source/WebKit2/UIProcess/UserContent/WebUserContentControllerProxy.cpp 2016-01-18 20:26:42 UTC (rev 195235)
@@ -177,10 +177,8 @@
if (!handler)
return;
- auto buffer = dataReference.vector();
- RefPtr<WebCore::SerializedScriptValue> value = WebCore::SerializedScriptValue::adopt(buffer);
-
- handler->client().didPostMessage(*page, *frame, securityOrigin, *value);
+ handler->client().didPostMessage(*page, *frame, securityOrigin,
+ WebCore::SerializedScriptValue::adopt(dataReference.vector()));
}
#if ENABLE(CONTENT_EXTENSIONS)
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (195234 => 195235)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2016-01-18 19:22:07 UTC (rev 195234)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2016-01-18 20:26:42 UTC (rev 195235)
@@ -4703,11 +4703,16 @@
return;
}
+ if (dataReference.isEmpty()) {
+ callback->performCallbackWithReturnValue(nullptr, hadException, details);
+ return;
+ }
+
Vector<uint8_t> data;
data.reserveInitialCapacity(dataReference.size());
data.append(dataReference.data(), dataReference.size());
- callback->performCallbackWithReturnValue(data.size() ? API::SerializedScriptValue::adopt(data).ptr() : nullptr, hadException, details);
+ callback->performCallbackWithReturnValue(API::SerializedScriptValue::adopt(WTFMove(data)).ptr(), hadException, details);
}
void WebPageProxy::computedPagesCallback(const Vector<IntRect>& pageRects, double totalScaleFactorForPrinting, uint64_t callbackID)
Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/SessionStateConversion.cpp (195234 => 195235)
--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/SessionStateConversion.cpp 2016-01-18 19:22:07 UTC (rev 195234)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/SessionStateConversion.cpp 2016-01-18 20:26:42 UTC (rev 195235)
@@ -154,7 +154,7 @@
if (frameState.stateObjectData) {
Vector<uint8_t> stateObjectData = frameState.stateObjectData.value();
- historyItem.setStateObject(SerializedScriptValue::adopt(stateObjectData));
+ historyItem.setStateObject(SerializedScriptValue::adopt(WTFMove(stateObjectData)));
}
historyItem.setDocumentSequenceNumber(frameState.documentSequenceNumber);