OLD | NEW |
1 {% from 'utilities.cpp.tmpl' import declare_enum_validation_variable, v8_value_t
o_local_cpp_value %} | 1 {% from 'utilities.cpp.tmpl' import declare_enum_validation_variable, v8_value_t
o_local_cpp_value %} |
2 | 2 |
3 {##############################################################################} | 3 {##############################################################################} |
4 {% macro generate_method(method, world_suffix) %} | 4 {% macro generate_method(method, world_suffix) %} |
5 static void {{method.name}}{{method.overload_index}}Method{{world_suffix}}(const
v8::FunctionCallbackInfo<v8::Value>& info) { | 5 static void {{method.name}}{{method.overload_index}}Method{{world_suffix}}(const
v8::FunctionCallbackInfo<v8::Value>& info) { |
6 {% filter format_remove_duplicates([ | 6 {% filter format_remove_duplicates([ |
7 'ExceptionState exceptionState', | 7 'ExceptionState exceptionState', |
8 'ScriptState* scriptState = ']) %} | 8 'ScriptState* scriptState = ']) %} |
9 {% set define_exception_state -%} | 9 {% set define_exception_state -%} |
10 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::kExecutionCon
text, "{{interface_name}}", "{{method.name}}"); | 10 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::kExecutionCon
text, "{{interface_name}}", "{{method.name}}"); |
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
440 return; | 440 return; |
441 } else { | 441 } else { |
442 // This instance doesn't support sending array buffers and image bitmaps | 442 // This instance doesn't support sending array buffers and image bitmaps |
443 // by move semantics. Emulate it by copy-and-neuter semantics that sends | 443 // by move semantics. Emulate it by copy-and-neuter semantics that sends |
444 // array buffers and image bitmaps via structured clone and then neuters | 444 // array buffers and image bitmaps via structured clone and then neuters |
445 // the original objects | 445 // the original objects |
446 | 446 |
447 // Clear references to array buffers and image bitmaps from transferables | 447 // Clear references to array buffers and image bitmaps from transferables |
448 // so that the serializer can consider the array buffers as | 448 // so that the serializer can consider the array buffers as |
449 // non-transferable and serialize them into the message. | 449 // non-transferable and serialize them into the message. |
450 ArrayBufferArray transferableArrayBuffers = transferables.array_buffers; | 450 ArrayBufferArray transferableArrayBuffers = SerializedScriptValue::ExtractNo
nSharedArrayBuffers(transferables); |
451 transferables.array_buffers.Clear(); | |
452 ImageBitmapArray transferableImageBitmaps = transferables.image_bitmaps; | 451 ImageBitmapArray transferableImageBitmaps = transferables.image_bitmaps; |
453 transferables.image_bitmaps.Clear(); | 452 transferables.image_bitmaps.Clear(); |
454 SerializedScriptValue::SerializeOptions options; | 453 SerializedScriptValue::SerializeOptions options; |
455 options.transferables = &transferables; | 454 options.transferables = &transferables; |
456 message = SerializedScriptValue::Serialize(info.GetIsolate(), info[0], optio
ns, exceptionState); | 455 message = SerializedScriptValue::Serialize(info.GetIsolate(), info[0], optio
ns, exceptionState); |
457 if (exceptionState.HadException()) | 456 if (exceptionState.HadException()) |
458 return; | 457 return; |
459 | 458 |
| 459 // If the transferable array_buffer list is empty, then it must have been po
pulated with SharedArrayBuffers. They can't be transfered, so throw. |
| 460 if (!message->GetArrayBufferContentsArray()->IsEmpty()) { |
| 461 exceptionState.ThrowDOMException(kDataCloneError, "SharedArrayBuffer can n
ot be sent in this context."); |
| 462 return; |
| 463 } |
| 464 |
460 // Neuter the original array buffers on the sender context. | 465 // Neuter the original array buffers on the sender context. |
461 SerializedScriptValue::TransferArrayBufferContents(info.GetIsolate(), transf
erableArrayBuffers, exceptionState); | 466 SerializedScriptValue::TransferArrayBufferContents(info.GetIsolate(), transf
erableArrayBuffers, exceptionState); |
462 if (exceptionState.HadException()) | 467 if (exceptionState.HadException()) |
463 return; | 468 return; |
464 // Neuter the original image bitmaps on the sender context. | 469 // Neuter the original image bitmaps on the sender context. |
465 SerializedScriptValue::TransferImageBitmapContents(info.GetIsolate(), transf
erableImageBitmaps, exceptionState); | 470 SerializedScriptValue::TransferImageBitmapContents(info.GetIsolate(), transf
erableImageBitmaps, exceptionState); |
466 if (exceptionState.HadException()) | 471 if (exceptionState.HadException()) |
467 return; | 472 return; |
468 } | 473 } |
469 | 474 |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
650 {{method_configuration(method) | indent(2)}} | 655 {{method_configuration(method) | indent(2)}} |
651 }; | 656 }; |
652 for (const auto& methodConfig : {{method.name}}MethodConfiguration) | 657 for (const auto& methodConfig : {{method.name}}MethodConfiguration) |
653 V8DOMConfiguration::InstallMethod(isolate, world, v8::Local<v8::Object>(), pro
totypeObject, interfaceObject, signature, methodConfig); | 658 V8DOMConfiguration::InstallMethod(isolate, world, v8::Local<v8::Object>(), pro
totypeObject, interfaceObject, signature, methodConfig); |
654 {% endfilter %}{# runtime_enabled() #} | 659 {% endfilter %}{# runtime_enabled() #} |
655 {% endfilter %}{# exposed() #} | 660 {% endfilter %}{# exposed() #} |
656 {% endfilter %}{# secure_context() #} | 661 {% endfilter %}{# secure_context() #} |
657 {% endfor %} | 662 {% endfor %} |
658 {% endif %} | 663 {% endif %} |
659 {%- endmacro %} | 664 {%- endmacro %} |
OLD | NEW |