| OLD | NEW |
| 1 {% from 'utilities.cpp.tmpl' import declare_enum_validation_variable, v8_value_t
o_local_cpp_value %} | 1 {% from 'utilities.cpp.tmpl' import declare_enum_validation_variable, v8_value_t
o_local_cpp_value %} |
| 2 | 2 |
| 3 {##############################################################################} | 3 {##############################################################################} |
| 4 {% macro attribute_getter(attribute, world_suffix) %} | 4 {% macro attribute_getter(attribute, world_suffix) %} |
| 5 static void {{attribute.name}}AttributeGetter{{world_suffix}}( | 5 static void {{attribute.name}}AttributeGetter{{world_suffix}}( |
| 6 {%- if attribute.is_data_type_property %} | 6 {%- if attribute.is_data_type_property %} |
| 7 const v8::PropertyCallbackInfo<v8::Value>& info | 7 const v8::PropertyCallbackInfo<v8::Value>& info |
| 8 {%- else %} | 8 {%- else %} |
| 9 const v8::FunctionCallbackInfo<v8::Value>& info | 9 const v8::FunctionCallbackInfo<v8::Value>& info |
| 10 {%- endif %}) { | 10 {%- endif %}) { |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 v8::Local<v8::Value> v8Value, const V8CrossOriginSetterInfo& info | 281 v8::Local<v8::Value> v8Value, const V8CrossOriginSetterInfo& info |
| 282 {%- elif attribute.is_data_type_property %} | 282 {%- elif attribute.is_data_type_property %} |
| 283 v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info | 283 v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info |
| 284 {%- else %} | 284 {%- else %} |
| 285 v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info | 285 v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info |
| 286 {%- endif %}) { | 286 {%- endif %}) { |
| 287 {% filter format_remove_duplicates(['ExceptionState exceptionState']) %} | 287 {% filter format_remove_duplicates(['ExceptionState exceptionState']) %} |
| 288 v8::Isolate* isolate = info.GetIsolate(); | 288 v8::Isolate* isolate = info.GetIsolate(); |
| 289 ALLOW_UNUSED_LOCAL(isolate); | 289 ALLOW_UNUSED_LOCAL(isolate); |
| 290 | 290 |
| 291 v8::Local<v8::Object> holder = info.Holder(); |
| 292 ALLOW_UNUSED_LOCAL(holder); |
| 293 |
| 291 {% set define_exception_state -%} | 294 {% set define_exception_state -%} |
| 292 ExceptionState exceptionState(isolate, ExceptionState::kSetterContext, "{{inte
rface_name}}", "{{attribute.name}}"); | 295 ExceptionState exceptionState(isolate, ExceptionState::kSetterContext, "{{inte
rface_name}}", "{{attribute.name}}"); |
| 293 {%- endset %} | 296 {%- endset %} |
| 294 | 297 |
| 295 {% if attribute.is_lenient_this %} | 298 {% if attribute.is_lenient_this %} |
| 296 // [LenientThis] | 299 // [LenientThis] |
| 297 // Make sure that info.Holder() really points to an instance if [LenientThis]. | 300 // Make sure that info.Holder() really points to an instance if [LenientThis]. |
| 298 if (!{{v8_class}}::hasInstance(info.Holder(), isolate)) | 301 if (!{{v8_class}}::hasInstance(holder, isolate)) |
| 299 return; // Return silently because of [LenientThis]. | 302 return; // Return silently because of [LenientThis]. |
| 300 {% endif %} | 303 {% endif %} |
| 301 | 304 |
| 302 {% if not attribute.is_static and not attribute.is_replaceable %} | 305 {% if not attribute.is_static and not attribute.is_replaceable and not attribu
te.is_put_forwards %} |
| 303 v8::Local<v8::Object> holder = info.Holder(); | |
| 304 {% if attribute.is_put_forwards %} | |
| 305 {{cpp_class}}* proxyImpl = {{v8_class}}::toImpl(holder); | |
| 306 {{attribute.cpp_type}} impl = WTF::GetPtr(proxyImpl->{{attribute.name}}()); | |
| 307 if (!impl) | |
| 308 return; | |
| 309 {% else %} | |
| 310 {% set local_dom_window_only = interface_name == 'Window' and not attribute.ha
s_cross_origin_setter %} | 306 {% set local_dom_window_only = interface_name == 'Window' and not attribute.ha
s_cross_origin_setter %} |
| 311 {% if local_dom_window_only %} | 307 {% if local_dom_window_only %} |
| 312 {% if attribute.is_check_security_for_receiver %} | 308 {% if attribute.is_check_security_for_receiver %} |
| 313 {{cpp_class}}* uncheckedImpl = {{v8_class}}::toImpl(holder); | 309 {{cpp_class}}* uncheckedImpl = {{v8_class}}::toImpl(holder); |
| 314 {% else %} | 310 {% else %} |
| 315 // Same-origin attributes setters are never exposed via the cross-origin | 311 // Same-origin attributes setters are never exposed via the cross-origin |
| 316 // interceptors. Since same-origin access requires a LocalDOMWindow, it is | 312 // interceptors. Since same-origin access requires a LocalDOMWindow, it is |
| 317 // safe to downcast here. | 313 // safe to downcast here. |
| 318 LocalDOMWindow* impl = ToLocalDOMWindow({{v8_class}}::toImpl(holder)); | 314 LocalDOMWindow* impl = ToLocalDOMWindow({{v8_class}}::toImpl(holder)); |
| 319 {% endif %}{# attribute.is_check_security_for_receiver #} | 315 {% endif %}{# attribute.is_check_security_for_receiver #} |
| 320 {% else %} | 316 {% else %} |
| 321 {{cpp_class}}* impl = {{v8_class}}::toImpl(holder); | 317 {{cpp_class}}* impl = {{v8_class}}::toImpl(holder); |
| 322 {% endif %}{# local_dom_window_only #} | 318 {% endif %}{# local_dom_window_only #} |
| 323 {% endif %} | 319 {% endif %} |
| 324 {% endif %} | |
| 325 | 320 |
| 326 {% if attribute.is_check_security_for_receiver and not attribute.is_data_type_
property %} | 321 {% if attribute.is_check_security_for_receiver and not attribute.is_data_type_
property %} |
| 327 // Perform a security check for the receiver object. | 322 // Perform a security check for the receiver object. |
| 328 {{define_exception_state}} | 323 {{define_exception_state}} |
| 329 {% if local_dom_window_only %} | 324 {% if local_dom_window_only %} |
| 330 if (!BindingSecurity::ShouldAllowAccessTo(CurrentDOMWindow(isolate), unchecked
Impl, exceptionState)) { | 325 if (!BindingSecurity::ShouldAllowAccessTo(CurrentDOMWindow(isolate), unchecked
Impl, exceptionState)) { |
| 331 {% else %} | 326 {% else %} |
| 332 if (!BindingSecurity::ShouldAllowAccessTo(CurrentDOMWindow(isolate), impl, exc
eptionState)) { | 327 if (!BindingSecurity::ShouldAllowAccessTo(CurrentDOMWindow(isolate), impl, exc
eptionState)) { |
| 333 {% endif %}{# local_dom_window_only #} | 328 {% endif %}{# local_dom_window_only #} |
| 334 V8SetReturnValue(info, v8Value); | 329 V8SetReturnValue(info, v8Value); |
| 335 return; | 330 return; |
| 336 } | 331 } |
| 337 {% if local_dom_window_only %} | 332 {% if local_dom_window_only %} |
| 338 LocalDOMWindow* impl = ToLocalDOMWindow(uncheckedImpl); | 333 LocalDOMWindow* impl = ToLocalDOMWindow(uncheckedImpl); |
| 339 {% endif %}{# local_dom_window_only #} | 334 {% endif %}{# local_dom_window_only #} |
| 340 {% endif %} | 335 {% endif %} |
| 341 | 336 |
| 342 {% if attribute.is_check_security_for_return_value %} | 337 {% if attribute.is_check_security_for_return_value %} |
| 343 #error Attribute setter with the security check for the return value is not supp
orted. Since the return value is the given value to be set, it\'s meaningless t
o perform the security check for the return value. | 338 #error Attribute setter with the security check for the return value is not supp
orted. Since the return value is the given value to be set, it\'s meaningless t
o perform the security check for the return value. |
| 344 {% endif %} | 339 {% endif %} |
| 345 | 340 |
| 341 {% if attribute.is_put_forwards %} |
| 342 // [PutForwards] => {{attribute.name}}.{{attribute.target_attribute_name}} |
| 343 {{define_exception_state}} |
| 344 v8::Local<v8::Value> target; |
| 345 if (!holder->Get(isolate->GetCurrentContext(), V8String(isolate, "{{attribute.
name}}")).ToLocal(&target)) |
| 346 return; |
| 347 if (!target->IsObject()) { |
| 348 exceptionState.ThrowTypeError("The attribute value is not an object"); |
| 349 return; |
| 350 } |
| 351 bool result; |
| 352 if (!target.As<v8::Object>()->Set(isolate->GetCurrentContext(), V8String(isola
te, "{{attribute.target_attribute_name}}"), v8Value).To(&result)) |
| 353 return; |
| 354 if (!result) |
| 355 return; |
| 356 {% else %}{# attribute.is_put_forwards #} |
| 346 {% if attribute.is_custom_element_callbacks or | 357 {% if attribute.is_custom_element_callbacks or |
| 347 (attribute.is_reflect and not (attribute.idl_type == 'DOMString' and is_
node)) %} | 358 (attribute.is_reflect and not (attribute.idl_type == 'DOMString' and is_
node)) %} |
| 348 // Skip on compact node DOMString getters. | 359 // Skip on compact node DOMString getters. |
| 349 V0CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; | 360 V0CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; |
| 350 {% endif %} | 361 {% endif %} |
| 351 | 362 |
| 352 {% if attribute.has_setter_exception_state %} | 363 {% if attribute.has_setter_exception_state %} |
| 353 {{define_exception_state}} | 364 {{define_exception_state}} |
| 354 {% endif %} | 365 {% endif %} |
| 355 | 366 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 401 {% endif %} | 412 {% endif %} |
| 402 {{attribute.cpp_setter}}; | 413 {{attribute.cpp_setter}}; |
| 403 | 414 |
| 404 {% if attribute.cached_attribute_validation_method %} | 415 {% if attribute.cached_attribute_validation_method %} |
| 405 // [CachedAttribute] | 416 // [CachedAttribute] |
| 406 // Invalidate the cached value. | 417 // Invalidate the cached value. |
| 407 V8PrivateProperty::GetSymbol( | 418 V8PrivateProperty::GetSymbol( |
| 408 isolate, "{{cpp_class}}#{{attribute.name.capitalize()}}") | 419 isolate, "{{cpp_class}}#{{attribute.name.capitalize()}}") |
| 409 .DeleteProperty(holder, v8::Undefined(isolate)); | 420 .DeleteProperty(holder, v8::Undefined(isolate)); |
| 410 {% endif %} | 421 {% endif %} |
| 422 {% endif %}{# attribute.is_put_forwards #} |
| 411 } | 423 } |
| 412 {% endfilter %}{# format_remove_duplicates #} | 424 {% endfilter %}{# format_remove_duplicates #} |
| 413 {% endmacro %} | 425 {% endmacro %} |
| 414 | 426 |
| 415 | 427 |
| 416 {##############################################################################} | 428 {##############################################################################} |
| 417 {% macro attribute_setter_callback(attribute, world_suffix) %} | 429 {% macro attribute_setter_callback(attribute, world_suffix) %} |
| 418 void {{v8_class_or_partial}}::{{attribute.name}}AttributeSetterCallback{{world_s
uffix}}( | 430 void {{v8_class_or_partial}}::{{attribute.name}}AttributeSetterCallback{{world_s
uffix}}( |
| 419 {%- if attribute.is_data_type_property %} | 431 {%- if attribute.is_data_type_property %} |
| 420 v8::Local<v8::Name>, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInf
o<void>& info | 432 v8::Local<v8::Name>, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInf
o<void>& info |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 518 static const V8DOMConfiguration::AccessorConfiguration accessorConfiguration[] =
{ | 530 static const V8DOMConfiguration::AccessorConfiguration accessorConfiguration[] =
{ |
| 519 {{attribute_configuration(attribute)}} | 531 {{attribute_configuration(attribute)}} |
| 520 }; | 532 }; |
| 521 for (const auto& accessorConfig : accessorConfiguration) | 533 for (const auto& accessorConfig : accessorConfiguration) |
| 522 V8DOMConfiguration::InstallAccessor(isolate, world, v8::Local<v8::Object>(), p
rototypeObject, interfaceObject, signature, accessorConfig); | 534 V8DOMConfiguration::InstallAccessor(isolate, world, v8::Local<v8::Object>(), p
rototypeObject, interfaceObject, signature, accessorConfig); |
| 523 {% endfilter %}{# runtime_enabled #} | 535 {% endfilter %}{# runtime_enabled #} |
| 524 {% endfilter %}{# secure_context #} | 536 {% endfilter %}{# secure_context #} |
| 525 {% endfilter %}{# exposed #} | 537 {% endfilter %}{# exposed #} |
| 526 {% endfor %} | 538 {% endfor %} |
| 527 {% endmacro %} | 539 {% endmacro %} |
| OLD | NEW |