| 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 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 | 79 |
| 80 | 80 |
| 81 {##############################################################################} | 81 {##############################################################################} |
| 82 {% block replaceable_attribute_setter_and_callback %} | 82 {% block replaceable_attribute_setter_and_callback %} |
| 83 {% if has_replaceable_attributes or has_constructor_attributes %} | 83 {% if has_replaceable_attributes or has_constructor_attributes %} |
| 84 {# FIXME: rename to ForceSetAttributeOnThis, since also used for Constructors #} | 84 {# FIXME: rename to ForceSetAttributeOnThis, since also used for Constructors #} |
| 85 static void {{cpp_class}}ReplaceableAttributeSetter(v8::Local<v8::String> name,
v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info) | 85 static void {{cpp_class}}ReplaceableAttributeSetter(v8::Local<v8::String> name,
v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info) |
| 86 { | 86 { |
| 87 {% if is_check_security %} | 87 {% if is_check_security %} |
| 88 {{cpp_class}}* impl = {{v8_class}}::toNative(info.Holder()); | 88 {{cpp_class}}* impl = {{v8_class}}::toNative(info.Holder()); |
| 89 v8::Isolate* isolate = info.GetIsolate(); |
| 89 v8::String::Utf8Value attributeName(name); | 90 v8::String::Utf8Value attributeName(name); |
| 90 ExceptionState exceptionState(ExceptionState::SetterContext, *attributeName,
"{{interface_name}}", info.Holder(), info.GetIsolate()); | 91 ExceptionState exceptionState(ExceptionState::SetterContext, *attributeName,
"{{interface_name}}", info.Holder(), isolate); |
| 91 if (!BindingSecurity::shouldAllowAccessToFrame(info.GetIsolate(), impl->fram
e(), exceptionState)) { | 92 if (!BindingSecurity::shouldAllowAccessToFrame(isolate, impl->frame(), excep
tionState)) { |
| 92 exceptionState.throwIfNeeded(); | 93 exceptionState.throwIfNeeded(); |
| 93 return; | 94 return; |
| 94 } | 95 } |
| 95 {% endif %} | 96 {% endif %} |
| 96 info.This()->ForceSet(name, jsValue); | 97 info.This()->ForceSet(name, jsValue); |
| 97 } | 98 } |
| 98 | 99 |
| 99 {# FIXME: rename to ForceSetAttributeOnThisCallback, since also used for Constru
ctors #} | 100 {# FIXME: rename to ForceSetAttributeOnThisCallback, since also used for Constru
ctors #} |
| 100 static void {{cpp_class}}ReplaceableAttributeSetterCallback(v8::Local<v8::String
> name, v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info
) | 101 static void {{cpp_class}}ReplaceableAttributeSetterCallback(v8::Local<v8::String
> name, v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info
) |
| 101 { | 102 { |
| (...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 478 {% endblock %} | 479 {% endblock %} |
| 479 | 480 |
| 480 | 481 |
| 481 {##############################################################################} | 482 {##############################################################################} |
| 482 {% block named_property_enumerator %} | 483 {% block named_property_enumerator %} |
| 483 {% if named_property_getter and named_property_getter.is_enumerable and | 484 {% if named_property_getter and named_property_getter.is_enumerable and |
| 484 not named_property_getter.is_custom_property_enumerator %} | 485 not named_property_getter.is_custom_property_enumerator %} |
| 485 static void namedPropertyEnumerator(const v8::PropertyCallbackInfo<v8::Array>& i
nfo) | 486 static void namedPropertyEnumerator(const v8::PropertyCallbackInfo<v8::Array>& i
nfo) |
| 486 { | 487 { |
| 487 {{cpp_class}}* impl = {{v8_class}}::toNative(info.Holder()); | 488 {{cpp_class}}* impl = {{v8_class}}::toNative(info.Holder()); |
| 489 v8::Isolate* isolate = info.GetIsolate(); |
| 488 Vector<String> names; | 490 Vector<String> names; |
| 489 ExceptionState exceptionState(ExceptionState::EnumerationContext, "{{interfa
ce_name}}", info.Holder(), info.GetIsolate()); | 491 ExceptionState exceptionState(ExceptionState::EnumerationContext, "{{interfa
ce_name}}", info.Holder(), isolate); |
| 490 impl->namedPropertyEnumerator(names, exceptionState); | 492 impl->namedPropertyEnumerator(names, exceptionState); |
| 491 if (exceptionState.throwIfNeeded()) | 493 if (exceptionState.throwIfNeeded()) |
| 492 return; | 494 return; |
| 493 v8::Handle<v8::Array> v8names = v8::Array::New(info.GetIsolate(), names.size
()); | 495 v8::Handle<v8::Array> v8names = v8::Array::New(isolate, names.size()); |
| 494 for (size_t i = 0; i < names.size(); ++i) | 496 for (size_t i = 0; i < names.size(); ++i) |
| 495 v8names->Set(v8::Integer::New(info.GetIsolate(), i), v8String(info.GetIs
olate(), names[i])); | 497 v8names->Set(v8::Integer::New(isolate, i), v8String(isolate, names[i])); |
| 496 v8SetReturnValue(info, v8names); | 498 v8SetReturnValue(info, v8names); |
| 497 } | 499 } |
| 498 | 500 |
| 499 {% endif %} | 501 {% endif %} |
| 500 {% endblock %} | 502 {% endblock %} |
| 501 | 503 |
| 502 | 504 |
| 503 {##############################################################################} | 505 {##############################################################################} |
| 504 {% block named_property_enumerator_callback %} | 506 {% block named_property_enumerator_callback %} |
| 505 {% if named_property_getter and named_property_getter.is_enumerable %} | 507 {% if named_property_getter and named_property_getter.is_enumerable %} |
| (...skipping 11 matching lines...) Expand all Loading... |
| 517 | 519 |
| 518 {% endif %} | 520 {% endif %} |
| 519 {% endblock %} | 521 {% endblock %} |
| 520 | 522 |
| 521 | 523 |
| 522 {##############################################################################} | 524 {##############################################################################} |
| 523 {% block origin_safe_method_setter %} | 525 {% block origin_safe_method_setter %} |
| 524 {% if has_origin_safe_method_setter %} | 526 {% if has_origin_safe_method_setter %} |
| 525 static void {{cpp_class}}OriginSafeMethodSetter(v8::Local<v8::String> name, v8::
Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info) | 527 static void {{cpp_class}}OriginSafeMethodSetter(v8::Local<v8::String> name, v8::
Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info) |
| 526 { | 528 { |
| 527 {# FIXME: don't call GetIsolate 3 times #} | 529 v8::Isolate* isolate = info.GetIsolate(); |
| 528 v8::Handle<v8::Object> holder = {{v8_class}}::findInstanceInPrototypeChain(i
nfo.This(), info.GetIsolate()); | 530 v8::Handle<v8::Object> holder = {{v8_class}}::findInstanceInPrototypeChain(i
nfo.This(), isolate); |
| 529 if (holder.IsEmpty()) | 531 if (holder.IsEmpty()) |
| 530 return; | 532 return; |
| 531 {{cpp_class}}* impl = {{v8_class}}::toNative(holder); | 533 {{cpp_class}}* impl = {{v8_class}}::toNative(holder); |
| 532 v8::String::Utf8Value attributeName(name); | 534 v8::String::Utf8Value attributeName(name); |
| 533 ExceptionState exceptionState(ExceptionState::SetterContext, *attributeName,
"{{interface_name}}", info.Holder(), info.GetIsolate()); | 535 ExceptionState exceptionState(ExceptionState::SetterContext, *attributeName,
"{{interface_name}}", info.Holder(), isolate); |
| 534 if (!BindingSecurity::shouldAllowAccessToFrame(info.GetIsolate(), impl->fram
e(), exceptionState)) { | 536 if (!BindingSecurity::shouldAllowAccessToFrame(isolate, impl->frame(), excep
tionState)) { |
| 535 exceptionState.throwIfNeeded(); | 537 exceptionState.throwIfNeeded(); |
| 536 return; | 538 return; |
| 537 } | 539 } |
| 538 | 540 |
| 539 V8HiddenValue::setHiddenValue(info.GetIsolate(), info.This(), name, jsValue)
; | 541 V8HiddenValue::setHiddenValue(isolate, info.This(), name, jsValue); |
| 540 } | 542 } |
| 541 | 543 |
| 542 static void {{cpp_class}}OriginSafeMethodSetterCallback(v8::Local<v8::String> na
me, v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info) | 544 static void {{cpp_class}}OriginSafeMethodSetterCallback(v8::Local<v8::String> na
me, v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info) |
| 543 { | 545 { |
| 544 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMSetter"); | 546 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMSetter"); |
| 545 {{cpp_class}}V8Internal::{{cpp_class}}OriginSafeMethodSetter(name, jsValue,
info); | 547 {{cpp_class}}V8Internal::{{cpp_class}}OriginSafeMethodSetter(name, jsValue,
info); |
| 546 TRACE_EVENT_SET_SAMPLING_STATE("V8", "V8Execution"); | 548 TRACE_EVENT_SET_SAMPLING_STATE("V8", "V8Execution"); |
| 547 } | 549 } |
| 548 | 550 |
| 549 {% endif %} | 551 {% endif %} |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 609 | 611 |
| 610 {% endif %} | 612 {% endif %} |
| 611 {% endblock %} | 613 {% endblock %} |
| 612 | 614 |
| 613 | 615 |
| 614 {##############################################################################} | 616 {##############################################################################} |
| 615 {% block event_constructor %} | 617 {% block event_constructor %} |
| 616 {% if has_event_constructor %} | 618 {% if has_event_constructor %} |
| 617 static void constructor(const v8::FunctionCallbackInfo<v8::Value>& info) | 619 static void constructor(const v8::FunctionCallbackInfo<v8::Value>& info) |
| 618 { | 620 { |
| 619 ExceptionState exceptionState(ExceptionState::ConstructionContext, "{{interf
ace_name}}", info.Holder(), info.GetIsolate()); | 621 v8::Isolate* isolate = info.GetIsolate(); |
| 622 ExceptionState exceptionState(ExceptionState::ConstructionContext, "{{interf
ace_name}}", info.Holder(), isolate); |
| 620 if (info.Length() < 1) { | 623 if (info.Length() < 1) { |
| 621 exceptionState.throwTypeError("An event name must be provided."); | 624 exceptionState.throwTypeError("An event name must be provided."); |
| 622 exceptionState.throwIfNeeded(); | 625 exceptionState.throwIfNeeded(); |
| 623 return; | 626 return; |
| 624 } | 627 } |
| 625 | 628 |
| 626 V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, type, info[0]); | 629 V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, type, info[0]); |
| 627 {% for attribute in any_type_attributes %} | 630 {% for attribute in any_type_attributes %} |
| 628 v8::Local<v8::Value> {{attribute.name}}; | 631 v8::Local<v8::Value> {{attribute.name}}; |
| 629 {% endfor %} | 632 {% endfor %} |
| 630 {{cpp_class}}Init eventInit; | 633 {{cpp_class}}Init eventInit; |
| 631 if (info.Length() >= 2) { | 634 if (info.Length() >= 2) { |
| 632 V8TRYCATCH_VOID(Dictionary, options, Dictionary(info[1], info.GetIsolate
())); | 635 V8TRYCATCH_VOID(Dictionary, options, Dictionary(info[1], isolate)); |
| 633 if (!initialize{{cpp_class}}(eventInit, options, exceptionState, info))
{ | 636 if (!initialize{{cpp_class}}(eventInit, options, exceptionState, info))
{ |
| 634 exceptionState.throwIfNeeded(); | 637 exceptionState.throwIfNeeded(); |
| 635 return; | 638 return; |
| 636 } | 639 } |
| 637 {# Store attributes of type |any| on the wrapper to avoid leaking them | 640 {# Store attributes of type |any| on the wrapper to avoid leaking them |
| 638 between isolated worlds. #} | 641 between isolated worlds. #} |
| 639 {% for attribute in any_type_attributes %} | 642 {% for attribute in any_type_attributes %} |
| 640 options.get("{{attribute.name}}", {{attribute.name}}); | 643 options.get("{{attribute.name}}", {{attribute.name}}); |
| 641 if (!{{attribute.name}}.IsEmpty()) | 644 if (!{{attribute.name}}.IsEmpty()) |
| 642 V8HiddenValue::setHiddenValue(info.GetIsolate(), info.Holder(), v8At
omicString(info.GetIsolate(), "{{attribute.name}}"), {{attribute.name}}); | 645 V8HiddenValue::setHiddenValue(isolate, info.Holder(), v8AtomicString
(isolate, "{{attribute.name}}"), {{attribute.name}}); |
| 643 {% endfor %} | 646 {% endfor %} |
| 644 } | 647 } |
| 645 {% if is_constructor_raises_exception %} | 648 {% if is_constructor_raises_exception %} |
| 646 RefPtr<{{cpp_class}}> event = {{cpp_class}}::create(type, eventInit, excepti
onState); | 649 RefPtr<{{cpp_class}}> event = {{cpp_class}}::create(type, eventInit, excepti
onState); |
| 647 if (exceptionState.throwIfNeeded()) | 650 if (exceptionState.throwIfNeeded()) |
| 648 return; | 651 return; |
| 649 {% else %} | 652 {% else %} |
| 650 RefPtr<{{cpp_class}}> event = {{cpp_class}}::create(type, eventInit); | 653 RefPtr<{{cpp_class}}> event = {{cpp_class}}::create(type, eventInit); |
| 651 {% endif %} | 654 {% endif %} |
| 652 {% if any_type_attributes and not interface_name == 'ErrorEvent' %} | 655 {% if any_type_attributes and not interface_name == 'ErrorEvent' %} |
| 653 {# If we're in an isolated world, create a SerializedScriptValue and store | 656 {# If we're in an isolated world, create a SerializedScriptValue and store |
| 654 it in the event for later cloning if the property is accessed from | 657 it in the event for later cloning if the property is accessed from |
| 655 another world. The main world case is handled lazily (in custom code). | 658 another world. The main world case is handled lazily (in custom code). |
| 656 | 659 |
| 657 We do not clone Error objects (exceptions), for 2 reasons: | 660 We do not clone Error objects (exceptions), for 2 reasons: |
| 658 1) Errors carry a reference to the isolated world's global object, and | 661 1) Errors carry a reference to the isolated world's global object, and |
| 659 thus passing it around would cause leakage. | 662 thus passing it around would cause leakage. |
| 660 2) Errors cannot be cloned (or serialized): | 663 2) Errors cannot be cloned (or serialized): |
| 661 http://www.whatwg.org/specs/web-apps/current-work/multipage/common-dom-in
terfaces.html#safe-passing-of-structured-data #} | 664 http://www.whatwg.org/specs/web-apps/current-work/multipage/common-dom-in
terfaces.html#safe-passing-of-structured-data #} |
| 662 if (DOMWrapperWorld::current(info.GetIsolate())->isIsolatedWorld()) { | 665 if (DOMWrapperWorld::current(isolate)->isIsolatedWorld()) { |
| 663 {% for attribute in any_type_attributes %} | 666 {% for attribute in any_type_attributes %} |
| 664 if (!{{attribute.name}}.IsEmpty()) | 667 if (!{{attribute.name}}.IsEmpty()) |
| 665 event->setSerialized{{attribute.name | blink_capitalize}}(Serialized
ScriptValue::createAndSwallowExceptions({{attribute.name}}, info.GetIsolate())); | 668 event->setSerialized{{attribute.name | blink_capitalize}}(Serialized
ScriptValue::createAndSwallowExceptions({{attribute.name}}, isolate)); |
| 666 {% endfor %} | 669 {% endfor %} |
| 667 } | 670 } |
| 668 | 671 |
| 669 {% endif %} | 672 {% endif %} |
| 670 v8::Handle<v8::Object> wrapper = info.Holder(); | 673 v8::Handle<v8::Object> wrapper = info.Holder(); |
| 671 V8DOMWrapper::associateObjectWithWrapper<{{v8_class}}>(event.release(), &{{v
8_class}}::wrapperTypeInfo, wrapper, info.GetIsolate(), {{wrapper_configuration}
}); | 674 V8DOMWrapper::associateObjectWithWrapper<{{v8_class}}>(event.release(), &{{v
8_class}}::wrapperTypeInfo, wrapper, isolate, {{wrapper_configuration}}); |
| 672 v8SetReturnValue(info, wrapper); | 675 v8SetReturnValue(info, wrapper); |
| 673 } | 676 } |
| 674 | 677 |
| 675 {% endif %} | 678 {% endif %} |
| 676 {% endblock %} | 679 {% endblock %} |
| 677 | 680 |
| 678 | 681 |
| 679 {##############################################################################} | 682 {##############################################################################} |
| 680 {% block visit_dom_wrapper %} | 683 {% block visit_dom_wrapper %} |
| 681 {% if reachable_node_function or set_wrapper_reference_to_list %} | 684 {% if reachable_node_function or set_wrapper_reference_to_list %} |
| (...skipping 630 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1312 {% endfilter %} | 1315 {% endfilter %} |
| 1313 } | 1316 } |
| 1314 | 1317 |
| 1315 template<> | 1318 template<> |
| 1316 v8::Handle<v8::Value> toV8NoInline({{cpp_class}}* impl, v8::Handle<v8::Object> c
reationContext, v8::Isolate* isolate) | 1319 v8::Handle<v8::Value> toV8NoInline({{cpp_class}}* impl, v8::Handle<v8::Object> c
reationContext, v8::Isolate* isolate) |
| 1317 { | 1320 { |
| 1318 return toV8(impl, creationContext, isolate); | 1321 return toV8(impl, creationContext, isolate); |
| 1319 } | 1322 } |
| 1320 | 1323 |
| 1321 {% endblock %} | 1324 {% endblock %} |
| OLD | NEW |