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 (interface_name, attribute.name) | 8 (interface_name, attribute.name) |
9 if not attribute.constructor_type else | 9 if not attribute.constructor_type else |
10 '{0}V8Internal::{0}ConstructorGetter'.format(interface_name) %} | 10 '{0}V8Internal::{0}ConstructorGetter'.format(interface_name) %} |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMSetter"); | 122 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMSetter"); |
123 {{cpp_class}}V8Internal::{{cpp_class}}OriginSafeMethodSetter(name, jsValue,
info); | 123 {{cpp_class}}V8Internal::{{cpp_class}}OriginSafeMethodSetter(name, jsValue,
info); |
124 TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); | 124 TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); |
125 } | 125 } |
126 | 126 |
127 {% endif %} | 127 {% endif %} |
128 {% endblock %} | 128 {% endblock %} |
129 | 129 |
130 | 130 |
131 {##############################################################################} | 131 {##############################################################################} |
| 132 {% block constructor %} |
| 133 {% if has_constructor %} |
| 134 {# FIXME: support overloading #} |
| 135 static void constructor(const v8::FunctionCallbackInfo<v8::Value>& info) |
| 136 { |
| 137 {# FIXME: support arguments #} |
| 138 RefPtr<{{cpp_class}}> impl = {{cpp_class}}::create(); |
| 139 v8::Handle<v8::Object> wrapper = info.Holder(); |
| 140 |
| 141 V8DOMWrapper::associateObjectWithWrapper<{{v8_class}}>(impl.release(), &{{v8
_class}}::wrapperTypeInfo, wrapper, info.GetIsolate(), WrapperConfiguration::Dep
endent); |
| 142 v8SetReturnValue(info, wrapper); |
| 143 } |
| 144 |
| 145 {% endif %} |
| 146 {% endblock %} |
| 147 |
| 148 |
| 149 {##############################################################################} |
| 150 {% block constructor_callback %} |
| 151 {% if has_constructor %} |
| 152 void {{v8_class}}::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>
& info) |
| 153 { |
| 154 TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "DOMConstructor"); |
| 155 if (!info.IsConstructCall()) { |
| 156 throwTypeError(ExceptionMessages::failedToConstruct("{{interface_name}}"
, "Please use the 'new' operator, this DOM object constructor cannot be called a
s a function."), info.GetIsolate()); |
| 157 return; |
| 158 } |
| 159 |
| 160 if (ConstructorMode::current() == ConstructorMode::WrapExistingObject) { |
| 161 v8SetReturnValue(info, info.Holder()); |
| 162 return; |
| 163 } |
| 164 |
| 165 {{cpp_class}}V8Internal::constructor(info); |
| 166 } |
| 167 |
| 168 {% endif %} |
| 169 {% endblock %} |
| 170 |
| 171 {##############################################################################} |
132 {% block visit_dom_wrapper %} | 172 {% block visit_dom_wrapper %} |
133 {% if generate_visit_dom_wrapper_function %} | 173 {% if generate_visit_dom_wrapper_function %} |
134 void {{v8_class}}::visitDOMWrapper(void* object, const v8::Persistent<v8::Object
>& wrapper, v8::Isolate* isolate) | 174 void {{v8_class}}::visitDOMWrapper(void* object, const v8::Persistent<v8::Object
>& wrapper, v8::Isolate* isolate) |
135 { | 175 { |
136 {{cpp_class}}* impl = fromInternalPointer(object); | 176 {{cpp_class}}* impl = fromInternalPointer(object); |
137 if (Node* owner = impl->{{generate_visit_dom_wrapper_function}}()) { | 177 if (Node* owner = impl->{{generate_visit_dom_wrapper_function}}()) { |
138 setObjectGroup(V8GCController::opaqueRootForGC(owner, isolate), wrapper,
isolate); | 178 setObjectGroup(V8GCController::opaqueRootForGC(owner, isolate), wrapper,
isolate); |
139 return; | 179 return; |
140 } | 180 } |
141 setObjectGroup(object, wrapper, isolate); | 181 setObjectGroup(object, wrapper, isolate); |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
225 ('%sMethods' % v8_class, | 265 ('%sMethods' % v8_class, |
226 'WTF_ARRAY_LENGTH(%sMethods)' % v8_class) | 266 'WTF_ARRAY_LENGTH(%sMethods)' % v8_class) |
227 if has_method_configuration else (0, 0) %} | 267 if has_method_configuration else (0, 0) %} |
228 {{attributes_name}}, {{attributes_length}}, | 268 {{attributes_name}}, {{attributes_length}}, |
229 {{accessors_name}}, {{accessors_length}}, | 269 {{accessors_name}}, {{accessors_length}}, |
230 {{methods_name}}, {{methods_length}}, | 270 {{methods_name}}, {{methods_length}}, |
231 isolate, currentWorldType); | 271 isolate, currentWorldType); |
232 {% endfilter %} | 272 {% endfilter %} |
233 | 273 |
234 UNUSED_PARAM(defaultSignature); | 274 UNUSED_PARAM(defaultSignature); |
| 275 {% if has_constructor %} |
| 276 functionTemplate->SetCallHandler({{v8_class}}::constructorCallback); |
| 277 {# FIXME: compute length #} |
| 278 functionTemplate->SetLength(0); |
| 279 {% endif %} |
235 v8::Local<v8::ObjectTemplate> instanceTemplate = functionTemplate->InstanceT
emplate(); | 280 v8::Local<v8::ObjectTemplate> instanceTemplate = functionTemplate->InstanceT
emplate(); |
236 v8::Local<v8::ObjectTemplate> prototypeTemplate = functionTemplate->Prototyp
eTemplate(); | 281 v8::Local<v8::ObjectTemplate> prototypeTemplate = functionTemplate->Prototyp
eTemplate(); |
237 UNUSED_PARAM(instanceTemplate); | 282 UNUSED_PARAM(instanceTemplate); |
238 UNUSED_PARAM(prototypeTemplate); | 283 UNUSED_PARAM(prototypeTemplate); |
239 {% if is_check_security and interface_name != 'Window' %} | 284 {% if is_check_security and interface_name != 'Window' %} |
240 instanceTemplate->SetAccessCheckCallbacks({{cpp_class}}V8Internal::namedSecu
rityCheck, {{cpp_class}}V8Internal::indexedSecurityCheck, v8::External::New(isol
ate, const_cast<WrapperTypeInfo*>(&{{v8_class}}::wrapperTypeInfo))); | 285 instanceTemplate->SetAccessCheckCallbacks({{cpp_class}}V8Internal::namedSecu
rityCheck, {{cpp_class}}V8Internal::indexedSecurityCheck, v8::External::New(isol
ate, const_cast<WrapperTypeInfo*>(&{{v8_class}}::wrapperTypeInfo))); |
241 {% endif %} | 286 {% endif %} |
242 {% for attribute in attributes if attribute.runtime_enabled_function %} | 287 {% for attribute in attributes if attribute.runtime_enabled_function %} |
243 {% filter conditional(attribute.conditional_string) %} | 288 {% filter conditional(attribute.conditional_string) %} |
244 if ({{attribute.runtime_enabled_function}}()) { | 289 if ({{attribute.runtime_enabled_function}}()) { |
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
520 fromInternalPointer(object)->deref(); | 565 fromInternalPointer(object)->deref(); |
521 } | 566 } |
522 | 567 |
523 template<> | 568 template<> |
524 v8::Handle<v8::Value> toV8NoInline({{cpp_class}}* impl, v8::Handle<v8::Object> c
reationContext, v8::Isolate* isolate) | 569 v8::Handle<v8::Value> toV8NoInline({{cpp_class}}* impl, v8::Handle<v8::Object> c
reationContext, v8::Isolate* isolate) |
525 { | 570 { |
526 return toV8(impl, creationContext, isolate); | 571 return toV8(impl, creationContext, isolate); |
527 } | 572 } |
528 | 573 |
529 {% endblock %} | 574 {% endblock %} |
OLD | NEW |