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

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

Issue 2341723002: binding: Indexed property returns undefined if out-of-range. (Closed)
Patch Set: Updated layout test expectations. Created 4 years, 3 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
OLDNEW
1 {% extends 'interface_base.cpp' %} 1 {% extends 'interface_base.cpp' %}
2 2
3 {% set has_prepare_prototype_and_interface_object = 3 {% set has_prepare_prototype_and_interface_object =
4 unscopeables or has_conditional_attributes_on_prototype or 4 unscopeables or has_conditional_attributes_on_prototype or
5 methods | conditionally_exposed(is_partial) %} 5 methods | conditionally_exposed(is_partial) %}
6 {% set prepare_prototype_and_interface_object_func = 6 {% set prepare_prototype_and_interface_object_func =
7 '%s::preparePrototypeAndInterfaceObject' % v8_class 7 '%s::preparePrototypeAndInterfaceObject' % v8_class
8 if has_prepare_prototype_and_interface_object 8 if has_prepare_prototype_and_interface_object
9 else 'nullptr' %} 9 else 'nullptr' %}
10 10
11 11
12 {##############################################################################} 12 {##############################################################################}
13 {% block indexed_property_getter %} 13 {% block indexed_property_getter %}
14 {% if indexed_property_getter and not indexed_property_getter.is_custom %} 14 {% if indexed_property_getter and not indexed_property_getter.is_custom %}
15 {% set getter = indexed_property_getter %} 15 {% set getter = indexed_property_getter %}
16 static void indexedPropertyGetter(uint32_t index, const v8::PropertyCallbackInfo <v8::Value>& info) 16 static void indexedPropertyGetter(uint32_t index, const v8::PropertyCallbackInfo <v8::Value>& info)
17 { 17 {
18 {% if getter.is_raises_exception %} 18 {% if getter.is_raises_exception %}
19 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::IndexedGett erContext, "{{interface_name}}"); 19 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::IndexedGett erContext, "{{interface_name}}");
20 {% endif %} 20 {% endif %}
21 21
22 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); 22 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
23 23
24 // We assume that all the implementations support length() method, although
peria 2016/09/14 15:25:03 Please use "{#...#}" style comment not to generate
Yuki 2016/09/15 09:49:17 I intentionally made this comment C++ comment so t
25 // the spec doesn't require that length() must exist. It's okay that
26 // the interface does not have length attribute as long as the
27 // implementation supports length() member function.
28 if (index >= impl->length())
29 return; // Returns undefined due to out-of-range.
30
24 {% set getter_name = getter.name or 'anonymousIndexedGetter' %} 31 {% set getter_name = getter.name or 'anonymousIndexedGetter' %}
25 {% set getter_arguments = ['index'] %} 32 {% set getter_arguments = ['index'] %}
26 {% if getter.is_call_with_script_state %} 33 {% if getter.is_call_with_script_state %}
27 ScriptState* scriptState = ScriptState::forReceiverObject(info); 34 ScriptState* scriptState = ScriptState::forReceiverObject(info);
28 {% set getter_arguments = ['scriptState'] + getter_arguments %} 35 {% set getter_arguments = ['scriptState'] + getter_arguments %}
29 {% endif %} 36 {% endif %}
30 {% if getter.is_raises_exception %} 37 {% if getter.is_raises_exception %}
31 {% set getter_arguments = getter_arguments + ['exceptionState'] %} 38 {% set getter_arguments = getter_arguments + ['exceptionState'] %}
32 {% endif %} 39 {% endif %}
33 {{getter.cpp_type}} result = impl->{{getter_name}}({{getter_arguments | join (', ')}}); 40 {{getter.cpp_type}} result = impl->{{getter_name}}({{getter_arguments | join (', ')}});
34 if ({{getter.is_null_expression}})
35 return;
36 {{getter.v8_set_return_value}}; 41 {{getter.v8_set_return_value}};
37 } 42 }
38 43
39 {% endif %} 44 {% endif %}
40 {% endblock %} 45 {% endblock %}
41 46
42 47
43 {##############################################################################} 48 {##############################################################################}
44 {% block indexed_property_getter_callback %} 49 {% block indexed_property_getter_callback %}
45 {% if indexed_property_getter or named_property_getter %} 50 {% if indexed_property_getter or named_property_getter %}
(...skipping 939 matching lines...) Expand 10 before | Expand all | Expand 10 after
985 990
986 {% for method in methods if method.overloads and method.overloads.has_partial_ov erloads %} 991 {% for method in methods if method.overloads and method.overloads.has_partial_ov erloads %}
987 void {{v8_class}}::register{{method.name | blink_capitalize}}MethodForPartialInt erface(void (*method)(const v8::FunctionCallbackInfo<v8::Value>&)) 992 void {{v8_class}}::register{{method.name | blink_capitalize}}MethodForPartialInt erface(void (*method)(const v8::FunctionCallbackInfo<v8::Value>&))
988 { 993 {
989 {{cpp_class}}V8Internal::{{method.name}}MethodForPartialInterface = method; 994 {{cpp_class}}V8Internal::{{method.name}}MethodForPartialInterface = method;
990 } 995 }
991 996
992 {% endfor %} 997 {% endfor %}
993 {% endif %} 998 {% endif %}
994 {% endblock %} 999 {% endblock %}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698