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

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

Issue 1531443003: [bindings] Implement an ExperimentEnabled IDL extended attribute. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Less hacky and less lines. Created 5 years 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 'conversions.cpp' import declare_enum_validation_variable, v8_value_to_l ocal_cpp_value %} 1 {% from 'conversions.cpp' import declare_enum_validation_variable, v8_value_to_l ocal_cpp_value %}
2 2
3 3
4 {##############################################################################} 4 {##############################################################################}
5 {% macro attribute_getter(attribute, world_suffix) %} 5 {% macro attribute_getter(attribute, world_suffix) %}
6 {% filter conditional(attribute.conditional_string) %} 6 {% filter conditional(attribute.conditional_string) %}
7 static void {{attribute.name}}AttributeGetter{{world_suffix}}( 7 static void {{attribute.name}}AttributeGetter{{world_suffix}}(
8 {%- if attribute.is_data_type_property %} 8 {%- if attribute.is_data_type_property %}
9 const v8::PropertyCallbackInfo<v8::Value>& info 9 const v8::PropertyCallbackInfo<v8::Value>& info
10 {%- else %} 10 {%- else %}
11 const v8::FunctionCallbackInfo<v8::Value>& info 11 const v8::FunctionCallbackInfo<v8::Value>& info
12 {%- endif %}) 12 {%- endif %})
13 { 13 {
14 {% if attribute.api_experiment_name %}
15 String errorMessage;
16 if (!Experiments::isApiEnabled(currentExecutionContext(info.GetIsolate()), " {{ attribute.api_experiment_name }}", errorMessage)) {
17 v8SetReturnValue(info, v8::Undefined(info.GetIsolate()));
18 Document& document = *toDocument(currentExecutionContext(info.GetIsolate ()));
19 document.addConsoleMessage(ConsoleMessage::create(JSMessageSource, Error MessageLevel, errorMessage));
20 return;
21 }
22 {% endif %}
14 {% if attribute.is_reflect and not attribute.is_url 23 {% if attribute.is_reflect and not attribute.is_url
15 and attribute.idl_type == 'DOMString' and is_node 24 and attribute.idl_type == 'DOMString' and is_node
16 and not attribute.is_implemented_in_private_script %} 25 and not attribute.is_implemented_in_private_script %}
17 {% set cpp_class, v8_class = 'Element', 'V8Element' %} 26 {% set cpp_class, v8_class = 'Element', 'V8Element' %}
18 {% endif %} 27 {% endif %}
19 {# holder #} 28 {# holder #}
20 {% if not attribute.is_static %} 29 {% if not attribute.is_static %}
21 {% if attribute.is_lenient_this %} 30 {% if attribute.is_lenient_this %}
22 v8::Local<v8::Object> holder = {{v8_class}}::findInstanceInPrototypeChain(in fo.This(), info.GetIsolate()); 31 v8::Local<v8::Object> holder = {{v8_class}}::findInstanceInPrototypeChain(in fo.This(), info.GetIsolate());
23 if (holder.IsEmpty()) 32 if (holder.IsEmpty())
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 } 209 }
201 {% endfilter %} 210 {% endfilter %}
202 {% endmacro %} 211 {% endmacro %}
203 212
204 213
205 {##############################################################################} 214 {##############################################################################}
206 {% macro constructor_getter_callback(attribute, world_suffix) %} 215 {% macro constructor_getter_callback(attribute, world_suffix) %}
207 {% filter conditional(attribute.conditional_string) %} 216 {% filter conditional(attribute.conditional_string) %}
208 static void {{attribute.name}}ConstructorGetterCallback{{world_suffix}}(v8::Loca l<v8::Name> property, const v8::PropertyCallbackInfo<v8::Value>& info) 217 static void {{attribute.name}}ConstructorGetterCallback{{world_suffix}}(v8::Loca l<v8::Name> property, const v8::PropertyCallbackInfo<v8::Value>& info)
209 { 218 {
219 {% if attribute.api_experiment_name %}
Daniel Nishi 2015/12/16 21:42:03 I've replaced the is%sExperimentallyEnabled with t
220 String errorMessage;
221 if (!Experiments::isApiEnabled(currentExecutionContext(info.GetIsolate()), " {{ attribute.api_experiment_name }}", errorMessage)) {
222 v8SetReturnValue(info, v8::Undefined(info.GetIsolate()));
223 Document& document = *toDocument(currentExecutionContext(info.GetIsolate ()));
224 document.addConsoleMessage(ConsoleMessage::create(JSMessageSource, Error MessageLevel, errorMessage));
225 return;
226 }
227 {% endif %}
210 TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); 228 TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter");
211 {% if attribute.deprecate_as %} 229 {% if attribute.deprecate_as %}
212 UseCounter::countDeprecationIfNotPrivateScript(info.GetIsolate(), callingExe cutionContext(info.GetIsolate()), UseCounter::{{attribute.deprecate_as}}); 230 UseCounter::countDeprecationIfNotPrivateScript(info.GetIsolate(), callingExe cutionContext(info.GetIsolate()), UseCounter::{{attribute.deprecate_as}});
213 {% endif %} 231 {% endif %}
214 {% if attribute.measure_as %} 232 {% if attribute.measure_as %}
215 UseCounter::countIfNotPrivateScript(info.GetIsolate(), callingExecutionConte xt(info.GetIsolate()), UseCounter::{{attribute.measure_as('ConstructorGetter')}} ); 233 UseCounter::countIfNotPrivateScript(info.GetIsolate(), callingExecutionConte xt(info.GetIsolate()), UseCounter::{{attribute.measure_as('ConstructorGetter')}} );
216 {% endif %} 234 {% endif %}
217 v8ConstructorAttributeGetter(property, info); 235 v8ConstructorAttributeGetter(property, info);
218 TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); 236 TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution");
219 } 237 }
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 } 478 }
461 {% endmacro %} 479 {% endmacro %}
462 480
463 481
464 {##############################################################################} 482 {##############################################################################}
465 {% macro attribute_configuration(attribute) %} 483 {% macro attribute_configuration(attribute) %}
466 {% from 'conversions.cpp' import property_location %} 484 {% from 'conversions.cpp' import property_location %}
467 {% if attribute.constructor_type %} 485 {% if attribute.constructor_type %}
468 {% set getter_callback = 486 {% set getter_callback =
469 '%sV8Internal::%sConstructorGetterCallback' % (cpp_class_or_partial, attr ibute.name) 487 '%sV8Internal::%sConstructorGetterCallback' % (cpp_class_or_partial, attr ibute.name)
470 if attribute.needs_constructor_getter_callback else 488 if attribute.needs_constructor_getter_callback else 'v8ConstructorAttribu teGetter' %}
471 'v8ConstructorAttributeGetter' %}
472 {% set setter_callback = 489 {% set setter_callback =
473 '%sV8Internal::%sAttributeSetterCallback' % (cpp_class_or_partial, attrib ute.name) 490 '%sV8Internal::%sAttributeSetterCallback' % (cpp_class_or_partial, attrib ute.name)
474 if attribute.needs_constructor_setter_callback else 491 if attribute.needs_constructor_setter_callback else
475 '%sV8Internal::%sConstructorAttributeSetterCallback' % (cpp_class_or_part ial, cpp_class) %} 492 '%sV8Internal::%sConstructorAttributeSetterCallback' % (cpp_class_or_part ial, cpp_class) %}
476 {% else %}{# regular attributes #} 493 {% else %}{# regular attributes #}
477 {% set getter_callback = '%sV8Internal::%sAttributeGetterCallback' % 494 {% set getter_callback = '%sV8Internal::%sAttributeGetterCallback' %
478 (cpp_class_or_partial, attribute.name) %} 495 (cpp_class_or_partial, attribute.name) %}
479 {% set setter_callback = '%sV8Internal::%sAttributeSetterCallback' % 496 {% set setter_callback = '%sV8Internal::%sAttributeSetterCallback' %
480 (cpp_class_or_partial, attribute.name) 497 (cpp_class_or_partial, attribute.name)
481 if attribute.has_setter else '0' %} 498 if attribute.has_setter else '0' %}
(...skipping 30 matching lines...) Expand all
512 setter_callback_for_main_world, 529 setter_callback_for_main_world,
513 wrapper_type_info, 530 wrapper_type_info,
514 access_control, 531 access_control,
515 property_attribute, 532 property_attribute,
516 only_exposed_to_private_script, 533 only_exposed_to_private_script,
517 property_location(attribute), 534 property_location(attribute),
518 holder_check, 535 holder_check,
519 ] %} 536 ] %}
520 {{'{'}}{{attribute_configuration_list | join(', ')}}{{'}'}} 537 {{'{'}}{{attribute_configuration_list | join(', ')}}{{'}'}}
521 {%- endmacro %} 538 {%- endmacro %}
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/bindings/scripts/v8_utilities.py ('k') | third_party/WebKit/Source/bindings/templates/constants.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698