Chromium Code Reviews| 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 impl->{{setter_name}}({{setter_arguments | join(', ')}}); |
| 92 {% if setter.is_raises_exception %} | |
| 93 if (exceptionState.hadException()) | |
| 94 return; | |
| 95 {% endif %} | |
| 96 if (!result) | |
| 97 return; | |
| 98 v8SetReturnValue(info, v8Value); | |
| 99 } | 106 } |
| 100 | 107 |
| 101 {% endif %} | 108 {% endif %} |
| 102 {% endblock %} | 109 {% endblock %} |
| 103 | 110 |
| 104 | 111 |
| 105 {##############################################################################} | 112 {##############################################################################} |
| 106 {% block indexed_property_setter_callback %} | 113 {% block indexed_property_setter_callback %} |
| 107 {% if indexed_property_setter %} | 114 {% if indexed_property_setter or named_property_setter %} |
| 108 {% set setter = indexed_property_setter %} | 115 {% 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) | 116 void indexedPropertySetterCallback(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) |
| 110 { | 117 { |
| 111 {% if setter.is_ce_reactions %} | 118 {% if setter.is_ce_reactions %} |
| 112 CEReactionsScope ceReactionsScope; | 119 CEReactionsScope ceReactionsScope; |
| 113 {% endif %} | 120 {% endif %} |
| 121 | |
| 122 {% if indexed_property_setter %} | |
| 123 | |
| 114 {% if setter.is_custom %} | 124 {% if setter.is_custom %} |
| 115 {{v8_class}}::indexedPropertySetterCustom(index, v8Value, info); | 125 {{v8_class}}::indexedPropertySetterCustom(index, v8Value, info); |
| 116 {% else %} | 126 {% else %} |
| 117 {{cpp_class}}V8Internal::indexedPropertySetter(index, v8Value, info); | 127 {{cpp_class}}V8Internal::indexedPropertySetter(index, v8Value, info); |
| 118 {% endif %} | 128 {% endif %} |
| 129 | |
| 130 {% else %}{# otherwise, named property #} | |
| 131 | |
| 132 const AtomicString& propertyName = AtomicString::number(index); | |
| 133 | |
| 134 {% if setter.is_custom %} | |
| 135 {{v8_class}}::namedPropertySetterCustom(propertyName, v8Value, info); | |
| 136 {% else %} | |
| 137 {{cpp_class}}V8Internal::namedPropertySetter(propertyName, v8Value, info); | |
| 138 {% endif %} | |
| 139 | |
| 140 {% endif %}{# indexed_property_setter #} | |
| 119 } | 141 } |
| 120 | 142 |
| 121 {% endif %} | 143 {% endif %} |
| 122 {% endblock %} | 144 {% endblock %} |
| 123 | 145 |
| 124 | 146 |
| 125 {##############################################################################} | 147 {##############################################################################} |
| 126 {% block indexed_property_deleter %} | 148 {% block indexed_property_deleter %} |
| 127 {% if indexed_property_deleter and not indexed_property_deleter.is_custom %} | 149 {% if indexed_property_deleter and not indexed_property_deleter.is_custom %} |
| 128 {% set deleter = indexed_property_deleter %} | 150 {% set deleter = indexed_property_deleter %} |
| 129 static void indexedPropertyDeleter(uint32_t index, const v8::PropertyCallbackInf o<v8::Boolean>& info) | 151 static void indexedPropertyDeleter(uint32_t index, const v8::PropertyCallbackInf o<v8::Boolean>& info) |
| 130 { | 152 { |
| 153 {% if deleter.is_raises_exception %} | |
| 154 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::IndexedDele tionContext, "{{interface_name}}"); | |
| 155 {% endif %} | |
| 156 | |
| 131 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); | 157 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); |
| 132 {% if deleter.is_raises_exception %} | 158 |
| 133 ExceptionState exceptionState(ExceptionState::IndexedDeletionContext, "{{int erface_name}}", info.Holder(), info.GetIsolate()); | |
| 134 {% endif %} | |
| 135 {% set deleter_name = deleter.name or 'anonymousIndexedDeleter' %} | 159 {% set deleter_name = deleter.name or 'anonymousIndexedDeleter' %} |
| 136 {% set deleter_arguments = ['index'] %} | 160 {% set deleter_arguments = ['index'] %} |
| 137 {% if deleter.is_call_with_script_state %} | 161 {% if deleter.is_call_with_script_state %} |
| 138 ScriptState* scriptState = ScriptState::current(info.GetIsolate()); | 162 ScriptState* scriptState = ScriptState::forReceiverObject(info); |
| 139 {% set deleter_arguments = ['scriptState'] + deleter_arguments %} | 163 {% set deleter_arguments = ['scriptState'] + deleter_arguments %} |
| 140 {% endif %} | 164 {% endif %} |
| 141 {% if deleter.is_raises_exception %} | 165 {% if deleter.is_raises_exception %} |
| 142 {% set deleter_arguments = deleter_arguments + ['exceptionState'] %} | 166 {% set deleter_arguments = deleter_arguments + ['exceptionState'] %} |
| 143 {% endif %} | 167 {% endif %} |
| 144 DeleteResult result = impl->{{deleter_name}}({{deleter_arguments | join(', ' )}}); | 168 DeleteResult result = impl->{{deleter_name}}({{deleter_arguments | join(', ' )}}); |
| 145 {% if deleter.is_raises_exception %} | 169 v8SetReturnValue(info, result != DeleteReject); |
| 146 if (exceptionState.hadException()) | |
| 147 return; | |
| 148 {% endif %} | |
| 149 if (result != DeleteUnknownProperty) | |
| 150 return v8SetReturnValueBool(info, result == DeleteSuccess); | |
| 151 } | 170 } |
| 152 | 171 |
| 153 {% endif %} | 172 {% endif %} |
| 154 {% endblock %} | 173 {% endblock %} |
| 155 | 174 |
| 156 | 175 |
| 157 {##############################################################################} | 176 {##############################################################################} |
| 158 {% block indexed_property_deleter_callback %} | 177 {% block indexed_property_deleter_callback %} |
| 159 {% if indexed_property_deleter %} | 178 {% if indexed_property_deleter or named_property_deleter %} |
| 160 {% set deleter = indexed_property_deleter %} | 179 {% set deleter = indexed_property_deleter or named_property_deleter %} |
| 161 void indexedPropertyDeleterCallback(uint32_t index, const v8::PropertyCallbackIn fo<v8::Boolean>& info) | 180 void indexedPropertyDeleterCallback(uint32_t index, const v8::PropertyCallbackIn fo<v8::Boolean>& info) |
| 162 { | 181 { |
| 163 {% if deleter.is_ce_reactions %} | 182 {% if deleter.is_ce_reactions %} |
| 164 CEReactionsScope ceReactionsScope; | 183 CEReactionsScope ceReactionsScope; |
| 165 {% endif %} | 184 {% endif %} |
| 185 | |
| 186 {% if indexed_property_deleter %} | |
| 187 | |
| 166 {% if deleter.is_custom %} | 188 {% if deleter.is_custom %} |
| 167 {{v8_class}}::indexedPropertyDeleterCustom(index, info); | 189 {{v8_class}}::indexedPropertyDeleterCustom(index, info); |
| 168 {% else %} | 190 {% else %} |
| 169 {{cpp_class}}V8Internal::indexedPropertyDeleter(index, info); | 191 {{cpp_class}}V8Internal::indexedPropertyDeleter(index, info); |
| 170 {% endif %} | 192 {% endif %} |
| 193 | |
| 194 {% else %}{# otherwise, named property #} | |
| 195 | |
| 196 const AtomicString& propertyName = AtomicString::number(index); | |
| 197 | |
| 198 {% if deleter.is_custom %} | |
| 199 {{v8_class}}::namedPropertyDeleterCustom(propertyName, info); | |
| 200 {% else %} | |
| 201 {{cpp_class}}V8Internal::namedPropertyDeleter(propertyName, info); | |
| 202 {% endif %} | |
| 203 | |
| 204 {% endif %}{# indexed_property_deleter #} | |
| 171 } | 205 } |
| 172 | 206 |
| 173 {% endif %} | 207 {% endif %} |
| 174 {% endblock %} | 208 {% endblock %} |
| 175 | 209 |
| 176 | 210 |
| 177 {##############################################################################} | 211 {##############################################################################} |
| 178 {% block named_property_getter %} | 212 {% block named_property_getter %} |
| 179 {% if named_property_getter and not named_property_getter.is_custom %} | 213 {% if named_property_getter and not named_property_getter.is_custom %} |
| 180 {% set getter = named_property_getter %} | 214 {% set getter = named_property_getter %} |
| 181 static void namedPropertyGetter(v8::Local<v8::Name> name, const v8::PropertyCall backInfo<v8::Value>& info) | 215 static void namedPropertyGetter(const AtomicString& name, const v8::PropertyCall backInfo<v8::Value>& info) |
| 182 { | 216 { |
| 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 %} | 217 {% if getter.is_raises_exception %} |
| 187 v8::String::Utf8Value namedProperty(nameString); | 218 const CString& nameInUtf8 = name.utf8(); |
| 188 ExceptionState exceptionState(ExceptionState::GetterContext, *namedProperty, "{{interface_name}}", info.Holder(), info.GetIsolate()); | 219 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::GetterConte xt, "{{interface_name}}", nameInUtf8.data()); |
| 189 {% endif %} | 220 {% endif %} |
| 190 {% if getter.is_call_with_script_state %} | 221 {% if getter.is_call_with_script_state %} |
| 191 ScriptState* scriptState = ScriptState::current(info.GetIsolate()); | 222 ScriptState* scriptState = ScriptState::forReceiverObject(info); |
| 192 {% endif %} | 223 {% endif %} |
| 224 | |
| 225 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); | |
| 193 {% if getter.use_output_parameter_for_result %} | 226 {% if getter.use_output_parameter_for_result %} |
| 194 {{getter.cpp_type}} result; | 227 {{getter.cpp_type}} result; |
| 195 {{getter.cpp_value}}; | 228 {{getter.cpp_value}}; |
| 196 {% else %} | 229 {% else %} |
| 197 {{getter.cpp_type}} result = {{getter.cpp_value}}; | 230 {{getter.cpp_type}} result = {{getter.cpp_value}}; |
| 198 {% endif %} | 231 {% endif %} |
| 199 {% if getter.is_raises_exception %} | |
| 200 if (exceptionState.hadException()) | |
| 201 return; | |
| 202 {% endif %} | |
| 203 if ({{getter.is_null_expression}}) | 232 if ({{getter.is_null_expression}}) |
| 204 return; | 233 return; |
| 205 {{getter.v8_set_return_value}}; | 234 {{getter.v8_set_return_value}}; |
| 206 } | 235 } |
| 207 | 236 |
| 208 {% endif %} | 237 {% endif %} |
| 209 {% endblock %} | 238 {% endblock %} |
| 210 | 239 |
| 211 | 240 |
| 212 {##############################################################################} | 241 {##############################################################################} |
| 213 {% block named_property_getter_callback %} | 242 {% block named_property_getter_callback %} |
| 214 {% if named_property_getter %} | 243 {% if named_property_getter %} |
| 215 {% set getter = named_property_getter %} | 244 {% set getter = named_property_getter %} |
| 216 void namedPropertyGetterCallback(v8::Local<v8::Name> name, const v8::PropertyCal lbackInfo<v8::Value>& info) | 245 void namedPropertyGetterCallback(v8::Local<v8::Name> name, const v8::PropertyCal lbackInfo<v8::Value>& info) |
| 217 { | 246 { |
| 218 if (!name->IsString()) | 247 if (!name->IsString()) |
| 219 return; | 248 return; |
| 249 const AtomicString& propertyName = toCoreAtomicString(name.As<v8::String>()) ; | |
| 250 | |
| 220 {% if getter.is_custom %} | 251 {% if getter.is_custom %} |
| 221 {{v8_class}}::namedPropertyGetterCustom(name, info); | 252 {{v8_class}}::namedPropertyGetterCustom(propertyName, info); |
| 222 {% else %} | 253 {% else %} |
| 223 {{cpp_class}}V8Internal::namedPropertyGetter(name, info); | 254 {{cpp_class}}V8Internal::namedPropertyGetter(propertyName, info); |
| 224 {% endif %} | 255 {% endif %} |
| 225 } | 256 } |
| 226 | 257 |
| 227 {% endif %} | 258 {% endif %} |
| 228 {% endblock %} | 259 {% endblock %} |
| 229 | 260 |
| 230 | 261 |
| 231 {##############################################################################} | 262 {##############################################################################} |
| 232 {% block named_property_setter %} | 263 {% block named_property_setter %} |
| 233 {% from 'utilities.cpp' import v8_value_to_local_cpp_value %} | 264 {% from 'utilities.cpp' import v8_value_to_local_cpp_value %} |
| 234 {% if named_property_setter and not named_property_setter.is_custom %} | 265 {% if named_property_setter and not named_property_setter.is_custom %} |
| 235 {% set setter = named_property_setter %} | 266 {% 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) | 267 static void namedPropertySetter(const AtomicString& name, v8::Local<v8::Value> v 8Value, const v8::PropertyCallbackInfo<v8::Value>& info) |
| 237 { | 268 { |
| 238 auto nameString = name.As<v8::String>(); | |
| 239 {% if setter.has_exception_state %} | 269 {% if setter.has_exception_state %} |
| 240 v8::String::Utf8Value namedProperty(nameString); | 270 const CString& nameInUtf8 = name.utf8(); |
| 241 ExceptionState exceptionState(ExceptionState::SetterContext, *namedProperty, "{{interface_name}}", info.Holder(), info.GetIsolate()); | 271 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::SetterConte xt, "{{interface_name}}", nameInUtf8.data()); |
| 242 {% endif %} | 272 {% endif %} |
| 273 {% if setter.is_call_with_script_state %} | |
| 274 ScriptState* scriptState = ScriptState::forReceiverObject(info); | |
| 275 {% endif %} | |
| 276 | |
| 243 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); | 277 {{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}} | 278 {{v8_value_to_local_cpp_value(setter) | indent}} |
| 249 {% if setter.has_type_checking_interface %} | 279 {% if setter.has_type_checking_interface %} |
| 250 {# Type checking for interface types (if interface not implemented, throw | 280 {# Type checking for interface types (if interface not implemented, throw |
| 251 TypeError), per http://www.w3.org/TR/WebIDL/#es-interface #} | 281 TypeError), per http://www.w3.org/TR/WebIDL/#es-interface #} |
| 252 if (!propertyValue{% if setter.is_nullable %} && !isUndefinedOrNull(v8Value) {% endif %}) { | 282 if (!propertyValue{% if setter.is_nullable %} && !isUndefinedOrNull(v8Value) {% endif %}) { |
| 253 exceptionState.throwTypeError("The provided value is not of type '{{sett er.idl_type}}'."); | 283 exceptionState.throwTypeError("The provided value is not of type '{{sett er.idl_type}}'."); |
| 254 return; | 284 return; |
| 255 } | 285 } |
| 256 {% endif %} | 286 {% endif %} |
| 257 {% if setter.is_call_with_script_state %} | 287 |
| 258 ScriptState* scriptState = ScriptState::current(info.GetIsolate()); | |
| 259 {% endif %} | |
| 260 {% set setter_name = setter.name or 'anonymousNamedSetter' %} | 288 {% set setter_name = setter.name or 'anonymousNamedSetter' %} |
| 261 {% set setter_arguments = ['propertyName', 'propertyValue'] %} | 289 {% set setter_arguments = ['name', 'propertyValue'] %} |
| 262 {% if setter.is_call_with_script_state %} | 290 {% if setter.is_call_with_script_state %} |
| 263 {% set setter_arguments = ['scriptState'] + setter_arguments %} | 291 {% set setter_arguments = ['scriptState'] + setter_arguments %} |
| 264 {% endif %} | 292 {% endif %} |
| 265 {% if setter.is_raises_exception %} | 293 {% if setter.is_raises_exception %} |
| 266 {% set setter_arguments = setter_arguments + ['exceptionState'] %} | 294 {% set setter_arguments = setter_arguments + ['exceptionState'] %} |
| 267 {% endif %} | 295 {% endif %} |
| 268 bool result = impl->{{setter_name}}({{setter_arguments | join(', ')}}); | 296 impl->{{setter_name}}({{setter_arguments | join(', ')}}); |
| 269 {% if setter.is_raises_exception %} | |
| 270 if (exceptionState.hadException()) | |
| 271 return; | |
| 272 {% endif %} | |
| 273 if (!result) | |
| 274 return; | |
| 275 v8SetReturnValue(info, v8Value); | |
| 276 } | 297 } |
| 277 | 298 |
| 278 {% endif %} | 299 {% endif %} |
| 279 {% endblock %} | 300 {% endblock %} |
| 280 | 301 |
| 281 | 302 |
| 282 {##############################################################################} | 303 {##############################################################################} |
| 283 {% block named_property_setter_callback %} | 304 {% block named_property_setter_callback %} |
| 284 {% if named_property_setter %} | 305 {% if named_property_setter %} |
| 285 {% set setter = named_property_setter %} | 306 {% set setter = named_property_setter %} |
| 286 void namedPropertySetterCallback(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) | 307 void namedPropertySetterCallback(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) |
| 287 { | 308 { |
| 288 if (!name->IsString()) | 309 if (!name->IsString()) |
| 289 return; | 310 return; |
| 311 const AtomicString& propertyName = toCoreAtomicString(name.As<v8::String>()) ; | |
| 312 | |
| 290 {% if setter.is_ce_reactions %} | 313 {% if setter.is_ce_reactions %} |
| 291 CEReactionsScope ceReactionsScope; | 314 CEReactionsScope ceReactionsScope; |
| 292 {% endif %} | 315 {% endif %} |
| 316 | |
| 293 {% if setter.is_custom %} | 317 {% if setter.is_custom %} |
| 294 {{v8_class}}::namedPropertySetterCustom(name, v8Value, info); | 318 {{v8_class}}::namedPropertySetterCustom(propertyName, v8Value, info); |
| 295 {% else %} | 319 {% else %} |
| 296 {{cpp_class}}V8Internal::namedPropertySetter(name, v8Value, info); | 320 {{cpp_class}}V8Internal::namedPropertySetter(propertyName, v8Value, info); |
| 297 {% endif %} | 321 {% endif %} |
| 298 } | 322 } |
| 299 | 323 |
| 300 {% endif %} | 324 {% endif %} |
| 301 {% endblock %} | 325 {% endblock %} |
| 302 | 326 |
| 303 | 327 |
| 304 {##############################################################################} | 328 {##############################################################################} |
| 305 {% block named_property_query %} | 329 {% block named_property_deleter %} |
| 306 {% if named_property_getter and named_property_getter.is_enumerable and | 330 {% if named_property_deleter and not named_property_deleter.is_custom %} |
| 307 not named_property_getter.is_custom_property_query %} | 331 {% set deleter = named_property_deleter %} |
| 308 {% set getter = named_property_getter %} | 332 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 { | 333 { |
| 334 {% if deleter.is_raises_exception %} | |
| 335 const CString& nameInUtf8 = name.utf8(); | |
| 336 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::DeletionCon text, "{{interface_name}}", nameInUtf8.data()); | |
| 337 {% endif %} | |
| 338 {% if deleter.is_call_with_script_state %} | |
| 339 ScriptState* scriptState = ScriptState::forReceiverObject(info); | |
| 340 {% endif %} | |
| 341 | |
| 313 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); | 342 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); |
| 314 AtomicString propertyName = toCoreAtomicString(name.As<v8::String>()); | 343 |
| 315 v8::String::Utf8Value namedProperty(name); | 344 {% set deleter_name = deleter.name or 'anonymousNamedDeleter' %} |
| 316 ExceptionState exceptionState(ExceptionState::GetterContext, *namedProperty, "{{interface_name}}", info.Holder(), info.GetIsolate()); | 345 {% set deleter_arguments = ['name'] %} |
| 317 {% set getter_arguments = ['propertyName', 'exceptionState'] %} | 346 {% if deleter.is_call_with_script_state %} |
| 318 {% if getter.is_call_with_script_state %} | 347 {% set deleter_arguments = ['scriptState'] + deleter_arguments %} |
| 319 ScriptState* scriptState = ScriptState::current(info.GetIsolate()); | |
| 320 {% set getter_arguments = ['scriptState'] + getter_arguments %} | |
| 321 {% endif %} | 348 {% endif %} |
| 322 bool result = impl->namedPropertyQuery({{getter_arguments | join(', ')}}); | 349 {% if deleter.is_raises_exception %} |
| 323 if (exceptionState.hadException()) | 350 {% set deleter_arguments = deleter_arguments + ['exceptionState'] %} |
| 324 return; | 351 {% endif %} |
| 325 if (!result) | 352 DeleteResult result = impl->{{deleter_name}}({{deleter_arguments | join(', ' )}}); |
| 326 return; | 353 v8SetReturnValue(info, result != DeleteReject); |
| 327 v8SetReturnValueInt(info, v8::None); | |
| 328 } | 354 } |
| 329 | 355 |
| 330 {% endif %} | 356 {% endif %} |
| 331 {% endblock %} | 357 {% endblock %} |
| 332 | 358 |
| 333 | 359 |
| 334 {##############################################################################} | 360 {##############################################################################} |
| 335 {% block named_property_query_callback %} | 361 {% block named_property_deleter_callback %} |
| 336 {% if named_property_getter and named_property_getter.is_enumerable %} | 362 {% if named_property_deleter %} |
| 337 {% set getter = named_property_getter %} | 363 {% set deleter = named_property_deleter %} |
| 338 void namedPropertyQueryCallback(v8::Local<v8::Name> name, const v8::PropertyCall backInfo<v8::Integer>& info) | 364 void namedPropertyDeleterCallback(v8::Local<v8::Name> name, const v8::PropertyCa llbackInfo<v8::Boolean>& info) |
| 339 { | 365 { |
| 340 if (!name->IsString()) | 366 if (!name->IsString()) |
| 341 return; | 367 return; |
| 342 {% if getter.is_custom_property_query %} | 368 const AtomicString& propertyName = toCoreAtomicString(name.As<v8::String>()) ; |
| 343 {{v8_class}}::namedPropertyQueryCustom(name, info); | 369 |
| 370 {% if deleter.is_ce_reactions %} | |
| 371 CEReactionsScope ceReactionsScope; | |
| 372 {% endif %} | |
| 373 | |
| 374 {% if deleter.is_custom %} | |
| 375 {{v8_class}}::namedPropertyDeleterCustom(propertyName, info); | |
| 344 {% else %} | 376 {% else %} |
| 345 {{cpp_class}}V8Internal::namedPropertyQuery(name, info); | 377 {{cpp_class}}V8Internal::namedPropertyDeleter(propertyName, info); |
| 346 {% endif %} | 378 {% endif %} |
| 347 } | 379 } |
| 348 | 380 |
| 349 {% endif %} | 381 {% endif %} |
| 350 {% endblock %} | 382 {% endblock %} |
| 351 | 383 |
| 352 | 384 |
| 353 {##############################################################################} | 385 {##############################################################################} |
| 354 {% block named_property_deleter %} | 386 {% block named_property_query %} |
| 355 {% if named_property_deleter and not named_property_deleter.is_custom %} | 387 {% if named_property_getter and named_property_getter.is_enumerable and |
| 356 {% set deleter = named_property_deleter %} | 388 not named_property_getter.is_custom_property_query %} |
| 357 static void namedPropertyDeleter(v8::Local<v8::Name> name, const v8::PropertyCal lbackInfo<v8::Boolean>& info) | 389 {% set getter = named_property_getter %} |
| 390 {# If there is an enumerator, there MUST be a query method to properly | |
| 391 communicate property attributes. #} | |
|
peria
2016/09/09 02:44:51
TODO
| |
| 392 static void namedPropertyQuery(const AtomicString& name, const v8::PropertyCallb ackInfo<v8::Integer>& info) | |
| 358 { | 393 { |
| 394 const CString& nameInUtf8 = name.utf8(); | |
| 395 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::GetterConte xt, "{{interface_name}}", nameInUtf8.data()); | |
| 396 {% if getter.is_call_with_script_state %} | |
| 397 ScriptState* scriptState = ScriptState::forReceiverObject(info); | |
| 398 {% endif %} | |
| 399 | |
| 359 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); | 400 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); |
| 360 AtomicString propertyName = toCoreAtomicString(name.As<v8::String>()); | 401 |
| 361 {% if deleter.is_raises_exception %} | 402 {% set getter_arguments = ['name', 'exceptionState'] %} |
| 362 v8::String::Utf8Value namedProperty(name); | 403 {% if getter.is_call_with_script_state %} |
| 363 ExceptionState exceptionState(ExceptionState::DeletionContext, *namedPropert y, "{{interface_name}}", info.Holder(), info.GetIsolate()); | 404 {% set getter_arguments = ['scriptState'] + getter_arguments %} |
| 364 {% endif %} | 405 {% endif %} |
| 365 {% if deleter.is_call_with_script_state %} | 406 bool result = impl->namedPropertyQuery({{getter_arguments | join(', ')}}); |
| 366 ScriptState* scriptState = ScriptState::current(info.GetIsolate()); | 407 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; | 408 return; |
| 380 {% endif %} | 409 v8SetReturnValueInt(info, v8::None); |
| 381 if (result != DeleteUnknownProperty) | |
| 382 return v8SetReturnValueBool(info, result == DeleteSuccess); | |
| 383 } | 410 } |
| 384 | 411 |
| 385 {% endif %} | 412 {% endif %} |
| 386 {% endblock %} | 413 {% endblock %} |
| 387 | 414 |
| 388 | 415 |
| 389 {##############################################################################} | 416 {##############################################################################} |
| 390 {% block named_property_deleter_callback %} | 417 {% block named_property_query_callback %} |
| 391 {% if named_property_deleter %} | 418 {% if named_property_getter and named_property_getter.is_enumerable %} |
| 392 {% set deleter = named_property_deleter %} | 419 {% set getter = named_property_getter %} |
| 393 void namedPropertyDeleterCallback(v8::Local<v8::Name> name, const v8::PropertyCa llbackInfo<v8::Boolean>& info) | 420 void namedPropertyQueryCallback(v8::Local<v8::Name> name, const v8::PropertyCall backInfo<v8::Integer>& info) |
| 394 { | 421 { |
| 395 if (!name->IsString()) | 422 if (!name->IsString()) |
| 396 return; | 423 return; |
| 397 {% if deleter.is_ce_reactions %} | 424 const AtomicString& propertyName = toCoreAtomicString(name.As<v8::String>()) ; |
| 398 CEReactionsScope ceReactionsScope; | 425 |
| 399 {% endif %} | 426 {% if getter.is_custom_property_query %} |
| 400 {% if deleter.is_custom %} | 427 {{v8_class}}::namedPropertyQueryCustom(propertyName, info); |
| 401 {{v8_class}}::namedPropertyDeleterCustom(name, info); | |
| 402 {% else %} | 428 {% else %} |
| 403 {{cpp_class}}V8Internal::namedPropertyDeleter(name, info); | 429 {{cpp_class}}V8Internal::namedPropertyQuery(propertyName, info); |
| 404 {% endif %} | 430 {% endif %} |
| 405 } | 431 } |
| 406 | 432 |
| 407 {% endif %} | 433 {% endif %} |
| 408 {% endblock %} | 434 {% endblock %} |
| 409 | 435 |
| 410 | 436 |
| 411 {##############################################################################} | 437 {##############################################################################} |
| 412 {% block named_property_enumerator %} | 438 {% block named_property_enumerator %} |
| 413 {% if named_property_getter and named_property_getter.is_enumerable and | 439 {% if named_property_getter and named_property_getter.is_enumerable and |
| 414 not named_property_getter.is_custom_property_enumerator %} | 440 not named_property_getter.is_custom_property_enumerator %} |
| 415 static void namedPropertyEnumerator(const v8::PropertyCallbackInfo<v8::Array>& i nfo) | 441 static void namedPropertyEnumerator(const v8::PropertyCallbackInfo<v8::Array>& i nfo) |
| 416 { | 442 { |
| 443 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::Enumeration Context, "{{interface_name}}"); | |
| 444 | |
| 417 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); | 445 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); |
| 446 | |
| 418 Vector<String> names; | 447 Vector<String> names; |
| 419 ExceptionState exceptionState(ExceptionState::EnumerationContext, "{{interfa ce_name}}", info.Holder(), info.GetIsolate()); | |
| 420 impl->namedPropertyEnumerator(names, exceptionState); | 448 impl->namedPropertyEnumerator(names, exceptionState); |
| 421 if (exceptionState.hadException()) | 449 if (exceptionState.hadException()) |
| 422 return; | 450 return; |
| 423 v8::Local<v8::Array> v8names = v8::Array::New(info.GetIsolate(), names.size( )); | 451 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 } | 452 } |
| 430 | 453 |
| 431 {% endif %} | 454 {% endif %} |
| 432 {% endblock %} | 455 {% endblock %} |
| 433 | 456 |
| 434 | 457 |
| 435 {##############################################################################} | 458 {##############################################################################} |
| 436 {% block named_property_enumerator_callback %} | 459 {% block named_property_enumerator_callback %} |
| 437 {% if named_property_getter and named_property_getter.is_enumerable %} | 460 {% if named_property_getter and named_property_getter.is_enumerable %} |
| 438 {% set getter = named_property_getter %} | 461 {% 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); | 675 V8DOMConfiguration::installAttribute(isolate, world, {{instance_template}}, {{pr ototype_template}}, {{method.name}}OriginSafeAttributeConfiguration); |
| 653 {%- endmacro %} | 676 {%- endmacro %} |
| 654 | 677 |
| 655 | 678 |
| 656 {##############################################################################} | 679 {##############################################################################} |
| 657 {% macro install_indexed_property_handler(target) %} | 680 {% macro install_indexed_property_handler(target) %} |
| 658 {% set indexed_property_getter_callback = | 681 {% set indexed_property_getter_callback = |
| 659 '%sV8Internal::indexedPropertyGetterCallback' % cpp_class %} | 682 '%sV8Internal::indexedPropertyGetterCallback' % cpp_class %} |
| 660 {% set indexed_property_setter_callback = | 683 {% set indexed_property_setter_callback = |
| 661 '%sV8Internal::indexedPropertySetterCallback' % cpp_class | 684 '%sV8Internal::indexedPropertySetterCallback' % cpp_class |
| 662 if indexed_property_setter else '0' %} | 685 if indexed_property_setter or named_property_setter else '0' %} |
| 663 {% set indexed_property_query_callback = '0' %}{# Unused #} | 686 {% set indexed_property_query_callback = '0' %}{# Unused #} |
| 664 {% set indexed_property_deleter_callback = | 687 {% set indexed_property_deleter_callback = |
| 665 '%sV8Internal::indexedPropertyDeleterCallback' % cpp_class | 688 '%sV8Internal::indexedPropertyDeleterCallback' % cpp_class |
| 666 if indexed_property_deleter else '0' %} | 689 if indexed_property_deleter or named_property_deleter else '0' %} |
| 667 {% set indexed_property_enumerator_callback = | 690 {% set indexed_property_enumerator_callback = |
| 668 'indexedPropertyEnumerator<%s>' % cpp_class | 691 'indexedPropertyEnumerator<%s>' % cpp_class |
| 669 if indexed_property_getter.is_enumerable else '0' %} | 692 if indexed_property_getter.is_enumerable else '0' %} |
| 670 {% set property_handler_flags = | 693 {% set property_handler_flags = |
| 671 'v8::PropertyHandlerFlags::kAllCanRead' | 694 'v8::PropertyHandlerFlags::kAllCanRead' |
| 672 if indexed_property_getter.do_not_check_security | 695 if indexed_property_getter.do_not_check_security |
| 673 else 'v8::PropertyHandlerFlags::kNone' %} | 696 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}}); | 697 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); | 698 {{target}}->SetHandler(indexedPropertyHandlerConfig); |
| 676 {%- endmacro %} | 699 {%- endmacro %} |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 934 | 957 |
| 935 {% for method in methods if method.overloads and method.overloads.has_partial_ov erloads %} | 958 {% 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>&)) | 959 void {{v8_class}}::register{{method.name | blink_capitalize}}MethodForPartialInt erface(void (*method)(const v8::FunctionCallbackInfo<v8::Value>&)) |
| 937 { | 960 { |
| 938 {{cpp_class}}V8Internal::{{method.name}}MethodForPartialInterface = method; | 961 {{cpp_class}}V8Internal::{{method.name}}MethodForPartialInterface = method; |
| 939 } | 962 } |
| 940 | 963 |
| 941 {% endfor %} | 964 {% endfor %} |
| 942 {% endif %} | 965 {% endif %} |
| 943 {% endblock %} | 966 {% endblock %} |
| OLD | NEW |