Chromium Code Reviews| Index: third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp |
| diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp |
| index cbfc21cf08d5c6261d2f582d973edadf8e236678..4a881ba0d02d51c132f72cf79d2f4e51575a96da 100644 |
| --- a/third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp |
| +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp |
| @@ -868,6 +868,9 @@ ScriptValueSerializer::StateBase* ScriptValueSerializer::doSerializeObject(v8::L |
| return writeTransferredSharedArrayBuffer(object, index, next); |
| } |
| + if (object->IsWebAssemblyCompiledModule()) { |
| + return writeWasmCompiledModule(object, next); |
| + } |
|
jsbell
2016/08/18 16:48:02
Nit: no {} necessary for single line ifs
Mircea Trofin
2016/08/18 17:34:08
Acknowledged.
Mircea Trofin
2016/08/18 23:02:59
Done.
|
| // Transferable only objects |
| if (V8MessagePort::hasInstance(object, isolate())) { |
| uint32_t index; |
| @@ -1175,6 +1178,16 @@ ScriptValueSerializer::StateBase* ScriptValueSerializer::writeAndGreyArrayBuffer |
| return nullptr; |
| } |
| +ScriptValueSerializer::StateBase* ScriptValueSerializer::writeWasmCompiledModule(v8::Local<v8::Object> object, StateBase* next) |
| +{ |
| + v8::Local<v8::WasmCompiledModule> wasmModule = object.As<v8::WasmCompiledModule>(); |
| + v8::WasmCompiledModule::SerializedModule data = wasmModule->Serialize(); |
|
jsbell
2016/08/18 16:48:02
Is this a copy, or does SerializedModule point int
Mircea Trofin
2016/08/18 17:34:08
SerializedModule points to existing bytes, at the
jsbell
2016/08/18 18:13:14
Staging is great! (I'm a fan of leaving TODOs in t
Mircea Trofin
2016/08/18 23:02:59
Done.
|
| + m_writer.append(WasmModuleTag); |
| + m_writer.doWriteUint32(static_cast<uint32_t>(data.second)); |
| + m_writer.append(data.first.get(), static_cast<int>(data.second)); |
| + return nullptr; |
| +} |
| + |
| ScriptValueSerializer::StateBase* ScriptValueSerializer::writeAndGreyArrayBuffer(v8::Local<v8::Object> object, StateBase* next) |
| { |
| DOMArrayBuffer* arrayBuffer = V8ArrayBuffer::toImpl(object); |
| @@ -1475,6 +1488,12 @@ bool SerializedScriptValueReader::readWithTag(SerializationTag tag, v8::Local<v8 |
| deserializer.pushObjectReference(*value); |
| break; |
| } |
| + case WasmModuleTag: { |
| + if (!readWasmCompiledModule(value)) |
| + return false; |
| + deserializer.pushObjectReference(*value); |
| + break; |
| + } |
| case ArrayBufferTag: { |
| if (!m_version) |
| return false; |
| @@ -1827,6 +1846,25 @@ DOMArrayBuffer* SerializedScriptValueReader::doReadArrayBuffer() |
| return DOMArrayBuffer::create(bufferStart, byteLength); |
| } |
| +bool SerializedScriptValueReader::readWasmCompiledModule(v8::Local<v8::Value>* value) |
| +{ |
| + uint32_t size = 0; |
| + if (!doReadUint32(&size)) |
| + return false; |
| + if (m_position + size > m_length) |
| + return false; |
| + const uint8_t* buf = m_buffer + m_position; |
| + v8::WasmCompiledModule::SerializedModule data = { |
| + std::unique_ptr<const uint8_t[]>(buf), |
|
jsbell
2016/08/18 16:48:02
Uh... it seems like the SerializedModule construct
Mircea Trofin
2016/08/18 17:34:08
SerializedModule is just a pair used by both seria
jsbell
2016/08/18 18:13:14
I'd start with this, pending any better ideas.
Mircea Trofin
2016/08/18 23:02:59
Added a TODO, and will follow with the v8 CL + chr
|
| + static_cast<size_t>(size) |
| + }; |
| + v8::MaybeLocal<v8::WasmCompiledModule> retval = |
| + v8::WasmCompiledModule::Deserialize(isolate(), data); |
|
jbroman
2016/08/18 16:59:09
If I read this correctly, every time the V8 versio
Mircea Trofin
2016/08/18 17:34:08
That's correct, the intent is to not support deser
jbroman
2016/08/18 17:55:50
Seems fine, as long as this is addressed before sh
jsbell
2016/08/18 18:13:14
I think what we settled on (in email conversations
Mircea Trofin
2016/08/18 23:02:59
Done.
|
| + data.first.release(); |
| + m_position += size; |
| + return retval.ToLocal(value); |
| +} |
| + |
| bool SerializedScriptValueReader::readArrayBuffer(v8::Local<v8::Value>* value) |
| { |
| DOMArrayBuffer* arrayBuffer = doReadArrayBuffer(); |