| Index: Source/bindings/templates/interface.cpp
|
| diff --git a/Source/bindings/templates/interface.cpp b/Source/bindings/templates/interface.cpp
|
| index 0ebd759e16a7affa06a8b7eb5382636e890846a6..036bb29bb0bd14e4a811cd5485583fae2f7757b3 100644
|
| --- a/Source/bindings/templates/interface.cpp
|
| +++ b/Source/bindings/templates/interface.cpp
|
| @@ -746,6 +746,28 @@ v8::Local<v8::Object> {{v8_class}}::findInstanceInPrototypeChain(v8::Local<v8::V
|
| return buffer.get();
|
| }
|
|
|
| +{% elif interface_name == 'SharedArrayBuffer' %}
|
| +{{cpp_class}}* V8SharedArrayBuffer::toImpl(v8::Local<v8::Object> object)
|
| +{
|
| + ASSERT(object->IsSharedArrayBuffer());
|
| + v8::Local<v8::SharedArrayBuffer> v8buffer = object.As<v8::SharedArrayBuffer>();
|
| + if (v8buffer->IsExternal()) {
|
| + const WrapperTypeInfo* wrapperTypeInfo = toWrapperTypeInfo(object);
|
| + RELEASE_ASSERT(wrapperTypeInfo);
|
| + RELEASE_ASSERT(wrapperTypeInfo->ginEmbedder == gin::kEmbedderBlink);
|
| + return toScriptWrappable(object)->toImpl<{{cpp_class}}>();
|
| + }
|
| +
|
| + // Transfer the ownership of the allocated memory to a SharedArrayBuffer
|
| + // without copying.
|
| + v8::SharedArrayBuffer::Contents v8Contents = v8buffer->Externalize();
|
| + WTF::ArrayBufferContents contents(v8Contents.Data(), v8Contents.ByteLength(), WTF::ArrayBufferContents::Shared);
|
| + RefPtr<{{cpp_class}}> buffer = {{cpp_class}}::create(contents);
|
| + buffer->associateWithWrapper(v8::Isolate::GetCurrent(), buffer->wrapperTypeInfo(), object);
|
| +
|
| + return buffer.get();
|
| +}
|
| +
|
| {% elif interface_name == 'ArrayBufferView' %}
|
| {{cpp_class}}* V8ArrayBufferView::toImpl(v8::Local<v8::Object> object)
|
| {
|
| @@ -788,7 +810,25 @@ v8::Local<v8::Object> {{v8_class}}::findInstanceInPrototypeChain(v8::Local<v8::V
|
| return scriptWrappable->toImpl<{{cpp_class}}>();
|
|
|
| v8::Local<v8::{{interface_name}}> v8View = object.As<v8::{{interface_name}}>();
|
| - RefPtr<{{cpp_class}}> typedArray = {{cpp_class}}::create(V8ArrayBuffer::toImpl(v8View->Buffer()), v8View->ByteOffset(), v8View->{% if interface_name == 'DataView' %}Byte{% endif %}Length());
|
| + v8::Local<v8::Object> arrayBuffer = v8View->Buffer();
|
| + RefPtr<{{cpp_class}}> typedArray;
|
| +{% if interface_name == 'DataView' %}
|
| + if (arrayBuffer->IsArrayBuffer()) {
|
| + typedArray = {{cpp_class}}::create(V8ArrayBuffer::toImpl(arrayBuffer), v8View->ByteOffset(), v8View->ByteLength());
|
| + } else if (arrayBuffer->IsSharedArrayBuffer()) {
|
| + typedArray = {{cpp_class}}::create(V8SharedArrayBuffer::toImpl(arrayBuffer), v8View->ByteOffset(), v8View->ByteLength());
|
| + } else {
|
| + ASSERT_NOT_REACHED();
|
| + }
|
| +{% else %}
|
| + if (arrayBuffer->IsArrayBuffer()) {
|
| + typedArray = {{cpp_class}}::create(V8ArrayBuffer::toImpl(arrayBuffer), v8View->ByteOffset(), v8View->Length());
|
| + } else if (arrayBuffer->IsSharedArrayBuffer()) {
|
| + typedArray = {{cpp_class}}::create(V8SharedArrayBuffer::toImpl(arrayBuffer), v8View->ByteOffset(), v8View->Length());
|
| + } else {
|
| + ASSERT_NOT_REACHED();
|
| + }
|
| +{% endif %}
|
| typedArray->associateWithWrapper(v8::Isolate::GetCurrent(), typedArray->wrapperTypeInfo(), object);
|
|
|
| return typedArray->toImpl<{{cpp_class}}>();
|
|
|