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

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

Issue 2321073002: binding: Let indexed interceptor falls through to named interceptor. (Closed)
Patch Set: Updated global-interface-listing 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 %}
19 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::IndexedGett erContext, "{{interface_name}}");
20 {% endif %}
21
18 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); 22 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
19 {% if getter.is_raises_exception %} 23
20 ExceptionState exceptionState(ExceptionState::IndexedGetterContext, "{{inter face_name}}", info.Holder(), info.GetIsolate());
21 {% endif %}
22 {% set getter_name = getter.name or 'anonymousIndexedGetter' %} 24 {% set getter_name = getter.name or 'anonymousIndexedGetter' %}
23 {% set getter_arguments = ['index'] %} 25 {% set getter_arguments = ['index'] %}
24 {% if getter.is_call_with_script_state %} 26 {% if getter.is_call_with_script_state %}
25 ScriptState* scriptState = ScriptState::current(info.GetIsolate()); 27 ScriptState* scriptState = ScriptState::forReceiverObject(info);
26 {% set getter_arguments = ['scriptState'] + getter_arguments %} 28 {% set getter_arguments = ['scriptState'] + getter_arguments %}
27 {% endif %} 29 {% endif %}
28 {% if getter.is_raises_exception %} 30 {% if getter.is_raises_exception %}
29 {% set getter_arguments = getter_arguments + ['exceptionState'] %} 31 {% set getter_arguments = getter_arguments + ['exceptionState'] %}
30 {% endif %} 32 {% endif %}
31 {{getter.cpp_type}} result = impl->{{getter_name}}({{getter_arguments | join (', ')}}); 33 {{getter.cpp_type}} result = impl->{{getter_name}}({{getter_arguments | join (', ')}});
32 {% if getter.is_raises_exception %}
33 if (exceptionState.hadException())
34 return;
35 {% endif %}
36 if ({{getter.is_null_expression}}) 34 if ({{getter.is_null_expression}})
37 return; 35 return;
38 {{getter.v8_set_return_value}}; 36 {{getter.v8_set_return_value}};
39 } 37 }
40 38
41 {% endif %} 39 {% endif %}
42 {% endblock %} 40 {% endblock %}
43 41
44 42
45 {##############################################################################} 43 {##############################################################################}
46 {% block indexed_property_getter_callback %} 44 {% block indexed_property_getter_callback %}
47 {% if indexed_property_getter %} 45 {% if indexed_property_getter or named_property_getter %}
48 {% set getter = indexed_property_getter %} 46 {% set getter = indexed_property_getter or named_property_getter %}
49 void indexedPropertyGetterCallback(uint32_t index, const v8::PropertyCallbackInf o<v8::Value>& info) 47 void indexedPropertyGetterCallback(uint32_t index, const v8::PropertyCallbackInf o<v8::Value>& info)
50 { 48 {
49 {% if indexed_property_getter %}
50
51 {% if getter.is_custom %} 51 {% if getter.is_custom %}
52 {{v8_class}}::indexedPropertyGetterCustom(index, info); 52 {{v8_class}}::indexedPropertyGetterCustom(index, info);
53 {% else %} 53 {% else %}
54 {{cpp_class}}V8Internal::indexedPropertyGetter(index, info); 54 {{cpp_class}}V8Internal::indexedPropertyGetter(index, info);
55 {% endif %} 55 {% endif %}
56
57 {% else %}{# otherwise, named property #}
58
59 const AtomicString& propertyName = AtomicString::number(index);
60
61 {% if getter.is_custom %}
62 {{v8_class}}::namedPropertyGetterCustom(propertyName, info);
63 {% else %}
64 {{cpp_class}}V8Internal::namedPropertyGetter(propertyName, info);
65 {% endif %}
66
67 {% endif %}{# indexed_property_getter #}
56 } 68 }
57 69
58 {% endif %} 70 {% endif %}
59 {% endblock %} 71 {% endblock %}
60 72
61 73
62 {##############################################################################} 74 {##############################################################################}
63 {% block indexed_property_setter %} 75 {% block indexed_property_setter %}
64 {% from 'utilities.cpp' import v8_value_to_local_cpp_value %} 76 {% from 'utilities.cpp' import v8_value_to_local_cpp_value %}
65 {% if indexed_property_setter and not indexed_property_setter.is_custom %} 77 {% if indexed_property_setter and not indexed_property_setter.is_custom %}
66 {% set setter = indexed_property_setter %} 78 {% set setter = indexed_property_setter %}
67 static void indexedPropertySetter(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) 79 static void indexedPropertySetter(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info)
68 { 80 {
81 {% if setter.has_exception_state %}
82 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::IndexedSett erContext, "{{interface_name}}");
83 {% endif %}
84
69 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); 85 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
70 {{v8_value_to_local_cpp_value(setter) | indent}} 86 {{v8_value_to_local_cpp_value(setter) | indent}}
71 {% if setter.has_exception_state %}
72 ExceptionState exceptionState(ExceptionState::IndexedSetterContext, "{{inter face_name}}", info.Holder(), info.GetIsolate());
73 {% endif %}
74 {% if setter.has_type_checking_interface %} 87 {% if setter.has_type_checking_interface %}
75 {# Type checking for interface types (if interface not implemented, throw 88 {# Type checking for interface types (if interface not implemented, throw
76 TypeError), per http://www.w3.org/TR/WebIDL/#es-interface #} 89 TypeError), per http://www.w3.org/TR/WebIDL/#es-interface #}
77 if (!propertyValue{% if setter.is_nullable %} && !isUndefinedOrNull(v8Value) {% endif %}) { 90 if (!propertyValue{% if setter.is_nullable %} && !isUndefinedOrNull(v8Value) {% endif %}) {
78 exceptionState.throwTypeError("The provided value is not of type '{{sett er.idl_type}}'."); 91 exceptionState.throwTypeError("The provided value is not of type '{{sett er.idl_type}}'.");
79 return; 92 return;
80 } 93 }
81 {% endif %} 94 {% endif %}
95
82 {% set setter_name = setter.name or 'anonymousIndexedSetter' %} 96 {% set setter_name = setter.name or 'anonymousIndexedSetter' %}
83 {% set setter_arguments = ['index', 'propertyValue'] %} 97 {% set setter_arguments = ['index', 'propertyValue'] %}
84 {% if setter.is_call_with_script_state %} 98 {% if setter.is_call_with_script_state %}
85 ScriptState* scriptState = ScriptState::current(info.GetIsolate()); 99 ScriptState* scriptState = ScriptState::forReceiverObject(info);
86 {% set setter_arguments = ['scriptState'] + setter_arguments %} 100 {% set setter_arguments = ['scriptState'] + setter_arguments %}
87 {% endif %} 101 {% endif %}
88 {% if setter.is_raises_exception %} 102 {% if setter.is_raises_exception %}
89 {% set setter_arguments = setter_arguments + ['exceptionState'] %} 103 {% set setter_arguments = setter_arguments + ['exceptionState'] %}
90 {% endif %} 104 {% endif %}
91 bool result = impl->{{setter_name}}({{setter_arguments | join(', ')}}); 105 bool result = impl->{{setter_name}}({{setter_arguments | join(', ')}});
92 {% if setter.is_raises_exception %} 106 {% if setter.is_raises_exception %}
93 if (exceptionState.hadException()) 107 if (exceptionState.hadException())
94 return; 108 return;
95 {% endif %} 109 {% endif %}
96 if (!result) 110 if (!result)
97 return; 111 return;
98 v8SetReturnValue(info, v8Value); 112 v8SetReturnValue(info, v8Value);
99 } 113 }
100 114
101 {% endif %} 115 {% endif %}
102 {% endblock %} 116 {% endblock %}
103 117
104 118
105 {##############################################################################} 119 {##############################################################################}
106 {% block indexed_property_setter_callback %} 120 {% block indexed_property_setter_callback %}
107 {% if indexed_property_setter %} 121 {% if indexed_property_setter or named_property_setter %}
108 {% set setter = indexed_property_setter %} 122 {% set setter = indexed_property_setter or named_property_setter %}
109 void indexedPropertySetterCallback(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) 123 void indexedPropertySetterCallback(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info)
110 { 124 {
111 {% if setter.is_ce_reactions %} 125 {% if setter.is_ce_reactions %}
112 CEReactionsScope ceReactionsScope; 126 CEReactionsScope ceReactionsScope;
113 {% endif %} 127 {% endif %}
128
129 {% if indexed_property_setter %}
130
114 {% if setter.is_custom %} 131 {% if setter.is_custom %}
115 {{v8_class}}::indexedPropertySetterCustom(index, v8Value, info); 132 {{v8_class}}::indexedPropertySetterCustom(index, v8Value, info);
116 {% else %} 133 {% else %}
117 {{cpp_class}}V8Internal::indexedPropertySetter(index, v8Value, info); 134 {{cpp_class}}V8Internal::indexedPropertySetter(index, v8Value, info);
118 {% endif %} 135 {% endif %}
136
137 {% else %}{# otherwise, named property #}
138
139 const AtomicString& propertyName = AtomicString::number(index);
140
141 {% if setter.is_custom %}
142 {{v8_class}}::namedPropertySetterCustom(propertyName, v8Value, info);
143 {% else %}
144 {{cpp_class}}V8Internal::namedPropertySetter(propertyName, v8Value, info);
145 {% endif %}
146
147 {% endif %}{# indexed_property_setter #}
119 } 148 }
120 149
121 {% endif %} 150 {% endif %}
122 {% endblock %} 151 {% endblock %}
123 152
124 153
125 {##############################################################################} 154 {##############################################################################}
126 {% block indexed_property_deleter %} 155 {% block indexed_property_deleter %}
127 {% if indexed_property_deleter and not indexed_property_deleter.is_custom %} 156 {% if indexed_property_deleter and not indexed_property_deleter.is_custom %}
128 {% set deleter = indexed_property_deleter %} 157 {% set deleter = indexed_property_deleter %}
129 static void indexedPropertyDeleter(uint32_t index, const v8::PropertyCallbackInf o<v8::Boolean>& info) 158 static void indexedPropertyDeleter(uint32_t index, const v8::PropertyCallbackInf o<v8::Boolean>& info)
130 { 159 {
160 {% if deleter.is_raises_exception %}
161 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::IndexedDele tionContext, "{{interface_name}}");
162 {% endif %}
163
131 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); 164 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
132 {% if deleter.is_raises_exception %} 165
133 ExceptionState exceptionState(ExceptionState::IndexedDeletionContext, "{{int erface_name}}", info.Holder(), info.GetIsolate());
134 {% endif %}
135 {% set deleter_name = deleter.name or 'anonymousIndexedDeleter' %} 166 {% set deleter_name = deleter.name or 'anonymousIndexedDeleter' %}
136 {% set deleter_arguments = ['index'] %} 167 {% set deleter_arguments = ['index'] %}
137 {% if deleter.is_call_with_script_state %} 168 {% if deleter.is_call_with_script_state %}
138 ScriptState* scriptState = ScriptState::current(info.GetIsolate()); 169 ScriptState* scriptState = ScriptState::forReceiverObject(info);
139 {% set deleter_arguments = ['scriptState'] + deleter_arguments %} 170 {% set deleter_arguments = ['scriptState'] + deleter_arguments %}
140 {% endif %} 171 {% endif %}
141 {% if deleter.is_raises_exception %} 172 {% if deleter.is_raises_exception %}
142 {% set deleter_arguments = deleter_arguments + ['exceptionState'] %} 173 {% set deleter_arguments = deleter_arguments + ['exceptionState'] %}
143 {% endif %} 174 {% endif %}
144 DeleteResult result = impl->{{deleter_name}}({{deleter_arguments | join(', ' )}}); 175 DeleteResult result = impl->{{deleter_name}}({{deleter_arguments | join(', ' )}});
145 {% if deleter.is_raises_exception %} 176 {% if deleter.is_raises_exception %}
146 if (exceptionState.hadException()) 177 if (exceptionState.hadException())
147 return; 178 return;
148 {% endif %} 179 {% endif %}
149 if (result != DeleteUnknownProperty) 180 if (result == DeleteUnknownProperty)
150 return v8SetReturnValueBool(info, result == DeleteSuccess); 181 return;
182 v8SetReturnValue(info, result == DeleteSuccess);
151 } 183 }
152 184
153 {% endif %} 185 {% endif %}
154 {% endblock %} 186 {% endblock %}
155 187
156 188
157 {##############################################################################} 189 {##############################################################################}
158 {% block indexed_property_deleter_callback %} 190 {% block indexed_property_deleter_callback %}
159 {% if indexed_property_deleter %} 191 {% if indexed_property_deleter or named_property_deleter %}
160 {% set deleter = indexed_property_deleter %} 192 {% set deleter = indexed_property_deleter or named_property_deleter %}
161 void indexedPropertyDeleterCallback(uint32_t index, const v8::PropertyCallbackIn fo<v8::Boolean>& info) 193 void indexedPropertyDeleterCallback(uint32_t index, const v8::PropertyCallbackIn fo<v8::Boolean>& info)
162 { 194 {
163 {% if deleter.is_ce_reactions %} 195 {% if deleter.is_ce_reactions %}
164 CEReactionsScope ceReactionsScope; 196 CEReactionsScope ceReactionsScope;
165 {% endif %} 197 {% endif %}
198
199 {% if indexed_property_deleter %}
200
166 {% if deleter.is_custom %} 201 {% if deleter.is_custom %}
167 {{v8_class}}::indexedPropertyDeleterCustom(index, info); 202 {{v8_class}}::indexedPropertyDeleterCustom(index, info);
168 {% else %} 203 {% else %}
169 {{cpp_class}}V8Internal::indexedPropertyDeleter(index, info); 204 {{cpp_class}}V8Internal::indexedPropertyDeleter(index, info);
170 {% endif %} 205 {% endif %}
206
207 {% else %}{# otherwise, named property #}
208
209 const AtomicString& propertyName = AtomicString::number(index);
210
211 {% if deleter.is_custom %}
212 {{v8_class}}::namedPropertyDeleterCustom(propertyName, info);
213 {% else %}
214 {{cpp_class}}V8Internal::namedPropertyDeleter(propertyName, info);
215 {% endif %}
216
217 {% endif %}{# indexed_property_deleter #}
171 } 218 }
172 219
173 {% endif %} 220 {% endif %}
174 {% endblock %} 221 {% endblock %}
175 222
176 223
177 {##############################################################################} 224 {##############################################################################}
178 {% block named_property_getter %} 225 {% block named_property_getter %}
179 {% if named_property_getter and not named_property_getter.is_custom %} 226 {% if named_property_getter and not named_property_getter.is_custom %}
180 {% set getter = named_property_getter %} 227 {% set getter = named_property_getter %}
181 static void namedPropertyGetter(v8::Local<v8::Name> name, const v8::PropertyCall backInfo<v8::Value>& info) 228 static void namedPropertyGetter(const AtomicString& name, const v8::PropertyCall backInfo<v8::Value>& info)
182 { 229 {
183 auto nameString = name.As<v8::String>();
184 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
185 AtomicString propertyName = toCoreAtomicString(nameString);
186 {% if getter.is_raises_exception %} 230 {% if getter.is_raises_exception %}
187 v8::String::Utf8Value namedProperty(nameString); 231 const CString& nameInUtf8 = name.utf8();
188 ExceptionState exceptionState(ExceptionState::GetterContext, *namedProperty, "{{interface_name}}", info.Holder(), info.GetIsolate()); 232 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::GetterConte xt, "{{interface_name}}", nameInUtf8.data());
189 {% endif %} 233 {% endif %}
190 {% if getter.is_call_with_script_state %} 234 {% if getter.is_call_with_script_state %}
191 ScriptState* scriptState = ScriptState::current(info.GetIsolate()); 235 ScriptState* scriptState = ScriptState::forReceiverObject(info);
192 {% endif %} 236 {% endif %}
237
238 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
193 {% if getter.use_output_parameter_for_result %} 239 {% if getter.use_output_parameter_for_result %}
194 {{getter.cpp_type}} result; 240 {{getter.cpp_type}} result;
195 {{getter.cpp_value}}; 241 {{getter.cpp_value}};
196 {% else %} 242 {% else %}
197 {{getter.cpp_type}} result = {{getter.cpp_value}}; 243 {{getter.cpp_type}} result = {{getter.cpp_value}};
198 {% endif %} 244 {% endif %}
199 {% if getter.is_raises_exception %}
200 if (exceptionState.hadException())
201 return;
202 {% endif %}
203 if ({{getter.is_null_expression}}) 245 if ({{getter.is_null_expression}})
204 return; 246 return;
205 {{getter.v8_set_return_value}}; 247 {{getter.v8_set_return_value}};
206 } 248 }
207 249
208 {% endif %} 250 {% endif %}
209 {% endblock %} 251 {% endblock %}
210 252
211 253
212 {##############################################################################} 254 {##############################################################################}
213 {% block named_property_getter_callback %} 255 {% block named_property_getter_callback %}
214 {% if named_property_getter %} 256 {% if named_property_getter %}
215 {% set getter = named_property_getter %} 257 {% set getter = named_property_getter %}
216 void namedPropertyGetterCallback(v8::Local<v8::Name> name, const v8::PropertyCal lbackInfo<v8::Value>& info) 258 void namedPropertyGetterCallback(v8::Local<v8::Name> name, const v8::PropertyCal lbackInfo<v8::Value>& info)
217 { 259 {
218 if (!name->IsString()) 260 if (!name->IsString())
219 return; 261 return;
262 const AtomicString& propertyName = toCoreAtomicString(name.As<v8::String>()) ;
263
220 {% if getter.is_custom %} 264 {% if getter.is_custom %}
221 {{v8_class}}::namedPropertyGetterCustom(name, info); 265 {{v8_class}}::namedPropertyGetterCustom(propertyName, info);
222 {% else %} 266 {% else %}
223 {{cpp_class}}V8Internal::namedPropertyGetter(name, info); 267 {{cpp_class}}V8Internal::namedPropertyGetter(propertyName, info);
224 {% endif %} 268 {% endif %}
225 } 269 }
226 270
227 {% endif %} 271 {% endif %}
228 {% endblock %} 272 {% endblock %}
229 273
230 274
231 {##############################################################################} 275 {##############################################################################}
232 {% block named_property_setter %} 276 {% block named_property_setter %}
233 {% from 'utilities.cpp' import v8_value_to_local_cpp_value %} 277 {% from 'utilities.cpp' import v8_value_to_local_cpp_value %}
234 {% if named_property_setter and not named_property_setter.is_custom %} 278 {% if named_property_setter and not named_property_setter.is_custom %}
235 {% set setter = named_property_setter %} 279 {% set setter = named_property_setter %}
236 static void namedPropertySetter(v8::Local<v8::Name> name, v8::Local<v8::Value> v 8Value, const v8::PropertyCallbackInfo<v8::Value>& info) 280 static void namedPropertySetter(const AtomicString& name, v8::Local<v8::Value> v 8Value, const v8::PropertyCallbackInfo<v8::Value>& info)
237 { 281 {
238 auto nameString = name.As<v8::String>();
239 {% if setter.has_exception_state %} 282 {% if setter.has_exception_state %}
240 v8::String::Utf8Value namedProperty(nameString); 283 const CString& nameInUtf8 = name.utf8();
241 ExceptionState exceptionState(ExceptionState::SetterContext, *namedProperty, "{{interface_name}}", info.Holder(), info.GetIsolate()); 284 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::SetterConte xt, "{{interface_name}}", nameInUtf8.data());
242 {% endif %} 285 {% endif %}
286 {% if setter.is_call_with_script_state %}
287 ScriptState* scriptState = ScriptState::forReceiverObject(info);
288 {% endif %}
289
243 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); 290 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
244 {# v8_value_to_local_cpp_value('DOMString', 'nameString', 'propertyName') #}
245 V8StringResource<> propertyName(nameString);
246 if (!propertyName.prepare())
247 return;
248 {{v8_value_to_local_cpp_value(setter) | indent}} 291 {{v8_value_to_local_cpp_value(setter) | indent}}
249 {% if setter.has_type_checking_interface %} 292 {% if setter.has_type_checking_interface %}
250 {# Type checking for interface types (if interface not implemented, throw 293 {# Type checking for interface types (if interface not implemented, throw
251 TypeError), per http://www.w3.org/TR/WebIDL/#es-interface #} 294 TypeError), per http://www.w3.org/TR/WebIDL/#es-interface #}
252 if (!propertyValue{% if setter.is_nullable %} && !isUndefinedOrNull(v8Value) {% endif %}) { 295 if (!propertyValue{% if setter.is_nullable %} && !isUndefinedOrNull(v8Value) {% endif %}) {
253 exceptionState.throwTypeError("The provided value is not of type '{{sett er.idl_type}}'."); 296 exceptionState.throwTypeError("The provided value is not of type '{{sett er.idl_type}}'.");
254 return; 297 return;
255 } 298 }
256 {% endif %} 299 {% endif %}
257 {% if setter.is_call_with_script_state %} 300
258 ScriptState* scriptState = ScriptState::current(info.GetIsolate());
259 {% endif %}
260 {% set setter_name = setter.name or 'anonymousNamedSetter' %} 301 {% set setter_name = setter.name or 'anonymousNamedSetter' %}
261 {% set setter_arguments = ['propertyName', 'propertyValue'] %} 302 {% set setter_arguments = ['name', 'propertyValue'] %}
262 {% if setter.is_call_with_script_state %} 303 {% if setter.is_call_with_script_state %}
263 {% set setter_arguments = ['scriptState'] + setter_arguments %} 304 {% set setter_arguments = ['scriptState'] + setter_arguments %}
264 {% endif %} 305 {% endif %}
265 {% if setter.is_raises_exception %} 306 {% if setter.is_raises_exception %}
266 {% set setter_arguments = setter_arguments + ['exceptionState'] %} 307 {% set setter_arguments = setter_arguments + ['exceptionState'] %}
267 {% endif %} 308 {% endif %}
268 bool result = impl->{{setter_name}}({{setter_arguments | join(', ')}}); 309 bool result = impl->{{setter_name}}({{setter_arguments | join(', ')}});
269 {% if setter.is_raises_exception %} 310 {% if setter.is_raises_exception %}
270 if (exceptionState.hadException()) 311 if (exceptionState.hadException())
271 return; 312 return;
272 {% endif %} 313 {% endif %}
273 if (!result) 314 if (!result)
274 return; 315 return;
275 v8SetReturnValue(info, v8Value); 316 v8SetReturnValue(info, v8Value);
276 } 317 }
277 318
278 {% endif %} 319 {% endif %}
279 {% endblock %} 320 {% endblock %}
280 321
281 322
282 {##############################################################################} 323 {##############################################################################}
283 {% block named_property_setter_callback %} 324 {% block named_property_setter_callback %}
284 {% if named_property_setter %} 325 {% if named_property_setter %}
285 {% set setter = named_property_setter %} 326 {% set setter = named_property_setter %}
286 void namedPropertySetterCallback(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) 327 void namedPropertySetterCallback(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info)
287 { 328 {
288 if (!name->IsString()) 329 if (!name->IsString())
289 return; 330 return;
331 const AtomicString& propertyName = toCoreAtomicString(name.As<v8::String>()) ;
332
290 {% if setter.is_ce_reactions %} 333 {% if setter.is_ce_reactions %}
291 CEReactionsScope ceReactionsScope; 334 CEReactionsScope ceReactionsScope;
292 {% endif %} 335 {% endif %}
336
293 {% if setter.is_custom %} 337 {% if setter.is_custom %}
294 {{v8_class}}::namedPropertySetterCustom(name, v8Value, info); 338 {{v8_class}}::namedPropertySetterCustom(propertyName, v8Value, info);
295 {% else %} 339 {% else %}
296 {{cpp_class}}V8Internal::namedPropertySetter(name, v8Value, info); 340 {{cpp_class}}V8Internal::namedPropertySetter(propertyName, v8Value, info);
297 {% endif %} 341 {% endif %}
298 } 342 }
299 343
300 {% endif %} 344 {% endif %}
301 {% endblock %} 345 {% endblock %}
302 346
303 347
304 {##############################################################################} 348 {##############################################################################}
305 {% block named_property_query %} 349 {% block named_property_deleter %}
306 {% if named_property_getter and named_property_getter.is_enumerable and 350 {% if named_property_deleter and not named_property_deleter.is_custom %}
307 not named_property_getter.is_custom_property_query %} 351 {% set deleter = named_property_deleter %}
308 {% set getter = named_property_getter %} 352 static void namedPropertyDeleter(const AtomicString& name, const v8::PropertyCal lbackInfo<v8::Boolean>& info)
309 {# If there is an enumerator, there MUST be a query method to properly
310 communicate property attributes. #}
311 static void namedPropertyQuery(v8::Local<v8::Name> name, const v8::PropertyCallb ackInfo<v8::Integer>& info)
312 { 353 {
354 {% if deleter.is_raises_exception %}
355 const CString& nameInUtf8 = name.utf8();
356 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::DeletionCon text, "{{interface_name}}", nameInUtf8.data());
357 {% endif %}
358 {% if deleter.is_call_with_script_state %}
359 ScriptState* scriptState = ScriptState::forReceiverObject(info);
360 {% endif %}
361
313 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); 362 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
314 AtomicString propertyName = toCoreAtomicString(name.As<v8::String>()); 363
315 v8::String::Utf8Value namedProperty(name); 364 {% set deleter_name = deleter.name or 'anonymousNamedDeleter' %}
316 ExceptionState exceptionState(ExceptionState::GetterContext, *namedProperty, "{{interface_name}}", info.Holder(), info.GetIsolate()); 365 {% set deleter_arguments = ['name'] %}
317 {% set getter_arguments = ['propertyName', 'exceptionState'] %} 366 {% if deleter.is_call_with_script_state %}
318 {% if getter.is_call_with_script_state %} 367 {% set deleter_arguments = ['scriptState'] + deleter_arguments %}
319 ScriptState* scriptState = ScriptState::current(info.GetIsolate());
320 {% set getter_arguments = ['scriptState'] + getter_arguments %}
321 {% endif %} 368 {% endif %}
322 bool result = impl->namedPropertyQuery({{getter_arguments | join(', ')}}); 369 {% if deleter.is_raises_exception %}
370 {% set deleter_arguments = deleter_arguments + ['exceptionState'] %}
371 {% endif %}
372 DeleteResult result = impl->{{deleter_name}}({{deleter_arguments | join(', ' )}});
373 {% if deleter.is_raises_exception %}
323 if (exceptionState.hadException()) 374 if (exceptionState.hadException())
324 return; 375 return;
325 if (!result) 376 {% endif %}
377 if (result == DeleteUnknownProperty)
326 return; 378 return;
327 v8SetReturnValueInt(info, v8::None); 379 v8SetReturnValue(info, result == DeleteSuccess);
328 } 380 }
329 381
330 {% endif %} 382 {% endif %}
331 {% endblock %} 383 {% endblock %}
332 384
333 385
334 {##############################################################################} 386 {##############################################################################}
335 {% block named_property_query_callback %} 387 {% block named_property_deleter_callback %}
336 {% if named_property_getter and named_property_getter.is_enumerable %} 388 {% if named_property_deleter %}
337 {% set getter = named_property_getter %} 389 {% set deleter = named_property_deleter %}
338 void namedPropertyQueryCallback(v8::Local<v8::Name> name, const v8::PropertyCall backInfo<v8::Integer>& info) 390 void namedPropertyDeleterCallback(v8::Local<v8::Name> name, const v8::PropertyCa llbackInfo<v8::Boolean>& info)
339 { 391 {
340 if (!name->IsString()) 392 if (!name->IsString())
341 return; 393 return;
342 {% if getter.is_custom_property_query %} 394 const AtomicString& propertyName = toCoreAtomicString(name.As<v8::String>()) ;
343 {{v8_class}}::namedPropertyQueryCustom(name, info); 395
396 {% if deleter.is_ce_reactions %}
397 CEReactionsScope ceReactionsScope;
398 {% endif %}
399
400 {% if deleter.is_custom %}
401 {{v8_class}}::namedPropertyDeleterCustom(propertyName, info);
344 {% else %} 402 {% else %}
345 {{cpp_class}}V8Internal::namedPropertyQuery(name, info); 403 {{cpp_class}}V8Internal::namedPropertyDeleter(propertyName, info);
346 {% endif %} 404 {% endif %}
347 } 405 }
348 406
349 {% endif %} 407 {% endif %}
350 {% endblock %} 408 {% endblock %}
351 409
352 410
353 {##############################################################################} 411 {##############################################################################}
354 {% block named_property_deleter %} 412 {% block named_property_query %}
355 {% if named_property_deleter and not named_property_deleter.is_custom %} 413 {% if named_property_getter and named_property_getter.is_enumerable and
356 {% set deleter = named_property_deleter %} 414 not named_property_getter.is_custom_property_query %}
357 static void namedPropertyDeleter(v8::Local<v8::Name> name, const v8::PropertyCal lbackInfo<v8::Boolean>& info) 415 {% set getter = named_property_getter %}
416 {# If there is an enumerator, there MUST be a query method to properly
417 communicate property attributes. #}
418 static void namedPropertyQuery(const AtomicString& name, const v8::PropertyCallb ackInfo<v8::Integer>& info)
358 { 419 {
420 const CString& nameInUtf8 = name.utf8();
421 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::GetterConte xt, "{{interface_name}}", nameInUtf8.data());
422 {% if getter.is_call_with_script_state %}
423 ScriptState* scriptState = ScriptState::forReceiverObject(info);
424 {% endif %}
425
359 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); 426 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
360 AtomicString propertyName = toCoreAtomicString(name.As<v8::String>()); 427
361 {% if deleter.is_raises_exception %} 428 {% set getter_arguments = ['name', 'exceptionState'] %}
362 v8::String::Utf8Value namedProperty(name); 429 {% if getter.is_call_with_script_state %}
363 ExceptionState exceptionState(ExceptionState::DeletionContext, *namedPropert y, "{{interface_name}}", info.Holder(), info.GetIsolate()); 430 {% set getter_arguments = ['scriptState'] + getter_arguments %}
364 {% endif %} 431 {% endif %}
365 {% if deleter.is_call_with_script_state %} 432 bool result = impl->namedPropertyQuery({{getter_arguments | join(', ')}});
366 ScriptState* scriptState = ScriptState::current(info.GetIsolate()); 433 if (!result)
367 {% endif %}
368 {% set deleter_name = deleter.name or 'anonymousNamedDeleter' %}
369 {% set deleter_arguments = ['propertyName'] %}
370 {% if deleter.is_call_with_script_state %}
371 {% set deleter_arguments = ['scriptState'] + deleter_arguments %}
372 {% endif %}
373 {% if deleter.is_raises_exception %}
374 {% set deleter_arguments = deleter_arguments + ['exceptionState'] %}
375 {% endif %}
376 DeleteResult result = impl->{{deleter_name}}({{deleter_arguments | join(', ' )}});
377 {% if deleter.is_raises_exception %}
378 if (exceptionState.hadException())
379 return; 434 return;
380 {% endif %} 435 v8SetReturnValueInt(info, v8::None);
381 if (result != DeleteUnknownProperty)
382 return v8SetReturnValueBool(info, result == DeleteSuccess);
383 } 436 }
384 437
385 {% endif %} 438 {% endif %}
386 {% endblock %} 439 {% endblock %}
387 440
388 441
389 {##############################################################################} 442 {##############################################################################}
390 {% block named_property_deleter_callback %} 443 {% block named_property_query_callback %}
391 {% if named_property_deleter %} 444 {% if named_property_getter and named_property_getter.is_enumerable %}
392 {% set deleter = named_property_deleter %} 445 {% set getter = named_property_getter %}
393 void namedPropertyDeleterCallback(v8::Local<v8::Name> name, const v8::PropertyCa llbackInfo<v8::Boolean>& info) 446 void namedPropertyQueryCallback(v8::Local<v8::Name> name, const v8::PropertyCall backInfo<v8::Integer>& info)
394 { 447 {
395 if (!name->IsString()) 448 if (!name->IsString())
396 return; 449 return;
397 {% if deleter.is_ce_reactions %} 450 const AtomicString& propertyName = toCoreAtomicString(name.As<v8::String>()) ;
398 CEReactionsScope ceReactionsScope; 451
399 {% endif %} 452 {% if getter.is_custom_property_query %}
400 {% if deleter.is_custom %} 453 {{v8_class}}::namedPropertyQueryCustom(propertyName, info);
401 {{v8_class}}::namedPropertyDeleterCustom(name, info);
402 {% else %} 454 {% else %}
403 {{cpp_class}}V8Internal::namedPropertyDeleter(name, info); 455 {{cpp_class}}V8Internal::namedPropertyQuery(propertyName, info);
404 {% endif %} 456 {% endif %}
405 } 457 }
406 458
407 {% endif %} 459 {% endif %}
408 {% endblock %} 460 {% endblock %}
409 461
410 462
411 {##############################################################################} 463 {##############################################################################}
412 {% block named_property_enumerator %} 464 {% block named_property_enumerator %}
413 {% if named_property_getter and named_property_getter.is_enumerable and 465 {% if named_property_getter and named_property_getter.is_enumerable and
414 not named_property_getter.is_custom_property_enumerator %} 466 not named_property_getter.is_custom_property_enumerator %}
415 static void namedPropertyEnumerator(const v8::PropertyCallbackInfo<v8::Array>& i nfo) 467 static void namedPropertyEnumerator(const v8::PropertyCallbackInfo<v8::Array>& i nfo)
416 { 468 {
469 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::Enumeration Context, "{{interface_name}}");
470
417 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); 471 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
472
418 Vector<String> names; 473 Vector<String> names;
419 ExceptionState exceptionState(ExceptionState::EnumerationContext, "{{interfa ce_name}}", info.Holder(), info.GetIsolate());
420 impl->namedPropertyEnumerator(names, exceptionState); 474 impl->namedPropertyEnumerator(names, exceptionState);
421 if (exceptionState.hadException()) 475 if (exceptionState.hadException())
422 return; 476 return;
423 v8::Local<v8::Array> v8names = v8::Array::New(info.GetIsolate(), names.size( )); 477 v8SetReturnValue(info, toV8(names, info.Holder(), info.GetIsolate()).As<v8:: Array>());
424 for (size_t i = 0; i < names.size(); ++i) {
425 if (!v8CallBoolean(v8names->CreateDataProperty(info.GetIsolate()->GetCur rentContext(), i, v8String(info.GetIsolate(), names[i]))))
426 return;
427 }
428 v8SetReturnValue(info, v8names);
429 } 478 }
430 479
431 {% endif %} 480 {% endif %}
432 {% endblock %} 481 {% endblock %}
433 482
434 483
435 {##############################################################################} 484 {##############################################################################}
436 {% block named_property_enumerator_callback %} 485 {% block named_property_enumerator_callback %}
437 {% if named_property_getter and named_property_getter.is_enumerable %} 486 {% if named_property_getter and named_property_getter.is_enumerable %}
438 {% set getter = named_property_getter %} 487 {% set getter = named_property_getter %}
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 V8DOMConfiguration::installAttribute(isolate, world, {{instance_template}}, {{pr ototype_template}}, {{method.name}}OriginSafeAttributeConfiguration); 701 V8DOMConfiguration::installAttribute(isolate, world, {{instance_template}}, {{pr ototype_template}}, {{method.name}}OriginSafeAttributeConfiguration);
653 {%- endmacro %} 702 {%- endmacro %}
654 703
655 704
656 {##############################################################################} 705 {##############################################################################}
657 {% macro install_indexed_property_handler(target) %} 706 {% macro install_indexed_property_handler(target) %}
658 {% set indexed_property_getter_callback = 707 {% set indexed_property_getter_callback =
659 '%sV8Internal::indexedPropertyGetterCallback' % cpp_class %} 708 '%sV8Internal::indexedPropertyGetterCallback' % cpp_class %}
660 {% set indexed_property_setter_callback = 709 {% set indexed_property_setter_callback =
661 '%sV8Internal::indexedPropertySetterCallback' % cpp_class 710 '%sV8Internal::indexedPropertySetterCallback' % cpp_class
662 if indexed_property_setter else '0' %} 711 if indexed_property_setter or named_property_setter else '0' %}
663 {% set indexed_property_query_callback = '0' %}{# Unused #} 712 {% set indexed_property_query_callback = '0' %}{# Unused #}
664 {% set indexed_property_deleter_callback = 713 {% set indexed_property_deleter_callback =
665 '%sV8Internal::indexedPropertyDeleterCallback' % cpp_class 714 '%sV8Internal::indexedPropertyDeleterCallback' % cpp_class
666 if indexed_property_deleter else '0' %} 715 if indexed_property_deleter or named_property_deleter else '0' %}
667 {% set indexed_property_enumerator_callback = 716 {% set indexed_property_enumerator_callback =
668 'indexedPropertyEnumerator<%s>' % cpp_class 717 'indexedPropertyEnumerator<%s>' % cpp_class
669 if indexed_property_getter.is_enumerable else '0' %} 718 if indexed_property_getter.is_enumerable else '0' %}
670 {% set property_handler_flags = 719 {% set property_handler_flags =
671 'v8::PropertyHandlerFlags::kAllCanRead' 720 'v8::PropertyHandlerFlags::kAllCanRead'
672 if indexed_property_getter.do_not_check_security 721 if indexed_property_getter.do_not_check_security
673 else 'v8::PropertyHandlerFlags::kNone' %} 722 else 'v8::PropertyHandlerFlags::kNone' %}
674 v8::IndexedPropertyHandlerConfiguration indexedPropertyHandlerConfig({{indexed_p roperty_getter_callback}}, {{indexed_property_setter_callback}}, {{indexed_prope rty_query_callback}}, {{indexed_property_deleter_callback}}, {{indexed_property_ enumerator_callback}}, v8::Local<v8::Value>(), {{property_handler_flags}}); 723 v8::IndexedPropertyHandlerConfiguration indexedPropertyHandlerConfig({{indexed_p roperty_getter_callback}}, {{indexed_property_setter_callback}}, {{indexed_prope rty_query_callback}}, {{indexed_property_deleter_callback}}, {{indexed_property_ enumerator_callback}}, v8::Local<v8::Value>(), {{property_handler_flags}});
675 {{target}}->SetHandler(indexedPropertyHandlerConfig); 724 {{target}}->SetHandler(indexedPropertyHandlerConfig);
676 {%- endmacro %} 725 {%- endmacro %}
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
934 983
935 {% for method in methods if method.overloads and method.overloads.has_partial_ov erloads %} 984 {% for method in methods if method.overloads and method.overloads.has_partial_ov erloads %}
936 void {{v8_class}}::register{{method.name | blink_capitalize}}MethodForPartialInt erface(void (*method)(const v8::FunctionCallbackInfo<v8::Value>&)) 985 void {{v8_class}}::register{{method.name | blink_capitalize}}MethodForPartialInt erface(void (*method)(const v8::FunctionCallbackInfo<v8::Value>&))
937 { 986 {
938 {{cpp_class}}V8Internal::{{method.name}}MethodForPartialInterface = method; 987 {{cpp_class}}V8Internal::{{method.name}}MethodForPartialInterface = method;
939 } 988 }
940 989
941 {% endfor %} 990 {% endfor %}
942 {% endif %} 991 {% endif %}
943 {% endblock %} 992 {% endblock %}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698