Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(220)

Side by Side Diff: Source/bindings/templates/interface.cpp

Issue 1097773004: Sharing of SharedArrayBuffer via PostMessage transfer (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: additional flag in virtual test suite Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 {% extends 'interface_base.cpp' %} 1 {% extends 'interface_base.cpp' %}
2 2
3 3
4 {##############################################################################} 4 {##############################################################################}
5 {% block indexed_property_getter %} 5 {% block indexed_property_getter %}
6 {% if indexed_property_getter and not indexed_property_getter.is_custom %} 6 {% if indexed_property_getter and not indexed_property_getter.is_custom %}
7 {% set getter = indexed_property_getter %} 7 {% set getter = indexed_property_getter %}
8 static void indexedPropertyGetter(uint32_t index, const v8::PropertyCallbackInfo <v8::Value>& info) 8 static void indexedPropertyGetter(uint32_t index, const v8::PropertyCallbackInfo <v8::Value>& info)
9 { 9 {
10 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); 10 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
(...skipping 706 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 { 717 {
718 return V8PerIsolateData::from(isolate)->findInstanceInPrototypeChain(&wrappe rTypeInfo, v8Value); 718 return V8PerIsolateData::from(isolate)->findInstanceInPrototypeChain(&wrappe rTypeInfo, v8Value);
719 } 719 }
720 720
721 {% endif %} 721 {% endif %}
722 {% endblock %} 722 {% endblock %}
723 723
724 724
725 {##############################################################################} 725 {##############################################################################}
726 {% block to_impl %} 726 {% block to_impl %}
727 {% if interface_name == 'ArrayBuffer' %} 727 {% if interface_name == 'ArrayBuffer' or interface_name == 'SharedArrayBuffer' % }
728 {{cpp_class}}* V8ArrayBuffer::toImpl(v8::Local<v8::Object> object) 728 {{cpp_class}}* V8{{interface_name}}::toImpl(v8::Local<v8::Object> object)
729 { 729 {
730 ASSERT(object->IsArrayBuffer()); 730 ASSERT(object->Is{{interface_name}}());
731 v8::Local<v8::ArrayBuffer> v8buffer = object.As<v8::ArrayBuffer>(); 731 v8::Local<v8::{{interface_name}}> v8buffer = object.As<v8::{{interface_name} }>();
732 if (v8buffer->IsExternal()) { 732 if (v8buffer->IsExternal()) {
733 const WrapperTypeInfo* wrapperTypeInfo = toWrapperTypeInfo(object); 733 const WrapperTypeInfo* wrapperTypeInfo = toWrapperTypeInfo(object);
734 RELEASE_ASSERT(wrapperTypeInfo); 734 RELEASE_ASSERT(wrapperTypeInfo);
735 RELEASE_ASSERT(wrapperTypeInfo->ginEmbedder == gin::kEmbedderBlink); 735 RELEASE_ASSERT(wrapperTypeInfo->ginEmbedder == gin::kEmbedderBlink);
736 return toScriptWrappable(object)->toImpl<{{cpp_class}}>(); 736 return toScriptWrappable(object)->toImpl<{{cpp_class}}>();
737 } 737 }
738 738
739 // Transfer the ownership of the allocated memory to an ArrayBuffer without 739 // Transfer the ownership of the allocated memory to an {{interface_name}} w ithout
740 // copying. 740 // copying.
741 v8::ArrayBuffer::Contents v8Contents = v8buffer->Externalize(); 741 v8::{{interface_name}}::Contents v8Contents = v8buffer->Externalize();
742 WTF::ArrayBufferContents contents(v8Contents.Data(), v8Contents.ByteLength() , WTF::ArrayBufferContents::NotShared); 742 WTF::ArrayBufferContents contents(v8Contents.Data(), v8Contents.ByteLength() , WTF::ArrayBufferContents::{% if interface_name == 'ArrayBuffer' %}Not{% endif %}Shared);
743 RefPtr<{{cpp_class}}> buffer = {{cpp_class}}::create(contents); 743 RefPtr<{{cpp_class}}> buffer = {{cpp_class}}::create(contents);
744 v8::Local<v8::Object> associatedWrapper = buffer->associateWithWrapper(v8::I solate::GetCurrent(), buffer->wrapperTypeInfo(), object); 744 v8::Local<v8::Object> associatedWrapper = buffer->associateWithWrapper(v8::I solate::GetCurrent(), buffer->wrapperTypeInfo(), object);
745 ASSERT_UNUSED(associatedWrapper, associatedWrapper == object); 745 ASSERT_UNUSED(associatedWrapper, associatedWrapper == object);
746 746
747 return buffer.get(); 747 return buffer.get();
748 } 748 }
749 749
750 {% elif interface_name == 'ArrayBufferView' %} 750 {% elif interface_name == 'ArrayBufferView' %}
751 {{cpp_class}}* V8ArrayBufferView::toImpl(v8::Local<v8::Object> object) 751 {{cpp_class}}* V8ArrayBufferView::toImpl(v8::Local<v8::Object> object)
752 { 752 {
(...skipping 29 matching lines...) Expand all
782 782
783 {% elif is_array_buffer_or_view %} 783 {% elif is_array_buffer_or_view %}
784 {{cpp_class}}* {{v8_class}}::toImpl(v8::Local<v8::Object> object) 784 {{cpp_class}}* {{v8_class}}::toImpl(v8::Local<v8::Object> object)
785 { 785 {
786 ASSERT(object->Is{{interface_name}}()); 786 ASSERT(object->Is{{interface_name}}());
787 ScriptWrappable* scriptWrappable = toScriptWrappable(object); 787 ScriptWrappable* scriptWrappable = toScriptWrappable(object);
788 if (scriptWrappable) 788 if (scriptWrappable)
789 return scriptWrappable->toImpl<{{cpp_class}}>(); 789 return scriptWrappable->toImpl<{{cpp_class}}>();
790 790
791 v8::Local<v8::{{interface_name}}> v8View = object.As<v8::{{interface_name}}> (); 791 v8::Local<v8::{{interface_name}}> v8View = object.As<v8::{{interface_name}}> ();
792 RefPtr<{{cpp_class}}> typedArray = {{cpp_class}}::create(V8ArrayBuffer::toIm pl(v8View->Buffer()), v8View->ByteOffset(), v8View->{% if interface_name == 'Dat aView' %}Byte{% endif %}Length()); 792 v8::Local<v8::Object> arrayBuffer = v8View->Buffer();
793 RefPtr<{{cpp_class}}> typedArray;
794 if (arrayBuffer->IsArrayBuffer()) {
795 typedArray = {{cpp_class}}::create(V8ArrayBuffer::toImpl(arrayBuffer), v 8View->ByteOffset(), v8View->{% if interface_name == 'DataView' %}Byte{% endif % }Length());
796 } else if (arrayBuffer->IsSharedArrayBuffer()) {
797 typedArray = {{cpp_class}}::create(V8SharedArrayBuffer::toImpl(arrayBuff er), v8View->ByteOffset(), v8View->{% if interface_name == 'DataView' %}Byte{% e ndif %}Length());
798 } else {
799 ASSERT_NOT_REACHED();
800 }
793 v8::Local<v8::Object> associatedWrapper = typedArray->associateWithWrapper(v 8::Isolate::GetCurrent(), typedArray->wrapperTypeInfo(), object); 801 v8::Local<v8::Object> associatedWrapper = typedArray->associateWithWrapper(v 8::Isolate::GetCurrent(), typedArray->wrapperTypeInfo(), object);
794 ASSERT_UNUSED(associatedWrapper, associatedWrapper == object); 802 ASSERT_UNUSED(associatedWrapper, associatedWrapper == object);
795 803
796 return typedArray->toImpl<{{cpp_class}}>(); 804 return typedArray->toImpl<{{cpp_class}}>();
797 } 805 }
798 806
799 {% endif %} 807 {% endif %}
800 {% endblock %} 808 {% endblock %}
801 809
802 810
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
959 } 967 }
960 968
961 {% for method in methods if method.overloads and method.overloads.has_partial_ov erloads %} 969 {% for method in methods if method.overloads and method.overloads.has_partial_ov erloads %}
962 void {{v8_class}}::register{{method.name | blink_capitalize}}MethodForPartialInt erface(void (*method)(const v8::FunctionCallbackInfo<v8::Value>&)) 970 void {{v8_class}}::register{{method.name | blink_capitalize}}MethodForPartialInt erface(void (*method)(const v8::FunctionCallbackInfo<v8::Value>&))
963 { 971 {
964 {{cpp_class}}V8Internal::{{method.name}}MethodForPartialInterface = method; 972 {{cpp_class}}V8Internal::{{method.name}}MethodForPartialInterface = method;
965 } 973 }
966 {% endfor %} 974 {% endfor %}
967 {% endif %} 975 {% endif %}
968 {% endblock %} 976 {% endblock %}
OLDNEW
« no previous file with comments | « Source/bindings/scripts/v8_types.py ('k') | Source/bindings/tests/results/core/V8ArrayBuffer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698