Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 {% filter format_blink_cpp_source_code %} | 1 {% filter format_blink_cpp_source_code %} |
| 2 | 2 |
| 3 {% include 'copyright_block.txt' %} | 3 {% include 'copyright_block.txt' %} |
| 4 #include "{{v8_class_or_partial}}.h" | 4 #include "{{v8_class_or_partial}}.h" |
| 5 | 5 |
| 6 {% for filename in cpp_includes if filename != '%s.h' % cpp_class_or_partial %} | 6 {% for filename in cpp_includes if filename != '%s.h' % cpp_class_or_partial %} |
| 7 #include "{{filename}}" | 7 #include "{{filename}}" |
| 8 {% endfor %} | 8 {% endfor %} |
| 9 | 9 |
| 10 namespace blink { | 10 namespace blink { |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 110 {% endif %} | 110 {% endif %} |
| 111 {% if attribute.has_setter %} | 111 {% if attribute.has_setter %} |
| 112 {% if not attribute.has_custom_setter %} | 112 {% if not attribute.has_custom_setter %} |
| 113 {{attribute_setter(attribute, world_suffix)}} | 113 {{attribute_setter(attribute, world_suffix)}} |
| 114 {% endif %} | 114 {% endif %} |
| 115 {{attribute_setter_callback(attribute, world_suffix)}} | 115 {{attribute_setter_callback(attribute, world_suffix)}} |
| 116 {% endif %} | 116 {% endif %} |
| 117 {% endfor %} | 117 {% endfor %} |
| 118 {% endfor %} | 118 {% endfor %} |
| 119 {##############################################################################} | 119 {##############################################################################} |
| 120 {% block security_check_functions %} | |
| 121 {% if has_access_check_callbacks and not is_partial %} | |
| 122 bool securityCheck(v8::Local<v8::Context> accessingContext, v8::Local<v8::Object > accessedObject, v8::Local<v8::Value> data) | |
| 123 { | |
| 124 {% if interface_name == 'Window' %} | |
| 125 v8::Isolate* isolate = v8::Isolate::GetCurrent(); | |
| 126 v8::Local<v8::Object> window = V8Window::findInstanceInPrototypeChain(access edObject, isolate); | |
| 127 if (window.IsEmpty()) | |
| 128 return false; // the frame is gone. | |
| 129 | |
| 130 const DOMWindow* targetWindow = V8Window::toImpl(window); | |
| 131 return BindingSecurity::shouldAllowAccessTo(toLocalDOMWindow(toDOMWindow(acc essingContext)), targetWindow, BindingSecurity::ErrorReportOption::DoNotReport); | |
| 132 {% else %}{# if interface_name == 'Window' #} | |
| 133 {# Not 'Window' means it\'s Location. #} | |
| 134 {{cpp_class}}* impl = {{v8_class}}::toImpl(accessedObject); | |
| 135 return BindingSecurity::shouldAllowAccessTo(toLocalDOMWindow(toDOMWindow(acc essingContext)), impl, BindingSecurity::ErrorReportOption::DoNotReport); | |
| 136 {% endif %}{# if interface_name == 'Window' #} | |
| 137 } | |
| 138 | |
| 139 {% endif %} | |
| 140 {% endblock %} | |
| 141 {##############################################################################} | |
| 142 {# Methods #} | 120 {# Methods #} |
| 143 {% from 'methods.cpp.tmpl' import generate_method, overload_resolution_method, | 121 {% from 'methods.cpp.tmpl' import generate_method, overload_resolution_method, |
| 144 method_callback, origin_safe_method_getter, generate_constructor, | 122 method_callback, origin_safe_method_getter, generate_constructor, |
| 145 method_implemented_in_private_script, generate_post_message_impl, | 123 method_implemented_in_private_script, generate_post_message_impl, |
| 146 runtime_determined_length_method, runtime_determined_maxarg_method | 124 runtime_determined_length_method, runtime_determined_maxarg_method |
| 147 with context %} | 125 with context %} |
| 148 {% for method in methods if method.should_be_exposed_to_script %} | 126 {% for method in methods if method.should_be_exposed_to_script %} |
| 149 {% for world_suffix in method.world_suffixes %} | 127 {% for world_suffix in method.world_suffixes %} |
| 150 {% if not method.is_custom and not method.is_post_message and method.visible %} | 128 {% if not method.is_custom and not method.is_post_message and method.visible %} |
| 151 {{generate_method(method, world_suffix)}} | 129 {{generate_method(method, world_suffix)}} |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 199 {% block named_property_query %}{% endblock %} | 177 {% block named_property_query %}{% endblock %} |
| 200 {% block named_property_query_callback %}{% endblock %} | 178 {% block named_property_query_callback %}{% endblock %} |
| 201 {% block named_property_enumerator %}{% endblock %} | 179 {% block named_property_enumerator %}{% endblock %} |
| 202 {% block named_property_enumerator_callback %}{% endblock %} | 180 {% block named_property_enumerator_callback %}{% endblock %} |
| 203 {% block indexed_property_getter %}{% endblock %} | 181 {% block indexed_property_getter %}{% endblock %} |
| 204 {% block indexed_property_getter_callback %}{% endblock %} | 182 {% block indexed_property_getter_callback %}{% endblock %} |
| 205 {% block indexed_property_setter %}{% endblock %} | 183 {% block indexed_property_setter %}{% endblock %} |
| 206 {% block indexed_property_setter_callback %}{% endblock %} | 184 {% block indexed_property_setter_callback %}{% endblock %} |
| 207 {% block indexed_property_deleter %}{% endblock %} | 185 {% block indexed_property_deleter %}{% endblock %} |
| 208 {% block indexed_property_deleter_callback %}{% endblock %} | 186 {% block indexed_property_deleter_callback %}{% endblock %} |
| 187 {##############################################################################} | |
| 188 {% block security_check_functions %} | |
| 189 {% if has_access_check_callbacks and not is_partial %} | |
| 190 bool securityCheck(v8::Local<v8::Context> accessingContext, v8::Local<v8::Object > accessedObject, v8::Local<v8::Value> data) | |
| 191 { | |
| 192 {% if interface_name == 'Window' %} | |
| 193 v8::Isolate* isolate = v8::Isolate::GetCurrent(); | |
| 194 v8::Local<v8::Object> window = V8Window::findInstanceInPrototypeChain(access edObject, isolate); | |
| 195 if (window.IsEmpty()) | |
| 196 return false; // the frame is gone. | |
| 197 | |
| 198 const DOMWindow* targetWindow = V8Window::toImpl(window); | |
| 199 return BindingSecurity::shouldAllowAccessTo(toLocalDOMWindow(toDOMWindow(acc essingContext)), targetWindow, BindingSecurity::ErrorReportOption::DoNotReport); | |
| 200 {% else %}{# if interface_name == 'Window' #} | |
| 201 {# Not 'Window' means it\'s Location. #} | |
| 202 {{cpp_class}}* impl = {{v8_class}}::toImpl(accessedObject); | |
| 203 return BindingSecurity::shouldAllowAccessTo(toLocalDOMWindow(toDOMWindow(acc essingContext)), impl, BindingSecurity::ErrorReportOption::DoNotReport); | |
| 204 {% endif %}{# if interface_name == 'Window' #} | |
| 205 } | |
| 206 | |
| 207 void crossOriginNamedGetter(v8::Local<v8::Name> name, const v8::PropertyCallback Info<v8::Value>& info) | |
| 208 { | |
| 209 {# TODO(dcheng): This needs to dispatch to methods / properties, not just the na med getter. #} | |
| 210 {% if named_property_getter and named_property_getter.is_cross_origin %} | |
| 211 if (!name->IsString()) | |
| 212 return; | |
| 213 const AtomicString& propertyName = toCoreAtomicString(name.As<v8::String>()) ; | |
| 214 | |
| 215 // TODO(dcheng): Can we / should we use AtomicString here? That means using DEFINE_STATIC_LOCAL here. | |
|
dcheng
2016/10/24 07:56:38
This is a easy change, but there's no precedent fo
| |
| 216 static const struct AttributeInfo { | |
| 217 const char* const m_name; | |
| 218 using GetterCallback = void(*)(const v8::PropertyCallbackInfo<v8::Value> &); | |
| 219 const GetterCallback m_getter; | |
| 220 } kAttributeInfoList[] = { | |
| 221 {% for attribute in attributes if attribute.should_be_exposed_to_script and attribute.is_cross_origin %} | |
| 222 {##### TODO(dcheng): raise an exception somewhere? Don't allow world suf fixes for CrossOrigin attributes #####} | |
| 223 {% for world_suffix in attribute.world_suffixes %} | |
|
dcheng
2016/10/24 07:56:38
There's a lot of different variations here. I thin
| |
| 224 {##### TODO(dcheng): error out on attribute.has_custom_getter? Not neede d. Or just support it? #####} | |
| 225 {% if not attribute.constructor_type %} | |
| 226 {"{{attribute.name}}", &{{cpp_class}}V8Internal::{{attribute.name}}Attri buteGetter}, | |
| 227 {% elif attribute.needs_constructor_getter_callback %} | |
| 228 {##### TODO(dcheng): Raise an exception here too? #####} | |
| 229 {{constructor_getter_callback(attribute, world_suffix)}} | |
| 230 {% endif %} | |
| 231 {% endfor %} | |
| 232 {% endfor %} | |
| 233 }; | |
| 234 | |
| 235 for (const auto& attribute: kAttributeInfoList) { | |
| 236 if (propertyName == attribute.m_name) { | |
| 237 attribute.m_getter(info); | |
| 238 return; | |
| 239 } | |
| 240 } | |
| 241 | |
| 242 {% if named_property_getter.is_custom %} | |
| 243 {{v8_class}}::namedPropertyGetterCustom(propertyName, info); | |
| 244 {% else %} | |
| 245 {{cpp_class}}V8Internal::namedPropertyGetter(propertyName, info); | |
| 246 {% endif %} | |
| 247 {% endif %} | |
| 248 } | |
| 249 | |
| 250 void crossOriginNamedSetter(v8::Local<v8::Name> name, v8::Local<v8::Value> value , const v8::PropertyCallbackInfo<v8::Value>& info) | |
| 251 { | |
| 252 {# TODO(dcheng): This needs to dispatch to methods / properties, not just the na med setter. #} | |
| 253 {% if named_property_setter and named_property_setter.is_cross_origin %} | |
| 254 if (!name->IsString()) | |
| 255 return; | |
| 256 const AtomicString& propertyName = toCoreAtomicString(name.As<v8::String>()) ; | |
| 257 | |
| 258 {% if named_property_setter.is_custom %} | |
| 259 {{v8_class}}::namedPropertySetterCustom(propertyName, v8Value, info); | |
| 260 {% else %} | |
| 261 {{cpp_class}}V8Internal::namedPropertySetter(propertyName, v8Value, info); | |
| 262 {% endif %} | |
| 263 {% endif %} | |
| 264 } | |
| 265 | |
| 266 void crossOriginIndexedGetter(uint32_t index, const v8::PropertyCallbackInfo<v8: :Value>& info) | |
| 267 { | |
| 268 {% if indexed_property_getter and indexed_property_getter.is_cross_origin %} | |
| 269 {% if indexed_property_getter.is_custom %} | |
| 270 {{v8_class}}::indexedPropertyGetterCustom(index, info); | |
| 271 {% else %} | |
| 272 {{cpp_class}}V8Internal::indexedPropertyGetter(index, info); | |
| 273 {% endif %} | |
| 274 {% endif %} | |
| 275 } | |
| 276 | |
| 277 {% endif %} | |
| 278 {% endblock %} | |
| 279 {##############################################################################} | |
| 209 } // namespace {{cpp_class_or_partial}}V8Internal | 280 } // namespace {{cpp_class_or_partial}}V8Internal |
| 210 | 281 |
| 211 {% block visit_dom_wrapper %}{% endblock %} | 282 {% block visit_dom_wrapper %}{% endblock %} |
| 212 {##############################################################################} | 283 {##############################################################################} |
| 213 {% block install_attributes %} | 284 {% block install_attributes %} |
| 214 {% from 'attributes.cpp.tmpl' import attribute_configuration with context %} | 285 {% from 'attributes.cpp.tmpl' import attribute_configuration with context %} |
| 215 {% if attributes | has_attribute_configuration %} | 286 {% if attributes | has_attribute_configuration %} |
| 216 // Suppress warning: global constructors, because AttributeConfiguration is triv ial | 287 // Suppress warning: global constructors, because AttributeConfiguration is triv ial |
| 217 // and does not depend on another global objects. | 288 // and does not depend on another global objects. |
| 218 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG) | 289 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG) |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 309 {% endif %} | 380 {% endif %} |
| 310 {% if attributes | has_accessor_configuration %} | 381 {% if attributes | has_accessor_configuration %} |
| 311 V8DOMConfiguration::installAccessors(isolate, world, instanceTemplate, proto typeTemplate, interfaceTemplate, signature, {{'%sAccessors' % v8_class}}, {{'WTF _ARRAY_LENGTH(%sAccessors)' % v8_class}}); | 382 V8DOMConfiguration::installAccessors(isolate, world, instanceTemplate, proto typeTemplate, interfaceTemplate, signature, {{'%sAccessors' % v8_class}}, {{'WTF _ARRAY_LENGTH(%sAccessors)' % v8_class}}); |
| 312 {% endif %} | 383 {% endif %} |
| 313 {% if methods | has_method_configuration(is_partial) %} | 384 {% if methods | has_method_configuration(is_partial) %} |
| 314 V8DOMConfiguration::installMethods(isolate, world, instanceTemplate, prototy peTemplate, interfaceTemplate, signature, {{'%sMethods' % v8_class}}, {{'WTF_ARR AY_LENGTH(%sMethods)' % v8_class}}); | 385 V8DOMConfiguration::installMethods(isolate, world, instanceTemplate, prototy peTemplate, interfaceTemplate, signature, {{'%sMethods' % v8_class}}, {{'WTF_ARR AY_LENGTH(%sMethods)' % v8_class}}); |
| 315 {% endif %} | 386 {% endif %} |
| 316 {% endfilter %} | 387 {% endfilter %} |
| 317 {%- if has_access_check_callbacks and not is_partial %}{{newline}} | 388 {%- if has_access_check_callbacks and not is_partial %}{{newline}} |
| 318 // Cross-origin access check | 389 // Cross-origin access check |
| 319 instanceTemplate->SetAccessCheckCallback({{cpp_class}}V8Internal::securityCh eck, v8::External::New(isolate, const_cast<WrapperTypeInfo*>(&{{v8_class}}::wrap perTypeInfo))); | 390 instanceTemplate->SetAccessCheckCallbackAndHandler({{cpp_class}}V8Internal:: securityCheck, v8::NamedPropertyHandlerConfiguration({{cpp_class}}V8Internal::cr ossOriginNamedGetter, {{cpp_class}}V8Internal::crossOriginNamedSetter), v8::Inde xedPropertyHandlerConfiguration({{cpp_class}}V8Internal::crossOriginIndexedGette r), v8::External::New(isolate, const_cast<WrapperTypeInfo*>(&{{v8_class}}::wrapp erTypeInfo))); |
| 320 {% endif %} | 391 {% endif %} |
| 321 | 392 |
| 322 {%- for group in attributes | purely_runtime_enabled_attributes | groupby('r untime_feature_name') %}{{newline}} | 393 {%- for group in attributes | purely_runtime_enabled_attributes | groupby('r untime_feature_name') %}{{newline}} |
| 323 if ({{group.list[0].runtime_enabled_function}}()) { | 394 if ({{group.list[0].runtime_enabled_function}}()) { |
| 324 {% for attribute in group.list | unique_by('name') | sort %} | 395 {% for attribute in group.list | unique_by('name') | sort %} |
| 325 {% if attribute.is_data_type_property %} | 396 {% if attribute.is_data_type_property %} |
| 326 const V8DOMConfiguration::AttributeConfiguration attribute{{attribute.na me}}Configuration = \ | 397 const V8DOMConfiguration::AttributeConfiguration attribute{{attribute.na me}}Configuration = \ |
| 327 {{attribute_configuration(attribute)}}; | 398 {{attribute_configuration(attribute)}}; |
| 328 V8DOMConfiguration::installAttribute(isolate, world, instanceTemplate, p rototypeTemplate, attribute{{attribute.name}}Configuration); | 399 V8DOMConfiguration::installAttribute(isolate, world, instanceTemplate, p rototypeTemplate, attribute{{attribute.name}}Configuration); |
| 329 {% else %} | 400 {% else %} |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 462 {% for attribute in attributes if attribute.is_implemented_in_private_script %} | 533 {% for attribute in attributes if attribute.is_implemented_in_private_script %} |
| 463 {{attribute_getter_implemented_in_private_script(attribute)}} | 534 {{attribute_getter_implemented_in_private_script(attribute)}} |
| 464 {% if attribute.has_setter %} | 535 {% if attribute.has_setter %} |
| 465 {{attribute_setter_implemented_in_private_script(attribute)}} | 536 {{attribute_setter_implemented_in_private_script(attribute)}} |
| 466 {% endif %} | 537 {% endif %} |
| 467 {% endfor %} | 538 {% endfor %} |
| 468 {% block partial_interface %}{% endblock %} | 539 {% block partial_interface %}{% endblock %} |
| 469 } // namespace blink | 540 } // namespace blink |
| 470 | 541 |
| 471 {% endfilter %}{# format_blink_cpp_source_code #} | 542 {% endfilter %}{# format_blink_cpp_source_code #} |
| OLD | NEW |