OLD | NEW |
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 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
553 | 553 |
554 | 554 |
555 {##############################################################################} | 555 {##############################################################################} |
556 {% from 'methods.cpp' import generate_constructor with context %} | 556 {% from 'methods.cpp' import generate_constructor with context %} |
557 {% block named_constructor %} | 557 {% block named_constructor %} |
558 {% if named_constructor %} | 558 {% if named_constructor %} |
559 {% set to_active_dom_object = '%s::toActiveDOMObject' % v8_class | 559 {% set to_active_dom_object = '%s::toActiveDOMObject' % v8_class |
560 if is_active_dom_object else '0' %} | 560 if is_active_dom_object else '0' %} |
561 {% set to_event_target = '%s::toEventTarget' % v8_class | 561 {% set to_event_target = '%s::toEventTarget' % v8_class |
562 if is_event_target else '0' %} | 562 if is_event_target else '0' %} |
563 const WrapperTypeInfo {{v8_class}}Constructor::wrapperTypeInfo = { gin::kEmbedde
rBlink, {{v8_class}}Constructor::domTemplate, {{v8_class}}::derefObject, {{to_ac
tive_dom_object}}, {{to_event_target}}, 0, {{v8_class}}::installConditionallyEna
bledMethods, 0, WrapperTypeObjectPrototype, {{gc_type}} }; | 563 const WrapperTypeInfo {{v8_class}}Constructor::wrapperTypeInfo = { gin::kEmbedde
rBlink, {{v8_class}}Constructor::domTemplate, {{v8_class}}::derefObject, {{to_ac
tive_dom_object}}, {{to_event_target}}, 0, {{v8_class}}::installPerContextEnable
dMethods, 0, WrapperTypeObjectPrototype, {{gc_type}} }; |
564 | 564 |
565 {{generate_constructor(named_constructor)}} | 565 {{generate_constructor(named_constructor)}} |
566 v8::Handle<v8::FunctionTemplate> {{v8_class}}Constructor::domTemplate(v8::Isolat
e* isolate) | 566 v8::Handle<v8::FunctionTemplate> {{v8_class}}Constructor::domTemplate(v8::Isolat
e* isolate) |
567 { | 567 { |
568 static int domTemplateKey; // This address is used for a key to look up the
dom template. | 568 static int domTemplateKey; // This address is used for a key to look up the
dom template. |
569 V8PerIsolateData* data = V8PerIsolateData::from(isolate); | 569 V8PerIsolateData* data = V8PerIsolateData::from(isolate); |
570 v8::Local<v8::FunctionTemplate> result = data->existingDOMTemplate(&domTempl
ateKey); | 570 v8::Local<v8::FunctionTemplate> result = data->existingDOMTemplate(&domTempl
ateKey); |
571 if (!result.IsEmpty()) | 571 if (!result.IsEmpty()) |
572 return result; | 572 return result; |
573 | 573 |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
741 | 741 |
742 {##############################################################################} | 742 {##############################################################################} |
743 {% block install_attributes %} | 743 {% block install_attributes %} |
744 {% if has_attribute_configuration %} | 744 {% if has_attribute_configuration %} |
745 static const V8DOMConfiguration::AttributeConfiguration {{v8_class}}Attributes[]
= { | 745 static const V8DOMConfiguration::AttributeConfiguration {{v8_class}}Attributes[]
= { |
746 {% for attribute in attributes | 746 {% for attribute in attributes |
747 if not (attribute.is_expose_js_accessors or | 747 if not (attribute.is_expose_js_accessors or |
748 attribute.is_static or | 748 attribute.is_static or |
749 attribute.runtime_enabled_function or | 749 attribute.runtime_enabled_function or |
750 attribute.per_context_enabled_function or | 750 attribute.per_context_enabled_function or |
751 attribute.exposed_test or | |
752 (interface_name == 'Window' and attribute.is_unforgeable)) | 751 (interface_name == 'Window' and attribute.is_unforgeable)) |
753 and attribute.should_be_exposed_to_script %} | 752 and attribute.should_be_exposed_to_script %} |
754 {% filter conditional(attribute.conditional_string) %} | 753 {% filter conditional(attribute.conditional_string) %} |
755 {{attribute_configuration(attribute)}}, | 754 {{attribute_configuration(attribute)}}, |
756 {% endfilter %} | 755 {% endfilter %} |
757 {% endfor %} | 756 {% endfor %} |
758 }; | 757 }; |
759 | 758 |
760 {% endif %} | 759 {% endif %} |
761 {% endblock %} | 760 {% endblock %} |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
916 functionTemplate->SetLength({{interface_length}}); | 915 functionTemplate->SetLength({{interface_length}}); |
917 {% endif %} | 916 {% endif %} |
918 v8::Local<v8::ObjectTemplate> instanceTemplate ALLOW_UNUSED = functionTempla
te->InstanceTemplate(); | 917 v8::Local<v8::ObjectTemplate> instanceTemplate ALLOW_UNUSED = functionTempla
te->InstanceTemplate(); |
919 v8::Local<v8::ObjectTemplate> prototypeTemplate ALLOW_UNUSED = functionTempl
ate->PrototypeTemplate(); | 918 v8::Local<v8::ObjectTemplate> prototypeTemplate ALLOW_UNUSED = functionTempl
ate->PrototypeTemplate(); |
920 {% if is_check_security and interface_name != 'Window' %} | 919 {% if is_check_security and interface_name != 'Window' %} |
921 instanceTemplate->SetAccessCheckCallbacks({{cpp_class}}V8Internal::namedSecu
rityCheck, {{cpp_class}}V8Internal::indexedSecurityCheck, v8::External::New(isol
ate, const_cast<WrapperTypeInfo*>(&{{v8_class}}::wrapperTypeInfo))); | 920 instanceTemplate->SetAccessCheckCallbacks({{cpp_class}}V8Internal::namedSecu
rityCheck, {{cpp_class}}V8Internal::indexedSecurityCheck, v8::External::New(isol
ate, const_cast<WrapperTypeInfo*>(&{{v8_class}}::wrapperTypeInfo))); |
922 {% endif %} | 921 {% endif %} |
923 {% for attribute in attributes | 922 {% for attribute in attributes |
924 if attribute.runtime_enabled_function and | 923 if attribute.runtime_enabled_function and |
925 not attribute.per_context_enabled_function and | 924 not attribute.per_context_enabled_function and |
926 not attribute.exposed_test and | |
927 not attribute.is_static %} | 925 not attribute.is_static %} |
928 {% filter conditional(attribute.conditional_string) %} | 926 {% filter conditional(attribute.conditional_string) %} |
929 if ({{attribute.runtime_enabled_function}}()) { | 927 if ({{attribute.runtime_enabled_function}}()) { |
930 static const V8DOMConfiguration::AttributeConfiguration attributeConfigu
ration =\ | 928 static const V8DOMConfiguration::AttributeConfiguration attributeConfigu
ration =\ |
931 {{attribute_configuration(attribute)}}; | 929 {{attribute_configuration(attribute)}}; |
932 V8DOMConfiguration::installAttribute(instanceTemplate, prototypeTemplate
, attributeConfiguration, isolate); | 930 V8DOMConfiguration::installAttribute(instanceTemplate, prototypeTemplate
, attributeConfiguration, isolate); |
933 } | 931 } |
934 {% endfilter %} | 932 {% endfilter %} |
935 {% endfor %} | 933 {% endfor %} |
936 {% if constants %} | 934 {% if constants %} |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1150 {% block to_native_with_type_check %} | 1148 {% block to_native_with_type_check %} |
1151 {{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) |
1152 { | 1150 { |
1153 return hasInstance(value, isolate) ? fromInternalPointer(v8::Handle<v8::Obje
ct>::Cast(value)->GetAlignedPointerFromInternalField(v8DOMWrapperObjectIndex)) :
0; | 1151 return hasInstance(value, isolate) ? fromInternalPointer(v8::Handle<v8::Obje
ct>::Cast(value)->GetAlignedPointerFromInternalField(v8DOMWrapperObjectIndex)) :
0; |
1154 } | 1152 } |
1155 | 1153 |
1156 {% endblock %} | 1154 {% endblock %} |
1157 | 1155 |
1158 | 1156 |
1159 {##############################################################################} | 1157 {##############################################################################} |
1160 {% block install_conditional_attributes %} | 1158 {% block install_per_context_attributes %} |
1161 {% if has_conditional_attributes %} | 1159 {% if has_per_context_enabled_attributes %} |
1162 void {{v8_class}}::installConditionallyEnabledProperties(v8::Handle<v8::Object>
instanceTemplate, v8::Isolate* isolate) | 1160 void {{v8_class}}::installPerContextEnabledProperties(v8::Handle<v8::Object> ins
tanceTemplate, {{cpp_class}}* impl, v8::Isolate* isolate) |
1163 { | 1161 { |
1164 v8::Local<v8::Object> prototypeTemplate = v8::Local<v8::Object>::Cast(instan
ceTemplate->GetPrototype()); | 1162 v8::Local<v8::Object> prototypeTemplate = v8::Local<v8::Object>::Cast(instan
ceTemplate->GetPrototype()); |
1165 ExecutionContext* context = toExecutionContext(prototypeTemplate->CreationCo
ntext()); | 1163 {% for attribute in attributes if attribute.per_context_enabled_function %} |
1166 | 1164 if ({{attribute.per_context_enabled_function}}(impl->document())) { |
1167 {% for attribute in attributes if attribute.per_context_enabled_function or
attribute.exposed_test %} | 1165 static const V8DOMConfiguration::AttributeConfiguration attributeConfigu
ration =\ |
1168 {% filter per_context_enabled(attribute.per_context_enabled_function) %} | 1166 {{attribute_configuration(attribute)}}; |
1169 {% filter exposed(attribute.exposed_test) %} | 1167 V8DOMConfiguration::installAttribute(instanceTemplate, prototypeTemplate
, attributeConfiguration, isolate); |
1170 static const V8DOMConfiguration::AttributeConfiguration attributeConfigurati
on =\ | 1168 } |
1171 {{attribute_configuration(attribute)}}; | |
1172 V8DOMConfiguration::installAttribute(instanceTemplate, prototypeTemplate, at
tributeConfiguration, isolate); | |
1173 {% endfilter %} | |
1174 {% endfilter %} | |
1175 {% endfor %} | 1169 {% endfor %} |
1176 } | 1170 } |
1177 | 1171 |
1178 {% endif %} | 1172 {% endif %} |
1179 {% endblock %} | 1173 {% endblock %} |
1180 | 1174 |
1181 | 1175 |
1182 {##############################################################################} | 1176 {##############################################################################} |
1183 {% block install_conditional_methods %} | 1177 {% block install_per_context_methods %} |
1184 {% if conditionally_enabled_methods %} | 1178 {% if per_context_enabled_methods %} |
1185 void {{v8_class}}::installConditionallyEnabledMethods(v8::Handle<v8::Object> pro
totypeTemplate, v8::Isolate* isolate) | 1179 void {{v8_class}}::installPerContextEnabledMethods(v8::Handle<v8::Object> protot
ypeTemplate, v8::Isolate* isolate) |
1186 { | 1180 { |
1187 {# Define per-context enabled operations #} | 1181 {# Define per-context enabled operations #} |
1188 v8::Local<v8::Signature> defaultSignature = v8::Signature::New(isolate, domT
emplate(isolate)); | 1182 v8::Local<v8::Signature> defaultSignature = v8::Signature::New(isolate, domT
emplate(isolate)); |
| 1183 |
1189 ExecutionContext* context = toExecutionContext(prototypeTemplate->CreationCo
ntext()); | 1184 ExecutionContext* context = toExecutionContext(prototypeTemplate->CreationCo
ntext()); |
1190 | 1185 {% for method in per_context_enabled_methods %} |
1191 {% for method in conditionally_enabled_methods %} | 1186 if (context && context->isDocument() && {{method.per_context_enabled_functio
n}}(toDocument(context))) |
1192 {% filter per_context_enabled(method.per_context_enabled_function) %} | 1187 prototypeTemplate->Set(v8AtomicString(isolate, "{{method.name}}"), v8::F
unctionTemplate::New(isolate, {{cpp_class}}V8Internal::{{method.name}}MethodCall
back, v8Undefined(), defaultSignature, {{method.number_of_required_arguments}})-
>GetFunction()); |
1193 {% filter exposed(method.exposed_test) %} | |
1194 prototypeTemplate->Set(v8AtomicString(isolate, "{{method.name}}"), v8::Funct
ionTemplate::New(isolate, {{cpp_class}}V8Internal::{{method.name}}MethodCallback
, v8Undefined(), defaultSignature, {{method.number_of_required_arguments}})->Get
Function()); | |
1195 {% endfilter %} | |
1196 {% endfilter %} | |
1197 {% endfor %} | 1188 {% endfor %} |
1198 } | 1189 } |
1199 | 1190 |
1200 {% endif %} | 1191 {% endif %} |
1201 {% endblock %} | 1192 {% endblock %} |
1202 | 1193 |
1203 | 1194 |
1204 {##############################################################################} | 1195 {##############################################################################} |
1205 {% block to_active_dom_object %} | 1196 {% block to_active_dom_object %} |
1206 {% if is_active_dom_object %} | 1197 {% if is_active_dom_object %} |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1323 {% if is_audio_buffer %} | 1314 {% if is_audio_buffer %} |
1324 {# We only setDeallocationObservers on array buffers that are held by some | 1315 {# We only setDeallocationObservers on array buffers that are held by some |
1325 object in the V8 heap, not in the ArrayBuffer constructor itself. | 1316 object in the V8 heap, not in the ArrayBuffer constructor itself. |
1326 This is because V8 GC only cares about memory it can free on GC, and | 1317 This is because V8 GC only cares about memory it can free on GC, and |
1327 until the object is exposed to JavaScript, V8 GC doesn't affect it. #} | 1318 until the object is exposed to JavaScript, V8 GC doesn't affect it. #} |
1328 for (unsigned i = 0, n = impl->numberOfChannels(); i < n; i++) { | 1319 for (unsigned i = 0, n = impl->numberOfChannels(); i < n; i++) { |
1329 Float32Array* channelData = impl->getChannelData(i); | 1320 Float32Array* channelData = impl->getChannelData(i); |
1330 channelData->buffer()->setDeallocationObserver(V8ArrayBufferDeallocation
Observer::instanceTemplate()); | 1321 channelData->buffer()->setDeallocationObserver(V8ArrayBufferDeallocation
Observer::instanceTemplate()); |
1331 } | 1322 } |
1332 {% endif %} | 1323 {% endif %} |
1333 installConditionallyEnabledProperties(wrapper, isolate); | 1324 installPerContextEnabledProperties(wrapper, impl.get(), isolate); |
1334 V8DOMWrapper::associateObjectWithWrapper<{{v8_class}}>(impl, &wrapperTypeInf
o, wrapper, isolate, {{wrapper_configuration}}); | 1325 V8DOMWrapper::associateObjectWithWrapper<{{v8_class}}>(impl, &wrapperTypeInf
o, wrapper, isolate, {{wrapper_configuration}}); |
1335 return wrapper; | 1326 return wrapper; |
1336 } | 1327 } |
1337 | 1328 |
1338 {% endif %} | 1329 {% endif %} |
1339 {% endblock %} | 1330 {% endblock %} |
1340 | 1331 |
1341 | 1332 |
1342 {##############################################################################} | 1333 {##############################################################################} |
1343 {% block deref_object_and_to_v8_no_inline %} | 1334 {% block deref_object_and_to_v8_no_inline %} |
1344 void {{v8_class}}::derefObject(void* object) | 1335 void {{v8_class}}::derefObject(void* object) |
1345 { | 1336 { |
1346 {% if gc_type == 'RefCountedObject' %} | 1337 {% if gc_type == 'RefCountedObject' %} |
1347 fromInternalPointer(object)->deref(); | 1338 fromInternalPointer(object)->deref(); |
1348 {% elif gc_type == 'WillBeGarbageCollectedObject' %} | 1339 {% elif gc_type == 'WillBeGarbageCollectedObject' %} |
1349 {% filter conditional('!ENABLE(OILPAN)') %} | 1340 {% filter conditional('!ENABLE(OILPAN)') %} |
1350 fromInternalPointer(object)->deref(); | 1341 fromInternalPointer(object)->deref(); |
1351 {% endfilter %} | 1342 {% endfilter %} |
1352 {% endif %} | 1343 {% endif %} |
1353 } | 1344 } |
1354 | 1345 |
1355 template<> | 1346 template<> |
1356 v8::Handle<v8::Value> toV8NoInline({{cpp_class}}* impl, v8::Handle<v8::Object> c
reationContext, v8::Isolate* isolate) | 1347 v8::Handle<v8::Value> toV8NoInline({{cpp_class}}* impl, v8::Handle<v8::Object> c
reationContext, v8::Isolate* isolate) |
1357 { | 1348 { |
1358 return toV8(impl, creationContext, isolate); | 1349 return toV8(impl, creationContext, isolate); |
1359 } | 1350 } |
1360 | 1351 |
1361 {% endblock %} | 1352 {% endblock %} |
OLD | NEW |