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

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

Issue 2272613003: binding: Retires ExceptionState::throwIfNeeded(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Synced. 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 {% from 'utilities.cpp' import declare_enum_validation_variable, v8_value_to_loc al_cpp_value %} 1 {% from 'utilities.cpp' import declare_enum_validation_variable, v8_value_to_loc al_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 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 {% endif %} 70 {% endif %}
71 {% if attribute.is_implemented_in_private_script %} 71 {% if attribute.is_implemented_in_private_script %}
72 {{attribute.cpp_type}} result{{attribute.cpp_type_initializer}}; 72 {{attribute.cpp_type}} result{{attribute.cpp_type_initializer}};
73 if (!{{attribute.cpp_value_original}}) 73 if (!{{attribute.cpp_value_original}})
74 return; 74 return;
75 {% elif attribute.cpp_value_original %} 75 {% elif attribute.cpp_value_original %}
76 {{attribute.cpp_type}} {{attribute.cpp_value}}({{attribute.cpp_value_origina l}}); 76 {{attribute.cpp_type}} {{attribute.cpp_value}}({{attribute.cpp_value_origina l}});
77 {% endif %} 77 {% endif %}
78 {# Checks #} 78 {# Checks #}
79 {% if attribute.is_getter_raises_exception %} 79 {% if attribute.is_getter_raises_exception %}
80 if (UNLIKELY(exceptionState.throwIfNeeded())) 80 if (UNLIKELY(exceptionState.hadException()))
81 return; 81 return;
82 {% endif %} 82 {% endif %}
83 {# Security checks #} 83 {# Security checks #}
84 {% if not attribute.is_data_type_property %} 84 {% if not attribute.is_data_type_property %}
85 {% if attribute.is_check_security_for_receiver %} 85 {% if attribute.is_check_security_for_receiver %}
86 if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate() ), impl, exceptionState)) { 86 if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate() ), impl, exceptionState)) {
87 v8SetReturnValueNull(info); 87 v8SetReturnValueNull(info);
88 exceptionState.throwIfNeeded();
89 return; 88 return;
90 } 89 }
91 {% endif %} 90 {% endif %}
92 {% endif %} 91 {% endif %}
93 {% if attribute.is_check_security_for_return_value %} 92 {% if attribute.is_check_security_for_return_value %}
94 if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate() ), {{attribute.cpp_value}}, exceptionState)) { 93 if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate() ), {{attribute.cpp_value}}, exceptionState)) {
95 v8SetReturnValueNull(info); 94 v8SetReturnValueNull(info);
96 exceptionState.throwIfNeeded();
97 return; 95 return;
98 } 96 }
99 {% endif %} 97 {% endif %}
100 {% if attribute.reflect_only %} 98 {% if attribute.reflect_only %}
101 {{release_only_check(attribute.reflect_only, attribute.reflect_missing, 99 {{release_only_check(attribute.reflect_only, attribute.reflect_missing,
102 attribute.reflect_invalid, attribute.reflect_empty, 100 attribute.reflect_invalid, attribute.reflect_empty,
103 attribute.cpp_value) 101 attribute.cpp_value)
104 | indent}} 102 | indent}}
105 {% endif %} 103 {% endif %}
106 {% if attribute.is_explicit_nullable %} 104 {% if attribute.is_explicit_nullable %}
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 not attribute.constructor_type %} 270 not attribute.constructor_type %}
273 {{cpp_class}}* impl = {{v8_class}}::toImpl(holder); 271 {{cpp_class}}* impl = {{v8_class}}::toImpl(holder);
274 {% endif %} 272 {% endif %}
275 {# Security checks #} 273 {# Security checks #}
276 {% if not attribute.is_replaceable and 274 {% if not attribute.is_replaceable and
277 not attribute.constructor_type %} 275 not attribute.constructor_type %}
278 {% if not attribute.is_data_type_property %} 276 {% if not attribute.is_data_type_property %}
279 {% if attribute.is_check_security_for_receiver %} 277 {% if attribute.is_check_security_for_receiver %}
280 if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate() ), impl, exceptionState)) { 278 if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate() ), impl, exceptionState)) {
281 v8SetReturnValue(info, v8Value); 279 v8SetReturnValue(info, v8Value);
282 exceptionState.throwIfNeeded();
283 return; 280 return;
284 } 281 }
285 {% endif %} 282 {% endif %}
286 {% endif %} 283 {% endif %}
287 {% if attribute.is_check_security_for_return_value %} 284 {% if attribute.is_check_security_for_return_value %}
288 #error Attribute setter with the security check for the return value is not supp orted. 285 #error Attribute setter with the security check for the return value is not supp orted.
289 {% endif %} 286 {% endif %}
290 {% endif %}{# not attribute.is_replaceable and 287 {% endif %}{# not attribute.is_replaceable and
291 not attribute.constructor_type #} 288 not attribute.constructor_type #}
292 {# Convert JS value to C++ value #} 289 {# Convert JS value to C++ value #}
293 {% if attribute.idl_type != 'EventHandler' %} 290 {% if attribute.idl_type != 'EventHandler' %}
294 {% if v8_value_to_local_cpp_value(attribute) %} 291 {% if v8_value_to_local_cpp_value(attribute) %}
295 {{v8_value_to_local_cpp_value(attribute) | indent}} 292 {{v8_value_to_local_cpp_value(attribute) | indent}}
296 {% endif %} 293 {% endif %}
297 {% elif not is_node %}{# EventHandler hack #} 294 {% elif not is_node %}{# EventHandler hack #}
298 moveEventListenerToNewWrapper(info.GetIsolate(), holder, {{attribute.event_h andler_getter_expression}}, v8Value, {{v8_class}}::eventListenerCacheIndex); 295 moveEventListenerToNewWrapper(info.GetIsolate(), holder, {{attribute.event_h andler_getter_expression}}, v8Value, {{v8_class}}::eventListenerCacheIndex);
299 {% endif %} 296 {% endif %}
300 {# Type checking, possibly throw a TypeError, per: 297 {# Type checking, possibly throw a TypeError, per:
301 http://www.w3.org/TR/WebIDL/#es-type-mapping #} 298 http://www.w3.org/TR/WebIDL/#es-type-mapping #}
302 {% if attribute.has_type_checking_interface %} 299 {% if attribute.has_type_checking_interface %}
303 {# Type checking for interface types (if interface not implemented, throw 300 {# Type checking for interface types (if interface not implemented, throw
304 TypeError), per http://www.w3.org/TR/WebIDL/#es-interface #} 301 TypeError), per http://www.w3.org/TR/WebIDL/#es-interface #}
305 if (!cppValue{% if attribute.is_nullable %} && !isUndefinedOrNull(v8Value){% endif %}) { 302 if (!cppValue{% if attribute.is_nullable %} && !isUndefinedOrNull(v8Value){% endif %}) {
306 exceptionState.throwTypeError("The provided value is not of type '{{attr ibute.idl_type}}'."); 303 exceptionState.throwTypeError("The provided value is not of type '{{attr ibute.idl_type}}'.");
307 exceptionState.throwIfNeeded();
308 return; 304 return;
309 } 305 }
310 {% elif attribute.enum_values %} 306 {% elif attribute.enum_values %}
311 {# Setter ignores invalid enum values: 307 {# Setter ignores invalid enum values:
312 http://www.w3.org/TR/WebIDL/#idl-enums #} 308 http://www.w3.org/TR/WebIDL/#idl-enums #}
313 {% if not attribute.has_setter_exception_state %} 309 {% if not attribute.has_setter_exception_state %}
314 NonThrowableExceptionState exceptionState; 310 NonThrowableExceptionState exceptionState;
315 {% endif %} 311 {% endif %}
316 {{declare_enum_validation_variable(attribute.enum_values) | indent}} 312 {{declare_enum_validation_variable(attribute.enum_values) | indent}}
317 if (!isValidEnum(cppValue, validValues, WTF_ARRAY_LENGTH(validValues), "{{at tribute.enum_type}}", exceptionState)) { 313 if (!isValidEnum(cppValue, validValues, WTF_ARRAY_LENGTH(validValues), "{{at tribute.enum_type}}", exceptionState)) {
318 currentExecutionContext(info.GetIsolate())->addConsoleMessage(ConsoleMes sage::create(JSMessageSource, WarningMessageLevel, exceptionState.message())); 314 currentExecutionContext(info.GetIsolate())->addConsoleMessage(ConsoleMes sage::create(JSMessageSource, WarningMessageLevel, exceptionState.message()));
315 // http://heycam.github.io/webidl/#idl-enums
316 // Assignment of an invalid string value to an attribute is ignored,
317 // while passing such a value as an operation argument results in
318 // an exception being thrown.
319 exceptionState.clearException();
319 return; 320 return;
320 } 321 }
321 {% endif %} 322 {% endif %}
322 {# Pre-set context #} 323 {# Pre-set context #}
323 {% if attribute.is_custom_element_callbacks or 324 {% if attribute.is_custom_element_callbacks or
324 (attribute.is_reflect and 325 (attribute.is_reflect and
325 not(attribute.idl_type == 'DOMString' and is_node)) %} 326 not(attribute.idl_type == 'DOMString' and is_node)) %}
326 {# Skip on compact node DOMString getters #} 327 {# Skip on compact node DOMString getters #}
327 V0CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; 328 V0CustomElementProcessingStack::CallbackDeliveryScope deliveryScope;
328 {% endif %} 329 {% endif %}
329 {% if attribute.is_call_with_execution_context or 330 {% if attribute.is_call_with_execution_context or
330 attribute.is_setter_call_with_execution_context %} 331 attribute.is_setter_call_with_execution_context %}
331 ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate ()); 332 ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate ());
332 {% endif %} 333 {% endif %}
333 {% if attribute.is_call_with_script_state %} 334 {% if attribute.is_call_with_script_state %}
334 {% if attribute.is_static %} 335 {% if attribute.is_static %}
335 ScriptState* scriptState = ScriptState::forFunctionObject(info); 336 ScriptState* scriptState = ScriptState::forFunctionObject(info);
336 {% else %} 337 {% else %}
337 ScriptState* scriptState = ScriptState::forReceiverObject(info); 338 ScriptState* scriptState = ScriptState::forReceiverObject(info);
338 {% endif %} 339 {% endif %}
339 {% endif %} 340 {% endif %}
340 {# Set #} 341 {# Set #}
341 {% if attribute.cpp_setter %} 342 {% if attribute.cpp_setter %}
342 {{attribute.cpp_setter}}; 343 {{attribute.cpp_setter}};
343 {% endif %} 344 {% endif %}
344 {# Post-set #} 345 {# Post-set #}
345 {% if attribute.is_setter_raises_exception %}
346 exceptionState.throwIfNeeded();
347 {% endif %}
348 {% if attribute.cached_attribute_validation_method %} 346 {% if attribute.cached_attribute_validation_method %}
349 V8HiddenValue::deleteHiddenValue(ScriptState::current(info.GetIsolate()), ho lder, v8AtomicString(info.GetIsolate(), "{{attribute.name}}")); // Invalidate th e cached value. 347 V8HiddenValue::deleteHiddenValue(ScriptState::current(info.GetIsolate()), ho lder, v8AtomicString(info.GetIsolate(), "{{attribute.name}}")); // Invalidate th e cached value.
350 {% endif %} 348 {% endif %}
351 } 349 }
352 {% endmacro %} 350 {% endmacro %}
353 351
354 352
355 {##############################################################################} 353 {##############################################################################}
356 {% macro attribute_setter_callback(attribute, world_suffix) %} 354 {% macro attribute_setter_callback(attribute, world_suffix) %}
357 static void {{attribute.name}}AttributeSetterCallback{{world_suffix}}( 355 static void {{attribute.name}}AttributeSetterCallback{{world_suffix}}(
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 setter_callback_for_main_world, 497 setter_callback_for_main_world,
500 wrapper_type_info, 498 wrapper_type_info,
501 access_control, 499 access_control,
502 property_attribute, 500 property_attribute,
503 only_exposed_to_private_script, 501 only_exposed_to_private_script,
504 property_location(attribute), 502 property_location(attribute),
505 holder_check, 503 holder_check,
506 ] %} 504 ] %}
507 {{'{'}}{{attribute_configuration_list | join(', ')}}{{'}'}} 505 {{'{'}}{{attribute_configuration_list | join(', ')}}{{'}'}}
508 {%- endmacro %} 506 {%- endmacro %}
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/bindings/scripts/v8_types.py ('k') | third_party/WebKit/Source/bindings/templates/interface.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698