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); |
} |