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

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

Issue 2446213002: [Bindings] [Reformat] Reformat template files (Closed)
Patch Set: Rebase (Split out Callbackfunctions) Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 {% extends 'interface_base.cpp.tmpl' %} 1 {% extends 'interface_base.cpp.tmpl' %}
2 2
3 {% set has_prepare_prototype_and_interface_object = 3 {% set has_prepare_prototype_and_interface_object =
4 unscopables or has_conditional_attributes_on_prototype or 4 unscopables 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 {% if getter.is_raises_exception %}
18 {% if getter.is_raises_exception %} 18 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::IndexedGetter Context, "{{interface_name}}");
19 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::IndexedGett erContext, "{{interface_name}}"); 19 {% endif %}
20 {% endif %}
21 20
22 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); 21 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
23 22
24 // We assume that all the implementations support length() method, although 23 // We assume that all the implementations support length() method, although
25 // the spec doesn't require that length() must exist. It's okay that 24 // the spec doesn't require that length() must exist. It's okay that
26 // the interface does not have length attribute as long as the 25 // the interface does not have length attribute as long as the
27 // implementation supports length() member function. 26 // implementation supports length() member function.
28 if (index >= impl->length()) 27 if (index >= impl->length())
29 return; // Returns undefined due to out-of-range. 28 return; // Returns undefined due to out-of-range.
30 29
31 {% set getter_name = getter.name or 'anonymousIndexedGetter' %} 30 {% set getter_name = getter.name or 'anonymousIndexedGetter' %}
32 {% set getter_arguments = ['index'] %} 31 {% set getter_arguments = ['index'] %}
33 {% if getter.is_call_with_script_state %} 32 {% if getter.is_call_with_script_state %}
34 ScriptState* scriptState = ScriptState::forReceiverObject(info); 33 ScriptState* scriptState = ScriptState::forReceiverObject(info);
35 {% set getter_arguments = ['scriptState'] + getter_arguments %} 34 {% set getter_arguments = ['scriptState'] + getter_arguments %}
36 {% endif %} 35 {% endif %}
37 {% if getter.is_raises_exception %} 36 {% if getter.is_raises_exception %}
38 {% set getter_arguments = getter_arguments + ['exceptionState'] %} 37 {% set getter_arguments = getter_arguments + ['exceptionState'] %}
39 {% endif %} 38 {% endif %}
40 {{getter.cpp_type}} result = impl->{{getter_name}}({{getter_arguments | join (', ')}}); 39 {{getter.cpp_type}} result = impl->{{getter_name}}({{getter_arguments | join(' , ')}});
41 {{getter.v8_set_return_value}}; 40 {{getter.v8_set_return_value}};
42 } 41 }
43 42
44 {% endif %} 43 {% endif %}
45 {% endblock %} 44 {% endblock %}
46 45
47 46
48 {##############################################################################} 47 {##############################################################################}
49 {% block indexed_property_getter_callback %} 48 {% block indexed_property_getter_callback %}
50 {% if indexed_property_getter or named_property_getter %} 49 {% if indexed_property_getter or named_property_getter %}
51 {% set getter = indexed_property_getter or named_property_getter %} 50 {% set getter = indexed_property_getter or named_property_getter %}
52 void indexedPropertyGetterCallback(uint32_t index, const v8::PropertyCallbackInf o<v8::Value>& info) 51 void indexedPropertyGetterCallback(uint32_t index, const v8::PropertyCallbackInf o<v8::Value>& info) {
53 { 52 {% if indexed_property_getter %}
54 {% if indexed_property_getter %}
55 53
56 {% if getter.is_custom %} 54 {% if getter.is_custom %}
57 {{v8_class}}::indexedPropertyGetterCustom(index, info); 55 {{v8_class}}::indexedPropertyGetterCustom(index, info);
58 {% else %} 56 {% else %}
59 {{cpp_class}}V8Internal::indexedPropertyGetter(index, info); 57 {{cpp_class}}V8Internal::indexedPropertyGetter(index, info);
60 {% endif %} 58 {% endif %}
61 59
62 {% else %}{# otherwise, named property #} 60 {% else %}{# otherwise, named property #}
63 61
64 const AtomicString& propertyName = AtomicString::number(index); 62 const AtomicString& propertyName = AtomicString::number(index);
65 63
66 {% if getter.is_custom %} 64 {% if getter.is_custom %}
67 {{v8_class}}::namedPropertyGetterCustom(propertyName, info); 65 {{v8_class}}::namedPropertyGetterCustom(propertyName, info);
68 {% else %} 66 {% else %}
69 {{cpp_class}}V8Internal::namedPropertyGetter(propertyName, info); 67 {{cpp_class}}V8Internal::namedPropertyGetter(propertyName, info);
70 {% endif %} 68 {% endif %}
71 69
72 {% endif %}{# indexed_property_getter #} 70 {% endif %}{# indexed_property_getter #}
73 } 71 }
74 72
75 {% endif %} 73 {% endif %}
76 {% endblock %} 74 {% endblock %}
77 75
78 76
79 {##############################################################################} 77 {##############################################################################}
80 {% block indexed_property_setter %} 78 {% block indexed_property_setter %}
81 {% from 'utilities.cpp.tmpl' import v8_value_to_local_cpp_value %} 79 {% from 'utilities.cpp.tmpl' import v8_value_to_local_cpp_value %}
82 {% if indexed_property_setter and not indexed_property_setter.is_custom %} 80 {% if indexed_property_setter and not indexed_property_setter.is_custom %}
83 {% set setter = indexed_property_setter %} 81 {% set setter = indexed_property_setter %}
84 static void indexedPropertySetter(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) 82 static void indexedPropertySetter(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) {
85 { 83 {% if setter.has_exception_state %}
86 {% if setter.has_exception_state %} 84 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::IndexedSetter Context, "{{interface_name}}");
87 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::IndexedSett erContext, "{{interface_name}}"); 85 {% endif %}
88 {% endif %}
89 86
90 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); 87 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
91 {{v8_value_to_local_cpp_value(setter) | indent}} 88 {{v8_value_to_local_cpp_value(setter) | indent(2)}}
92 {% if setter.has_type_checking_interface %} 89 {% if setter.has_type_checking_interface %}
93 {# Type checking for interface types (if interface not implemented, throw 90 {# Type checking for interface types (if interface not implemented, throw
94 TypeError), per http://www.w3.org/TR/WebIDL/#es-interface #} 91 TypeError), per http://www.w3.org/TR/WebIDL/#es-interface #}
95 if (!propertyValue{% if setter.is_nullable %} && !isUndefinedOrNull(v8Value) {% endif %}) { 92 if (!propertyValue{% if setter.is_nullable %} && !isUndefinedOrNull(v8Value){% endif %}) {
96 exceptionState.throwTypeError("The provided value is not of type '{{sett er.idl_type}}'."); 93 exceptionState.throwTypeError("The provided value is not of type '{{setter.i dl_type}}'.");
97 return; 94 return;
98 } 95 }
99 {% endif %} 96 {% endif %}
100 97
101 {% set setter_name = setter.name or 'anonymousIndexedSetter' %} 98 {% set setter_name = setter.name or 'anonymousIndexedSetter' %}
102 {% set setter_arguments = ['index', 'propertyValue'] %} 99 {% set setter_arguments = ['index', 'propertyValue'] %}
103 {% if setter.is_call_with_script_state %} 100 {% if setter.is_call_with_script_state %}
104 ScriptState* scriptState = ScriptState::forReceiverObject(info); 101 ScriptState* scriptState = ScriptState::forReceiverObject(info);
105 {% set setter_arguments = ['scriptState'] + setter_arguments %} 102 {% set setter_arguments = ['scriptState'] + setter_arguments %}
106 {% endif %} 103 {% endif %}
107 {% if setter.is_raises_exception %} 104 {% if setter.is_raises_exception %}
108 {% set setter_arguments = setter_arguments + ['exceptionState'] %} 105 {% set setter_arguments = setter_arguments + ['exceptionState'] %}
109 {% endif %} 106 {% endif %}
110 bool result = impl->{{setter_name}}({{setter_arguments | join(', ')}}); 107 bool result = impl->{{setter_name}}({{setter_arguments | join(', ')}});
111 {% if setter.is_raises_exception %} 108 {% if setter.is_raises_exception %}
112 if (exceptionState.hadException()) 109 if (exceptionState.hadException())
113 return; 110 return;
114 {% endif %} 111 {% endif %}
115 if (!result) 112 if (!result)
116 return; 113 return;
117 v8SetReturnValue(info, v8Value); 114 v8SetReturnValue(info, v8Value);
118 } 115 }
119 116
120 {% endif %} 117 {% endif %}
121 {% endblock %} 118 {% endblock %}
122 119
123 120
124 {##############################################################################} 121 {##############################################################################}
125 {% block indexed_property_setter_callback %} 122 {% block indexed_property_setter_callback %}
126 {% if indexed_property_setter or named_property_setter %} 123 {% if indexed_property_setter or named_property_setter %}
127 {% set setter = indexed_property_setter or named_property_setter %} 124 {% set setter = indexed_property_setter or named_property_setter %}
128 void indexedPropertySetterCallback(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) 125 void indexedPropertySetterCallback(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) {
129 { 126 {% if setter.is_ce_reactions %}
130 {% if setter.is_ce_reactions %} 127 CEReactionsScope ceReactionsScope;
131 CEReactionsScope ceReactionsScope; 128 {% endif %}
132 {% endif %}
133 129
134 {% if indexed_property_setter %} 130 {% if indexed_property_setter %}
135 131
136 {% if setter.is_custom %} 132 {% if setter.is_custom %}
137 {{v8_class}}::indexedPropertySetterCustom(index, v8Value, info); 133 {{v8_class}}::indexedPropertySetterCustom(index, v8Value, info);
138 {% else %} 134 {% else %}
139 {{cpp_class}}V8Internal::indexedPropertySetter(index, v8Value, info); 135 {{cpp_class}}V8Internal::indexedPropertySetter(index, v8Value, info);
140 {% endif %} 136 {% endif %}
141 137
142 {% else %}{# otherwise, named property #} 138 {% else %}{# otherwise, named property #}
143 139
144 const AtomicString& propertyName = AtomicString::number(index); 140 const AtomicString& propertyName = AtomicString::number(index);
145 141
146 {% if setter.is_custom %} 142 {% if setter.is_custom %}
147 {{v8_class}}::namedPropertySetterCustom(propertyName, v8Value, info); 143 {{v8_class}}::namedPropertySetterCustom(propertyName, v8Value, info);
148 {% else %} 144 {% else %}
149 {{cpp_class}}V8Internal::namedPropertySetter(propertyName, v8Value, info); 145 {{cpp_class}}V8Internal::namedPropertySetter(propertyName, v8Value, info);
150 {% endif %} 146 {% endif %}
151 147
152 {% endif %}{# indexed_property_setter #} 148 {% endif %}{# indexed_property_setter #}
153 } 149 }
154 150
155 {% endif %} 151 {% endif %}
156 {% endblock %} 152 {% endblock %}
157 153
158 154
159 {##############################################################################} 155 {##############################################################################}
160 {% block indexed_property_deleter %} 156 {% block indexed_property_deleter %}
161 {% if indexed_property_deleter and not indexed_property_deleter.is_custom %} 157 {% if indexed_property_deleter and not indexed_property_deleter.is_custom %}
162 {% set deleter = indexed_property_deleter %} 158 {% set deleter = indexed_property_deleter %}
163 static void indexedPropertyDeleter(uint32_t index, const v8::PropertyCallbackInf o<v8::Boolean>& info) 159 static void indexedPropertyDeleter(uint32_t index, const v8::PropertyCallbackInf o<v8::Boolean>& info) {
164 { 160 {% if deleter.is_raises_exception %}
165 {% if deleter.is_raises_exception %} 161 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::IndexedDeleti onContext, "{{interface_name}}");
166 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::IndexedDele tionContext, "{{interface_name}}"); 162 {% endif %}
167 {% endif %}
168 163
169 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); 164 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
170 165
171 {% set deleter_name = deleter.name or 'anonymousIndexedDeleter' %} 166 {% set deleter_name = deleter.name or 'anonymousIndexedDeleter' %}
172 {% set deleter_arguments = ['index'] %} 167 {% set deleter_arguments = ['index'] %}
173 {% if deleter.is_call_with_script_state %} 168 {% if deleter.is_call_with_script_state %}
174 ScriptState* scriptState = ScriptState::forReceiverObject(info); 169 ScriptState* scriptState = ScriptState::forReceiverObject(info);
175 {% set deleter_arguments = ['scriptState'] + deleter_arguments %} 170 {% set deleter_arguments = ['scriptState'] + deleter_arguments %}
176 {% endif %} 171 {% endif %}
177 {% if deleter.is_raises_exception %} 172 {% if deleter.is_raises_exception %}
178 {% set deleter_arguments = deleter_arguments + ['exceptionState'] %} 173 {% set deleter_arguments = deleter_arguments + ['exceptionState'] %}
179 {% endif %} 174 {% endif %}
180 DeleteResult result = impl->{{deleter_name}}({{deleter_arguments | join(', ' )}}); 175 DeleteResult result = impl->{{deleter_name}}({{deleter_arguments | join(', ')} });
181 {% if deleter.is_raises_exception %} 176 {% if deleter.is_raises_exception %}
182 if (exceptionState.hadException()) 177 if (exceptionState.hadException())
183 return; 178 return;
184 {% endif %} 179 {% endif %}
185 if (result == DeleteUnknownProperty) 180 if (result == DeleteUnknownProperty)
186 return; 181 return;
187 v8SetReturnValue(info, result == DeleteSuccess); 182 v8SetReturnValue(info, result == DeleteSuccess);
188 } 183 }
189 184
190 {% endif %} 185 {% endif %}
191 {% endblock %} 186 {% endblock %}
192 187
193 188
194 {##############################################################################} 189 {##############################################################################}
195 {% block indexed_property_deleter_callback %} 190 {% block indexed_property_deleter_callback %}
196 {% if indexed_property_deleter or named_property_deleter %} 191 {% if indexed_property_deleter or named_property_deleter %}
197 {% set deleter = indexed_property_deleter or named_property_deleter %} 192 {% set deleter = indexed_property_deleter or named_property_deleter %}
198 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) {
199 { 194 {% if deleter.is_ce_reactions %}
200 {% if deleter.is_ce_reactions %} 195 CEReactionsScope ceReactionsScope;
201 CEReactionsScope ceReactionsScope; 196 {% endif %}
202 {% endif %}
203 197
204 {% if indexed_property_deleter %} 198 {% if indexed_property_deleter %}
205 199
206 {% if deleter.is_custom %} 200 {% if deleter.is_custom %}
207 {{v8_class}}::indexedPropertyDeleterCustom(index, info); 201 {{v8_class}}::indexedPropertyDeleterCustom(index, info);
208 {% else %} 202 {% else %}
209 {{cpp_class}}V8Internal::indexedPropertyDeleter(index, info); 203 {{cpp_class}}V8Internal::indexedPropertyDeleter(index, info);
210 {% endif %} 204 {% endif %}
211 205
212 {% else %}{# otherwise, named property #} 206 {% else %}{# otherwise, named property #}
213 207
214 const AtomicString& propertyName = AtomicString::number(index); 208 const AtomicString& propertyName = AtomicString::number(index);
215 209
216 {% if deleter.is_custom %} 210 {% if deleter.is_custom %}
217 {{v8_class}}::namedPropertyDeleterCustom(propertyName, info); 211 {{v8_class}}::namedPropertyDeleterCustom(propertyName, info);
218 {% else %} 212 {% else %}
219 {{cpp_class}}V8Internal::namedPropertyDeleter(propertyName, info); 213 {{cpp_class}}V8Internal::namedPropertyDeleter(propertyName, info);
220 {% endif %} 214 {% endif %}
221 215
222 {% endif %}{# indexed_property_deleter #} 216 {% endif %}{# indexed_property_deleter #}
223 } 217 }
224 218
225 {% endif %} 219 {% endif %}
226 {% endblock %} 220 {% endblock %}
227 221
228 222
229 {##############################################################################} 223 {##############################################################################}
230 {% block named_property_getter %} 224 {% block named_property_getter %}
231 {% if named_property_getter and not named_property_getter.is_custom %} 225 {% if named_property_getter and not named_property_getter.is_custom %}
232 {% set getter = named_property_getter %} 226 {% set getter = named_property_getter %}
233 static void namedPropertyGetter(const AtomicString& name, const v8::PropertyCall backInfo<v8::Value>& info) 227 static void namedPropertyGetter(const AtomicString& name, const v8::PropertyCall backInfo<v8::Value>& info) {
234 { 228 {% if getter.is_raises_exception %}
235 {% if getter.is_raises_exception %} 229 const CString& nameInUtf8 = name.utf8();
236 const CString& nameInUtf8 = name.utf8(); 230 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::GetterContext , "{{interface_name}}", nameInUtf8.data());
237 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::GetterConte xt, "{{interface_name}}", nameInUtf8.data()); 231 {% endif %}
238 {% endif %} 232 {% if getter.is_call_with_script_state %}
239 {% if getter.is_call_with_script_state %} 233 ScriptState* scriptState = ScriptState::forReceiverObject(info);
240 ScriptState* scriptState = ScriptState::forReceiverObject(info); 234 {% endif %}
241 {% endif %}
242 235
243 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); 236 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
244 {% if getter.use_output_parameter_for_result %} 237 {% if getter.use_output_parameter_for_result %}
245 {{getter.cpp_type}} result; 238 {{getter.cpp_type}} result;
246 {{getter.cpp_value}}; 239 {{getter.cpp_value}};
247 {% else %} 240 {% else %}
248 {{getter.cpp_type}} result = {{getter.cpp_value}}; 241 {{getter.cpp_type}} result = {{getter.cpp_value}};
249 {% endif %} 242 {% endif %}
250 if ({{getter.is_null_expression}}) 243 if ({{getter.is_null_expression}})
251 return; 244 return;
252 {{getter.v8_set_return_value}}; 245 {{getter.v8_set_return_value}};
253 } 246 }
254 247
255 {% endif %} 248 {% endif %}
256 {% endblock %} 249 {% endblock %}
257 250
258 251
259 {##############################################################################} 252 {##############################################################################}
260 {% block named_property_getter_callback %} 253 {% block named_property_getter_callback %}
261 {% if named_property_getter %} 254 {% if named_property_getter %}
262 {% set getter = named_property_getter %} 255 {% set getter = named_property_getter %}
263 void namedPropertyGetterCallback(v8::Local<v8::Name> name, const v8::PropertyCal lbackInfo<v8::Value>& info) 256 void namedPropertyGetterCallback(v8::Local<v8::Name> name, const v8::PropertyCal lbackInfo<v8::Value>& info) {
264 { 257 if (!name->IsString())
265 if (!name->IsString()) 258 return;
266 return; 259 const AtomicString& propertyName = toCoreAtomicString(name.As<v8::String>());
267 const AtomicString& propertyName = toCoreAtomicString(name.As<v8::String>()) ;
268 260
269 {% if getter.is_custom %} 261 {% if getter.is_custom %}
270 {{v8_class}}::namedPropertyGetterCustom(propertyName, info); 262 {{v8_class}}::namedPropertyGetterCustom(propertyName, info);
271 {% else %} 263 {% else %}
272 {{cpp_class}}V8Internal::namedPropertyGetter(propertyName, info); 264 {{cpp_class}}V8Internal::namedPropertyGetter(propertyName, info);
273 {% endif %} 265 {% endif %}
274 } 266 }
275 267
276 {% endif %} 268 {% endif %}
277 {% endblock %} 269 {% endblock %}
278 270
279 271
280 {##############################################################################} 272 {##############################################################################}
281 {% block named_property_setter %} 273 {% block named_property_setter %}
282 {% from 'utilities.cpp.tmpl' import v8_value_to_local_cpp_value %} 274 {% from 'utilities.cpp.tmpl' import v8_value_to_local_cpp_value %}
283 {% if named_property_setter and not named_property_setter.is_custom %} 275 {% if named_property_setter and not named_property_setter.is_custom %}
284 {% set setter = named_property_setter %} 276 {% set setter = named_property_setter %}
285 static void namedPropertySetter(const AtomicString& name, v8::Local<v8::Value> v 8Value, const v8::PropertyCallbackInfo<v8::Value>& info) 277 static void namedPropertySetter(const AtomicString& name, v8::Local<v8::Value> v 8Value, const v8::PropertyCallbackInfo<v8::Value>& info) {
286 { 278 {% if setter.has_exception_state %}
287 {% if setter.has_exception_state %} 279 const CString& nameInUtf8 = name.utf8();
288 const CString& nameInUtf8 = name.utf8(); 280 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::SetterContext , "{{interface_name}}", nameInUtf8.data());
289 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::SetterConte xt, "{{interface_name}}", nameInUtf8.data()); 281 {% endif %}
290 {% endif %} 282 {% if setter.is_call_with_script_state %}
291 {% if setter.is_call_with_script_state %} 283 ScriptState* scriptState = ScriptState::forReceiverObject(info);
292 ScriptState* scriptState = ScriptState::forReceiverObject(info); 284 {% endif %}
293 {% endif %}
294 285
295 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); 286 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
296 {{v8_value_to_local_cpp_value(setter) | indent}} 287 {{v8_value_to_local_cpp_value(setter) | indent(2)}}
297 {% if setter.has_type_checking_interface %} 288 {% if setter.has_type_checking_interface %}
298 {# Type checking for interface types (if interface not implemented, throw 289 {# Type checking for interface types (if interface not implemented, throw
299 TypeError), per http://www.w3.org/TR/WebIDL/#es-interface #} 290 TypeError), per http://www.w3.org/TR/WebIDL/#es-interface #}
300 if (!propertyValue{% if setter.is_nullable %} && !isUndefinedOrNull(v8Value) {% endif %}) { 291 if (!propertyValue{% if setter.is_nullable %} && !isUndefinedOrNull(v8Value){% endif %}) {
301 exceptionState.throwTypeError("The provided value is not of type '{{sett er.idl_type}}'."); 292 exceptionState.throwTypeError("The provided value is not of type '{{setter.i dl_type}}'.");
302 return; 293 return;
303 } 294 }
304 {% endif %} 295 {% endif %}
305 296
306 {% set setter_name = setter.name or 'anonymousNamedSetter' %} 297 {% set setter_name = setter.name or 'anonymousNamedSetter' %}
307 {% set setter_arguments = ['name', 'propertyValue'] %} 298 {% set setter_arguments = ['name', 'propertyValue'] %}
308 {% if setter.is_call_with_script_state %} 299 {% if setter.is_call_with_script_state %}
309 {% set setter_arguments = ['scriptState'] + setter_arguments %} 300 {% set setter_arguments = ['scriptState'] + setter_arguments %}
310 {% endif %} 301 {% endif %}
311 {% if setter.is_raises_exception %} 302 {% if setter.is_raises_exception %}
312 {% set setter_arguments = setter_arguments + ['exceptionState'] %} 303 {% set setter_arguments = setter_arguments + ['exceptionState'] %}
313 {% endif %} 304 {% endif %}
314 bool result = impl->{{setter_name}}({{setter_arguments | join(', ')}}); 305 bool result = impl->{{setter_name}}({{setter_arguments | join(', ')}});
315 {% if setter.is_raises_exception %} 306 {% if setter.is_raises_exception %}
316 if (exceptionState.hadException()) 307 if (exceptionState.hadException())
317 return; 308 return;
318 {% endif %} 309 {% endif %}
319 if (!result) 310 if (!result)
320 return; 311 return;
321 v8SetReturnValue(info, v8Value); 312 v8SetReturnValue(info, v8Value);
322 } 313 }
323 314
324 {% endif %} 315 {% endif %}
325 {% endblock %} 316 {% endblock %}
326 317
327 318
328 {##############################################################################} 319 {##############################################################################}
329 {% block named_property_setter_callback %} 320 {% block named_property_setter_callback %}
330 {% if named_property_setter %} 321 {% if named_property_setter %}
331 {% set setter = named_property_setter %} 322 {% set setter = named_property_setter %}
332 void namedPropertySetterCallback(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) 323 void namedPropertySetterCallback(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) {
333 { 324 if (!name->IsString())
334 if (!name->IsString()) 325 return;
335 return; 326 const AtomicString& propertyName = toCoreAtomicString(name.As<v8::String>());
336 const AtomicString& propertyName = toCoreAtomicString(name.As<v8::String>()) ;
337 327
338 {% if setter.is_ce_reactions %} 328 {% if setter.is_ce_reactions %}
339 CEReactionsScope ceReactionsScope; 329 CEReactionsScope ceReactionsScope;
340 {% endif %} 330 {% endif %}
341 331
342 {% if setter.is_custom %} 332 {% if setter.is_custom %}
343 {{v8_class}}::namedPropertySetterCustom(propertyName, v8Value, info); 333 {{v8_class}}::namedPropertySetterCustom(propertyName, v8Value, info);
344 {% else %} 334 {% else %}
345 {{cpp_class}}V8Internal::namedPropertySetter(propertyName, v8Value, info); 335 {{cpp_class}}V8Internal::namedPropertySetter(propertyName, v8Value, info);
346 {% endif %} 336 {% endif %}
347 } 337 }
348 338
349 {% endif %} 339 {% endif %}
350 {% endblock %} 340 {% endblock %}
351 341
352 342
353 {##############################################################################} 343 {##############################################################################}
354 {% block named_property_deleter %} 344 {% block named_property_deleter %}
355 {% if named_property_deleter and not named_property_deleter.is_custom %} 345 {% if named_property_deleter and not named_property_deleter.is_custom %}
356 {% set deleter = named_property_deleter %} 346 {% set deleter = named_property_deleter %}
357 static void namedPropertyDeleter(const AtomicString& name, const v8::PropertyCal lbackInfo<v8::Boolean>& info) 347 static void namedPropertyDeleter(const AtomicString& name, const v8::PropertyCal lbackInfo<v8::Boolean>& info) {
358 { 348 {% if deleter.is_raises_exception %}
359 {% if deleter.is_raises_exception %} 349 const CString& nameInUtf8 = name.utf8();
360 const CString& nameInUtf8 = name.utf8(); 350 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::DeletionConte xt, "{{interface_name}}", nameInUtf8.data());
361 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::DeletionCon text, "{{interface_name}}", nameInUtf8.data()); 351 {% endif %}
362 {% endif %} 352 {% if deleter.is_call_with_script_state %}
363 {% if deleter.is_call_with_script_state %} 353 ScriptState* scriptState = ScriptState::forReceiverObject(info);
364 ScriptState* scriptState = ScriptState::forReceiverObject(info); 354 {% endif %}
365 {% endif %}
366 355
367 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); 356 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
368 357
369 {% set deleter_name = deleter.name or 'anonymousNamedDeleter' %} 358 {% set deleter_name = deleter.name or 'anonymousNamedDeleter' %}
370 {% set deleter_arguments = ['name'] %} 359 {% set deleter_arguments = ['name'] %}
371 {% if deleter.is_call_with_script_state %} 360 {% if deleter.is_call_with_script_state %}
372 {% set deleter_arguments = ['scriptState'] + deleter_arguments %} 361 {% set deleter_arguments = ['scriptState'] + deleter_arguments %}
373 {% endif %} 362 {% endif %}
374 {% if deleter.is_raises_exception %} 363 {% if deleter.is_raises_exception %}
375 {% set deleter_arguments = deleter_arguments + ['exceptionState'] %} 364 {% set deleter_arguments = deleter_arguments + ['exceptionState'] %}
376 {% endif %} 365 {% endif %}
377 DeleteResult result = impl->{{deleter_name}}({{deleter_arguments | join(', ' )}}); 366 DeleteResult result = impl->{{deleter_name}}({{deleter_arguments | join(', ')} });
378 {% if deleter.is_raises_exception %} 367 {% if deleter.is_raises_exception %}
379 if (exceptionState.hadException()) 368 if (exceptionState.hadException())
380 return; 369 return;
381 {% endif %} 370 {% endif %}
382 if (result == DeleteUnknownProperty) 371 if (result == DeleteUnknownProperty)
383 return; 372 return;
384 v8SetReturnValue(info, result == DeleteSuccess); 373 v8SetReturnValue(info, result == DeleteSuccess);
385 } 374 }
386 375
387 {% endif %} 376 {% endif %}
388 {% endblock %} 377 {% endblock %}
389 378
390 379
391 {##############################################################################} 380 {##############################################################################}
392 {% block named_property_deleter_callback %} 381 {% block named_property_deleter_callback %}
393 {% if named_property_deleter %} 382 {% if named_property_deleter %}
394 {% set deleter = named_property_deleter %} 383 {% set deleter = named_property_deleter %}
395 void namedPropertyDeleterCallback(v8::Local<v8::Name> name, const v8::PropertyCa llbackInfo<v8::Boolean>& info) 384 void namedPropertyDeleterCallback(v8::Local<v8::Name> name, const v8::PropertyCa llbackInfo<v8::Boolean>& info) {
396 { 385 if (!name->IsString())
397 if (!name->IsString()) 386 return;
398 return; 387 const AtomicString& propertyName = toCoreAtomicString(name.As<v8::String>());
399 const AtomicString& propertyName = toCoreAtomicString(name.As<v8::String>()) ;
400 388
401 {% if deleter.is_ce_reactions %} 389 {% if deleter.is_ce_reactions %}
402 CEReactionsScope ceReactionsScope; 390 CEReactionsScope ceReactionsScope;
403 {% endif %} 391 {% endif %}
404 392
405 {% if deleter.is_custom %} 393 {% if deleter.is_custom %}
406 {{v8_class}}::namedPropertyDeleterCustom(propertyName, info); 394 {{v8_class}}::namedPropertyDeleterCustom(propertyName, info);
407 {% else %} 395 {% else %}
408 {{cpp_class}}V8Internal::namedPropertyDeleter(propertyName, info); 396 {{cpp_class}}V8Internal::namedPropertyDeleter(propertyName, info);
409 {% endif %} 397 {% endif %}
410 } 398 }
411 399
412 {% endif %} 400 {% endif %}
413 {% endblock %} 401 {% endblock %}
414 402
415 403
416 {##############################################################################} 404 {##############################################################################}
417 {% block named_property_query %} 405 {% block named_property_query %}
418 {% if named_property_getter and named_property_getter.is_enumerable and 406 {% if named_property_getter and named_property_getter.is_enumerable and
419 not named_property_getter.is_custom_property_query %} 407 not named_property_getter.is_custom_property_query %}
420 {% set getter = named_property_getter %} 408 {% set getter = named_property_getter %}
421 {# If there is an enumerator, there MUST be a query method to properly 409 {# If there is an enumerator, there MUST be a query method to properly
422 communicate property attributes. #} 410 communicate property attributes. #}
423 static void namedPropertyQuery(const AtomicString& name, const v8::PropertyCallb ackInfo<v8::Integer>& info) 411 static void namedPropertyQuery(const AtomicString& name, const v8::PropertyCallb ackInfo<v8::Integer>& info) {
424 { 412 const CString& nameInUtf8 = name.utf8();
425 const CString& nameInUtf8 = name.utf8(); 413 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::GetterContext , "{{interface_name}}", nameInUtf8.data());
426 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::GetterConte xt, "{{interface_name}}", nameInUtf8.data()); 414 {% if getter.is_call_with_script_state %}
427 {% if getter.is_call_with_script_state %} 415 ScriptState* scriptState = ScriptState::forReceiverObject(info);
428 ScriptState* scriptState = ScriptState::forReceiverObject(info); 416 {% endif %}
429 {% endif %}
430 417
431 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); 418 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
432 419
433 {% set getter_arguments = ['name', 'exceptionState'] %} 420 {% set getter_arguments = ['name', 'exceptionState'] %}
434 {% if getter.is_call_with_script_state %} 421 {% if getter.is_call_with_script_state %}
435 {% set getter_arguments = ['scriptState'] + getter_arguments %} 422 {% set getter_arguments = ['scriptState'] + getter_arguments %}
436 {% endif %} 423 {% endif %}
437 bool result = impl->namedPropertyQuery({{getter_arguments | join(', ')}}); 424 bool result = impl->namedPropertyQuery({{getter_arguments | join(', ')}});
438 if (!result) 425 if (!result)
439 return; 426 return;
440 v8SetReturnValueInt(info, v8::None); 427 v8SetReturnValueInt(info, v8::None);
441 } 428 }
442 429
443 {% endif %} 430 {% endif %}
444 {% endblock %} 431 {% endblock %}
445 432
446 433
447 {##############################################################################} 434 {##############################################################################}
448 {% block named_property_query_callback %} 435 {% block named_property_query_callback %}
449 {% if named_property_getter and named_property_getter.is_enumerable %} 436 {% if named_property_getter and named_property_getter.is_enumerable %}
450 {% set getter = named_property_getter %} 437 {% set getter = named_property_getter %}
451 void namedPropertyQueryCallback(v8::Local<v8::Name> name, const v8::PropertyCall backInfo<v8::Integer>& info) 438 void namedPropertyQueryCallback(v8::Local<v8::Name> name, const v8::PropertyCall backInfo<v8::Integer>& info) {
452 { 439 if (!name->IsString())
453 if (!name->IsString()) 440 return;
454 return; 441 const AtomicString& propertyName = toCoreAtomicString(name.As<v8::String>());
455 const AtomicString& propertyName = toCoreAtomicString(name.As<v8::String>()) ;
456 442
457 {% if getter.is_custom_property_query %} 443 {% if getter.is_custom_property_query %}
458 {{v8_class}}::namedPropertyQueryCustom(propertyName, info); 444 {{v8_class}}::namedPropertyQueryCustom(propertyName, info);
459 {% else %} 445 {% else %}
460 {{cpp_class}}V8Internal::namedPropertyQuery(propertyName, info); 446 {{cpp_class}}V8Internal::namedPropertyQuery(propertyName, info);
461 {% endif %} 447 {% endif %}
462 } 448 }
463 449
464 {% endif %} 450 {% endif %}
465 {% endblock %} 451 {% endblock %}
466 452
467 453
468 {##############################################################################} 454 {##############################################################################}
469 {% block named_property_enumerator %} 455 {% block named_property_enumerator %}
470 {% if named_property_getter and named_property_getter.is_enumerable and 456 {% if named_property_getter and named_property_getter.is_enumerable and
471 not named_property_getter.is_custom_property_enumerator %} 457 not named_property_getter.is_custom_property_enumerator %}
472 static void namedPropertyEnumerator(const v8::PropertyCallbackInfo<v8::Array>& i nfo) 458 static void namedPropertyEnumerator(const v8::PropertyCallbackInfo<v8::Array>& i nfo) {
473 { 459 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::EnumerationCo ntext, "{{interface_name}}");
474 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::Enumeration Context, "{{interface_name}}");
475 460
476 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); 461 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
477 462
478 Vector<String> names; 463 Vector<String> names;
479 impl->namedPropertyEnumerator(names, exceptionState); 464 impl->namedPropertyEnumerator(names, exceptionState);
480 if (exceptionState.hadException()) 465 if (exceptionState.hadException())
481 return; 466 return;
482 v8SetReturnValue(info, toV8(names, info.Holder(), info.GetIsolate()).As<v8:: Array>()); 467 v8SetReturnValue(info, toV8(names, info.Holder(), info.GetIsolate()).As<v8::Ar ray>());
483 } 468 }
484 469
485 {% endif %} 470 {% endif %}
486 {% endblock %} 471 {% endblock %}
487 472
488 473
489 {##############################################################################} 474 {##############################################################################}
490 {% block named_property_enumerator_callback %} 475 {% block named_property_enumerator_callback %}
491 {% if named_property_getter and named_property_getter.is_enumerable %} 476 {% if named_property_getter and named_property_getter.is_enumerable %}
492 {% set getter = named_property_getter %} 477 {% set getter = named_property_getter %}
493 void namedPropertyEnumeratorCallback(const v8::PropertyCallbackInfo<v8::Array>& info) 478 void namedPropertyEnumeratorCallback(const v8::PropertyCallbackInfo<v8::Array>& info) {
494 { 479 {% if getter.is_custom_property_enumerator %}
495 {% if getter.is_custom_property_enumerator %} 480 {{v8_class}}::namedPropertyEnumeratorCustom(info);
496 {{v8_class}}::namedPropertyEnumeratorCustom(info); 481 {% else %}
497 {% else %} 482 {{cpp_class}}V8Internal::namedPropertyEnumerator(info);
498 {{cpp_class}}V8Internal::namedPropertyEnumerator(info); 483 {% endif %}
499 {% endif %}
500 } 484 }
501 485
502 {% endif %} 486 {% endif %}
503 {% endblock %} 487 {% endblock %}
504 488
505 489
506 {##############################################################################} 490 {##############################################################################}
507 {% block origin_safe_method_setter %} 491 {% block origin_safe_method_setter %}
508 {% if has_origin_safe_method_setter %} 492 {% if has_origin_safe_method_setter %}
509 static void {{cpp_class}}OriginSafeMethodSetter(v8::Local<v8::Name> name, v8::Lo cal<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) 493 static void {{cpp_class}}OriginSafeMethodSetter(v8::Local<v8::Name> name, v8::Lo cal<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) {
510 { 494 if (!name->IsString())
511 if (!name->IsString()) 495 return;
512 return; 496 v8::Local<v8::Object> holder = {{v8_class}}::findInstanceInPrototypeChain(info .Holder(), info.GetIsolate());
513 v8::Local<v8::Object> holder = {{v8_class}}::findInstanceInPrototypeChain(in fo.Holder(), info.GetIsolate()); 497 if (holder.IsEmpty())
514 if (holder.IsEmpty()) 498 return;
515 return; 499 {{cpp_class}}* impl = {{v8_class}}::toImpl(holder);
516 {{cpp_class}}* impl = {{v8_class}}::toImpl(holder); 500 v8::String::Utf8Value attributeName(name);
517 v8::String::Utf8Value attributeName(name); 501 ExceptionState exceptionState(ExceptionState::SetterContext, *attributeName, " {{interface_name}}", info.Holder(), info.GetIsolate());
518 ExceptionState exceptionState(ExceptionState::SetterContext, *attributeName, "{{interface_name}}", info.Holder(), info.GetIsolate()); 502 if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate()), impl, exceptionState)) {
519 if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate() ), impl, exceptionState)) { 503 return;
520 return; 504 }
521 }
522 505
523 {# The findInstanceInPrototypeChain() call above only returns a non-empty ha ndle if info.Holder() is an Object. #} 506 {# The findInstanceInPrototypeChain() call above only returns a non-empty hand le if info.Holder() is an Object. #}
524 V8HiddenValue::setHiddenValue(ScriptState::current(info.GetIsolate()), v8::L ocal<v8::Object>::Cast(info.Holder()), name.As<v8::String>(), v8Value); 507 V8HiddenValue::setHiddenValue(ScriptState::current(info.GetIsolate()), v8::Loc al<v8::Object>::Cast(info.Holder()), name.As<v8::String>(), v8Value);
525 } 508 }
526 509
527 void {{cpp_class}}OriginSafeMethodSetterCallback(v8::Local<v8::Name> name, v8::L ocal<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) 510 void {{cpp_class}}OriginSafeMethodSetterCallback(v8::Local<v8::Name> name, v8::L ocal<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) {
528 { 511 {{cpp_class}}V8Internal::{{cpp_class}}OriginSafeMethodSetter(name, v8Value, in fo);
529 {{cpp_class}}V8Internal::{{cpp_class}}OriginSafeMethodSetter(name, v8Value, info);
530 } 512 }
531 513
532 {% endif %} 514 {% endif %}
533 {% endblock %} 515 {% endblock %}
534 516
535 517
536 {##############################################################################} 518 {##############################################################################}
537 {% block named_constructor %} 519 {% block named_constructor %}
538 {% from 'methods.cpp.tmpl' import generate_constructor with context %} 520 {% from 'methods.cpp.tmpl' import generate_constructor with context %}
539 {% if named_constructor %} 521 {% if named_constructor %}
540 {% set active_scriptwrappable_inheritance = 522 {% set active_scriptwrappable_inheritance =
541 'InheritFromActiveScriptWrappable' 523 'InheritFromActiveScriptWrappable'
542 if active_scriptwrappable else 524 if active_scriptwrappable else
543 'NotInheritFromActiveScriptWrappable' %} 525 'NotInheritFromActiveScriptWrappable' %}
544 // Suppress warning: global constructors, because struct WrapperTypeInfo is triv ial 526 // Suppress warning: global constructors, because struct WrapperTypeInfo is triv ial
545 // and does not depend on another global objects. 527 // and does not depend on another global objects.
546 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG) 528 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
547 #pragma clang diagnostic push 529 #pragma clang diagnostic push
548 #pragma clang diagnostic ignored "-Wglobal-constructors" 530 #pragma clang diagnostic ignored "-Wglobal-constructors"
549 #endif 531 #endif
550 const WrapperTypeInfo {{v8_class}}Constructor::wrapperTypeInfo = { gin::kEmbedde rBlink, {{v8_class}}Constructor::domTemplate, {{v8_class}}::trace, {{v8_class}}: :traceWrappers, 0, {{prepare_prototype_and_interface_object_func}}, "{{interface _name}}", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::{{wra pper_class_id}}, WrapperTypeInfo::{{active_scriptwrappable_inheritance}}, Wrappe rTypeInfo::{{event_target_inheritance}}, WrapperTypeInfo::{{lifetime}} }; 532 const WrapperTypeInfo {{v8_class}}Constructor::wrapperTypeInfo = { gin::kEmbedde rBlink, {{v8_class}}Constructor::domTemplate, {{v8_class}}::trace, {{v8_class}}: :traceWrappers, 0, {{prepare_prototype_and_interface_object_func}}, "{{interface _name}}", 0, WrapperTypeInfo::WrapperTypeObjectPrototype, WrapperTypeInfo::{{wra pper_class_id}}, WrapperTypeInfo::{{active_scriptwrappable_inheritance}}, Wrappe rTypeInfo::{{event_target_inheritance}}, WrapperTypeInfo::{{lifetime}} };
551 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG) 533 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
552 #pragma clang diagnostic pop 534 #pragma clang diagnostic pop
553 #endif 535 #endif
554 536
555 {{generate_constructor(named_constructor)}} 537 {{generate_constructor(named_constructor)}}
556 v8::Local<v8::FunctionTemplate> {{v8_class}}Constructor::domTemplate(v8::Isolate * isolate, const DOMWrapperWorld& world) 538 v8::Local<v8::FunctionTemplate> {{v8_class}}Constructor::domTemplate(v8::Isolate * isolate, const DOMWrapperWorld& world) {
557 { 539 static int domTemplateKey; // This address is used for a key to look up the do m template.
558 static int domTemplateKey; // This address is used for a key to look up the dom template. 540 V8PerIsolateData* data = V8PerIsolateData::from(isolate);
559 V8PerIsolateData* data = V8PerIsolateData::from(isolate); 541 v8::Local<v8::FunctionTemplate> result = data->findInterfaceTemplate(world, &d omTemplateKey);
560 v8::Local<v8::FunctionTemplate> result = data->findInterfaceTemplate(world, &domTemplateKey); 542 if (!result.IsEmpty())
561 if (!result.IsEmpty()) 543 return result;
562 return result;
563 544
564 result = v8::FunctionTemplate::New(isolate, {{v8_class}}ConstructorCallback) ; 545 result = v8::FunctionTemplate::New(isolate, {{v8_class}}ConstructorCallback);
565 v8::Local<v8::ObjectTemplate> instanceTemplate = result->InstanceTemplate(); 546 v8::Local<v8::ObjectTemplate> instanceTemplate = result->InstanceTemplate();
566 instanceTemplate->SetInternalFieldCount({{v8_class}}::internalFieldCount); 547 instanceTemplate->SetInternalFieldCount({{v8_class}}::internalFieldCount);
567 result->SetClassName(v8AtomicString(isolate, "{{cpp_class}}")); 548 result->SetClassName(v8AtomicString(isolate, "{{cpp_class}}"));
568 result->Inherit({{v8_class}}::domTemplate(isolate, world)); 549 result->Inherit({{v8_class}}::domTemplate(isolate, world));
569 data->setInterfaceTemplate(world, &domTemplateKey, result); 550 data->setInterfaceTemplate(world, &domTemplateKey, result);
570 return result; 551 return result;
571 } 552 }
572 553
573 {% endif %} 554 {% endif %}
574 {% endblock %} 555 {% endblock %}
575 556
576 {##############################################################################} 557 {##############################################################################}
577 {% block overloaded_constructor %} 558 {% block overloaded_constructor %}
578 {% if constructor_overloads %} 559 {% if constructor_overloads %}
579 static void constructor(const v8::FunctionCallbackInfo<v8::Value>& info) 560 static void constructor(const v8::FunctionCallbackInfo<v8::Value>& info) {
580 { 561 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::ConstructionC ontext, "{{interface_name}}");
581 ExceptionState exceptionState(info.GetIsolate(), ExceptionState::Constructio nContext, "{{interface_name}}"); 562 {# 2. Initialize argcount to be min(maxarg, n). #}
582 {# 2. Initialize argcount to be min(maxarg, n). #} 563 switch (std::min({{constructor_overloads.maxarg}}, info.Length())) {
583 switch (std::min({{constructor_overloads.maxarg}}, info.Length())) {
584 {# 3. Remove from S all entries whose type list is not of length argcount. # } 564 {# 3. Remove from S all entries whose type list is not of length argcount. # }
585 {% for length, tests_constructors in constructor_overloads.length_tests_meth ods %} 565 {% for length, tests_constructors in constructor_overloads.length_tests_meth ods %}
586 case {{length}}: 566 case {{length}}:
587 {# Then resolve by testing argument #} 567 {# Then resolve by testing argument #}
588 {% for test, constructor in tests_constructors %} 568 {% for test, constructor in tests_constructors %}
589 {# 10. If i = d, then: #} 569 {# 10. If i = d, then: #}
590 if ({{test}}) { 570 if ({{test}}) {
591 {{cpp_class}}V8Internal::constructor{{constructor.overload_index}}(i nfo); 571 {{cpp_class}}V8Internal::constructor{{constructor.overload_index}}(info) ;
592 return; 572 return;
593 } 573 }
594 {% endfor %} 574 {% endfor %}
595 break; 575 break;
596 {% endfor %} 576 {% endfor %}
597 default: 577 default:
598 {# Invalid arity, throw error #} 578 {# Invalid arity, throw error #}
599 {# Report full list of valid arities if gaps and above minimum #} 579 {# Report full list of valid arities if gaps and above minimum #}
600 {% if constructor_overloads.valid_arities %} 580 {% if constructor_overloads.valid_arities %}
601 if (info.Length() >= {{constructor_overloads.length}}) { 581 if (info.Length() >= {{constructor_overloads.length}}) {
602 exceptionState.throwTypeError(ExceptionMessages::invalidArity("{{con structor_overloads.valid_arities}}", info.Length())); 582 exceptionState.throwTypeError(ExceptionMessages::invalidArity("{{constru ctor_overloads.valid_arities}}", info.Length()));
603 return;
604 }
605 {% endif %}
606 {# Otherwise just report "not enough arguments" #}
607 exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments({{co nstructor_overloads.length}}, info.Length()));
608 return; 583 return;
609 } 584 }
610 {# No match, throw error #} 585 {% endif %}
611 exceptionState.throwTypeError("No matching constructor signature."); 586 {# Otherwise just report "not enough arguments" #}
587 exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments({{cons tructor_overloads.length}}, info.Length()));
588 return;
589 }
590 {# No match, throw error #}
591 exceptionState.throwTypeError("No matching constructor signature.");
612 } 592 }
613 593
614 {% endif %} 594 {% endif %}
615 {% endblock %} 595 {% endblock %}
616 596
617 597
618 {##############################################################################} 598 {##############################################################################}
619 {% block visit_dom_wrapper %} 599 {% block visit_dom_wrapper %}
620 {% if has_visit_dom_wrapper %} 600 {% if has_visit_dom_wrapper %}
621 void {{v8_class}}::visitDOMWrapper(v8::Isolate* isolate, ScriptWrappable* script Wrappable, const v8::Persistent<v8::Object>& wrapper) 601 void {{v8_class}}::visitDOMWrapper(v8::Isolate* isolate, ScriptWrappable* script Wrappable, const v8::Persistent<v8::Object>& wrapper) {
622 { 602 {% if has_visit_dom_wrapper_custom %}
623 {% if has_visit_dom_wrapper_custom %} 603 {{v8_class}}::visitDOMWrapperCustom(isolate, scriptWrappable, wrapper);
624 {{v8_class}}::visitDOMWrapperCustom(isolate, scriptWrappable, wrapper); 604 {% endif %}
625 {% endif %} 605 {% if set_wrapper_reference_to or set_wrapper_reference_from %}
626 {% if set_wrapper_reference_to or set_wrapper_reference_from %} 606 {{cpp_class}}* impl = scriptWrappable->toImpl<{{cpp_class}}>();
627 {{cpp_class}}* impl = scriptWrappable->toImpl<{{cpp_class}}>(); 607 {% endif %}
628 {% endif %} 608 {% if set_wrapper_reference_to %}
629 {% if set_wrapper_reference_to %} 609 {{set_wrapper_reference_to.cpp_type}} {{set_wrapper_reference_to.name}} = impl ->{{set_wrapper_reference_to.name}}();
630 {{set_wrapper_reference_to.cpp_type}} {{set_wrapper_reference_to.name}} = im pl->{{set_wrapper_reference_to.name}}(); 610 if ({{set_wrapper_reference_to.name}}) {
631 if ({{set_wrapper_reference_to.name}}) { 611 DOMWrapperWorld::setWrapperReferencesInAllWorlds(wrapper, {{set_wrapper_refe rence_to.name}}, isolate);
632 DOMWrapperWorld::setWrapperReferencesInAllWorlds(wrapper, {{set_wrapper_ reference_to.name}}, isolate); 612 }
633 } 613 {% endif %}
634 {% endif %} 614 {% if set_wrapper_reference_from %}
635 {% if set_wrapper_reference_from %} 615 // The {{set_wrapper_reference_from}}() method may return a reference or a poi nter.
636 // The {{set_wrapper_reference_from}}() method may return a reference or a p ointer. 616 if (Node* owner = WTF::getPtr(impl->{{set_wrapper_reference_from}}())) {
637 if (Node* owner = WTF::getPtr(impl->{{set_wrapper_reference_from}}())) { 617 Node* root = V8GCController::opaqueRootForGC(isolate, owner);
638 Node* root = V8GCController::opaqueRootForGC(isolate, owner); 618 isolate->SetReferenceFromGroup(v8::UniqueId(reinterpret_cast<intptr_t>(root) ), wrapper);
639 isolate->SetReferenceFromGroup(v8::UniqueId(reinterpret_cast<intptr_t>(r oot)), wrapper); 619 return;
640 return; 620 }
641 } 621 {% endif %}
642 {% endif %}
643 } 622 }
644 623
645 {% endif %} 624 {% endif %}
646 {% endblock %} 625 {% endblock %}
647 626
648 627
649 {##############################################################################} 628 {##############################################################################}
650 {% block constructor_callback %} 629 {% block constructor_callback %}
651 {% if constructors or has_custom_constructor or has_event_constructor or has_htm l_constructor %} 630 {% if constructors or has_custom_constructor or has_event_constructor or has_htm l_constructor %}
652 void {{v8_class}}::constructorCallback(const v8::FunctionCallbackInfo<v8::Value> & info) 631 void {{v8_class}}::constructorCallback(const v8::FunctionCallbackInfo<v8::Value> & info) {
653 { 632 {% if measure_as %}
654 {% if measure_as %} 633 UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext (info.GetIsolate()), UseCounter::{{measure_as('Constructor')}});
655 UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionConte xt(info.GetIsolate()), UseCounter::{{measure_as('Constructor')}}); 634 {% endif %}
656 {% endif %} 635 if (!info.IsConstructCall()) {
657 if (!info.IsConstructCall()) { 636 V8ThrowException::throwTypeError(info.GetIsolate(), ExceptionMessages::const ructorNotCallableAsFunction("{{interface_name}}"));
658 V8ThrowException::throwTypeError(info.GetIsolate(), ExceptionMessages::c onstructorNotCallableAsFunction("{{interface_name}}")); 637 return;
659 return; 638 }
660 }
661 639
662 if (ConstructorMode::current(info.GetIsolate()) == ConstructorMode::WrapExis tingObject) { 640 if (ConstructorMode::current(info.GetIsolate()) == ConstructorMode::WrapExisti ngObject) {
663 v8SetReturnValue(info, info.Holder()); 641 v8SetReturnValue(info, info.Holder());
664 return; 642 return;
665 } 643 }
666 644
667 {% if has_custom_constructor %} 645 {% if has_custom_constructor %}
668 {{v8_class}}::constructorCustom(info); 646 {{v8_class}}::constructorCustom(info);
669 {% elif has_html_constructor %} 647 {% elif has_html_constructor %}
670 {{v8_class}}::HTMLConstructor(info); 648 {{v8_class}}::HTMLConstructor(info);
671 {% else %} 649 {% else %}
672 {{cpp_class}}V8Internal::constructor(info); 650 {{cpp_class}}V8Internal::constructor(info);
673 {% endif %} 651 {% endif %}
674 } 652 }
675 653
676 {% endif %} 654 {% endif %}
677 {% endblock %} 655 {% endblock %}
678 656
679 657
680 {##############################################################################} 658 {##############################################################################}
681 {% macro install_do_not_check_security_method(method, world_suffix, instance_tem plate, prototype_template) %} 659 {% macro install_do_not_check_security_method(method, world_suffix, instance_tem plate, prototype_template) %}
682 {% from 'utilities.cpp.tmpl' import property_location %} 660 {% from 'utilities.cpp.tmpl' import property_location %}
683 {# Methods that are [DoNotCheckSecurity] are always readable, but if they are 661 {# Methods that are [DoNotCheckSecurity] are always readable, but if they are
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
763 'static_cast<v8::PropertyHandlerFlags>(%s)' % 741 'static_cast<v8::PropertyHandlerFlags>(%s)' %
764 ' | '.join(property_handler_flags_list) %} 742 ' | '.join(property_handler_flags_list) %}
765 v8::NamedPropertyHandlerConfiguration namedPropertyHandlerConfig({{named_propert y_getter_callback}}, {{named_property_setter_callback}}, {{named_property_query_ callback}}, {{named_property_deleter_callback}}, {{named_property_enumerator_cal lback}}, v8::Local<v8::Value>(), {{property_handler_flags}}); 743 v8::NamedPropertyHandlerConfiguration namedPropertyHandlerConfig({{named_propert y_getter_callback}}, {{named_property_setter_callback}}, {{named_property_query_ callback}}, {{named_property_deleter_callback}}, {{named_property_enumerator_cal lback}}, v8::Local<v8::Value>(), {{property_handler_flags}});
766 {{target}}->SetHandler(namedPropertyHandlerConfig); 744 {{target}}->SetHandler(namedPropertyHandlerConfig);
767 {%- endmacro %} 745 {%- endmacro %}
768 746
769 747
770 {##############################################################################} 748 {##############################################################################}
771 {% block get_dom_template %} 749 {% block get_dom_template %}
772 {% if not is_array_buffer_or_view %} 750 {% if not is_array_buffer_or_view %}
773 v8::Local<v8::FunctionTemplate> {{v8_class}}::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) 751 v8::Local<v8::FunctionTemplate> {{v8_class}}::domTemplate(v8::Isolate* isolate, const DOMWrapperWorld& world) {
774 { 752 {% set installTemplateFunction = '%s::install%sTemplateFunction' % (v8_class, v8_class) if has_partial_interface else 'install%sTemplate' % v8_class %}
775 {% set installTemplateFunction = '%s::install%sTemplateFunction' % (v8_class , v8_class) if has_partial_interface else 'install%sTemplate' % v8_class %} 753 return V8DOMConfiguration::domClassTemplate(isolate, world, const_cast<Wrapper TypeInfo*>(&wrapperTypeInfo), {{installTemplateFunction}});
776 return V8DOMConfiguration::domClassTemplate(isolate, world, const_cast<Wrapp erTypeInfo*>(&wrapperTypeInfo), {{installTemplateFunction}});
777 } 754 }
778 755
779 {% endif %} 756 {% endif %}
780 {% endblock %} 757 {% endblock %}
781 758
782 759
783 {##############################################################################} 760 {##############################################################################}
784 {% block get_dom_template_for_named_properties_object %} 761 {% block get_dom_template_for_named_properties_object %}
785 {% if has_named_properties_object %} 762 {% if has_named_properties_object %}
786 v8::Local<v8::FunctionTemplate> {{v8_class}}::domTemplateForNamedPropertiesObjec t(v8::Isolate* isolate, const DOMWrapperWorld& world) 763 v8::Local<v8::FunctionTemplate> {{v8_class}}::domTemplateForNamedPropertiesObjec t(v8::Isolate* isolate, const DOMWrapperWorld& world) {
787 { 764 v8::Local<v8::FunctionTemplate> parentTemplate = V8{{parent_interface}}::domTe mplate(isolate, world);
788 v8::Local<v8::FunctionTemplate> parentTemplate = V8{{parent_interface}}::dom Template(isolate, world);
789 765
790 v8::Local<v8::FunctionTemplate> namedPropertiesObjectFunctionTemplate = v8:: FunctionTemplate::New(isolate, V8ObjectConstructor::isValidConstructorMode); 766 v8::Local<v8::FunctionTemplate> namedPropertiesObjectFunctionTemplate = v8::Fu nctionTemplate::New(isolate, V8ObjectConstructor::isValidConstructorMode);
791 namedPropertiesObjectFunctionTemplate->SetClassName(v8AtomicString(isolate, "{{interface_name}}Properties")); 767 namedPropertiesObjectFunctionTemplate->SetClassName(v8AtomicString(isolate, "{ {interface_name}}Properties"));
792 namedPropertiesObjectFunctionTemplate->Inherit(parentTemplate); 768 namedPropertiesObjectFunctionTemplate->Inherit(parentTemplate);
793 769
794 v8::Local<v8::ObjectTemplate> namedPropertiesObjectTemplate = namedPropertie sObjectFunctionTemplate->PrototypeTemplate(); 770 v8::Local<v8::ObjectTemplate> namedPropertiesObjectTemplate = namedPropertiesO bjectFunctionTemplate->PrototypeTemplate();
795 namedPropertiesObjectTemplate->SetInternalFieldCount({{v8_class}}::internalF ieldCount); 771 namedPropertiesObjectTemplate->SetInternalFieldCount({{v8_class}}::internalFie ldCount);
796 V8DOMConfiguration::setClassString(isolate, namedPropertiesObjectTemplate, " {{interface_name}}Properties"); 772 V8DOMConfiguration::setClassString(isolate, namedPropertiesObjectTemplate, "{{ interface_name}}Properties");
797 {{install_named_property_handler('namedPropertiesObjectTemplate') | indent}} 773 {{install_named_property_handler('namedPropertiesObjectTemplate') | indent(2)} }
798 774
799 return namedPropertiesObjectFunctionTemplate; 775 return namedPropertiesObjectFunctionTemplate;
800 } 776 }
801 777
802 {% endif %} 778 {% endif %}
803 {% endblock %} 779 {% endblock %}
804 780
805 781
806 {##############################################################################} 782 {##############################################################################}
807 {% block has_instance %} 783 {% block has_instance %}
808 {% if not is_array_buffer_or_view %} 784 {% if not is_array_buffer_or_view %}
809 785
810 bool {{v8_class}}::hasInstance(v8::Local<v8::Value> v8Value, v8::Isolate* isolat e) 786 bool {{v8_class}}::hasInstance(v8::Local<v8::Value> v8Value, v8::Isolate* isolat e) {
811 { 787 return V8PerIsolateData::from(isolate)->hasInstance(&wrapperTypeInfo, v8Value) ;
812 return V8PerIsolateData::from(isolate)->hasInstance(&wrapperTypeInfo, v8Valu e);
813 } 788 }
814 789
815 v8::Local<v8::Object> {{v8_class}}::findInstanceInPrototypeChain(v8::Local<v8::V alue> v8Value, v8::Isolate* isolate) 790 v8::Local<v8::Object> {{v8_class}}::findInstanceInPrototypeChain(v8::Local<v8::V alue> v8Value, v8::Isolate* isolate) {
816 { 791 return V8PerIsolateData::from(isolate)->findInstanceInPrototypeChain(&wrapperT ypeInfo, v8Value);
817 return V8PerIsolateData::from(isolate)->findInstanceInPrototypeChain(&wrappe rTypeInfo, v8Value);
818 } 792 }
819 793
820 {% endif %} 794 {% endif %}
821 {% endblock %} 795 {% endblock %}
822 796
823 797
824 {##############################################################################} 798 {##############################################################################}
825 {% block to_impl %} 799 {% block to_impl %}
826 {% if interface_name == 'ArrayBuffer' or interface_name == 'SharedArrayBuffer' % } 800 {% if interface_name == 'ArrayBuffer' or interface_name == 'SharedArrayBuffer' % }
827 {{cpp_class}}* V8{{interface_name}}::toImpl(v8::Local<v8::Object> object) 801 {{cpp_class}}* V8{{interface_name}}::toImpl(v8::Local<v8::Object> object) {
828 { 802 DCHECK(object->Is{{interface_name}}());
829 ASSERT(object->Is{{interface_name}}()); 803 v8::Local<v8::{{interface_name}}> v8buffer = object.As<v8::{{interface_name}}> ();
830 v8::Local<v8::{{interface_name}}> v8buffer = object.As<v8::{{interface_name} }>(); 804 if (v8buffer->IsExternal()) {
831 if (v8buffer->IsExternal()) { 805 const WrapperTypeInfo* wrapperTypeInfo = toWrapperTypeInfo(object);
832 const WrapperTypeInfo* wrapperTypeInfo = toWrapperTypeInfo(object); 806 CHECK(wrapperTypeInfo);
833 RELEASE_ASSERT(wrapperTypeInfo); 807 CHECK_EQ(wrapperTypeInfo->ginEmbedder, gin::kEmbedderBlink);
834 RELEASE_ASSERT(wrapperTypeInfo->ginEmbedder == gin::kEmbedderBlink); 808 return toScriptWrappable(object)->toImpl<{{cpp_class}}>();
835 return toScriptWrappable(object)->toImpl<{{cpp_class}}>(); 809 }
836 }
837 810
838 // Transfer the ownership of the allocated memory to an {{interface_name}} w ithout 811 // Transfer the ownership of the allocated memory to an {{interface_name}} wit hout
839 // copying. 812 // copying.
840 v8::{{interface_name}}::Contents v8Contents = v8buffer->Externalize(); 813 v8::{{interface_name}}::Contents v8Contents = v8buffer->Externalize();
841 WTF::ArrayBufferContents contents(v8Contents.Data(), v8Contents.ByteLength() , WTF::ArrayBufferContents::{% if interface_name == 'ArrayBuffer' %}Not{% endif %}Shared); 814 WTF::ArrayBufferContents contents(v8Contents.Data(), v8Contents.ByteLength(), WTF::ArrayBufferContents::{% if interface_name == 'ArrayBuffer' %}Not{% endif %} Shared);
842 {{cpp_class}}* buffer = {{cpp_class}}::create(contents); 815 {{cpp_class}}* buffer = {{cpp_class}}::create(contents);
843 v8::Local<v8::Object> associatedWrapper = buffer->associateWithWrapper(v8::I solate::GetCurrent(), buffer->wrapperTypeInfo(), object); 816 v8::Local<v8::Object> associatedWrapper = buffer->associateWithWrapper(v8::Iso late::GetCurrent(), buffer->wrapperTypeInfo(), object);
844 DCHECK(associatedWrapper == object); 817 DCHECK(associatedWrapper == object);
845 818
846 return buffer; 819 return buffer;
847 } 820 }
848 821
849 {% elif interface_name == 'ArrayBufferView' %} 822 {% elif interface_name == 'ArrayBufferView' %}
850 {{cpp_class}}* V8ArrayBufferView::toImpl(v8::Local<v8::Object> object) 823 {{cpp_class}}* V8ArrayBufferView::toImpl(v8::Local<v8::Object> object) {
851 { 824 DCHECK(object->IsArrayBufferView());
852 ASSERT(object->IsArrayBufferView()); 825 ScriptWrappable* scriptWrappable = toScriptWrappable(object);
853 ScriptWrappable* scriptWrappable = toScriptWrappable(object); 826 if (scriptWrappable)
854 if (scriptWrappable) 827 return scriptWrappable->toImpl<{{cpp_class}}>();
855 return scriptWrappable->toImpl<{{cpp_class}}>();
856 828
857 if (object->IsInt8Array()) 829 if (object->IsInt8Array())
858 return V8Int8Array::toImpl(object); 830 return V8Int8Array::toImpl(object);
859 if (object->IsInt16Array()) 831 if (object->IsInt16Array())
860 return V8Int16Array::toImpl(object); 832 return V8Int16Array::toImpl(object);
861 if (object->IsInt32Array()) 833 if (object->IsInt32Array())
862 return V8Int32Array::toImpl(object); 834 return V8Int32Array::toImpl(object);
863 if (object->IsUint8Array()) 835 if (object->IsUint8Array())
864 return V8Uint8Array::toImpl(object); 836 return V8Uint8Array::toImpl(object);
865 if (object->IsUint8ClampedArray()) 837 if (object->IsUint8ClampedArray())
866 return V8Uint8ClampedArray::toImpl(object); 838 return V8Uint8ClampedArray::toImpl(object);
867 if (object->IsUint16Array()) 839 if (object->IsUint16Array())
868 return V8Uint16Array::toImpl(object); 840 return V8Uint16Array::toImpl(object);
869 if (object->IsUint32Array()) 841 if (object->IsUint32Array())
870 return V8Uint32Array::toImpl(object); 842 return V8Uint32Array::toImpl(object);
871 if (object->IsFloat32Array()) 843 if (object->IsFloat32Array())
872 return V8Float32Array::toImpl(object); 844 return V8Float32Array::toImpl(object);
873 if (object->IsFloat64Array()) 845 if (object->IsFloat64Array())
874 return V8Float64Array::toImpl(object); 846 return V8Float64Array::toImpl(object);
875 if (object->IsDataView()) 847 if (object->IsDataView())
876 return V8DataView::toImpl(object); 848 return V8DataView::toImpl(object);
877 849
878 ASSERT_NOT_REACHED(); 850 NOTREACHED();
879 return 0; 851 return 0;
880 } 852 }
881 853
882 {% elif is_array_buffer_or_view %} 854 {% elif is_array_buffer_or_view %}
883 {{cpp_class}}* {{v8_class}}::toImpl(v8::Local<v8::Object> object) 855 {{cpp_class}}* {{v8_class}}::toImpl(v8::Local<v8::Object> object) {
884 { 856 DCHECK(object->Is{{interface_name}}());
885 ASSERT(object->Is{{interface_name}}()); 857 ScriptWrappable* scriptWrappable = toScriptWrappable(object);
886 ScriptWrappable* scriptWrappable = toScriptWrappable(object); 858 if (scriptWrappable)
887 if (scriptWrappable) 859 return scriptWrappable->toImpl<{{cpp_class}}>();
888 return scriptWrappable->toImpl<{{cpp_class}}>();
889 860
890 v8::Local<v8::{{interface_name}}> v8View = object.As<v8::{{interface_name}}> (); 861 v8::Local<v8::{{interface_name}}> v8View = object.As<v8::{{interface_name}}>() ;
891 v8::Local<v8::Object> arrayBuffer = v8View->Buffer(); 862 v8::Local<v8::Object> arrayBuffer = v8View->Buffer();
892 {{cpp_class}}* typedArray = nullptr; 863 {{cpp_class}}* typedArray = nullptr;
893 if (arrayBuffer->IsArrayBuffer()) { 864 if (arrayBuffer->IsArrayBuffer()) {
894 typedArray = {{cpp_class}}::create(V8ArrayBuffer::toImpl(arrayBuffer), v 8View->ByteOffset(), v8View->{% if interface_name == 'DataView' %}Byte{% endif % }Length()); 865 typedArray = {{cpp_class}}::create(V8ArrayBuffer::toImpl(arrayBuffer), v8Vie w->ByteOffset(), v8View->{% if interface_name == 'DataView' %}Byte{% endif %}Len gth());
895 } else if (arrayBuffer->IsSharedArrayBuffer()) { 866 } else if (arrayBuffer->IsSharedArrayBuffer()) {
896 typedArray = {{cpp_class}}::create(V8SharedArrayBuffer::toImpl(arrayBuff er), v8View->ByteOffset(), v8View->{% if interface_name == 'DataView' %}Byte{% e ndif %}Length()); 867 typedArray = {{cpp_class}}::create(V8SharedArrayBuffer::toImpl(arrayBuffer), v8View->ByteOffset(), v8View->{% if interface_name == 'DataView' %}Byte{% endif %}Length());
897 } else { 868 } else {
898 ASSERT_NOT_REACHED(); 869 NOTREACHED();
899 } 870 }
900 v8::Local<v8::Object> associatedWrapper = typedArray->associateWithWrapper(v 8::Isolate::GetCurrent(), typedArray->wrapperTypeInfo(), object); 871 v8::Local<v8::Object> associatedWrapper = typedArray->associateWithWrapper(v8: :Isolate::GetCurrent(), typedArray->wrapperTypeInfo(), object);
901 DCHECK(associatedWrapper == object); 872 DCHECK(associatedWrapper == object);
902 873
903 return typedArray->toImpl<{{cpp_class}}>(); 874 return typedArray->toImpl<{{cpp_class}}>();
904 } 875 }
905 876
906 {% endif %} 877 {% endif %}
907 {% endblock %} 878 {% endblock %}
908 879
909 880
910 {##############################################################################} 881 {##############################################################################}
911 {% block to_impl_with_type_check %} 882 {% block to_impl_with_type_check %}
912 {{cpp_class}}* {{v8_class}}::toImplWithTypeCheck(v8::Isolate* isolate, v8::Local <v8::Value> value) 883 {{cpp_class}}* {{v8_class}}::toImplWithTypeCheck(v8::Isolate* isolate, v8::Local <v8::Value> value) {
913 {
914 {% if is_array_buffer_or_view %} 884 {% if is_array_buffer_or_view %}
915 return value->Is{{interface_name}}() ? toImpl(v8::Local<v8::Object>::Cast(va lue)) : nullptr; 885 return value->Is{{interface_name}}() ? toImpl(v8::Local<v8::Object>::Cast(valu e)) : nullptr;
916 {% else %} 886 {% else %}
917 return hasInstance(value, isolate) ? toImpl(v8::Local<v8::Object>::Cast(valu e)) : nullptr; 887 return hasInstance(value, isolate) ? toImpl(v8::Local<v8::Object>::Cast(value) ) : nullptr;
918 {% endif %} 888 {% endif %}
919 } 889 }
920 890
921 {% endblock %} 891 {% endblock %}
922 892
923 893
924 {##############################################################################} 894 {##############################################################################}
925 {% block prepare_prototype_and_interface_object %} 895 {% block prepare_prototype_and_interface_object %}
926 {% from 'methods.cpp.tmpl' import install_conditionally_enabled_methods with con text %} 896 {% from 'methods.cpp.tmpl' import install_conditionally_enabled_methods with con text %}
927 {% if has_prepare_prototype_and_interface_object %} 897 {% if has_prepare_prototype_and_interface_object %}
928 void {{v8_class}}::preparePrototypeAndInterfaceObject(v8::Local<v8::Context> con text, const DOMWrapperWorld& world, v8::Local<v8::Object> prototypeObject, v8::L ocal<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTem plate) 898 void {{v8_class}}::preparePrototypeAndInterfaceObject(v8::Local<v8::Context> con text, const DOMWrapperWorld& world, v8::Local<v8::Object> prototypeObject, v8::L ocal<v8::Function> interfaceObject, v8::Local<v8::FunctionTemplate> interfaceTem plate) {
929 { 899 v8::Isolate* isolate = context->GetIsolate();
930 v8::Isolate* isolate = context->GetIsolate();
931 {% if unscopables %} 900 {% if unscopables %}
932 {{install_unscopables() | indent}} 901 {{install_unscopables() | indent(2)}}
933 {% endif %} 902 {% endif %}
934 {% if has_conditional_attributes_on_prototype %} 903 {% if has_conditional_attributes_on_prototype %}
935 {{install_conditionally_enabled_attributes_on_prototype() | indent}} 904 {{install_conditionally_enabled_attributes_on_prototype() | indent(2)}}
936 {% endif %} 905 {% endif %}
937 {% if methods | conditionally_exposed(is_partial) %} 906 {% if methods | conditionally_exposed(is_partial) %}
938 {{install_conditionally_enabled_methods() | indent}} 907 {{install_conditionally_enabled_methods() | indent(2)}}
939 {% endif %} 908 {% endif %}
940 } 909 }
941 910
942 {% endif %} 911 {% endif %}
943 {% endblock %} 912 {% endblock %}
944 913
945 914
946 {##############################################################################} 915 {##############################################################################}
947 {% macro install_unscopables() %} 916 {% macro install_unscopables() %}
948 v8::Local<v8::Name> unscopablesSymbol(v8::Symbol::GetUnscopables(isolate)); 917 v8::Local<v8::Name> unscopablesSymbol(v8::Symbol::GetUnscopables(isolate));
949 v8::Local<v8::Object> unscopables; 918 v8::Local<v8::Object> unscopables;
950 if (v8CallBoolean(prototypeObject->HasOwnProperty(context, unscopablesSymbol))) 919 if (v8CallBoolean(prototypeObject->HasOwnProperty(context, unscopablesSymbol)))
951 unscopables = prototypeObject->Get(context, unscopablesSymbol).ToLocalChecke d().As<v8::Object>(); 920 unscopables = prototypeObject->Get(context, unscopablesSymbol).ToLocalChecked( ).As<v8::Object>();
952 else 921 else
953 unscopables = v8::Object::New(isolate); 922 unscopables = v8::Object::New(isolate);
954 {% for name, runtime_enabled_function in unscopables %} 923 {% for name, runtime_enabled_function in unscopables %}
955 {% filter runtime_enabled(runtime_enabled_function) %} 924 {% filter runtime_enabled(runtime_enabled_function) %}
956 unscopables->CreateDataProperty(context, v8AtomicString(isolate, "{{name}}"), v8 ::True(isolate)).FromJust(); 925 unscopables->CreateDataProperty(context, v8AtomicString(isolate, "{{name}}"), v8 ::True(isolate)).FromJust();
957 {% endfilter %} 926 {% endfilter %}
958 {% endfor %} 927 {% endfor %}
959 prototypeObject->CreateDataProperty(context, unscopablesSymbol, unscopables).Fro mJust(); 928 prototypeObject->CreateDataProperty(context, unscopablesSymbol, unscopables).Fro mJust();
960 {% endmacro %} 929 {% endmacro %}
961 930
962 931
963 {##############################################################################} 932 {##############################################################################}
(...skipping 12 matching lines...) Expand all
976 {% endfilter %}{# exposed #} 945 {% endfilter %}{# exposed #}
977 {% endfor %} 946 {% endfor %}
978 {% endmacro %} 947 {% endmacro %}
979 948
980 949
981 {##############################################################################} 950 {##############################################################################}
982 {% block partial_interface %} 951 {% block partial_interface %}
983 {% if has_partial_interface %} 952 {% if has_partial_interface %}
984 InstallTemplateFunction {{v8_class}}::install{{v8_class}}TemplateFunction = (Ins tallTemplateFunction)&{{v8_class}}::install{{v8_class}}Template; 953 InstallTemplateFunction {{v8_class}}::install{{v8_class}}TemplateFunction = (Ins tallTemplateFunction)&{{v8_class}}::install{{v8_class}}Template;
985 954
986 void {{v8_class}}::updateWrapperTypeInfo(InstallTemplateFunction installTemplate Function, PreparePrototypeAndInterfaceObjectFunction preparePrototypeAndInterfac eObjectFunction) 955 void {{v8_class}}::updateWrapperTypeInfo(InstallTemplateFunction installTemplate Function, PreparePrototypeAndInterfaceObjectFunction preparePrototypeAndInterfac eObjectFunction) {
987 { 956 {{v8_class}}::install{{v8_class}}TemplateFunction = installTemplateFunction;
988 {{v8_class}}::install{{v8_class}}TemplateFunction = installTemplateFunction; 957 if (preparePrototypeAndInterfaceObjectFunction)
989 if (preparePrototypeAndInterfaceObjectFunction) 958 {{v8_class}}::wrapperTypeInfo.preparePrototypeAndInterfaceObjectFunction = p reparePrototypeAndInterfaceObjectFunction;
990 {{v8_class}}::wrapperTypeInfo.preparePrototypeAndInterfaceObjectFunction = preparePrototypeAndInterfaceObjectFunction;
991 } 959 }
992 960
993 {% for method in methods if method.overloads and method.overloads.has_partial_ov erloads %} 961 {% for method in methods if method.overloads and method.overloads.has_partial_ov erloads %}
994 void {{v8_class}}::register{{method.name | blink_capitalize}}MethodForPartialInt erface(void (*method)(const v8::FunctionCallbackInfo<v8::Value>&)) 962 void {{v8_class}}::register{{method.name | blink_capitalize}}MethodForPartialInt erface(void (*method)(const v8::FunctionCallbackInfo<v8::Value>&)) {
995 { 963 {{cpp_class}}V8Internal::{{method.name}}MethodForPartialInterface = method;
996 {{cpp_class}}V8Internal::{{method.name}}MethodForPartialInterface = method;
997 } 964 }
998 965
999 {% endfor %} 966 {% endfor %}
1000 {% endif %} 967 {% endif %}
1001 {% endblock %} 968 {% endblock %}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698