Chromium Code Reviews| Index: src/value-serializer.cc |
| diff --git a/src/value-serializer.cc b/src/value-serializer.cc |
| index 6017da86aa9b52659e05615a852bd657002f2182..919ab52fccc484f207781745f08449f58ff61f2c 100644 |
| --- a/src/value-serializer.cc |
| +++ b/src/value-serializer.cc |
| @@ -449,12 +449,7 @@ Maybe<bool> ValueSerializer::WriteJSReceiver(Handle<JSReceiver> receiver) { |
| case JS_OBJECT_TYPE: |
| case JS_API_OBJECT_TYPE: { |
| Handle<JSObject> js_object = Handle<JSObject>::cast(receiver); |
| - Map* map = js_object->map(); |
| - if (!FLAG_wasm_disable_structured_cloning && |
| - map->GetConstructor() == |
| - isolate_->native_context()->wasm_module_constructor()) { |
| - return WriteWasmModule(js_object); |
| - } else if (JSObject::GetEmbedderFieldCount(map)) { |
| + if (JSObject::GetEmbedderFieldCount(js_object->map())) { |
| return WriteHostObject(js_object); |
| } else { |
| return WriteJSObject(js_object); |
| @@ -479,6 +474,11 @@ Maybe<bool> ValueSerializer::WriteJSReceiver(Handle<JSReceiver> receiver) { |
| case JS_TYPED_ARRAY_TYPE: |
| case JS_DATA_VIEW_TYPE: |
| return WriteJSArrayBufferView(JSArrayBufferView::cast(*receiver)); |
| + case WASM_MODULE_TYPE: |
| + if (!FLAG_wasm_disable_structured_cloning) { |
| + // Only write WebAssembly modules if not disabled by a flag. |
| + return WriteWasmModule(Handle<WasmModuleObject>::cast(receiver)); |
| + } // fall through to error case |
| default: |
| ThrowDataCloneError(MessageTemplate::kDataCloneError, receiver); |
| return Nothing<bool>(); |
| @@ -815,11 +815,12 @@ Maybe<bool> ValueSerializer::WriteJSArrayBufferView(JSArrayBufferView* view) { |
| return ThrowIfOutOfMemory(); |
| } |
| -Maybe<bool> ValueSerializer::WriteWasmModule(Handle<JSObject> object) { |
| +Maybe<bool> ValueSerializer::WriteWasmModule(Handle<WasmModuleObject> object) { |
| if (delegate_ != nullptr) { |
| Maybe<uint32_t> transfer_id = delegate_->GetWasmModuleTransferId( |
| reinterpret_cast<v8::Isolate*>(isolate_), |
| - v8::Local<v8::WasmCompiledModule>::Cast(Utils::ToLocal(object))); |
| + v8::Local<v8::WasmCompiledModule>::Cast( |
| + Utils::ToLocal(Handle<JSObject>::cast(object)))); |
|
rossberg
2017/07/07 09:33:22
Why is this cast necessary? Shouldn't the type map
titzer
2017/07/07 11:32:49
There is no overload for WasmModuleObject. I added
|
| RETURN_VALUE_IF_SCHEDULED_EXCEPTION(isolate_, Nothing<bool>()); |
| uint32_t id = 0; |
| if (transfer_id.To(&id)) { |
| @@ -829,8 +830,7 @@ Maybe<bool> ValueSerializer::WriteWasmModule(Handle<JSObject> object) { |
| } |
| } |
| - Handle<WasmCompiledModule> compiled_part( |
| - WasmCompiledModule::cast(object->GetEmbedderField(0)), isolate_); |
| + Handle<WasmCompiledModule> compiled_part(object->compiled_module(), isolate_); |
| WasmEncodingTag encoding_tag = WasmEncodingTag::kRawBytes; |
| WriteTag(SerializationTag::kWasmModule); |
| WriteRawBytes(&encoding_tag, sizeof(encoding_tag)); |