| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 %} |
| OLD | NEW |