| OLD | NEW |
| 1 {% from 'utilities.cpp.tmpl' import declare_enum_validation_variable, v8_value_t
o_local_cpp_value %} | 1 {% from 'utilities.cpp.tmpl' import declare_enum_validation_variable, v8_value_t
o_local_cpp_value %} |
| 2 | 2 |
| 3 {##############################################################################} | 3 {##############################################################################} |
| 4 {% macro attribute_getter(attribute, world_suffix) %} | 4 {% macro attribute_getter(attribute, world_suffix) %} |
| 5 static void {{attribute.name}}AttributeGetter{{world_suffix}}( | 5 static void {{attribute.name}}AttributeGetter{{world_suffix}}( |
| 6 {%- if attribute.is_data_type_property %} | 6 {%- if attribute.is_data_type_property %} |
| 7 const v8::PropertyCallbackInfo<v8::Value>& info | 7 const v8::PropertyCallbackInfo<v8::Value>& info |
| 8 {%- else %} | 8 {%- else %} |
| 9 const v8::FunctionCallbackInfo<v8::Value>& info | 9 const v8::FunctionCallbackInfo<v8::Value>& info |
| 10 {%- endif %}) | 10 {%- endif %}) { |
| 11 {% filter format_remove_duplicates([ | 11 {% filter format_remove_duplicates(['ExceptionState exceptionState']) %} |
| 12 'ExceptionState exceptionState']) %} | 12 {% set define_exception_state -%} |
| 13 { | 13 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::GetterContext
, "{{interface_name}}", "{{attribute.name}}"); |
| 14 {% set define_exception_state -%} | 14 {%- endset %} |
| 15 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::GetterConte
xt, "{{interface_name}}", "{{attribute.name}}"); | |
| 16 {%- endset %} | |
| 17 | 15 |
| 18 {% if attribute.is_lenient_this %} | 16 {% if attribute.is_lenient_this %} |
| 19 // [LenientThis] | 17 // [LenientThis] |
| 20 // Make sure that info.Holder() really points to an instance if [LenientThis
]. | 18 // Make sure that info.Holder() really points to an instance if [LenientThis]. |
| 21 if (!{{v8_class}}::hasInstance(info.Holder(), info.GetIsolate())) | 19 if (!{{v8_class}}::hasInstance(info.Holder(), info.GetIsolate())) |
| 22 return; // Return silently because of [LenientThis]. | 20 return; // Return silently because of [LenientThis]. |
| 23 {% endif %} | 21 {% endif %} |
| 24 | 22 |
| 25 {% if not attribute.is_static %} | 23 {% if not attribute.is_static %} |
| 26 v8::Local<v8::Object> holder = info.Holder(); | 24 v8::Local<v8::Object> holder = info.Holder(); |
| 27 {% endif %} | 25 {% endif %} |
| 28 | 26 |
| 29 {% if attribute.is_save_same_object %} | 27 {% if attribute.is_save_same_object %} |
| 30 // [SaveSameObject] | 28 // [SaveSameObject] |
| 31 {% set same_object_private_key = interface_name + attribute.name[0]|capitali
ze + attribute.name[1:] %} | 29 {% set same_object_private_key = interface_name + attribute.name[0]|capitalize
+ attribute.name[1:] %} |
| 32 // If you see a compile error that | 30 // If you see a compile error that |
| 33 // V8PrivateProperty::getSameObject{{same_object_private_key}} | 31 // V8PrivateProperty::getSameObject{{same_object_private_key}} |
| 34 // is not defined, then you need to register your attribute at | 32 // is not defined, then you need to register your attribute at |
| 35 // V8_PRIVATE_PROPERTY_FOR_EACH defined in V8PrivateProperty.h as | 33 // V8_PRIVATE_PROPERTY_FOR_EACH defined in V8PrivateProperty.h as |
| 36 // X(SameObject, {{same_object_private_key}}) | 34 // X(SameObject, {{same_object_private_key}}) |
| 37 auto privateSameObject = V8PrivateProperty::getSameObject{{same_object_priva
te_key}}(info.GetIsolate()); | 35 auto privateSameObject = V8PrivateProperty::getSameObject{{same_object_private
_key}}(info.GetIsolate()); |
| 38 { | 36 { |
| 39 v8::Local<v8::Value> v8Value = privateSameObject.get(info.GetIsolate()->
GetCurrentContext(), holder); | 37 v8::Local<v8::Value> v8Value = privateSameObject.get(info.GetIsolate()->GetC
urrentContext(), holder); |
| 40 if (!v8Value.IsEmpty()) { | 38 if (!v8Value.IsEmpty()) { |
| 41 v8SetReturnValue(info, v8Value); | 39 v8SetReturnValue(info, v8Value); |
| 42 return; | 40 return; |
| 43 } | |
| 44 } | 41 } |
| 45 {% endif %} | 42 } |
| 43 {% endif %} |
| 46 | 44 |
| 47 {% if not attribute.is_static %} | 45 {% if not attribute.is_static %} |
| 48 {{cpp_class}}* impl = {{v8_class}}::toImpl(holder); | 46 {{cpp_class}}* impl = {{v8_class}}::toImpl(holder); |
| 49 {% endif %} | 47 {% endif %} |
| 50 | 48 |
| 51 {% if attribute.cached_attribute_validation_method %} | 49 {% if attribute.cached_attribute_validation_method %} |
| 52 // [CachedAttribute] | 50 // [CachedAttribute] |
| 53 v8::Local<v8::String> propertyName = v8AtomicString(info.GetIsolate(), "{{at
tribute.name}}"); | 51 v8::Local<v8::String> propertyName = v8AtomicString(info.GetIsolate(), "{{attr
ibute.name}}"); |
| 54 if (!impl->{{attribute.cached_attribute_validation_method}}()) { | 52 if (!impl->{{attribute.cached_attribute_validation_method}}()) { |
| 55 v8::Local<v8::Value> v8Value = V8HiddenValue::getHiddenValue(ScriptState
::forFunctionObject(info), holder, propertyName); | 53 v8::Local<v8::Value> v8Value = V8HiddenValue::getHiddenValue(ScriptState::fo
rFunctionObject(info), holder, propertyName); |
| 56 if (!v8Value.IsEmpty() && !v8Value->IsUndefined()) { | 54 if (!v8Value.IsEmpty() && !v8Value->IsUndefined()) { |
| 57 v8SetReturnValue(info, v8Value); | 55 v8SetReturnValue(info, v8Value); |
| 58 return; | 56 return; |
| 59 } | |
| 60 } | 57 } |
| 61 {% endif %} | 58 } |
| 59 {% endif %} |
| 62 | 60 |
| 63 {% if attribute.is_check_security_for_receiver and | 61 {% if attribute.is_check_security_for_receiver and not attribute.is_data_type_
property %} |
| 64 not attribute.is_data_type_property %} | 62 // Perform a security check for the receiver object. |
| 65 // Perform a security check for the receiver object. | 63 {{define_exception_state}} |
| 66 {{define_exception_state}} | 64 if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate()),
impl, exceptionState)) { |
| 67 if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate()
), impl, exceptionState)) { | 65 v8SetReturnValueNull(info); |
| 68 v8SetReturnValueNull(info); | 66 return; |
| 69 return; | 67 } |
| 70 } | 68 {% endif %} |
| 71 {% endif %} | |
| 72 | 69 |
| 73 {% if attribute.is_check_security_for_return_value %} | 70 {% if attribute.is_check_security_for_return_value %} |
| 74 // Perform a security check for the returned object. | 71 // Perform a security check for the returned object. |
| 75 {{define_exception_state}} | 72 {{define_exception_state}} |
| 76 if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate()
), {{attribute.cpp_value}}, exceptionState)) { | 73 if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate()),
{{attribute.cpp_value}}, exceptionState)) { |
| 77 v8SetReturnValueNull(info); | 74 v8SetReturnValueNull(info); |
| 78 return; | 75 return; |
| 79 } | 76 } |
| 80 {% endif %} | 77 {% endif %} |
| 81 | 78 |
| 82 {% if attribute.is_call_with_execution_context %} | 79 {% if attribute.is_call_with_execution_context %} |
| 83 ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate
()); | 80 ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()
); |
| 84 {% endif %} | 81 {% endif %} |
| 85 {% if attribute.is_call_with_script_state %} | 82 {% if attribute.is_call_with_script_state %} |
| 86 {% if attribute.is_static %} | 83 {% if attribute.is_static %} |
| 87 ScriptState* scriptState = ScriptState::forFunctionObject(info); | 84 ScriptState* scriptState = ScriptState::forFunctionObject(info); |
| 88 {% else %} | 85 {% else %} |
| 89 ScriptState* scriptState = ScriptState::forReceiverObject(info); | 86 ScriptState* scriptState = ScriptState::forReceiverObject(info); |
| 90 {% endif %} | 87 {% endif %} |
| 91 {% endif %} | 88 {% endif %} |
| 92 {% if attribute.is_getter_raises_exception %} | 89 {% if attribute.is_getter_raises_exception %} |
| 93 {{define_exception_state}} | 90 {{define_exception_state}} |
| 94 {% endif %} | 91 {% endif %} |
| 95 {% if attribute.is_explicit_nullable %} | 92 {% if attribute.is_explicit_nullable %} |
| 96 bool isNull = false; | 93 bool isNull = false; |
| 97 {% endif %} | 94 {% endif %} |
| 98 | 95 |
| 99 {% if attribute.is_implemented_in_private_script %} | 96 {% if attribute.is_implemented_in_private_script %} |
| 100 {{attribute.cpp_type}} result{{attribute.cpp_type_initializer}}; | 97 {{attribute.cpp_type}} result{{attribute.cpp_type_initializer}}; |
| 101 if (!{{attribute.cpp_value_original}}) | 98 if (!{{attribute.cpp_value_original}}) |
| 102 return; | 99 return; |
| 103 {% elif attribute.cpp_value_original %} | 100 {% elif attribute.cpp_value_original %} |
| 104 {{attribute.cpp_type}} {{attribute.cpp_value}}({{attribute.cpp_value_origina
l}}); | 101 {{attribute.cpp_type}} {{attribute.cpp_value}}({{attribute.cpp_value_original}
}); |
| 105 {% endif %} | 102 {% endif %} |
| 106 | 103 |
| 107 {% if attribute.use_output_parameter_for_result %} | 104 {% if attribute.use_output_parameter_for_result %} |
| 108 {{attribute.cpp_type}} result; | 105 {{attribute.cpp_type}} result; |
| 109 {{attribute.cpp_value}}; | 106 {{attribute.cpp_value}}; |
| 110 {% endif %} | 107 {% endif %} |
| 111 | 108 |
| 112 {% if attribute.is_getter_raises_exception %} | 109 {% if attribute.is_getter_raises_exception %} |
| 113 if (UNLIKELY(exceptionState.hadException())) | 110 if (UNLIKELY(exceptionState.hadException())) |
| 114 return; | 111 return; |
| 115 {% endif %} | 112 {% endif %} |
| 116 | 113 |
| 117 {% if attribute.reflect_only %} | 114 {% if attribute.reflect_only %} |
| 118 {{release_only_check(attribute.reflect_only, attribute.reflect_missing, | 115 {{release_only_check(attribute.reflect_only, attribute.reflect_missing, |
| 119 attribute.reflect_invalid, attribute.reflect_empty, | 116 attribute.reflect_invalid, attribute.reflect_empty, |
| 120 attribute.cpp_value) | 117 attribute.cpp_value) |
| 121 | indent}} | 118 | indent(2)}} |
| 122 {% endif %} | 119 {% endif %} |
| 123 | 120 |
| 124 {% if attribute.cached_attribute_validation_method %} | 121 {% if attribute.cached_attribute_validation_method %} |
| 125 // [CachedAttribute] | 122 // [CachedAttribute] |
| 126 v8::Local<v8::Value> v8Value({{attribute.cpp_value_to_v8_value}}); | 123 v8::Local<v8::Value> v8Value({{attribute.cpp_value_to_v8_value}}); |
| 127 V8HiddenValue::setHiddenValue(ScriptState::forFunctionObject(info), holder,
propertyName, v8Value); | 124 V8HiddenValue::setHiddenValue(ScriptState::forFunctionObject(info), holder, pr
opertyName, v8Value); |
| 128 {% endif %} | 125 {% endif %} |
| 129 | 126 |
| 130 {% if attribute.is_explicit_nullable %} | 127 {% if attribute.is_explicit_nullable %} |
| 131 if (isNull) { | 128 if (isNull) { |
| 132 v8SetReturnValueNull(info); | 129 v8SetReturnValueNull(info); |
| 133 return; | 130 return; |
| 134 } | 131 } |
| 135 {% endif %} | 132 {% endif %} |
| 136 | 133 |
| 137 {% if attribute.is_keep_alive_for_gc %} | 134 {% if attribute.is_keep_alive_for_gc %} |
| 138 // Keep the wrapper object for the return value alive as long as |this| | 135 // Keep the wrapper object for the return value alive as long as |this| |
| 139 // object is alive in order to save creation time of the wrapper object. | 136 // object is alive in order to save creation time of the wrapper object. |
| 140 if ({{attribute.cpp_value}} && DOMDataStore::setReturnValue{{world_suffix}}(
info.GetReturnValue(), {{attribute.cpp_value}})) | 137 if ({{attribute.cpp_value}} && DOMDataStore::setReturnValue{{world_suffix}}(in
fo.GetReturnValue(), {{attribute.cpp_value}})) |
| 141 return; | 138 return; |
| 142 v8::Local<v8::Value> v8Value(toV8({{attribute.cpp_value}}, holder, info.GetI
solate())); | 139 v8::Local<v8::Value> v8Value(toV8({{attribute.cpp_value}}, holder, info.GetIso
late())); |
| 143 const char kKeepAliveKey[] = "KeepAlive#{{interface_name}}#{{attribute.name}
}"; | 140 const char kKeepAliveKey[] = "KeepAlive#{{interface_name}}#{{attribute.name}}"
; |
| 144 V8HiddenValue::setHiddenValue(ScriptState::current(info.GetIsolate()), holde
r, v8AtomicString(info.GetIsolate(), StringView(kKeepAliveKey, sizeof kKeepAlive
Key)), v8Value); | 141 V8HiddenValue::setHiddenValue(ScriptState::current(info.GetIsolate()), holder,
v8AtomicString(info.GetIsolate(), StringView(kKeepAliveKey, sizeof kKeepAliveKe
y)), v8Value); |
| 145 {% endif %} | 142 {% endif %} |
| 146 | 143 |
| 147 {% if world_suffix %} | 144 {% if world_suffix %} |
| 148 {{attribute.v8_set_return_value_for_main_world}}; | 145 {{attribute.v8_set_return_value_for_main_world}}; |
| 149 {% else %} | 146 {% else %} |
| 150 {{attribute.v8_set_return_value}}; | 147 {{attribute.v8_set_return_value}}; |
| 151 {% endif %} | 148 {% endif %} |
| 152 | 149 |
| 153 {% if attribute.is_save_same_object %} | 150 {% if attribute.is_save_same_object %} |
| 154 // [SaveSameObject] | 151 // [SaveSameObject] |
| 155 privateSameObject.set(info.GetIsolate()->GetCurrentContext(), holder, info.G
etReturnValue().Get()); | 152 privateSameObject.set(info.GetIsolate()->GetCurrentContext(), holder, info.Get
ReturnValue().Get()); |
| 156 {% endif %} | 153 {% endif %} |
| 154 {% endfilter %}{# format_remove_duplicates #} |
| 157 } | 155 } |
| 158 {% endfilter %}{# format_remove_duplicates #} | |
| 159 {% endmacro %} | 156 {% endmacro %} |
| 160 | 157 |
| 161 | 158 |
| 162 {######################################} | 159 {######################################} |
| 163 {% macro release_only_check(reflect_only_values, reflect_missing, | 160 {% macro release_only_check(reflect_only_values, reflect_missing, |
| 164 reflect_invalid, reflect_empty, cpp_value) %} | 161 reflect_invalid, reflect_empty, cpp_value) %} |
| 165 {# Attribute is limited to only known values: check that the attribute value is | 162 {# Attribute is limited to only known values: check that the attribute value is |
| 166 one of those. If not, set it to the empty string. | 163 one of those. If not, set it to the empty string. |
| 167 http://www.whatwg.org/specs/web-apps/current-work/#limited-to-only-known-valu
es #} | 164 http://www.whatwg.org/specs/web-apps/current-work/#limited-to-only-known-valu
es #} |
| 168 {% if reflect_empty %} | 165 {% if reflect_empty %} |
| 169 if ({{cpp_value}}.isNull()) { | 166 if ({{cpp_value}}.isNull()) { |
| 170 {% if reflect_missing %} | 167 {% if reflect_missing %} |
| 171 {{cpp_value}} = "{{reflect_missing}}"; | 168 {{cpp_value}} = "{{reflect_missing}}"; |
| 172 {% else %} | 169 {% else %} |
| 173 ; | 170 ; |
| 174 {% endif %} | 171 {% endif %} |
| 175 } else if ({{cpp_value}}.isEmpty()) { | 172 } else if ({{cpp_value}}.isEmpty()) { |
| 176 {{cpp_value}} = "{{reflect_empty}}"; | 173 {{cpp_value}} = "{{reflect_empty}}"; |
| 177 {% else %} | 174 {% else %} |
| 178 if ({{cpp_value}}.isEmpty()) { | 175 if ({{cpp_value}}.isEmpty()) { |
| 179 {# FIXME: should use [ReflectEmpty] instead; need to change IDL files #} | 176 {# FIXME: should use [ReflectEmpty] instead; need to change IDL files #} |
| 180 {% if reflect_missing %} | 177 {% if reflect_missing %} |
| 181 {{cpp_value}} = "{{reflect_missing}}"; | 178 {{cpp_value}} = "{{reflect_missing}}"; |
| 182 {% else %} | 179 {% else %} |
| 183 ; | 180 ; |
| 184 {% endif %} | 181 {% endif %} |
| 185 {% endif %} | 182 {% endif %} |
| 186 {% for value in reflect_only_values %} | 183 {% for value in reflect_only_values %} |
| 187 } else if (equalIgnoringASCIICase({{cpp_value}}, "{{value}}")) { | 184 } else if (equalIgnoringASCIICase({{cpp_value}}, "{{value}}")) { |
| 188 {{cpp_value}} = "{{value}}"; | 185 {{cpp_value}} = "{{value}}"; |
| 189 {% endfor %} | 186 {% endfor %} |
| 190 } else { | 187 } else { |
| 191 {{cpp_value}} = "{{reflect_invalid}}"; | 188 {{cpp_value}} = "{{reflect_invalid}}"; |
| 192 } | 189 } |
| 193 {% endmacro %} | 190 {% endmacro %} |
| 194 | 191 |
| 195 | 192 |
| 196 {##############################################################################} | 193 {##############################################################################} |
| 197 {% macro attribute_getter_callback(attribute, world_suffix) %} | 194 {% macro attribute_getter_callback(attribute, world_suffix) %} |
| 198 void {{attribute.name}}AttributeGetterCallback{{world_suffix}}( | 195 void {{attribute.name}}AttributeGetterCallback{{world_suffix}}( |
| 199 {%- if attribute.is_data_type_property %} | 196 {%- if attribute.is_data_type_property %} |
| 200 v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>& info | 197 v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>& info |
| 201 {%- else %} | 198 {%- else %} |
| 202 const v8::FunctionCallbackInfo<v8::Value>& info | 199 const v8::FunctionCallbackInfo<v8::Value>& info |
| 203 {%- endif %}) | 200 {%- endif %}) { |
| 204 { | 201 {% if attribute.deprecate_as %} |
| 205 {% if attribute.deprecate_as %} | 202 Deprecation::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentExec
utionContext(info.GetIsolate()), UseCounter::{{attribute.deprecate_as}}); |
| 206 Deprecation::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentEx
ecutionContext(info.GetIsolate()), UseCounter::{{attribute.deprecate_as}}); | 203 {% endif %} |
| 207 {% endif %} | |
| 208 | 204 |
| 209 {% if attribute.measure_as %} | 205 {% if attribute.measure_as %} |
| 210 UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionConte
xt(info.GetIsolate()), UseCounter::{{attribute.measure_as('AttributeGetter')}}); | 206 UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext
(info.GetIsolate()), UseCounter::{{attribute.measure_as('AttributeGetter')}}); |
| 211 {% endif %} | 207 {% endif %} |
| 212 | 208 |
| 213 {% if world_suffix in attribute.activity_logging_world_list_for_getter %} | 209 {% if world_suffix in attribute.activity_logging_world_list_for_getter %} |
| 214 {% if attribute.is_static %} | 210 {% if attribute.is_static %} |
| 215 ScriptState* scriptState = ScriptState::forFunctionObject(info); | 211 ScriptState* scriptState = ScriptState::forFunctionObject(info); |
| 216 {% else %} | 212 {% else %} |
| 217 ScriptState* scriptState = ScriptState::forReceiverObject(info); | 213 ScriptState* scriptState = ScriptState::forReceiverObject(info); |
| 218 {% endif %} | 214 {% endif %} |
| 219 V8PerContextData* contextData = scriptState->perContextData(); | 215 V8PerContextData* contextData = scriptState->perContextData(); |
| 220 if ( | 216 if ( |
| 221 {%- if attribute.activity_logging_world_check -%} | 217 {%- if attribute.activity_logging_world_check -%} |
| 222 scriptState->world().isIsolatedWorld() && {# one space at the end #} | 218 scriptState->world().isIsolatedWorld() && {# one space at the end #} |
| 223 {%- endif -%} | 219 {%- endif -%} |
| 224 contextData && contextData->activityLogger()) { | 220 contextData && contextData->activityLogger()) { |
| 225 contextData->activityLogger()->logGetter("{{interface_name}}.{{attribute
.name}}"); | 221 contextData->activityLogger()->logGetter("{{interface_name}}.{{attribute.nam
e}}"); |
| 226 } | 222 } |
| 227 {% endif %} | 223 {% endif %} |
| 228 | 224 |
| 229 {% if attribute.has_custom_getter %} | 225 {% if attribute.has_custom_getter %} |
| 230 {{v8_class}}::{{attribute.name}}AttributeGetterCustom(info); | 226 {{v8_class}}::{{attribute.name}}AttributeGetterCustom(info); |
| 231 {% else %} | 227 {% else %} |
| 232 {{cpp_class_or_partial}}V8Internal::{{attribute.name}}AttributeGetter{{world
_suffix}}(info); | 228 {{cpp_class_or_partial}}V8Internal::{{attribute.name}}AttributeGetter{{world_s
uffix}}(info); |
| 233 {% endif %} | 229 {% endif %} |
| 234 } | 230 } |
| 235 {% endmacro %} | 231 {% endmacro %} |
| 236 | 232 |
| 237 | 233 |
| 238 {##############################################################################} | 234 {##############################################################################} |
| 239 {% macro constructor_getter_callback(attribute, world_suffix) %} | 235 {% macro constructor_getter_callback(attribute, world_suffix) %} |
| 240 void {{attribute.name}}ConstructorGetterCallback{{world_suffix}}(v8::Local<v8::N
ame> property, const v8::PropertyCallbackInfo<v8::Value>& info) | 236 void {{attribute.name}}ConstructorGetterCallback{{world_suffix}}(v8::Local<v8::N
ame> property, const v8::PropertyCallbackInfo<v8::Value>& info) { |
| 241 { | 237 {% if attribute.deprecate_as %} |
| 242 {% if attribute.deprecate_as %} | 238 Deprecation::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentExec
utionContext(info.GetIsolate()), UseCounter::{{attribute.deprecate_as}}); |
| 243 Deprecation::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentEx
ecutionContext(info.GetIsolate()), UseCounter::{{attribute.deprecate_as}}); | 239 {% endif %} |
| 244 {% endif %} | |
| 245 | 240 |
| 246 {% if attribute.measure_as %} | 241 {% if attribute.measure_as %} |
| 247 UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionConte
xt(info.GetIsolate()), UseCounter::{{attribute.measure_as('ConstructorGetter')}}
); | 242 UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext
(info.GetIsolate()), UseCounter::{{attribute.measure_as('ConstructorGetter')}}); |
| 248 {% endif %} | 243 {% endif %} |
| 249 | 244 |
| 250 v8ConstructorAttributeGetter(property, info); | 245 v8ConstructorAttributeGetter(property, info); |
| 251 } | 246 } |
| 252 {% endmacro %} | 247 {% endmacro %} |
| 253 | 248 |
| 254 | 249 |
| 255 {##############################################################################} | 250 {##############################################################################} |
| 256 {% macro attribute_setter(attribute, world_suffix) %} | 251 {% macro attribute_setter(attribute, world_suffix) %} |
| 257 static void {{attribute.name}}AttributeSetter{{world_suffix}}( | 252 static void {{attribute.name}}AttributeSetter{{world_suffix}}( |
| 258 {%- if attribute.is_data_type_property %} | 253 {%- if attribute.is_data_type_property %} |
| 259 v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info | 254 v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info |
| 260 {%- else %} | 255 {%- else %} |
| 261 v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info | 256 v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info |
| 262 {%- endif %}) | 257 {%- endif %}) { |
| 263 {% filter format_remove_duplicates([ | 258 {% filter format_remove_duplicates(['ExceptionState exceptionState']) %} |
| 264 'ExceptionState exceptionState']) %} | 259 {% set define_exception_state -%} |
| 265 { | 260 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::SetterContext
, "{{interface_name}}", "{{attribute.name}}"); |
| 266 {% set define_exception_state -%} | 261 {%- endset %} |
| 267 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::SetterConte
xt, "{{interface_name}}", "{{attribute.name}}"); | |
| 268 {%- endset %} | |
| 269 | 262 |
| 270 {% if attribute.is_lenient_this %} | 263 {% if attribute.is_lenient_this %} |
| 271 // [LenientThis] | 264 // [LenientThis] |
| 272 // Make sure that info.Holder() really points to an instance if [LenientThis
]. | 265 // Make sure that info.Holder() really points to an instance if [LenientThis]. |
| 273 if (!{{v8_class}}::hasInstance(info.Holder(), info.GetIsolate())) | 266 if (!{{v8_class}}::hasInstance(info.Holder(), info.GetIsolate())) |
| 274 return; // Return silently because of [LenientThis]. | 267 return; // Return silently because of [LenientThis]. |
| 275 {% endif %} | 268 {% endif %} |
| 276 | 269 |
| 277 {% if not attribute.is_static and | 270 {% if not attribute.is_static and not attribute.is_replaceable %} |
| 278 not attribute.is_replaceable %} | 271 v8::Local<v8::Object> holder = info.Holder(); |
| 279 v8::Local<v8::Object> holder = info.Holder(); | 272 {% if attribute.is_put_forwards %} |
| 280 {% if attribute.is_put_forwards %} | 273 {{cpp_class}}* proxyImpl = {{v8_class}}::toImpl(holder); |
| 281 {{cpp_class}}* proxyImpl = {{v8_class}}::toImpl(holder); | 274 {{attribute.cpp_type}} impl = WTF::getPtr(proxyImpl->{{attribute.name}}()); |
| 282 {{attribute.cpp_type}} impl = WTF::getPtr(proxyImpl->{{attribute.name}}()); | 275 if (!impl) |
| 283 if (!impl) | 276 return; |
| 284 return; | 277 {% else %} |
| 285 {% else %} | 278 {{cpp_class}}* impl = {{v8_class}}::toImpl(holder); |
| 286 {{cpp_class}}* impl = {{v8_class}}::toImpl(holder); | 279 {% endif %} |
| 287 {% endif %} | 280 {% endif %} |
| 288 {% endif %} | |
| 289 | 281 |
| 290 {% if attribute.is_check_security_for_receiver and | 282 {% if attribute.is_check_security_for_receiver and not attribute.is_data_type_
property %} |
| 291 not attribute.is_data_type_property %} | 283 // Perform a security check for the receiver object. |
| 292 // Perform a security check for the receiver object. | 284 {{define_exception_state}} |
| 293 {{define_exception_state}} | 285 if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate()),
impl, exceptionState)) { |
| 294 if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate()
), impl, exceptionState)) { | 286 v8SetReturnValue(info, v8Value); |
| 295 v8SetReturnValue(info, v8Value); | 287 return; |
| 296 return; | 288 } |
| 297 } | 289 {% endif %} |
| 298 {% endif %} | |
| 299 | 290 |
| 300 {% if attribute.is_check_security_for_return_value %} | 291 {% if attribute.is_check_security_for_return_value %} |
| 301 #error Attribute setter with the security check for the return value is not supp
orted. Since the return value is the given value to be set, it\'s meaningless t
o perform the security check for the return value. | 292 #error Attribute setter with the security check for the return value is not supp
orted. Since the return value is the given value to be set, it\'s meaningless t
o perform the security check for the return value. |
| 302 {% endif %} | 293 {% endif %} |
| 303 | 294 |
| 304 {% if attribute.is_custom_element_callbacks or | 295 {% if attribute.is_custom_element_callbacks or |
| 305 (attribute.is_reflect and | 296 (attribute.is_reflect and not (attribute.idl_type == 'DOMString' and is_
node)) %} |
| 306 not (attribute.idl_type == 'DOMString' and is_node)) %} | 297 // Skip on compact node DOMString getters. |
| 307 // Skip on compact node DOMString getters. | 298 V0CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; |
| 308 V0CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; | 299 {% endif %} |
| 309 {% endif %} | |
| 310 | 300 |
| 311 {% if attribute.has_setter_exception_state %} | 301 {% if attribute.has_setter_exception_state %} |
| 312 {{define_exception_state}} | 302 {{define_exception_state}} |
| 313 {% endif %} | 303 {% endif %} |
| 314 | 304 |
| 315 // Prepare the value to be set. | 305 // Prepare the value to be set. |
| 316 {% if attribute.idl_type == 'EventHandler' %} | 306 {% if attribute.idl_type == 'EventHandler' %} |
| 317 {% if not is_node %} | 307 {% if not is_node %} |
| 318 moveEventListenerToNewWrapper(info.GetIsolate(), holder, {{attribute.event_h
andler_getter_expression}}, v8Value, {{v8_class}}::eventListenerCacheIndex); | 308 moveEventListenerToNewWrapper(info.GetIsolate(), holder, {{attribute.event_han
dler_getter_expression}}, v8Value, {{v8_class}}::eventListenerCacheIndex); |
| 319 {% endif %} | 309 {% endif %} |
| 320 {% else %}{# not EventHandler #} | 310 {% else %}{# not EventHandler #} |
| 321 {{v8_value_to_local_cpp_value(attribute) | indent}} | 311 {{v8_value_to_local_cpp_value(attribute) | indent(2)}} |
| 322 {% endif %} | 312 {% endif %} |
| 323 | 313 |
| 324 {% if attribute.has_type_checking_interface %} | 314 {% if attribute.has_type_checking_interface %} |
| 325 // Type check per: http://heycam.github.io/webidl/#es-interface | 315 // Type check per: http://heycam.github.io/webidl/#es-interface |
| 326 if (!cppValue{% if attribute.is_nullable %} && !isUndefinedOrNull(v8Value){%
endif %}) { | 316 if (!cppValue{% if attribute.is_nullable %} && !isUndefinedOrNull(v8Value){% e
ndif %}) { |
| 327 exceptionState.throwTypeError("The provided value is not of type '{{attr
ibute.idl_type}}'."); | 317 exceptionState.throwTypeError("The provided value is not of type '{{attribut
e.idl_type}}'."); |
| 328 return; | 318 return; |
| 329 } | 319 } |
| 330 {% endif %} | 320 {% endif %} |
| 331 | 321 |
| 332 {% if attribute.enum_values %} | 322 {% if attribute.enum_values %} |
| 333 // Type check per: http://heycam.github.io/webidl/#dfn-attribute-setter | 323 // Type check per: http://heycam.github.io/webidl/#dfn-attribute-setter |
| 334 // Returns undefined without setting the value if the value is invalid. | 324 // Returns undefined without setting the value if the value is invalid. |
| 335 TrackExceptionState trackExceptionState; | 325 TrackExceptionState trackExceptionState; |
| 336 {{declare_enum_validation_variable(attribute.enum_values) | indent}} | 326 {{declare_enum_validation_variable(attribute.enum_values) | indent(2)}} |
| 337 if (!isValidEnum(cppValue, validValues, WTF_ARRAY_LENGTH(validValues), "{{at
tribute.enum_type}}", trackExceptionState)) { | 327 if (!isValidEnum(cppValue, validValues, WTF_ARRAY_LENGTH(validValues), "{{attr
ibute.enum_type}}", trackExceptionState)) { |
| 338 currentExecutionContext(info.GetIsolate())->addConsoleMessage(ConsoleMes
sage::create(JSMessageSource, WarningMessageLevel, trackExceptionState.message()
)); | 328 currentExecutionContext(info.GetIsolate())->addConsoleMessage(ConsoleMessage
::create(JSMessageSource, WarningMessageLevel, trackExceptionState.message())); |
| 339 return; | 329 return; |
| 340 } | 330 } |
| 341 {% endif %} | 331 {% endif %} |
| 342 | 332 |
| 343 {% if attribute.is_call_with_execution_context or | 333 {% if attribute.is_call_with_execution_context or attribute.is_setter_call_wit
h_execution_context %} |
| 344 attribute.is_setter_call_with_execution_context %} | 334 ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()
); |
| 345 ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate
()); | 335 {% endif %} |
| 346 {% endif %} | |
| 347 | 336 |
| 348 {% if attribute.is_call_with_script_state %} | 337 {% if attribute.is_call_with_script_state %} |
| 349 {% if attribute.is_static %} | 338 {% if attribute.is_static %} |
| 350 ScriptState* scriptState = ScriptState::forFunctionObject(info); | 339 ScriptState* scriptState = ScriptState::forFunctionObject(info); |
| 351 {% else %} | 340 {% else %} |
| 352 ScriptState* scriptState = ScriptState::forReceiverObject(info); | 341 ScriptState* scriptState = ScriptState::forReceiverObject(info); |
| 353 {% endif %} | 342 {% endif %} |
| 354 {% endif %} | 343 {% endif %} |
| 355 | 344 |
| 356 {% if attribute.is_replaceable %} | 345 {% if attribute.is_replaceable %} |
| 357 v8::Local<v8::String> propertyName = v8AtomicString(info.GetIsolate(), "{{at
tribute.name}}"); | 346 v8::Local<v8::String> propertyName = v8AtomicString(info.GetIsolate(), "{{attr
ibute.name}}"); |
| 358 {% endif %} | 347 {% endif %} |
| 359 {{attribute.cpp_setter}}; | 348 {{attribute.cpp_setter}}; |
| 360 | 349 |
| 361 {% if attribute.cached_attribute_validation_method %} | 350 {% if attribute.cached_attribute_validation_method %} |
| 362 // [CachedAttribute] | 351 // [CachedAttribute] |
| 363 // Invalidate the cached value. | 352 // Invalidate the cached value. |
| 364 V8HiddenValue::deleteHiddenValue(ScriptState::forFunctionObject(info), holde
r, v8AtomicString(info.GetIsolate(), "{{attribute.name}}")); | 353 V8HiddenValue::deleteHiddenValue(ScriptState::forFunctionObject(info), holder,
v8AtomicString(info.GetIsolate(), "{{attribute.name}}")); |
| 365 {% endif %} | 354 {% endif %} |
| 366 } | 355 } |
| 367 {% endfilter %}{# format_remove_duplicates #} | 356 {% endfilter %}{# format_remove_duplicates #} |
| 368 {% endmacro %} | 357 {% endmacro %} |
| 369 | 358 |
| 370 | 359 |
| 371 {##############################################################################} | 360 {##############################################################################} |
| 372 {% macro attribute_setter_callback(attribute, world_suffix) %} | 361 {% macro attribute_setter_callback(attribute, world_suffix) %} |
| 373 void {{attribute.name}}AttributeSetterCallback{{world_suffix}}( | 362 void {{attribute.name}}AttributeSetterCallback{{world_suffix}}( |
| 374 {%- if attribute.is_data_type_property %} | 363 {%- if attribute.is_data_type_property %} |
| 375 v8::Local<v8::Name>, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInf
o<void>& info | 364 v8::Local<v8::Name>, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInf
o<void>& info |
| 376 {%- else %} | 365 {%- else %} |
| 377 const v8::FunctionCallbackInfo<v8::Value>& info | 366 const v8::FunctionCallbackInfo<v8::Value>& info |
| 378 {%- endif %}) | 367 {%- endif %}) { |
| 379 { | 368 {% if not attribute.is_data_type_property %} |
| 380 {% if not attribute.is_data_type_property %} | 369 v8::Local<v8::Value> v8Value = info[0]; |
| 381 v8::Local<v8::Value> v8Value = info[0]; | 370 {% endif %} |
| 382 {% endif %} | |
| 383 | 371 |
| 384 {% if attribute.deprecate_as %} | 372 {% if attribute.deprecate_as %} |
| 385 Deprecation::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentEx
ecutionContext(info.GetIsolate()), UseCounter::{{attribute.deprecate_as}}); | 373 Deprecation::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentExec
utionContext(info.GetIsolate()), UseCounter::{{attribute.deprecate_as}}); |
| 386 {% endif %} | 374 {% endif %} |
| 387 | 375 |
| 388 {% if attribute.measure_as %} | 376 {% if attribute.measure_as %} |
| 389 UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionConte
xt(info.GetIsolate()), UseCounter::{{attribute.measure_as('AttributeSetter')}}); | 377 UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext
(info.GetIsolate()), UseCounter::{{attribute.measure_as('AttributeSetter')}}); |
| 390 {% endif %} | 378 {% endif %} |
| 391 | 379 |
| 392 {% if world_suffix in attribute.activity_logging_world_list_for_setter %} | 380 {% if world_suffix in attribute.activity_logging_world_list_for_setter %} |
| 393 {% if attribute.is_static %} | 381 {% if attribute.is_static %} |
| 394 ScriptState* scriptState = ScriptState::forFunctionObject(info); | 382 ScriptState* scriptState = ScriptState::forFunctionObject(info); |
| 395 {% else %} | 383 {% else %} |
| 396 ScriptState* scriptState = ScriptState::forReceiverObject(info); | 384 ScriptState* scriptState = ScriptState::forReceiverObject(info); |
| 397 {% endif %} | 385 {% endif %} |
| 398 V8PerContextData* contextData = scriptState->perContextData(); | 386 V8PerContextData* contextData = scriptState->perContextData(); |
| 399 if ( | 387 if ( |
| 400 {%- if attribute.activity_logging_world_check -%} | 388 {%- if attribute.activity_logging_world_check -%} |
| 401 scriptState->world().isIsolatedWorld() && {# one space at the end #} | 389 scriptState->world().isIsolatedWorld() && {# one space at the end #} |
| 402 {%- endif -%} | 390 {%- endif -%} |
| 403 contextData && contextData->activityLogger()) { | 391 contextData && contextData->activityLogger()) { |
| 404 contextData->activityLogger()->logSetter("{{interface_name}}.{{attribute
.name}}", v8Value); | 392 contextData->activityLogger()->logSetter("{{interface_name}}.{{attribute.nam
e}}", v8Value); |
| 405 } | 393 } |
| 406 {% endif %} | 394 {% endif %} |
| 407 | 395 |
| 408 {% if attribute.is_ce_reactions %} | 396 {% if attribute.is_ce_reactions %} |
| 409 CEReactionsScope ceReactionsScope; | 397 CEReactionsScope ceReactionsScope; |
| 410 {% endif %} | 398 {% endif %} |
| 411 | 399 |
| 412 {% if attribute.is_custom_element_callbacks or attribute.is_reflect %} | 400 {% if attribute.is_custom_element_callbacks or attribute.is_reflect %} |
| 413 V0CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; | 401 V0CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; |
| 414 {% endif %} | 402 {% endif %} |
| 415 | 403 |
| 416 {% if attribute.has_custom_setter %} | 404 {% if attribute.has_custom_setter %} |
| 417 {{v8_class}}::{{attribute.name}}AttributeSetterCustom(v8Value, info); | 405 {{v8_class}}::{{attribute.name}}AttributeSetterCustom(v8Value, info); |
| 418 {% else %} | 406 {% else %} |
| 419 {{cpp_class_or_partial}}V8Internal::{{attribute.name}}AttributeSetter{{world
_suffix}}(v8Value, info); | 407 {{cpp_class_or_partial}}V8Internal::{{attribute.name}}AttributeSetter{{world_s
uffix}}(v8Value, info); |
| 420 {% endif %} | 408 {% endif %} |
| 421 } | 409 } |
| 422 {% endmacro %} | 410 {% endmacro %} |
| 423 | 411 |
| 424 | 412 |
| 425 {##############################################################################} | 413 {##############################################################################} |
| 426 {% macro attribute_getter_implemented_in_private_script(attribute) %} | 414 {% macro attribute_getter_implemented_in_private_script(attribute) %} |
| 427 bool {{v8_class}}::PrivateScript::{{attribute.name}}AttributeGetter(LocalFrame*
frame, {{cpp_class}}* holderImpl, {{attribute.cpp_type}}* result) | 415 bool {{v8_class}}::PrivateScript::{{attribute.name}}AttributeGetter(LocalFrame*
frame, {{cpp_class}}* holderImpl, {{attribute.cpp_type}}* result) { |
| 428 { | 416 if (!frame) |
| 429 if (!frame) | 417 return false; |
| 430 return false; | 418 v8::HandleScope handleScope(toIsolate(frame)); |
| 431 v8::HandleScope handleScope(toIsolate(frame)); | 419 ScriptForbiddenScope::AllowUserAgentScript script; |
| 432 ScriptForbiddenScope::AllowUserAgentScript script; | 420 ScriptState* scriptState = ScriptState::forWorld(frame, DOMWrapperWorld::priva
teScriptIsolatedWorld()); |
| 433 ScriptState* scriptState = ScriptState::forWorld(frame, DOMWrapperWorld::pri
vateScriptIsolatedWorld()); | 421 if (!scriptState) |
| 434 if (!scriptState) | 422 return false; |
| 435 return false; | 423 ScriptState* scriptStateInUserScript = ScriptState::forMainWorld(frame); |
| 436 ScriptState* scriptStateInUserScript = ScriptState::forMainWorld(frame); | 424 if (!scriptStateInUserScript) |
| 437 if (!scriptStateInUserScript) | 425 return false; |
| 438 return false; | |
| 439 | 426 |
| 440 ScriptState::Scope scope(scriptState); | 427 ScriptState::Scope scope(scriptState); |
| 441 v8::Local<v8::Value> holder = toV8(holderImpl, scriptState->context()->Globa
l(), scriptState->isolate()); | 428 v8::Local<v8::Value> holder = toV8(holderImpl, scriptState->context()->Global(
), scriptState->isolate()); |
| 442 ExceptionState exceptionState(ExceptionState::GetterContext, "{{attribute.na
me}}", "{{cpp_class}}", scriptState->context()->Global(), scriptState->isolate()
); | 429 ExceptionState exceptionState(ExceptionState::GetterContext, "{{attribute.name
}}", "{{cpp_class}}", scriptState->context()->Global(), scriptState->isolate()); |
| 443 v8::Local<v8::Value> v8Value = PrivateScriptRunner::runDOMAttributeGetter(sc
riptState, scriptStateInUserScript, "{{cpp_class}}", "{{attribute.name}}", holde
r); | 430 v8::Local<v8::Value> v8Value = PrivateScriptRunner::runDOMAttributeGetter(scri
ptState, scriptStateInUserScript, "{{cpp_class}}", "{{attribute.name}}", holder)
; |
| 444 if (v8Value.IsEmpty()) | 431 if (v8Value.IsEmpty()) |
| 445 return false; | 432 return false; |
| 446 {{v8_value_to_local_cpp_value(attribute.private_script_v8_value_to_local_cpp
_value) | indent}} | 433 {{v8_value_to_local_cpp_value(attribute.private_script_v8_value_to_local_cpp_v
alue) | indent(2)}} |
| 447 RELEASE_ASSERT(!exceptionState.hadException()); | 434 CHECK(!exceptionState.hadException()); |
| 448 *result = cppValue; | 435 *result = cppValue; |
| 449 return true; | 436 return true; |
| 450 } | 437 } |
| 451 {% endmacro %} | 438 {% endmacro %} |
| 452 | 439 |
| 453 | 440 |
| 454 {% macro attribute_setter_implemented_in_private_script(attribute) %} | 441 {% macro attribute_setter_implemented_in_private_script(attribute) %} |
| 455 bool {{v8_class}}::PrivateScript::{{attribute.name}}AttributeSetter(LocalFrame*
frame, {{cpp_class}}* holderImpl, {{attribute.argument_cpp_type}} cppValue) | 442 bool {{v8_class}}::PrivateScript::{{attribute.name}}AttributeSetter(LocalFrame*
frame, {{cpp_class}}* holderImpl, {{attribute.argument_cpp_type}} cppValue) { |
| 456 { | 443 if (!frame) |
| 457 if (!frame) | 444 return false; |
| 458 return false; | 445 v8::HandleScope handleScope(toIsolate(frame)); |
| 459 v8::HandleScope handleScope(toIsolate(frame)); | 446 ScriptForbiddenScope::AllowUserAgentScript script; |
| 460 ScriptForbiddenScope::AllowUserAgentScript script; | 447 ScriptState* scriptState = ScriptState::forWorld(frame, DOMWrapperWorld::priva
teScriptIsolatedWorld()); |
| 461 ScriptState* scriptState = ScriptState::forWorld(frame, DOMWrapperWorld::pri
vateScriptIsolatedWorld()); | 448 if (!scriptState) |
| 462 if (!scriptState) | 449 return false; |
| 463 return false; | 450 ScriptState* scriptStateInUserScript = ScriptState::forMainWorld(frame); |
| 464 ScriptState* scriptStateInUserScript = ScriptState::forMainWorld(frame); | 451 if (!scriptStateInUserScript) |
| 465 if (!scriptStateInUserScript) | 452 return false; |
| 466 return false; | |
| 467 | 453 |
| 468 ScriptState::Scope scope(scriptState); | 454 ScriptState::Scope scope(scriptState); |
| 469 v8::Local<v8::Value> holder = toV8(holderImpl, scriptState->context()->Globa
l(), scriptState->isolate()); | 455 v8::Local<v8::Value> holder = toV8(holderImpl, scriptState->context()->Global(
), scriptState->isolate()); |
| 470 ExceptionState exceptionState(ExceptionState::SetterContext, "{{attribute.na
me}}", "{{cpp_class}}", scriptState->context()->Global(), scriptState->isolate()
); | 456 ExceptionState exceptionState(ExceptionState::SetterContext, "{{attribute.name
}}", "{{cpp_class}}", scriptState->context()->Global(), scriptState->isolate()); |
| 471 return PrivateScriptRunner::runDOMAttributeSetter(scriptState, scriptStateIn
UserScript, "{{cpp_class}}", "{{attribute.name}}", holder, {{attribute.private_s
cript_cpp_value_to_v8_value}}); | 457 return PrivateScriptRunner::runDOMAttributeSetter(scriptState, scriptStateInUs
erScript, "{{cpp_class}}", "{{attribute.name}}", holder, {{attribute.private_scr
ipt_cpp_value_to_v8_value}}); |
| 472 } | 458 } |
| 473 {% endmacro %} | 459 {% endmacro %} |
| 474 | 460 |
| 475 | 461 |
| 476 {##############################################################################} | 462 {##############################################################################} |
| 477 {% macro attribute_configuration(attribute) %} | 463 {% macro attribute_configuration(attribute) %} |
| 478 {% from 'utilities.cpp.tmpl' import property_location %} | 464 {% from 'utilities.cpp.tmpl' import property_location %} |
| 479 {% if attribute.constructor_type %} | 465 {% if attribute.constructor_type %} |
| 480 {% set getter_callback = | 466 {% set getter_callback = |
| 481 '%sV8Internal::%sConstructorGetterCallback' % (cpp_class_or_partial, attr
ibute.name) | 467 '%sV8Internal::%sConstructorGetterCallback' % (cpp_class_or_partial, attr
ibute.name) |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 521 setter_callback_for_main_world, | 507 setter_callback_for_main_world, |
| 522 wrapper_type_info, | 508 wrapper_type_info, |
| 523 access_control, | 509 access_control, |
| 524 property_attribute, | 510 property_attribute, |
| 525 only_exposed_to_private_script, | 511 only_exposed_to_private_script, |
| 526 property_location(attribute), | 512 property_location(attribute), |
| 527 holder_check, | 513 holder_check, |
| 528 ] %} | 514 ] %} |
| 529 {{'{'}}{{attribute_configuration_list | join(', ')}}{{'}'}} | 515 {{'{'}}{{attribute_configuration_list | join(', ')}}{{'}'}} |
| 530 {%- endmacro %} | 516 {%- endmacro %} |
| OLD | NEW |