Chromium Code Reviews| Index: src/value-serializer.cc |
| diff --git a/src/value-serializer.cc b/src/value-serializer.cc |
| index b0ecc6ddd5f1d10916fd4225ddf1873e68aeb210..ac8de6383d6cd12abc5e00798a0e60d242f9effb 100644 |
| --- a/src/value-serializer.cc |
| +++ b/src/value-serializer.cc |
| @@ -349,7 +349,8 @@ Maybe<bool> ValueSerializer::WriteJSReceiver(Handle<JSReceiver> receiver) { |
| // Eliminate callable and exotic objects, which should not be serialized. |
| InstanceType instance_type = receiver->map()->instance_type(); |
| - if (receiver->IsCallable() || instance_type <= LAST_SPECIAL_RECEIVER_TYPE) { |
| + if (receiver->IsCallable() || (instance_type <= LAST_SPECIAL_RECEIVER_TYPE && |
| + instance_type != JS_SPECIAL_API_OBJECT_TYPE)) { |
| ThrowDataCloneError(MessageTemplate::kDataCloneError, receiver); |
| return Nothing<bool>(); |
| } |
| @@ -362,8 +363,11 @@ Maybe<bool> ValueSerializer::WriteJSReceiver(Handle<JSReceiver> receiver) { |
| case JS_ARRAY_TYPE: |
| return WriteJSArray(Handle<JSArray>::cast(receiver)); |
| case JS_OBJECT_TYPE: |
| - case JS_API_OBJECT_TYPE: { |
| + case JS_API_OBJECT_TYPE: |
| + case JS_SPECIAL_API_OBJECT_TYPE: { |
| Handle<JSObject> js_object = Handle<JSObject>::cast(receiver); |
| + if (instance_type == JS_SPECIAL_API_OBJECT_TYPE) |
| + DCHECK(js_object->GetInternalFieldCount()); |
|
Jakob Kummerow
2016/09/23 17:20:30
nit: {} please
Or even better:
DCHECK_IMPLIES(in
jbroman
2016/09/23 17:50:36
Urgh. I've been writing Blink CLs mostly for the l
|
| return js_object->GetInternalFieldCount() ? WriteHostObject(js_object) |
| : WriteJSObject(js_object); |
| } |