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

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

Issue 456683002: bindings: Introduces type-check for the internal pointers. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Synced. Created 6 years, 4 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 | Annotate | Revision Log
OLDNEW
1 {% extends 'interface_base.cpp' %} 1 {% extends 'interface_base.cpp' %}
2 2
3 3
4 {##############################################################################} 4 {##############################################################################}
5 {% macro attribute_configuration(attribute) %} 5 {% macro attribute_configuration(attribute) %}
6 {% set getter_callback = 6 {% set getter_callback =
7 '%sV8Internal::%sAttributeGetterCallback' % 7 '%sV8Internal::%sAttributeGetterCallback' %
8 (cpp_class, attribute.name) 8 (cpp_class, attribute.name)
9 if not attribute.constructor_type else 9 if not attribute.constructor_type else
10 ('%sV8Internal::%sConstructorGetterCallback' % 10 ('%sV8Internal::%sConstructorGetterCallback' %
(...skipping 678 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 v8SetReturnValue(info, wrapper); 689 v8SetReturnValue(info, wrapper);
690 } 690 }
691 691
692 {% endif %} 692 {% endif %}
693 {% endblock %} 693 {% endblock %}
694 694
695 695
696 {##############################################################################} 696 {##############################################################################}
697 {% block visit_dom_wrapper %} 697 {% block visit_dom_wrapper %}
698 {% if reachable_node_function or set_wrapper_reference_to_list %} 698 {% if reachable_node_function or set_wrapper_reference_to_list %}
699 void {{v8_class}}::visitDOMWrapper(void* object, const v8::Persistent<v8::Object >& wrapper, v8::Isolate* isolate) 699 void {{v8_class}}::visitDOMWrapper(ScriptWrappableBase* internalPointer, const v 8::Persistent<v8::Object>& wrapper, v8::Isolate* isolate)
700 { 700 {
701 {{cpp_class}}* impl = fromInternalPointer(object); 701 {{cpp_class}}* impl = fromInternalPointer(internalPointer);
702 {% if set_wrapper_reference_to_list %} 702 {% if set_wrapper_reference_to_list %}
703 v8::Local<v8::Object> creationContext = v8::Local<v8::Object>::New(isolate, wrapper); 703 v8::Local<v8::Object> creationContext = v8::Local<v8::Object>::New(isolate, wrapper);
704 V8WrapperInstantiationScope scope(creationContext, isolate); 704 V8WrapperInstantiationScope scope(creationContext, isolate);
705 {% for set_wrapper_reference_to in set_wrapper_reference_to_list %} 705 {% for set_wrapper_reference_to in set_wrapper_reference_to_list %}
706 {{set_wrapper_reference_to.cpp_type}} {{set_wrapper_reference_to.name}} = im pl->{{set_wrapper_reference_to.name}}(); 706 {{set_wrapper_reference_to.cpp_type}} {{set_wrapper_reference_to.name}} = im pl->{{set_wrapper_reference_to.name}}();
707 if ({{set_wrapper_reference_to.name}}) { 707 if ({{set_wrapper_reference_to.name}}) {
708 if (!DOMDataStore::containsWrapper<{{set_wrapper_reference_to.v8_type}}> ({{set_wrapper_reference_to.name}}, isolate)) 708 if (!DOMDataStore::containsWrapper<{{set_wrapper_reference_to.v8_type}}> ({{set_wrapper_reference_to.name}}, isolate))
709 wrap({{set_wrapper_reference_to.name}}, creationContext, isolate); 709 wrap({{set_wrapper_reference_to.name}}, creationContext, isolate);
710 DOMDataStore::setWrapperReference<{{set_wrapper_reference_to.v8_type}}>( wrapper, {{set_wrapper_reference_to.name}}, isolate); 710 DOMDataStore::setWrapperReference<{{set_wrapper_reference_to.v8_type}}>( wrapper, {{set_wrapper_reference_to.name}}, isolate);
711 } 711 }
712 {% endfor %} 712 {% endfor %}
713 {% endif %} 713 {% endif %}
714 {% if reachable_node_function %} 714 {% if reachable_node_function %}
715 // The {{reachable_node_function}}() method may return a reference or a poin ter. 715 // The {{reachable_node_function}}() method may return a reference or a poin ter.
716 if (Node* owner = WTF::getPtr(impl->{{reachable_node_function}}())) { 716 if (Node* owner = WTF::getPtr(impl->{{reachable_node_function}}())) {
717 Node* root = V8GCController::opaqueRootForGC(owner, isolate); 717 Node* root = V8GCController::opaqueRootForGC(owner, isolate);
718 isolate->SetReferenceFromGroup(v8::UniqueId(reinterpret_cast<intptr_t>(r oot)), wrapper); 718 isolate->SetReferenceFromGroup(v8::UniqueId(reinterpret_cast<intptr_t>(r oot)), wrapper);
719 return; 719 return;
720 } 720 }
721 {% endif %} 721 {% endif %}
722 setObjectGroup(object, wrapper, isolate); 722 setObjectGroup(internalPointer, wrapper, isolate);
723 } 723 }
724 724
725 {% endif %} 725 {% endif %}
726 {% endblock %} 726 {% endblock %}
727 727
728 728
729 {##############################################################################} 729 {##############################################################################}
730 {% block shadow_attributes %} 730 {% block shadow_attributes %}
731 {% if interface_name == 'Window' %} 731 {% if interface_name == 'Window' %}
732 static const V8DOMConfiguration::AttributeConfiguration shadowAttributes[] = { 732 static const V8DOMConfiguration::AttributeConfiguration shadowAttributes[] = {
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
1141 return V8PerIsolateData::from(isolate)->findInstanceInPrototypeChain(&wrappe rTypeInfo, v8Value); 1141 return V8PerIsolateData::from(isolate)->findInstanceInPrototypeChain(&wrappe rTypeInfo, v8Value);
1142 } 1142 }
1143 1143
1144 {% endblock %} 1144 {% endblock %}
1145 1145
1146 1146
1147 {##############################################################################} 1147 {##############################################################################}
1148 {% block to_native_with_type_check %} 1148 {% block to_native_with_type_check %}
1149 {{cpp_class}}* {{v8_class}}::toNativeWithTypeCheck(v8::Isolate* isolate, v8::Han dle<v8::Value> value) 1149 {{cpp_class}}* {{v8_class}}::toNativeWithTypeCheck(v8::Isolate* isolate, v8::Han dle<v8::Value> value)
1150 { 1150 {
1151 return hasInstance(value, isolate) ? fromInternalPointer(v8::Handle<v8::Obje ct>::Cast(value)->GetAlignedPointerFromInternalField(v8DOMWrapperObjectIndex)) : 0; 1151 return hasInstance(value, isolate) ? fromInternalPointer(blink::toInternalPo inter(v8::Handle<v8::Object>::Cast(value))) : 0;
1152 } 1152 }
1153 1153
1154 {% endblock %} 1154 {% endblock %}
1155 1155
1156 1156
1157 {##############################################################################} 1157 {##############################################################################}
1158 {% block install_per_context_attributes %} 1158 {% block install_per_context_attributes %}
1159 {% if has_per_context_enabled_attributes %} 1159 {% if has_per_context_enabled_attributes %}
1160 void {{v8_class}}::installPerContextEnabledProperties(v8::Handle<v8::Object> ins tanceObject, {{cpp_class}}* impl, v8::Isolate* isolate) 1160 void {{v8_class}}::installPerContextEnabledProperties(v8::Handle<v8::Object> ins tanceObject, {{cpp_class}}* impl, v8::Isolate* isolate)
1161 { 1161 {
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
1328 V8DOMWrapper::associateObjectWithWrapper<{{v8_class}}>(impl, &wrapperTypeInf o, wrapper, isolate, {{wrapper_configuration}}); 1328 V8DOMWrapper::associateObjectWithWrapper<{{v8_class}}>(impl, &wrapperTypeInf o, wrapper, isolate, {{wrapper_configuration}});
1329 return wrapper; 1329 return wrapper;
1330 } 1330 }
1331 1331
1332 {% endif %} 1332 {% endif %}
1333 {% endblock %} 1333 {% endblock %}
1334 1334
1335 1335
1336 {##############################################################################} 1336 {##############################################################################}
1337 {% block deref_object_and_to_v8_no_inline %} 1337 {% block deref_object_and_to_v8_no_inline %}
1338 void {{v8_class}}::derefObject(void* object) 1338 void {{v8_class}}::derefObject(ScriptWrappableBase* internalPointer)
1339 { 1339 {
1340 {% if gc_type == 'RefCountedObject' %} 1340 {% if gc_type == 'RefCountedObject' %}
1341 fromInternalPointer(object)->deref(); 1341 fromInternalPointer(internalPointer)->deref();
1342 {% elif gc_type == 'WillBeGarbageCollectedObject' %} 1342 {% elif gc_type == 'WillBeGarbageCollectedObject' %}
1343 {% filter conditional('!ENABLE(OILPAN)') %} 1343 {% filter conditional('!ENABLE(OILPAN)') %}
1344 fromInternalPointer(object)->deref(); 1344 fromInternalPointer(internalPointer)->deref();
1345 {% endfilter %} 1345 {% endfilter %}
1346 {% endif %} 1346 {% endif %}
1347 } 1347 }
1348 1348
1349 template<> 1349 template<>
1350 v8::Handle<v8::Value> toV8NoInline({{cpp_class}}* impl, v8::Handle<v8::Object> c reationContext, v8::Isolate* isolate) 1350 v8::Handle<v8::Value> toV8NoInline({{cpp_class}}* impl, v8::Handle<v8::Object> c reationContext, v8::Isolate* isolate)
1351 { 1351 {
1352 return toV8(impl, creationContext, isolate); 1352 return toV8(impl, creationContext, isolate);
1353 } 1353 }
1354 1354
1355 {% endblock %} 1355 {% endblock %}
OLDNEW
« no previous file with comments | « Source/bindings/templates/interface.h ('k') | Source/bindings/tests/results/V8SVGTestInterface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698