Line data Source code
1 : /* THIS FILE IS AUTOGENERATED FROM HTMLInputElement.webidl BY Codegen.py - DO NOT EDIT */
2 :
3 : #include "AtomList.h"
4 : #include "AutocompleteInfoBinding.h"
5 : #include "HTMLElementBinding.h"
6 : #include "HTMLInputElement.h"
7 : #include "HTMLInputElementBinding.h"
8 : #include "WrapperFactory.h"
9 : #include "XrayWrapper.h"
10 : #include "imgINotificationObserver.h"
11 : #include "imgIRequest.h"
12 : #include "jsapi.h"
13 : #include "mozilla/FloatingPoint.h"
14 : #include "mozilla/OwningNonNull.h"
15 : #include "mozilla/Preferences.h"
16 : #include "mozilla/dom/BindingUtils.h"
17 : #include "mozilla/dom/CustomElementRegistry.h"
18 : #include "mozilla/dom/DOMJSClass.h"
19 : #include "mozilla/dom/Date.h"
20 : #include "mozilla/dom/File.h"
21 : #include "mozilla/dom/FileList.h"
22 : #include "mozilla/dom/FileSystemEntry.h"
23 : #include "mozilla/dom/HTMLFormElement.h"
24 : #include "mozilla/dom/HTMLInputElement.h"
25 : #include "mozilla/dom/NonRefcountedDOMObject.h"
26 : #include "mozilla/dom/Nullable.h"
27 : #include "mozilla/dom/PrimitiveConversions.h"
28 : #include "mozilla/dom/Promise.h"
29 : #include "mozilla/dom/ScriptSettings.h"
30 : #include "mozilla/dom/SimpleGlobalObject.h"
31 : #include "mozilla/dom/ToJSValue.h"
32 : #include "mozilla/dom/UnionConversions.h"
33 : #include "mozilla/dom/UnionTypes.h"
34 : #include "mozilla/dom/ValidityState.h"
35 : #include "mozilla/dom/XrayExpandoClass.h"
36 : #include "nsContentUtils.h"
37 : #include "nsGenericHTMLElement.h"
38 : #include "nsIControllers.h"
39 : #include "nsIEditor.h"
40 : #include "nsINodeList.h"
41 : #include "nsIURI.h"
42 :
43 : namespace mozilla {
44 : namespace dom {
45 :
46 : namespace SelectionModeValues {
47 : extern const EnumEntry strings[5] = {
48 : {"select", 6},
49 : {"start", 5},
50 : {"end", 3},
51 : {"preserve", 8},
52 : { nullptr, 0 }
53 : };
54 : } // namespace SelectionModeValues
55 :
56 : bool
57 0 : ToJSValue(JSContext* aCx, SelectionMode aArgument, JS::MutableHandle<JS::Value> aValue)
58 : {
59 0 : MOZ_ASSERT(uint32_t(aArgument) < ArrayLength(SelectionModeValues::strings));
60 : JSString* resultStr =
61 0 : JS_NewStringCopyN(aCx, SelectionModeValues::strings[uint32_t(aArgument)].value,
62 0 : SelectionModeValues::strings[uint32_t(aArgument)].length);
63 0 : if (!resultStr) {
64 0 : return false;
65 : }
66 0 : aValue.setString(resultStr);
67 0 : return true;
68 : }
69 :
70 :
71 :
72 0 : DateTimeValue::DateTimeValue()
73 : {
74 : // Safe to pass a null context if we pass a null value
75 0 : Init(nullptr, JS::NullHandleValue);
76 0 : }
77 :
78 :
79 :
80 : bool
81 0 : DateTimeValue::InitIds(JSContext* cx, DateTimeValueAtoms* atomsCache)
82 : {
83 0 : MOZ_ASSERT(!*reinterpret_cast<jsid**>(atomsCache));
84 :
85 : // Initialize these in reverse order so that any failure leaves the first one
86 : // uninitialized.
87 0 : if (!atomsCache->year_id.init(cx, "year") ||
88 0 : !atomsCache->month_id.init(cx, "month") ||
89 0 : !atomsCache->minute_id.init(cx, "minute") ||
90 0 : !atomsCache->hour_id.init(cx, "hour") ||
91 0 : !atomsCache->day_id.init(cx, "day")) {
92 0 : return false;
93 : }
94 0 : return true;
95 : }
96 :
97 : bool
98 0 : DateTimeValue::Init(JSContext* cx, JS::Handle<JS::Value> val, const char* sourceDescription, bool passedToJSImpl)
99 : {
100 : // Passing a null JSContext is OK only if we're initing from null,
101 : // Since in that case we will not have to do any property gets
102 : // Also evaluate isNullOrUndefined in order to avoid false-positive
103 : // checkers by static analysis tools
104 0 : MOZ_ASSERT_IF(!cx, val.isNull() && val.isNullOrUndefined());
105 0 : DateTimeValueAtoms* atomsCache = nullptr;
106 0 : if (cx) {
107 0 : atomsCache = GetAtomCache<DateTimeValueAtoms>(cx);
108 0 : if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
109 0 : return false;
110 : }
111 : }
112 :
113 0 : if (!IsConvertibleToDictionary(val)) {
114 0 : return ThrowErrorMessage(cx, MSG_NOT_DICTIONARY, sourceDescription);
115 : }
116 :
117 0 : bool isNull = val.isNullOrUndefined();
118 : // We only need these if !isNull, in which case we have |cx|.
119 0 : Maybe<JS::Rooted<JSObject *> > object;
120 0 : Maybe<JS::Rooted<JS::Value> > temp;
121 0 : if (!isNull) {
122 0 : MOZ_ASSERT(cx);
123 0 : object.emplace(cx, &val.toObject());
124 0 : temp.emplace(cx);
125 : }
126 0 : if (!isNull) {
127 0 : if (!JS_GetPropertyById(cx, *object, atomsCache->day_id, temp.ptr())) {
128 0 : return false;
129 : }
130 : }
131 0 : if (!isNull && !temp->isUndefined()) {
132 0 : mDay.Construct();
133 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, temp.ref(), &(mDay.Value()))) {
134 0 : return false;
135 : }
136 0 : mIsAnyMemberPresent = true;
137 : }
138 :
139 0 : if (!isNull) {
140 0 : if (!JS_GetPropertyById(cx, *object, atomsCache->hour_id, temp.ptr())) {
141 0 : return false;
142 : }
143 : }
144 0 : if (!isNull && !temp->isUndefined()) {
145 0 : mHour.Construct();
146 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, temp.ref(), &(mHour.Value()))) {
147 0 : return false;
148 : }
149 0 : mIsAnyMemberPresent = true;
150 : }
151 :
152 0 : if (!isNull) {
153 0 : if (!JS_GetPropertyById(cx, *object, atomsCache->minute_id, temp.ptr())) {
154 0 : return false;
155 : }
156 : }
157 0 : if (!isNull && !temp->isUndefined()) {
158 0 : mMinute.Construct();
159 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, temp.ref(), &(mMinute.Value()))) {
160 0 : return false;
161 : }
162 0 : mIsAnyMemberPresent = true;
163 : }
164 :
165 0 : if (!isNull) {
166 0 : if (!JS_GetPropertyById(cx, *object, atomsCache->month_id, temp.ptr())) {
167 0 : return false;
168 : }
169 : }
170 0 : if (!isNull && !temp->isUndefined()) {
171 0 : mMonth.Construct();
172 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, temp.ref(), &(mMonth.Value()))) {
173 0 : return false;
174 : }
175 0 : mIsAnyMemberPresent = true;
176 : }
177 :
178 0 : if (!isNull) {
179 0 : if (!JS_GetPropertyById(cx, *object, atomsCache->year_id, temp.ptr())) {
180 0 : return false;
181 : }
182 : }
183 0 : if (!isNull && !temp->isUndefined()) {
184 0 : mYear.Construct();
185 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, temp.ref(), &(mYear.Value()))) {
186 0 : return false;
187 : }
188 0 : mIsAnyMemberPresent = true;
189 : }
190 0 : return true;
191 : }
192 :
193 : bool
194 0 : DateTimeValue::Init(const nsAString& aJSON)
195 : {
196 0 : AutoJSAPI jsapi;
197 0 : JSObject* cleanGlobal = SimpleGlobalObject::Create(SimpleGlobalObject::GlobalType::BindingDetail);
198 0 : if (!cleanGlobal) {
199 0 : return false;
200 : }
201 0 : if (!jsapi.Init(cleanGlobal)) {
202 0 : return false;
203 : }
204 0 : JSContext* cx = jsapi.cx();
205 0 : JS::Rooted<JS::Value> json(cx);
206 0 : bool ok = ParseJSON(cx, aJSON, &json);
207 0 : NS_ENSURE_TRUE(ok, false);
208 0 : return Init(cx, json);
209 : }
210 :
211 : bool
212 0 : DateTimeValue::ToObjectInternal(JSContext* cx, JS::MutableHandle<JS::Value> rval) const
213 : {
214 0 : DateTimeValueAtoms* atomsCache = GetAtomCache<DateTimeValueAtoms>(cx);
215 0 : if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
216 0 : return false;
217 : }
218 :
219 0 : JS::Rooted<JSObject*> obj(cx, JS_NewPlainObject(cx));
220 0 : if (!obj) {
221 0 : return false;
222 : }
223 0 : rval.set(JS::ObjectValue(*obj));
224 :
225 0 : if (mDay.WasPassed()) {
226 : do {
227 : // block for our 'break' successCode and scope for 'temp' and 'currentValue'
228 0 : JS::Rooted<JS::Value> temp(cx);
229 0 : int32_t const & currentValue = mDay.InternalValue();
230 0 : temp.setInt32(int32_t(currentValue));
231 0 : if (!JS_DefinePropertyById(cx, obj, atomsCache->day_id, temp, JSPROP_ENUMERATE)) {
232 0 : return false;
233 : }
234 0 : break;
235 : } while(0);
236 : }
237 :
238 0 : if (mHour.WasPassed()) {
239 : do {
240 : // block for our 'break' successCode and scope for 'temp' and 'currentValue'
241 0 : JS::Rooted<JS::Value> temp(cx);
242 0 : int32_t const & currentValue = mHour.InternalValue();
243 0 : temp.setInt32(int32_t(currentValue));
244 0 : if (!JS_DefinePropertyById(cx, obj, atomsCache->hour_id, temp, JSPROP_ENUMERATE)) {
245 0 : return false;
246 : }
247 0 : break;
248 : } while(0);
249 : }
250 :
251 0 : if (mMinute.WasPassed()) {
252 : do {
253 : // block for our 'break' successCode and scope for 'temp' and 'currentValue'
254 0 : JS::Rooted<JS::Value> temp(cx);
255 0 : int32_t const & currentValue = mMinute.InternalValue();
256 0 : temp.setInt32(int32_t(currentValue));
257 0 : if (!JS_DefinePropertyById(cx, obj, atomsCache->minute_id, temp, JSPROP_ENUMERATE)) {
258 0 : return false;
259 : }
260 0 : break;
261 : } while(0);
262 : }
263 :
264 0 : if (mMonth.WasPassed()) {
265 : do {
266 : // block for our 'break' successCode and scope for 'temp' and 'currentValue'
267 0 : JS::Rooted<JS::Value> temp(cx);
268 0 : int32_t const & currentValue = mMonth.InternalValue();
269 0 : temp.setInt32(int32_t(currentValue));
270 0 : if (!JS_DefinePropertyById(cx, obj, atomsCache->month_id, temp, JSPROP_ENUMERATE)) {
271 0 : return false;
272 : }
273 0 : break;
274 : } while(0);
275 : }
276 :
277 0 : if (mYear.WasPassed()) {
278 : do {
279 : // block for our 'break' successCode and scope for 'temp' and 'currentValue'
280 0 : JS::Rooted<JS::Value> temp(cx);
281 0 : int32_t const & currentValue = mYear.InternalValue();
282 0 : temp.setInt32(int32_t(currentValue));
283 0 : if (!JS_DefinePropertyById(cx, obj, atomsCache->year_id, temp, JSPROP_ENUMERATE)) {
284 0 : return false;
285 : }
286 0 : break;
287 : } while(0);
288 : }
289 :
290 0 : return true;
291 : }
292 :
293 : bool
294 0 : DateTimeValue::ToJSON(nsAString& aJSON) const
295 : {
296 0 : AutoJSAPI jsapi;
297 0 : jsapi.Init();
298 0 : JSContext *cx = jsapi.cx();
299 : // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here
300 : // because we'll only be creating objects, in ways that have no
301 : // side-effects, followed by a call to JS::ToJSONMaybeSafely,
302 : // which likewise guarantees no side-effects for the sorts of
303 : // things we will pass it.
304 0 : JSAutoCompartment ac(cx, binding_detail::UnprivilegedJunkScopeOrWorkerGlobal());
305 0 : JS::Rooted<JS::Value> val(cx);
306 0 : if (!ToObjectInternal(cx, &val)) {
307 0 : return false;
308 : }
309 0 : JS::Rooted<JSObject*> obj(cx, &val.toObject());
310 0 : return StringifyToJSON(cx, obj, aJSON);
311 : }
312 :
313 : void
314 0 : DateTimeValue::TraceDictionary(JSTracer* trc)
315 : {
316 0 : }
317 :
318 : DateTimeValue&
319 0 : DateTimeValue::operator=(const DateTimeValue& aOther)
320 : {
321 0 : mDay.Reset();
322 0 : if (aOther.mDay.WasPassed()) {
323 0 : mDay.Construct(aOther.mDay.Value());
324 : }
325 0 : mHour.Reset();
326 0 : if (aOther.mHour.WasPassed()) {
327 0 : mHour.Construct(aOther.mHour.Value());
328 : }
329 0 : mMinute.Reset();
330 0 : if (aOther.mMinute.WasPassed()) {
331 0 : mMinute.Construct(aOther.mMinute.Value());
332 : }
333 0 : mMonth.Reset();
334 0 : if (aOther.mMonth.WasPassed()) {
335 0 : mMonth.Construct(aOther.mMonth.Value());
336 : }
337 0 : mYear.Reset();
338 0 : if (aOther.mYear.WasPassed()) {
339 0 : mYear.Construct(aOther.mYear.Value());
340 : }
341 0 : return *this;
342 : }
343 :
344 : namespace binding_detail {
345 : } // namespace binding_detail
346 :
347 :
348 : namespace HTMLInputElementBinding {
349 :
350 : static_assert(IsRefcounted<NativeType>::value == IsRefcounted<HTMLElementBinding::NativeType>::value,
351 : "Can't inherit from an interface with a different ownership model.");
352 :
353 : static bool
354 0 : get_accept(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
355 : {
356 0 : DOMString result;
357 0 : self->GetAccept(result);
358 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
359 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
360 0 : return false;
361 : }
362 0 : return true;
363 : }
364 :
365 : static bool
366 0 : set_accept(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
367 : {
368 0 : binding_detail::FakeString arg0;
369 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
370 0 : return false;
371 : }
372 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
373 0 : Maybe<AutoCEReaction> ceReaction;
374 0 : if (reactionsStack) {
375 0 : ceReaction.emplace(reactionsStack);
376 : }
377 0 : binding_detail::FastErrorResult rv;
378 0 : self->SetAccept(NonNullHelper(Constify(arg0)), rv);
379 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
380 0 : return false;
381 : }
382 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
383 :
384 0 : return true;
385 : }
386 :
387 : static const JSJitInfo accept_getterinfo = {
388 : { (JSJitGetterOp)get_accept },
389 : { prototypes::id::HTMLInputElement },
390 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
391 : JSJitInfo::Getter,
392 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
393 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
394 : false, /* isInfallible. False in setters. */
395 : true, /* isMovable. Not relevant for setters. */
396 : true, /* isEliminatable. Not relevant for setters. */
397 : false, /* isAlwaysInSlot. Only relevant for getters. */
398 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
399 : false, /* isTypedMethod. Only relevant for methods. */
400 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
401 : };
402 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
403 : static_assert(0 < 2, "There is no slot for us");
404 : static const JSJitInfo accept_setterinfo = {
405 : { (JSJitGetterOp)set_accept },
406 : { prototypes::id::HTMLInputElement },
407 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
408 : JSJitInfo::Setter,
409 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
410 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
411 : false, /* isInfallible. False in setters. */
412 : false, /* isMovable. Not relevant for setters. */
413 : false, /* isEliminatable. Not relevant for setters. */
414 : false, /* isAlwaysInSlot. Only relevant for getters. */
415 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
416 : false, /* isTypedMethod. Only relevant for methods. */
417 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
418 : };
419 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
420 : static_assert(0 < 2, "There is no slot for us");
421 :
422 : static bool
423 0 : get_alt(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
424 : {
425 0 : DOMString result;
426 0 : self->GetAlt(result);
427 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
428 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
429 0 : return false;
430 : }
431 0 : return true;
432 : }
433 :
434 : static bool
435 0 : set_alt(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
436 : {
437 0 : binding_detail::FakeString arg0;
438 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
439 0 : return false;
440 : }
441 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
442 0 : Maybe<AutoCEReaction> ceReaction;
443 0 : if (reactionsStack) {
444 0 : ceReaction.emplace(reactionsStack);
445 : }
446 0 : binding_detail::FastErrorResult rv;
447 0 : self->SetAlt(NonNullHelper(Constify(arg0)), rv);
448 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
449 0 : return false;
450 : }
451 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
452 :
453 0 : return true;
454 : }
455 :
456 : static const JSJitInfo alt_getterinfo = {
457 : { (JSJitGetterOp)get_alt },
458 : { prototypes::id::HTMLInputElement },
459 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
460 : JSJitInfo::Getter,
461 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
462 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
463 : false, /* isInfallible. False in setters. */
464 : true, /* isMovable. Not relevant for setters. */
465 : true, /* isEliminatable. Not relevant for setters. */
466 : false, /* isAlwaysInSlot. Only relevant for getters. */
467 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
468 : false, /* isTypedMethod. Only relevant for methods. */
469 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
470 : };
471 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
472 : static_assert(0 < 2, "There is no slot for us");
473 : static const JSJitInfo alt_setterinfo = {
474 : { (JSJitGetterOp)set_alt },
475 : { prototypes::id::HTMLInputElement },
476 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
477 : JSJitInfo::Setter,
478 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
479 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
480 : false, /* isInfallible. False in setters. */
481 : false, /* isMovable. Not relevant for setters. */
482 : false, /* isEliminatable. Not relevant for setters. */
483 : false, /* isAlwaysInSlot. Only relevant for getters. */
484 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
485 : false, /* isTypedMethod. Only relevant for methods. */
486 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
487 : };
488 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
489 : static_assert(0 < 2, "There is no slot for us");
490 :
491 : static bool
492 0 : get_autocomplete(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
493 : {
494 0 : DOMString result;
495 0 : self->GetAutocomplete(result);
496 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
497 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
498 0 : return false;
499 : }
500 0 : return true;
501 : }
502 :
503 : static bool
504 0 : set_autocomplete(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
505 : {
506 0 : binding_detail::FakeString arg0;
507 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
508 0 : return false;
509 : }
510 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
511 0 : Maybe<AutoCEReaction> ceReaction;
512 0 : if (reactionsStack) {
513 0 : ceReaction.emplace(reactionsStack);
514 : }
515 0 : binding_detail::FastErrorResult rv;
516 0 : self->SetAutocomplete(NonNullHelper(Constify(arg0)), rv);
517 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
518 0 : return false;
519 : }
520 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
521 :
522 0 : return true;
523 : }
524 :
525 : static const JSJitInfo autocomplete_getterinfo = {
526 : { (JSJitGetterOp)get_autocomplete },
527 : { prototypes::id::HTMLInputElement },
528 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
529 : JSJitInfo::Getter,
530 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
531 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
532 : false, /* isInfallible. False in setters. */
533 : true, /* isMovable. Not relevant for setters. */
534 : true, /* isEliminatable. Not relevant for setters. */
535 : false, /* isAlwaysInSlot. Only relevant for getters. */
536 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
537 : false, /* isTypedMethod. Only relevant for methods. */
538 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
539 : };
540 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
541 : static_assert(0 < 2, "There is no slot for us");
542 : static const JSJitInfo autocomplete_setterinfo = {
543 : { (JSJitGetterOp)set_autocomplete },
544 : { prototypes::id::HTMLInputElement },
545 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
546 : JSJitInfo::Setter,
547 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
548 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
549 : false, /* isInfallible. False in setters. */
550 : false, /* isMovable. Not relevant for setters. */
551 : false, /* isEliminatable. Not relevant for setters. */
552 : false, /* isAlwaysInSlot. Only relevant for getters. */
553 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
554 : false, /* isTypedMethod. Only relevant for methods. */
555 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
556 : };
557 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
558 : static_assert(0 < 2, "There is no slot for us");
559 :
560 : static bool
561 0 : get_autofocus(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
562 : {
563 0 : bool result(self->Autofocus());
564 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
565 0 : args.rval().setBoolean(result);
566 0 : return true;
567 : }
568 :
569 : static bool
570 0 : set_autofocus(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
571 : {
572 : bool arg0;
573 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
574 0 : return false;
575 : }
576 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
577 0 : Maybe<AutoCEReaction> ceReaction;
578 0 : if (reactionsStack) {
579 0 : ceReaction.emplace(reactionsStack);
580 : }
581 0 : binding_detail::FastErrorResult rv;
582 0 : self->SetAutofocus(arg0, rv);
583 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
584 0 : return false;
585 : }
586 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
587 :
588 0 : return true;
589 : }
590 :
591 : static const JSJitInfo autofocus_getterinfo = {
592 : { (JSJitGetterOp)get_autofocus },
593 : { prototypes::id::HTMLInputElement },
594 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
595 : JSJitInfo::Getter,
596 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
597 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
598 : true, /* isInfallible. False in setters. */
599 : true, /* isMovable. Not relevant for setters. */
600 : true, /* isEliminatable. Not relevant for setters. */
601 : false, /* isAlwaysInSlot. Only relevant for getters. */
602 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
603 : false, /* isTypedMethod. Only relevant for methods. */
604 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
605 : };
606 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
607 : static_assert(0 < 2, "There is no slot for us");
608 : static const JSJitInfo autofocus_setterinfo = {
609 : { (JSJitGetterOp)set_autofocus },
610 : { prototypes::id::HTMLInputElement },
611 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
612 : JSJitInfo::Setter,
613 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
614 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
615 : false, /* isInfallible. False in setters. */
616 : false, /* isMovable. Not relevant for setters. */
617 : false, /* isEliminatable. Not relevant for setters. */
618 : false, /* isAlwaysInSlot. Only relevant for getters. */
619 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
620 : false, /* isTypedMethod. Only relevant for methods. */
621 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
622 : };
623 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
624 : static_assert(0 < 2, "There is no slot for us");
625 :
626 : static bool
627 0 : get_defaultChecked(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
628 : {
629 0 : bool result(self->DefaultChecked());
630 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
631 0 : args.rval().setBoolean(result);
632 0 : return true;
633 : }
634 :
635 : static bool
636 0 : set_defaultChecked(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
637 : {
638 : bool arg0;
639 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
640 0 : return false;
641 : }
642 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
643 0 : Maybe<AutoCEReaction> ceReaction;
644 0 : if (reactionsStack) {
645 0 : ceReaction.emplace(reactionsStack);
646 : }
647 0 : binding_detail::FastErrorResult rv;
648 0 : self->SetDefaultChecked(arg0, rv);
649 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
650 0 : return false;
651 : }
652 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
653 :
654 0 : return true;
655 : }
656 :
657 : static const JSJitInfo defaultChecked_getterinfo = {
658 : { (JSJitGetterOp)get_defaultChecked },
659 : { prototypes::id::HTMLInputElement },
660 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
661 : JSJitInfo::Getter,
662 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
663 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
664 : true, /* isInfallible. False in setters. */
665 : true, /* isMovable. Not relevant for setters. */
666 : true, /* isEliminatable. Not relevant for setters. */
667 : false, /* isAlwaysInSlot. Only relevant for getters. */
668 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
669 : false, /* isTypedMethod. Only relevant for methods. */
670 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
671 : };
672 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
673 : static_assert(0 < 2, "There is no slot for us");
674 : static const JSJitInfo defaultChecked_setterinfo = {
675 : { (JSJitGetterOp)set_defaultChecked },
676 : { prototypes::id::HTMLInputElement },
677 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
678 : JSJitInfo::Setter,
679 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
680 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
681 : false, /* isInfallible. False in setters. */
682 : false, /* isMovable. Not relevant for setters. */
683 : false, /* isEliminatable. Not relevant for setters. */
684 : false, /* isAlwaysInSlot. Only relevant for getters. */
685 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
686 : false, /* isTypedMethod. Only relevant for methods. */
687 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
688 : };
689 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
690 : static_assert(0 < 2, "There is no slot for us");
691 :
692 : static bool
693 0 : get_checked(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
694 : {
695 0 : bool result(self->Checked());
696 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
697 0 : args.rval().setBoolean(result);
698 0 : return true;
699 : }
700 :
701 : static bool
702 0 : set_checked(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
703 : {
704 : bool arg0;
705 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
706 0 : return false;
707 : }
708 0 : self->SetChecked(arg0);
709 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
710 :
711 0 : return true;
712 : }
713 :
714 : static const JSJitInfo checked_getterinfo = {
715 : { (JSJitGetterOp)get_checked },
716 : { prototypes::id::HTMLInputElement },
717 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
718 : JSJitInfo::Getter,
719 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
720 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
721 : true, /* isInfallible. False in setters. */
722 : true, /* isMovable. Not relevant for setters. */
723 : true, /* isEliminatable. Not relevant for setters. */
724 : false, /* isAlwaysInSlot. Only relevant for getters. */
725 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
726 : false, /* isTypedMethod. Only relevant for methods. */
727 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
728 : };
729 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
730 : static_assert(0 < 2, "There is no slot for us");
731 : static const JSJitInfo checked_setterinfo = {
732 : { (JSJitGetterOp)set_checked },
733 : { prototypes::id::HTMLInputElement },
734 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
735 : JSJitInfo::Setter,
736 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
737 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
738 : false, /* isInfallible. False in setters. */
739 : false, /* isMovable. Not relevant for setters. */
740 : false, /* isEliminatable. Not relevant for setters. */
741 : false, /* isAlwaysInSlot. Only relevant for getters. */
742 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
743 : false, /* isTypedMethod. Only relevant for methods. */
744 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
745 : };
746 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
747 : static_assert(0 < 2, "There is no slot for us");
748 :
749 : static bool
750 0 : get_disabled(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
751 : {
752 0 : bool result(self->Disabled());
753 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
754 0 : args.rval().setBoolean(result);
755 0 : return true;
756 : }
757 :
758 : static bool
759 0 : set_disabled(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
760 : {
761 : bool arg0;
762 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
763 0 : return false;
764 : }
765 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
766 0 : Maybe<AutoCEReaction> ceReaction;
767 0 : if (reactionsStack) {
768 0 : ceReaction.emplace(reactionsStack);
769 : }
770 0 : binding_detail::FastErrorResult rv;
771 0 : self->SetDisabled(arg0, rv);
772 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
773 0 : return false;
774 : }
775 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
776 :
777 0 : return true;
778 : }
779 :
780 : static const JSJitInfo disabled_getterinfo = {
781 : { (JSJitGetterOp)get_disabled },
782 : { prototypes::id::HTMLInputElement },
783 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
784 : JSJitInfo::Getter,
785 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
786 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
787 : true, /* isInfallible. False in setters. */
788 : true, /* isMovable. Not relevant for setters. */
789 : true, /* isEliminatable. Not relevant for setters. */
790 : false, /* isAlwaysInSlot. Only relevant for getters. */
791 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
792 : false, /* isTypedMethod. Only relevant for methods. */
793 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
794 : };
795 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
796 : static_assert(0 < 2, "There is no slot for us");
797 : static const JSJitInfo disabled_setterinfo = {
798 : { (JSJitGetterOp)set_disabled },
799 : { prototypes::id::HTMLInputElement },
800 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
801 : JSJitInfo::Setter,
802 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
803 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
804 : false, /* isInfallible. False in setters. */
805 : false, /* isMovable. Not relevant for setters. */
806 : false, /* isEliminatable. Not relevant for setters. */
807 : false, /* isAlwaysInSlot. Only relevant for getters. */
808 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
809 : false, /* isTypedMethod. Only relevant for methods. */
810 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
811 : };
812 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
813 : static_assert(0 < 2, "There is no slot for us");
814 :
815 : static bool
816 0 : get_form(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
817 : {
818 0 : auto result(StrongOrRawPtr<mozilla::dom::HTMLFormElement>(self->GetForm()));
819 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
820 0 : if (!result) {
821 0 : args.rval().setNull();
822 0 : return true;
823 : }
824 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
825 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
826 0 : return false;
827 : }
828 0 : return true;
829 : }
830 :
831 : static const JSJitInfo form_getterinfo = {
832 : { (JSJitGetterOp)get_form },
833 : { prototypes::id::HTMLInputElement },
834 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
835 : JSJitInfo::Getter,
836 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
837 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
838 : false, /* isInfallible. False in setters. */
839 : false, /* isMovable. Not relevant for setters. */
840 : false, /* isEliminatable. Not relevant for setters. */
841 : false, /* isAlwaysInSlot. Only relevant for getters. */
842 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
843 : false, /* isTypedMethod. Only relevant for methods. */
844 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
845 : };
846 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
847 : static_assert(0 < 2, "There is no slot for us");
848 :
849 : static bool
850 0 : get_files(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
851 : {
852 0 : auto result(StrongOrRawPtr<mozilla::dom::FileList>(self->GetFiles()));
853 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
854 0 : if (!result) {
855 0 : args.rval().setNull();
856 0 : return true;
857 : }
858 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
859 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
860 0 : return false;
861 : }
862 0 : return true;
863 : }
864 :
865 : static const JSJitInfo files_getterinfo = {
866 : { (JSJitGetterOp)get_files },
867 : { prototypes::id::HTMLInputElement },
868 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
869 : JSJitInfo::Getter,
870 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
871 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
872 : false, /* isInfallible. False in setters. */
873 : true, /* isMovable. Not relevant for setters. */
874 : true, /* isEliminatable. Not relevant for setters. */
875 : false, /* isAlwaysInSlot. Only relevant for getters. */
876 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
877 : false, /* isTypedMethod. Only relevant for methods. */
878 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
879 : };
880 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
881 : static_assert(0 < 2, "There is no slot for us");
882 :
883 : static bool
884 0 : get_formAction(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
885 : {
886 0 : DOMString result;
887 0 : self->GetFormAction(result);
888 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
889 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
890 0 : return false;
891 : }
892 0 : return true;
893 : }
894 :
895 : static bool
896 0 : set_formAction(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
897 : {
898 0 : binding_detail::FakeString arg0;
899 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
900 0 : return false;
901 : }
902 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
903 0 : Maybe<AutoCEReaction> ceReaction;
904 0 : if (reactionsStack) {
905 0 : ceReaction.emplace(reactionsStack);
906 : }
907 0 : binding_detail::FastErrorResult rv;
908 0 : self->SetFormAction(NonNullHelper(Constify(arg0)), rv);
909 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
910 0 : return false;
911 : }
912 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
913 :
914 0 : return true;
915 : }
916 :
917 : static const JSJitInfo formAction_getterinfo = {
918 : { (JSJitGetterOp)get_formAction },
919 : { prototypes::id::HTMLInputElement },
920 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
921 : JSJitInfo::Getter,
922 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
923 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
924 : false, /* isInfallible. False in setters. */
925 : true, /* isMovable. Not relevant for setters. */
926 : true, /* isEliminatable. Not relevant for setters. */
927 : false, /* isAlwaysInSlot. Only relevant for getters. */
928 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
929 : false, /* isTypedMethod. Only relevant for methods. */
930 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
931 : };
932 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
933 : static_assert(0 < 2, "There is no slot for us");
934 : static const JSJitInfo formAction_setterinfo = {
935 : { (JSJitGetterOp)set_formAction },
936 : { prototypes::id::HTMLInputElement },
937 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
938 : JSJitInfo::Setter,
939 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
940 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
941 : false, /* isInfallible. False in setters. */
942 : false, /* isMovable. Not relevant for setters. */
943 : false, /* isEliminatable. Not relevant for setters. */
944 : false, /* isAlwaysInSlot. Only relevant for getters. */
945 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
946 : false, /* isTypedMethod. Only relevant for methods. */
947 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
948 : };
949 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
950 : static_assert(0 < 2, "There is no slot for us");
951 :
952 : static bool
953 0 : get_formEnctype(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
954 : {
955 0 : DOMString result;
956 0 : self->GetFormEnctype(result);
957 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
958 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
959 0 : return false;
960 : }
961 0 : return true;
962 : }
963 :
964 : static bool
965 0 : set_formEnctype(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
966 : {
967 0 : binding_detail::FakeString arg0;
968 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
969 0 : return false;
970 : }
971 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
972 0 : Maybe<AutoCEReaction> ceReaction;
973 0 : if (reactionsStack) {
974 0 : ceReaction.emplace(reactionsStack);
975 : }
976 0 : binding_detail::FastErrorResult rv;
977 0 : self->SetFormEnctype(NonNullHelper(Constify(arg0)), rv);
978 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
979 0 : return false;
980 : }
981 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
982 :
983 0 : return true;
984 : }
985 :
986 : static const JSJitInfo formEnctype_getterinfo = {
987 : { (JSJitGetterOp)get_formEnctype },
988 : { prototypes::id::HTMLInputElement },
989 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
990 : JSJitInfo::Getter,
991 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
992 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
993 : false, /* isInfallible. False in setters. */
994 : true, /* isMovable. Not relevant for setters. */
995 : true, /* isEliminatable. Not relevant for setters. */
996 : false, /* isAlwaysInSlot. Only relevant for getters. */
997 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
998 : false, /* isTypedMethod. Only relevant for methods. */
999 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1000 : };
1001 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1002 : static_assert(0 < 2, "There is no slot for us");
1003 : static const JSJitInfo formEnctype_setterinfo = {
1004 : { (JSJitGetterOp)set_formEnctype },
1005 : { prototypes::id::HTMLInputElement },
1006 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1007 : JSJitInfo::Setter,
1008 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1009 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1010 : false, /* isInfallible. False in setters. */
1011 : false, /* isMovable. Not relevant for setters. */
1012 : false, /* isEliminatable. Not relevant for setters. */
1013 : false, /* isAlwaysInSlot. Only relevant for getters. */
1014 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1015 : false, /* isTypedMethod. Only relevant for methods. */
1016 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1017 : };
1018 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1019 : static_assert(0 < 2, "There is no slot for us");
1020 :
1021 : static bool
1022 0 : get_formMethod(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
1023 : {
1024 0 : DOMString result;
1025 0 : self->GetFormMethod(result);
1026 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1027 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
1028 0 : return false;
1029 : }
1030 0 : return true;
1031 : }
1032 :
1033 : static bool
1034 0 : set_formMethod(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
1035 : {
1036 0 : binding_detail::FakeString arg0;
1037 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
1038 0 : return false;
1039 : }
1040 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
1041 0 : Maybe<AutoCEReaction> ceReaction;
1042 0 : if (reactionsStack) {
1043 0 : ceReaction.emplace(reactionsStack);
1044 : }
1045 0 : binding_detail::FastErrorResult rv;
1046 0 : self->SetFormMethod(NonNullHelper(Constify(arg0)), rv);
1047 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1048 0 : return false;
1049 : }
1050 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1051 :
1052 0 : return true;
1053 : }
1054 :
1055 : static const JSJitInfo formMethod_getterinfo = {
1056 : { (JSJitGetterOp)get_formMethod },
1057 : { prototypes::id::HTMLInputElement },
1058 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1059 : JSJitInfo::Getter,
1060 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
1061 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
1062 : false, /* isInfallible. False in setters. */
1063 : true, /* isMovable. Not relevant for setters. */
1064 : true, /* isEliminatable. Not relevant for setters. */
1065 : false, /* isAlwaysInSlot. Only relevant for getters. */
1066 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1067 : false, /* isTypedMethod. Only relevant for methods. */
1068 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1069 : };
1070 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1071 : static_assert(0 < 2, "There is no slot for us");
1072 : static const JSJitInfo formMethod_setterinfo = {
1073 : { (JSJitGetterOp)set_formMethod },
1074 : { prototypes::id::HTMLInputElement },
1075 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1076 : JSJitInfo::Setter,
1077 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1078 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1079 : false, /* isInfallible. False in setters. */
1080 : false, /* isMovable. Not relevant for setters. */
1081 : false, /* isEliminatable. Not relevant for setters. */
1082 : false, /* isAlwaysInSlot. Only relevant for getters. */
1083 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1084 : false, /* isTypedMethod. Only relevant for methods. */
1085 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1086 : };
1087 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1088 : static_assert(0 < 2, "There is no slot for us");
1089 :
1090 : static bool
1091 0 : get_formNoValidate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
1092 : {
1093 0 : bool result(self->FormNoValidate());
1094 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1095 0 : args.rval().setBoolean(result);
1096 0 : return true;
1097 : }
1098 :
1099 : static bool
1100 0 : set_formNoValidate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
1101 : {
1102 : bool arg0;
1103 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
1104 0 : return false;
1105 : }
1106 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
1107 0 : Maybe<AutoCEReaction> ceReaction;
1108 0 : if (reactionsStack) {
1109 0 : ceReaction.emplace(reactionsStack);
1110 : }
1111 0 : binding_detail::FastErrorResult rv;
1112 0 : self->SetFormNoValidate(arg0, rv);
1113 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1114 0 : return false;
1115 : }
1116 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1117 :
1118 0 : return true;
1119 : }
1120 :
1121 : static const JSJitInfo formNoValidate_getterinfo = {
1122 : { (JSJitGetterOp)get_formNoValidate },
1123 : { prototypes::id::HTMLInputElement },
1124 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1125 : JSJitInfo::Getter,
1126 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
1127 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1128 : true, /* isInfallible. False in setters. */
1129 : true, /* isMovable. Not relevant for setters. */
1130 : true, /* isEliminatable. Not relevant for setters. */
1131 : false, /* isAlwaysInSlot. Only relevant for getters. */
1132 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1133 : false, /* isTypedMethod. Only relevant for methods. */
1134 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1135 : };
1136 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1137 : static_assert(0 < 2, "There is no slot for us");
1138 : static const JSJitInfo formNoValidate_setterinfo = {
1139 : { (JSJitGetterOp)set_formNoValidate },
1140 : { prototypes::id::HTMLInputElement },
1141 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1142 : JSJitInfo::Setter,
1143 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1144 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1145 : false, /* isInfallible. False in setters. */
1146 : false, /* isMovable. Not relevant for setters. */
1147 : false, /* isEliminatable. Not relevant for setters. */
1148 : false, /* isAlwaysInSlot. Only relevant for getters. */
1149 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1150 : false, /* isTypedMethod. Only relevant for methods. */
1151 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1152 : };
1153 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1154 : static_assert(0 < 2, "There is no slot for us");
1155 :
1156 : static bool
1157 0 : get_formTarget(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
1158 : {
1159 0 : DOMString result;
1160 0 : self->GetFormTarget(result);
1161 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1162 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
1163 0 : return false;
1164 : }
1165 0 : return true;
1166 : }
1167 :
1168 : static bool
1169 0 : set_formTarget(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
1170 : {
1171 0 : binding_detail::FakeString arg0;
1172 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
1173 0 : return false;
1174 : }
1175 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
1176 0 : Maybe<AutoCEReaction> ceReaction;
1177 0 : if (reactionsStack) {
1178 0 : ceReaction.emplace(reactionsStack);
1179 : }
1180 0 : binding_detail::FastErrorResult rv;
1181 0 : self->SetFormTarget(NonNullHelper(Constify(arg0)), rv);
1182 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1183 0 : return false;
1184 : }
1185 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1186 :
1187 0 : return true;
1188 : }
1189 :
1190 : static const JSJitInfo formTarget_getterinfo = {
1191 : { (JSJitGetterOp)get_formTarget },
1192 : { prototypes::id::HTMLInputElement },
1193 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1194 : JSJitInfo::Getter,
1195 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
1196 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
1197 : false, /* isInfallible. False in setters. */
1198 : true, /* isMovable. Not relevant for setters. */
1199 : true, /* isEliminatable. Not relevant for setters. */
1200 : false, /* isAlwaysInSlot. Only relevant for getters. */
1201 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1202 : false, /* isTypedMethod. Only relevant for methods. */
1203 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1204 : };
1205 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1206 : static_assert(0 < 2, "There is no slot for us");
1207 : static const JSJitInfo formTarget_setterinfo = {
1208 : { (JSJitGetterOp)set_formTarget },
1209 : { prototypes::id::HTMLInputElement },
1210 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1211 : JSJitInfo::Setter,
1212 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1213 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1214 : false, /* isInfallible. False in setters. */
1215 : false, /* isMovable. Not relevant for setters. */
1216 : false, /* isEliminatable. Not relevant for setters. */
1217 : false, /* isAlwaysInSlot. Only relevant for getters. */
1218 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1219 : false, /* isTypedMethod. Only relevant for methods. */
1220 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1221 : };
1222 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1223 : static_assert(0 < 2, "There is no slot for us");
1224 :
1225 : static bool
1226 0 : get_height(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
1227 : {
1228 0 : uint32_t result(self->Height());
1229 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1230 0 : args.rval().setNumber(result);
1231 0 : return true;
1232 : }
1233 :
1234 : static bool
1235 0 : set_height(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
1236 : {
1237 : uint32_t arg0;
1238 0 : if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
1239 0 : return false;
1240 : }
1241 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
1242 0 : Maybe<AutoCEReaction> ceReaction;
1243 0 : if (reactionsStack) {
1244 0 : ceReaction.emplace(reactionsStack);
1245 : }
1246 0 : binding_detail::FastErrorResult rv;
1247 0 : self->SetHeight(arg0, rv);
1248 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1249 0 : return false;
1250 : }
1251 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1252 :
1253 0 : return true;
1254 : }
1255 :
1256 : static const JSJitInfo height_getterinfo = {
1257 : { (JSJitGetterOp)get_height },
1258 : { prototypes::id::HTMLInputElement },
1259 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1260 : JSJitInfo::Getter,
1261 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
1262 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
1263 : true, /* isInfallible. False in setters. */
1264 : true, /* isMovable. Not relevant for setters. */
1265 : true, /* isEliminatable. Not relevant for setters. */
1266 : false, /* isAlwaysInSlot. Only relevant for getters. */
1267 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1268 : false, /* isTypedMethod. Only relevant for methods. */
1269 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1270 : };
1271 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1272 : static_assert(0 < 2, "There is no slot for us");
1273 : static const JSJitInfo height_setterinfo = {
1274 : { (JSJitGetterOp)set_height },
1275 : { prototypes::id::HTMLInputElement },
1276 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1277 : JSJitInfo::Setter,
1278 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1279 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1280 : false, /* isInfallible. False in setters. */
1281 : false, /* isMovable. Not relevant for setters. */
1282 : false, /* isEliminatable. Not relevant for setters. */
1283 : false, /* isAlwaysInSlot. Only relevant for getters. */
1284 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1285 : false, /* isTypedMethod. Only relevant for methods. */
1286 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1287 : };
1288 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1289 : static_assert(0 < 2, "There is no slot for us");
1290 :
1291 : static bool
1292 0 : get_indeterminate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
1293 : {
1294 0 : bool result(self->Indeterminate());
1295 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1296 0 : args.rval().setBoolean(result);
1297 0 : return true;
1298 : }
1299 :
1300 : static bool
1301 0 : set_indeterminate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
1302 : {
1303 : bool arg0;
1304 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
1305 0 : return false;
1306 : }
1307 0 : self->SetIndeterminate(arg0);
1308 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1309 :
1310 0 : return true;
1311 : }
1312 :
1313 : static const JSJitInfo indeterminate_getterinfo = {
1314 : { (JSJitGetterOp)get_indeterminate },
1315 : { prototypes::id::HTMLInputElement },
1316 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1317 : JSJitInfo::Getter,
1318 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
1319 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1320 : true, /* isInfallible. False in setters. */
1321 : true, /* isMovable. Not relevant for setters. */
1322 : true, /* isEliminatable. Not relevant for setters. */
1323 : false, /* isAlwaysInSlot. Only relevant for getters. */
1324 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1325 : false, /* isTypedMethod. Only relevant for methods. */
1326 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1327 : };
1328 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1329 : static_assert(0 < 2, "There is no slot for us");
1330 : static const JSJitInfo indeterminate_setterinfo = {
1331 : { (JSJitGetterOp)set_indeterminate },
1332 : { prototypes::id::HTMLInputElement },
1333 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1334 : JSJitInfo::Setter,
1335 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1336 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1337 : false, /* isInfallible. False in setters. */
1338 : false, /* isMovable. Not relevant for setters. */
1339 : false, /* isEliminatable. Not relevant for setters. */
1340 : false, /* isAlwaysInSlot. Only relevant for getters. */
1341 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1342 : false, /* isTypedMethod. Only relevant for methods. */
1343 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1344 : };
1345 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1346 : static_assert(0 < 2, "There is no slot for us");
1347 :
1348 : static bool
1349 0 : get_inputMode(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
1350 : {
1351 0 : DOMString result;
1352 0 : self->GetInputMode(result);
1353 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1354 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
1355 0 : return false;
1356 : }
1357 0 : return true;
1358 : }
1359 :
1360 : static bool
1361 0 : set_inputMode(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
1362 : {
1363 0 : binding_detail::FakeString arg0;
1364 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
1365 0 : return false;
1366 : }
1367 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
1368 0 : Maybe<AutoCEReaction> ceReaction;
1369 0 : if (reactionsStack) {
1370 0 : ceReaction.emplace(reactionsStack);
1371 : }
1372 0 : binding_detail::FastErrorResult rv;
1373 0 : self->SetInputMode(NonNullHelper(Constify(arg0)), rv);
1374 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1375 0 : return false;
1376 : }
1377 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1378 :
1379 0 : return true;
1380 : }
1381 :
1382 : static const JSJitInfo inputMode_getterinfo = {
1383 : { (JSJitGetterOp)get_inputMode },
1384 : { prototypes::id::HTMLInputElement },
1385 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1386 : JSJitInfo::Getter,
1387 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
1388 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
1389 : false, /* isInfallible. False in setters. */
1390 : true, /* isMovable. Not relevant for setters. */
1391 : true, /* isEliminatable. Not relevant for setters. */
1392 : false, /* isAlwaysInSlot. Only relevant for getters. */
1393 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1394 : false, /* isTypedMethod. Only relevant for methods. */
1395 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1396 : };
1397 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1398 : static_assert(0 < 2, "There is no slot for us");
1399 : static const JSJitInfo inputMode_setterinfo = {
1400 : { (JSJitGetterOp)set_inputMode },
1401 : { prototypes::id::HTMLInputElement },
1402 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1403 : JSJitInfo::Setter,
1404 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1405 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1406 : false, /* isInfallible. False in setters. */
1407 : false, /* isMovable. Not relevant for setters. */
1408 : false, /* isEliminatable. Not relevant for setters. */
1409 : false, /* isAlwaysInSlot. Only relevant for getters. */
1410 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1411 : false, /* isTypedMethod. Only relevant for methods. */
1412 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1413 : };
1414 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1415 : static_assert(0 < 2, "There is no slot for us");
1416 :
1417 : static bool
1418 0 : get_list(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
1419 : {
1420 0 : auto result(StrongOrRawPtr<nsGenericHTMLElement>(self->GetList()));
1421 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1422 0 : if (!result) {
1423 0 : args.rval().setNull();
1424 0 : return true;
1425 : }
1426 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1427 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1428 0 : return false;
1429 : }
1430 0 : return true;
1431 : }
1432 :
1433 : static const JSJitInfo list_getterinfo = {
1434 : { (JSJitGetterOp)get_list },
1435 : { prototypes::id::HTMLInputElement },
1436 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1437 : JSJitInfo::Getter,
1438 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
1439 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
1440 : false, /* isInfallible. False in setters. */
1441 : true, /* isMovable. Not relevant for setters. */
1442 : true, /* isEliminatable. Not relevant for setters. */
1443 : false, /* isAlwaysInSlot. Only relevant for getters. */
1444 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1445 : false, /* isTypedMethod. Only relevant for methods. */
1446 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1447 : };
1448 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1449 : static_assert(0 < 2, "There is no slot for us");
1450 :
1451 : static bool
1452 0 : get_max(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
1453 : {
1454 0 : DOMString result;
1455 0 : self->GetMax(result);
1456 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1457 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
1458 0 : return false;
1459 : }
1460 0 : return true;
1461 : }
1462 :
1463 : static bool
1464 0 : set_max(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
1465 : {
1466 0 : binding_detail::FakeString arg0;
1467 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
1468 0 : return false;
1469 : }
1470 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
1471 0 : Maybe<AutoCEReaction> ceReaction;
1472 0 : if (reactionsStack) {
1473 0 : ceReaction.emplace(reactionsStack);
1474 : }
1475 0 : binding_detail::FastErrorResult rv;
1476 0 : self->SetMax(NonNullHelper(Constify(arg0)), rv);
1477 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1478 0 : return false;
1479 : }
1480 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1481 :
1482 0 : return true;
1483 : }
1484 :
1485 : static const JSJitInfo max_getterinfo = {
1486 : { (JSJitGetterOp)get_max },
1487 : { prototypes::id::HTMLInputElement },
1488 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1489 : JSJitInfo::Getter,
1490 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
1491 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
1492 : false, /* isInfallible. False in setters. */
1493 : true, /* isMovable. Not relevant for setters. */
1494 : true, /* isEliminatable. Not relevant for setters. */
1495 : false, /* isAlwaysInSlot. Only relevant for getters. */
1496 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1497 : false, /* isTypedMethod. Only relevant for methods. */
1498 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1499 : };
1500 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1501 : static_assert(0 < 2, "There is no slot for us");
1502 : static const JSJitInfo max_setterinfo = {
1503 : { (JSJitGetterOp)set_max },
1504 : { prototypes::id::HTMLInputElement },
1505 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1506 : JSJitInfo::Setter,
1507 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1508 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1509 : false, /* isInfallible. False in setters. */
1510 : false, /* isMovable. Not relevant for setters. */
1511 : false, /* isEliminatable. Not relevant for setters. */
1512 : false, /* isAlwaysInSlot. Only relevant for getters. */
1513 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1514 : false, /* isTypedMethod. Only relevant for methods. */
1515 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1516 : };
1517 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1518 : static_assert(0 < 2, "There is no slot for us");
1519 :
1520 : static bool
1521 0 : get_maxLength(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
1522 : {
1523 0 : int32_t result(self->MaxLength());
1524 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1525 0 : args.rval().setInt32(int32_t(result));
1526 0 : return true;
1527 : }
1528 :
1529 : static bool
1530 0 : set_maxLength(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
1531 : {
1532 : int32_t arg0;
1533 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
1534 0 : return false;
1535 : }
1536 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
1537 0 : Maybe<AutoCEReaction> ceReaction;
1538 0 : if (reactionsStack) {
1539 0 : ceReaction.emplace(reactionsStack);
1540 : }
1541 0 : binding_detail::FastErrorResult rv;
1542 0 : self->SetMaxLength(arg0, rv);
1543 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1544 0 : return false;
1545 : }
1546 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1547 :
1548 0 : return true;
1549 : }
1550 :
1551 : static const JSJitInfo maxLength_getterinfo = {
1552 : { (JSJitGetterOp)get_maxLength },
1553 : { prototypes::id::HTMLInputElement },
1554 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1555 : JSJitInfo::Getter,
1556 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
1557 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
1558 : true, /* isInfallible. False in setters. */
1559 : true, /* isMovable. Not relevant for setters. */
1560 : true, /* isEliminatable. Not relevant for setters. */
1561 : false, /* isAlwaysInSlot. Only relevant for getters. */
1562 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1563 : false, /* isTypedMethod. Only relevant for methods. */
1564 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1565 : };
1566 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1567 : static_assert(0 < 2, "There is no slot for us");
1568 : static const JSJitInfo maxLength_setterinfo = {
1569 : { (JSJitGetterOp)set_maxLength },
1570 : { prototypes::id::HTMLInputElement },
1571 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1572 : JSJitInfo::Setter,
1573 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1574 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1575 : false, /* isInfallible. False in setters. */
1576 : false, /* isMovable. Not relevant for setters. */
1577 : false, /* isEliminatable. Not relevant for setters. */
1578 : false, /* isAlwaysInSlot. Only relevant for getters. */
1579 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1580 : false, /* isTypedMethod. Only relevant for methods. */
1581 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1582 : };
1583 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1584 : static_assert(0 < 2, "There is no slot for us");
1585 :
1586 : static bool
1587 0 : get_min(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
1588 : {
1589 0 : DOMString result;
1590 0 : self->GetMin(result);
1591 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1592 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
1593 0 : return false;
1594 : }
1595 0 : return true;
1596 : }
1597 :
1598 : static bool
1599 0 : set_min(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
1600 : {
1601 0 : binding_detail::FakeString arg0;
1602 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
1603 0 : return false;
1604 : }
1605 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
1606 0 : Maybe<AutoCEReaction> ceReaction;
1607 0 : if (reactionsStack) {
1608 0 : ceReaction.emplace(reactionsStack);
1609 : }
1610 0 : binding_detail::FastErrorResult rv;
1611 0 : self->SetMin(NonNullHelper(Constify(arg0)), rv);
1612 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1613 0 : return false;
1614 : }
1615 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1616 :
1617 0 : return true;
1618 : }
1619 :
1620 : static const JSJitInfo min_getterinfo = {
1621 : { (JSJitGetterOp)get_min },
1622 : { prototypes::id::HTMLInputElement },
1623 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1624 : JSJitInfo::Getter,
1625 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
1626 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
1627 : false, /* isInfallible. False in setters. */
1628 : true, /* isMovable. Not relevant for setters. */
1629 : true, /* isEliminatable. Not relevant for setters. */
1630 : false, /* isAlwaysInSlot. Only relevant for getters. */
1631 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1632 : false, /* isTypedMethod. Only relevant for methods. */
1633 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1634 : };
1635 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1636 : static_assert(0 < 2, "There is no slot for us");
1637 : static const JSJitInfo min_setterinfo = {
1638 : { (JSJitGetterOp)set_min },
1639 : { prototypes::id::HTMLInputElement },
1640 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1641 : JSJitInfo::Setter,
1642 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1643 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1644 : false, /* isInfallible. False in setters. */
1645 : false, /* isMovable. Not relevant for setters. */
1646 : false, /* isEliminatable. Not relevant for setters. */
1647 : false, /* isAlwaysInSlot. Only relevant for getters. */
1648 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1649 : false, /* isTypedMethod. Only relevant for methods. */
1650 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1651 : };
1652 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1653 : static_assert(0 < 2, "There is no slot for us");
1654 :
1655 : static bool
1656 0 : get_minLength(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
1657 : {
1658 0 : int32_t result(self->MinLength());
1659 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1660 0 : args.rval().setInt32(int32_t(result));
1661 0 : return true;
1662 : }
1663 :
1664 : static bool
1665 0 : set_minLength(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
1666 : {
1667 : int32_t arg0;
1668 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
1669 0 : return false;
1670 : }
1671 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
1672 0 : Maybe<AutoCEReaction> ceReaction;
1673 0 : if (reactionsStack) {
1674 0 : ceReaction.emplace(reactionsStack);
1675 : }
1676 0 : binding_detail::FastErrorResult rv;
1677 0 : self->SetMinLength(arg0, rv);
1678 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1679 0 : return false;
1680 : }
1681 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1682 :
1683 0 : return true;
1684 : }
1685 :
1686 : static const JSJitInfo minLength_getterinfo = {
1687 : { (JSJitGetterOp)get_minLength },
1688 : { prototypes::id::HTMLInputElement },
1689 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1690 : JSJitInfo::Getter,
1691 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
1692 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
1693 : true, /* isInfallible. False in setters. */
1694 : true, /* isMovable. Not relevant for setters. */
1695 : true, /* isEliminatable. Not relevant for setters. */
1696 : false, /* isAlwaysInSlot. Only relevant for getters. */
1697 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1698 : false, /* isTypedMethod. Only relevant for methods. */
1699 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1700 : };
1701 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1702 : static_assert(0 < 2, "There is no slot for us");
1703 : static const JSJitInfo minLength_setterinfo = {
1704 : { (JSJitGetterOp)set_minLength },
1705 : { prototypes::id::HTMLInputElement },
1706 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1707 : JSJitInfo::Setter,
1708 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1709 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1710 : false, /* isInfallible. False in setters. */
1711 : false, /* isMovable. Not relevant for setters. */
1712 : false, /* isEliminatable. Not relevant for setters. */
1713 : false, /* isAlwaysInSlot. Only relevant for getters. */
1714 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1715 : false, /* isTypedMethod. Only relevant for methods. */
1716 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1717 : };
1718 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1719 : static_assert(0 < 2, "There is no slot for us");
1720 :
1721 : static bool
1722 0 : get_multiple(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
1723 : {
1724 0 : bool result(self->Multiple());
1725 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1726 0 : args.rval().setBoolean(result);
1727 0 : return true;
1728 : }
1729 :
1730 : static bool
1731 0 : set_multiple(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
1732 : {
1733 : bool arg0;
1734 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
1735 0 : return false;
1736 : }
1737 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
1738 0 : Maybe<AutoCEReaction> ceReaction;
1739 0 : if (reactionsStack) {
1740 0 : ceReaction.emplace(reactionsStack);
1741 : }
1742 0 : binding_detail::FastErrorResult rv;
1743 0 : self->SetMultiple(arg0, rv);
1744 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1745 0 : return false;
1746 : }
1747 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1748 :
1749 0 : return true;
1750 : }
1751 :
1752 : static const JSJitInfo multiple_getterinfo = {
1753 : { (JSJitGetterOp)get_multiple },
1754 : { prototypes::id::HTMLInputElement },
1755 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1756 : JSJitInfo::Getter,
1757 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
1758 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1759 : true, /* isInfallible. False in setters. */
1760 : true, /* isMovable. Not relevant for setters. */
1761 : true, /* isEliminatable. Not relevant for setters. */
1762 : false, /* isAlwaysInSlot. Only relevant for getters. */
1763 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1764 : false, /* isTypedMethod. Only relevant for methods. */
1765 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1766 : };
1767 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1768 : static_assert(0 < 2, "There is no slot for us");
1769 : static const JSJitInfo multiple_setterinfo = {
1770 : { (JSJitGetterOp)set_multiple },
1771 : { prototypes::id::HTMLInputElement },
1772 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1773 : JSJitInfo::Setter,
1774 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1775 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1776 : false, /* isInfallible. False in setters. */
1777 : false, /* isMovable. Not relevant for setters. */
1778 : false, /* isEliminatable. Not relevant for setters. */
1779 : false, /* isAlwaysInSlot. Only relevant for getters. */
1780 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1781 : false, /* isTypedMethod. Only relevant for methods. */
1782 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1783 : };
1784 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1785 : static_assert(0 < 2, "There is no slot for us");
1786 :
1787 : static bool
1788 0 : get_name(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
1789 : {
1790 0 : DOMString result;
1791 0 : self->GetName(result);
1792 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1793 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
1794 0 : return false;
1795 : }
1796 0 : return true;
1797 : }
1798 :
1799 : static bool
1800 0 : set_name(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
1801 : {
1802 0 : binding_detail::FakeString arg0;
1803 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
1804 0 : return false;
1805 : }
1806 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
1807 0 : Maybe<AutoCEReaction> ceReaction;
1808 0 : if (reactionsStack) {
1809 0 : ceReaction.emplace(reactionsStack);
1810 : }
1811 0 : binding_detail::FastErrorResult rv;
1812 0 : self->SetName(NonNullHelper(Constify(arg0)), rv);
1813 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1814 0 : return false;
1815 : }
1816 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1817 :
1818 0 : return true;
1819 : }
1820 :
1821 : static const JSJitInfo name_getterinfo = {
1822 : { (JSJitGetterOp)get_name },
1823 : { prototypes::id::HTMLInputElement },
1824 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1825 : JSJitInfo::Getter,
1826 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
1827 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
1828 : false, /* isInfallible. False in setters. */
1829 : true, /* isMovable. Not relevant for setters. */
1830 : true, /* isEliminatable. Not relevant for setters. */
1831 : false, /* isAlwaysInSlot. Only relevant for getters. */
1832 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1833 : false, /* isTypedMethod. Only relevant for methods. */
1834 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1835 : };
1836 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1837 : static_assert(0 < 2, "There is no slot for us");
1838 : static const JSJitInfo name_setterinfo = {
1839 : { (JSJitGetterOp)set_name },
1840 : { prototypes::id::HTMLInputElement },
1841 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1842 : JSJitInfo::Setter,
1843 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1844 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1845 : false, /* isInfallible. False in setters. */
1846 : false, /* isMovable. Not relevant for setters. */
1847 : false, /* isEliminatable. Not relevant for setters. */
1848 : false, /* isAlwaysInSlot. Only relevant for getters. */
1849 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1850 : false, /* isTypedMethod. Only relevant for methods. */
1851 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1852 : };
1853 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1854 : static_assert(0 < 2, "There is no slot for us");
1855 :
1856 : static bool
1857 0 : get_pattern(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
1858 : {
1859 0 : DOMString result;
1860 0 : self->GetPattern(result);
1861 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1862 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
1863 0 : return false;
1864 : }
1865 0 : return true;
1866 : }
1867 :
1868 : static bool
1869 0 : set_pattern(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
1870 : {
1871 0 : binding_detail::FakeString arg0;
1872 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
1873 0 : return false;
1874 : }
1875 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
1876 0 : Maybe<AutoCEReaction> ceReaction;
1877 0 : if (reactionsStack) {
1878 0 : ceReaction.emplace(reactionsStack);
1879 : }
1880 0 : binding_detail::FastErrorResult rv;
1881 0 : self->SetPattern(NonNullHelper(Constify(arg0)), rv);
1882 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1883 0 : return false;
1884 : }
1885 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1886 :
1887 0 : return true;
1888 : }
1889 :
1890 : static const JSJitInfo pattern_getterinfo = {
1891 : { (JSJitGetterOp)get_pattern },
1892 : { prototypes::id::HTMLInputElement },
1893 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1894 : JSJitInfo::Getter,
1895 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
1896 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
1897 : false, /* isInfallible. False in setters. */
1898 : true, /* isMovable. Not relevant for setters. */
1899 : true, /* isEliminatable. Not relevant for setters. */
1900 : false, /* isAlwaysInSlot. Only relevant for getters. */
1901 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1902 : false, /* isTypedMethod. Only relevant for methods. */
1903 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1904 : };
1905 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1906 : static_assert(0 < 2, "There is no slot for us");
1907 : static const JSJitInfo pattern_setterinfo = {
1908 : { (JSJitGetterOp)set_pattern },
1909 : { prototypes::id::HTMLInputElement },
1910 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1911 : JSJitInfo::Setter,
1912 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1913 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1914 : false, /* isInfallible. False in setters. */
1915 : false, /* isMovable. Not relevant for setters. */
1916 : false, /* isEliminatable. Not relevant for setters. */
1917 : false, /* isAlwaysInSlot. Only relevant for getters. */
1918 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1919 : false, /* isTypedMethod. Only relevant for methods. */
1920 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1921 : };
1922 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1923 : static_assert(0 < 2, "There is no slot for us");
1924 :
1925 : static bool
1926 0 : get_placeholder(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
1927 : {
1928 0 : DOMString result;
1929 0 : self->GetPlaceholder(result);
1930 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1931 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
1932 0 : return false;
1933 : }
1934 0 : return true;
1935 : }
1936 :
1937 : static bool
1938 0 : set_placeholder(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
1939 : {
1940 0 : binding_detail::FakeString arg0;
1941 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
1942 0 : return false;
1943 : }
1944 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
1945 0 : Maybe<AutoCEReaction> ceReaction;
1946 0 : if (reactionsStack) {
1947 0 : ceReaction.emplace(reactionsStack);
1948 : }
1949 0 : binding_detail::FastErrorResult rv;
1950 0 : self->SetPlaceholder(NonNullHelper(Constify(arg0)), rv);
1951 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1952 0 : return false;
1953 : }
1954 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1955 :
1956 0 : return true;
1957 : }
1958 :
1959 : static const JSJitInfo placeholder_getterinfo = {
1960 : { (JSJitGetterOp)get_placeholder },
1961 : { prototypes::id::HTMLInputElement },
1962 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1963 : JSJitInfo::Getter,
1964 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
1965 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
1966 : false, /* isInfallible. False in setters. */
1967 : true, /* isMovable. Not relevant for setters. */
1968 : true, /* isEliminatable. Not relevant for setters. */
1969 : false, /* isAlwaysInSlot. Only relevant for getters. */
1970 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1971 : false, /* isTypedMethod. Only relevant for methods. */
1972 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1973 : };
1974 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1975 : static_assert(0 < 2, "There is no slot for us");
1976 : static const JSJitInfo placeholder_setterinfo = {
1977 : { (JSJitGetterOp)set_placeholder },
1978 : { prototypes::id::HTMLInputElement },
1979 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
1980 : JSJitInfo::Setter,
1981 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1982 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1983 : false, /* isInfallible. False in setters. */
1984 : false, /* isMovable. Not relevant for setters. */
1985 : false, /* isEliminatable. Not relevant for setters. */
1986 : false, /* isAlwaysInSlot. Only relevant for getters. */
1987 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1988 : false, /* isTypedMethod. Only relevant for methods. */
1989 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1990 : };
1991 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1992 : static_assert(0 < 2, "There is no slot for us");
1993 :
1994 : static bool
1995 0 : get_readOnly(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
1996 : {
1997 0 : bool result(self->ReadOnly());
1998 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1999 0 : args.rval().setBoolean(result);
2000 0 : return true;
2001 : }
2002 :
2003 : static bool
2004 0 : set_readOnly(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
2005 : {
2006 : bool arg0;
2007 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
2008 0 : return false;
2009 : }
2010 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
2011 0 : Maybe<AutoCEReaction> ceReaction;
2012 0 : if (reactionsStack) {
2013 0 : ceReaction.emplace(reactionsStack);
2014 : }
2015 0 : binding_detail::FastErrorResult rv;
2016 0 : self->SetReadOnly(arg0, rv);
2017 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2018 0 : return false;
2019 : }
2020 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2021 :
2022 0 : return true;
2023 : }
2024 :
2025 : static const JSJitInfo readOnly_getterinfo = {
2026 : { (JSJitGetterOp)get_readOnly },
2027 : { prototypes::id::HTMLInputElement },
2028 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2029 : JSJitInfo::Getter,
2030 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
2031 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
2032 : true, /* isInfallible. False in setters. */
2033 : true, /* isMovable. Not relevant for setters. */
2034 : true, /* isEliminatable. Not relevant for setters. */
2035 : false, /* isAlwaysInSlot. Only relevant for getters. */
2036 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2037 : false, /* isTypedMethod. Only relevant for methods. */
2038 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2039 : };
2040 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2041 : static_assert(0 < 2, "There is no slot for us");
2042 : static const JSJitInfo readOnly_setterinfo = {
2043 : { (JSJitGetterOp)set_readOnly },
2044 : { prototypes::id::HTMLInputElement },
2045 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2046 : JSJitInfo::Setter,
2047 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2048 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2049 : false, /* isInfallible. False in setters. */
2050 : false, /* isMovable. Not relevant for setters. */
2051 : false, /* isEliminatable. Not relevant for setters. */
2052 : false, /* isAlwaysInSlot. Only relevant for getters. */
2053 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2054 : false, /* isTypedMethod. Only relevant for methods. */
2055 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2056 : };
2057 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2058 : static_assert(0 < 2, "There is no slot for us");
2059 :
2060 : static bool
2061 0 : get_required(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
2062 : {
2063 0 : bool result(self->Required());
2064 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2065 0 : args.rval().setBoolean(result);
2066 0 : return true;
2067 : }
2068 :
2069 : static bool
2070 0 : set_required(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
2071 : {
2072 : bool arg0;
2073 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
2074 0 : return false;
2075 : }
2076 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
2077 0 : Maybe<AutoCEReaction> ceReaction;
2078 0 : if (reactionsStack) {
2079 0 : ceReaction.emplace(reactionsStack);
2080 : }
2081 0 : binding_detail::FastErrorResult rv;
2082 0 : self->SetRequired(arg0, rv);
2083 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2084 0 : return false;
2085 : }
2086 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2087 :
2088 0 : return true;
2089 : }
2090 :
2091 : static const JSJitInfo required_getterinfo = {
2092 : { (JSJitGetterOp)get_required },
2093 : { prototypes::id::HTMLInputElement },
2094 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2095 : JSJitInfo::Getter,
2096 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
2097 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
2098 : true, /* isInfallible. False in setters. */
2099 : true, /* isMovable. Not relevant for setters. */
2100 : true, /* isEliminatable. Not relevant for setters. */
2101 : false, /* isAlwaysInSlot. Only relevant for getters. */
2102 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2103 : false, /* isTypedMethod. Only relevant for methods. */
2104 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2105 : };
2106 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2107 : static_assert(0 < 2, "There is no slot for us");
2108 : static const JSJitInfo required_setterinfo = {
2109 : { (JSJitGetterOp)set_required },
2110 : { prototypes::id::HTMLInputElement },
2111 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2112 : JSJitInfo::Setter,
2113 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2114 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2115 : false, /* isInfallible. False in setters. */
2116 : false, /* isMovable. Not relevant for setters. */
2117 : false, /* isEliminatable. Not relevant for setters. */
2118 : false, /* isAlwaysInSlot. Only relevant for getters. */
2119 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2120 : false, /* isTypedMethod. Only relevant for methods. */
2121 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2122 : };
2123 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2124 : static_assert(0 < 2, "There is no slot for us");
2125 :
2126 : static bool
2127 0 : get_size(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
2128 : {
2129 0 : uint32_t result(self->Size());
2130 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2131 0 : args.rval().setNumber(result);
2132 0 : return true;
2133 : }
2134 :
2135 : static bool
2136 0 : set_size(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
2137 : {
2138 : uint32_t arg0;
2139 0 : if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
2140 0 : return false;
2141 : }
2142 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
2143 0 : Maybe<AutoCEReaction> ceReaction;
2144 0 : if (reactionsStack) {
2145 0 : ceReaction.emplace(reactionsStack);
2146 : }
2147 0 : binding_detail::FastErrorResult rv;
2148 0 : self->SetSize(arg0, rv);
2149 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2150 0 : return false;
2151 : }
2152 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2153 :
2154 0 : return true;
2155 : }
2156 :
2157 : static const JSJitInfo size_getterinfo = {
2158 : { (JSJitGetterOp)get_size },
2159 : { prototypes::id::HTMLInputElement },
2160 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2161 : JSJitInfo::Getter,
2162 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
2163 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
2164 : true, /* isInfallible. False in setters. */
2165 : true, /* isMovable. Not relevant for setters. */
2166 : true, /* isEliminatable. Not relevant for setters. */
2167 : false, /* isAlwaysInSlot. Only relevant for getters. */
2168 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2169 : false, /* isTypedMethod. Only relevant for methods. */
2170 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2171 : };
2172 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2173 : static_assert(0 < 2, "There is no slot for us");
2174 : static const JSJitInfo size_setterinfo = {
2175 : { (JSJitGetterOp)set_size },
2176 : { prototypes::id::HTMLInputElement },
2177 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2178 : JSJitInfo::Setter,
2179 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2180 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2181 : false, /* isInfallible. False in setters. */
2182 : false, /* isMovable. Not relevant for setters. */
2183 : false, /* isEliminatable. Not relevant for setters. */
2184 : false, /* isAlwaysInSlot. Only relevant for getters. */
2185 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2186 : false, /* isTypedMethod. Only relevant for methods. */
2187 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2188 : };
2189 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2190 : static_assert(0 < 2, "There is no slot for us");
2191 :
2192 : static bool
2193 0 : get_src(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
2194 : {
2195 0 : DOMString result;
2196 0 : self->GetSrc(result);
2197 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2198 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
2199 0 : return false;
2200 : }
2201 0 : return true;
2202 : }
2203 :
2204 : static bool
2205 0 : set_src(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
2206 : {
2207 0 : binding_detail::FakeString arg0;
2208 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
2209 0 : return false;
2210 : }
2211 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
2212 0 : Maybe<AutoCEReaction> ceReaction;
2213 0 : if (reactionsStack) {
2214 0 : ceReaction.emplace(reactionsStack);
2215 : }
2216 0 : binding_detail::FastErrorResult rv;
2217 0 : self->SetSrc(NonNullHelper(Constify(arg0)), rv);
2218 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2219 0 : return false;
2220 : }
2221 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2222 :
2223 0 : return true;
2224 : }
2225 :
2226 : static const JSJitInfo src_getterinfo = {
2227 : { (JSJitGetterOp)get_src },
2228 : { prototypes::id::HTMLInputElement },
2229 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2230 : JSJitInfo::Getter,
2231 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
2232 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
2233 : false, /* isInfallible. False in setters. */
2234 : true, /* isMovable. Not relevant for setters. */
2235 : true, /* isEliminatable. Not relevant for setters. */
2236 : false, /* isAlwaysInSlot. Only relevant for getters. */
2237 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2238 : false, /* isTypedMethod. Only relevant for methods. */
2239 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2240 : };
2241 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2242 : static_assert(0 < 2, "There is no slot for us");
2243 : static const JSJitInfo src_setterinfo = {
2244 : { (JSJitGetterOp)set_src },
2245 : { prototypes::id::HTMLInputElement },
2246 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2247 : JSJitInfo::Setter,
2248 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2249 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2250 : false, /* isInfallible. False in setters. */
2251 : false, /* isMovable. Not relevant for setters. */
2252 : false, /* isEliminatable. Not relevant for setters. */
2253 : false, /* isAlwaysInSlot. Only relevant for getters. */
2254 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2255 : false, /* isTypedMethod. Only relevant for methods. */
2256 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2257 : };
2258 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2259 : static_assert(0 < 2, "There is no slot for us");
2260 :
2261 : static bool
2262 0 : get_step(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
2263 : {
2264 0 : DOMString result;
2265 0 : self->GetStep(result);
2266 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2267 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
2268 0 : return false;
2269 : }
2270 0 : return true;
2271 : }
2272 :
2273 : static bool
2274 0 : set_step(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
2275 : {
2276 0 : binding_detail::FakeString arg0;
2277 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
2278 0 : return false;
2279 : }
2280 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
2281 0 : Maybe<AutoCEReaction> ceReaction;
2282 0 : if (reactionsStack) {
2283 0 : ceReaction.emplace(reactionsStack);
2284 : }
2285 0 : binding_detail::FastErrorResult rv;
2286 0 : self->SetStep(NonNullHelper(Constify(arg0)), rv);
2287 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2288 0 : return false;
2289 : }
2290 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2291 :
2292 0 : return true;
2293 : }
2294 :
2295 : static const JSJitInfo step_getterinfo = {
2296 : { (JSJitGetterOp)get_step },
2297 : { prototypes::id::HTMLInputElement },
2298 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2299 : JSJitInfo::Getter,
2300 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
2301 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
2302 : false, /* isInfallible. False in setters. */
2303 : true, /* isMovable. Not relevant for setters. */
2304 : true, /* isEliminatable. Not relevant for setters. */
2305 : false, /* isAlwaysInSlot. Only relevant for getters. */
2306 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2307 : false, /* isTypedMethod. Only relevant for methods. */
2308 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2309 : };
2310 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2311 : static_assert(0 < 2, "There is no slot for us");
2312 : static const JSJitInfo step_setterinfo = {
2313 : { (JSJitGetterOp)set_step },
2314 : { prototypes::id::HTMLInputElement },
2315 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2316 : JSJitInfo::Setter,
2317 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2318 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2319 : false, /* isInfallible. False in setters. */
2320 : false, /* isMovable. Not relevant for setters. */
2321 : false, /* isEliminatable. Not relevant for setters. */
2322 : false, /* isAlwaysInSlot. Only relevant for getters. */
2323 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2324 : false, /* isTypedMethod. Only relevant for methods. */
2325 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2326 : };
2327 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2328 : static_assert(0 < 2, "There is no slot for us");
2329 :
2330 : static bool
2331 0 : get_type(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
2332 : {
2333 0 : DOMString result;
2334 0 : self->GetType(result);
2335 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2336 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
2337 0 : return false;
2338 : }
2339 0 : return true;
2340 : }
2341 :
2342 : static bool
2343 0 : set_type(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
2344 : {
2345 0 : binding_detail::FakeString arg0;
2346 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
2347 0 : return false;
2348 : }
2349 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
2350 0 : Maybe<AutoCEReaction> ceReaction;
2351 0 : if (reactionsStack) {
2352 0 : ceReaction.emplace(reactionsStack);
2353 : }
2354 0 : binding_detail::FastErrorResult rv;
2355 0 : self->SetType(NonNullHelper(Constify(arg0)), rv);
2356 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2357 0 : return false;
2358 : }
2359 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2360 :
2361 0 : return true;
2362 : }
2363 :
2364 : static const JSJitInfo type_getterinfo = {
2365 : { (JSJitGetterOp)get_type },
2366 : { prototypes::id::HTMLInputElement },
2367 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2368 : JSJitInfo::Getter,
2369 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
2370 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
2371 : false, /* isInfallible. False in setters. */
2372 : true, /* isMovable. Not relevant for setters. */
2373 : true, /* isEliminatable. Not relevant for setters. */
2374 : false, /* isAlwaysInSlot. Only relevant for getters. */
2375 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2376 : false, /* isTypedMethod. Only relevant for methods. */
2377 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2378 : };
2379 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2380 : static_assert(0 < 2, "There is no slot for us");
2381 : static const JSJitInfo type_setterinfo = {
2382 : { (JSJitGetterOp)set_type },
2383 : { prototypes::id::HTMLInputElement },
2384 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2385 : JSJitInfo::Setter,
2386 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2387 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2388 : false, /* isInfallible. False in setters. */
2389 : false, /* isMovable. Not relevant for setters. */
2390 : false, /* isEliminatable. Not relevant for setters. */
2391 : false, /* isAlwaysInSlot. Only relevant for getters. */
2392 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2393 : false, /* isTypedMethod. Only relevant for methods. */
2394 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2395 : };
2396 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2397 : static_assert(0 < 2, "There is no slot for us");
2398 :
2399 : static bool
2400 0 : get_defaultValue(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
2401 : {
2402 0 : DOMString result;
2403 0 : self->GetDefaultValue(result);
2404 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2405 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
2406 0 : return false;
2407 : }
2408 0 : return true;
2409 : }
2410 :
2411 : static bool
2412 0 : set_defaultValue(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
2413 : {
2414 0 : binding_detail::FakeString arg0;
2415 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
2416 0 : return false;
2417 : }
2418 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
2419 0 : Maybe<AutoCEReaction> ceReaction;
2420 0 : if (reactionsStack) {
2421 0 : ceReaction.emplace(reactionsStack);
2422 : }
2423 0 : binding_detail::FastErrorResult rv;
2424 0 : self->SetDefaultValue(NonNullHelper(Constify(arg0)), rv);
2425 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2426 0 : return false;
2427 : }
2428 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2429 :
2430 0 : return true;
2431 : }
2432 :
2433 : static const JSJitInfo defaultValue_getterinfo = {
2434 : { (JSJitGetterOp)get_defaultValue },
2435 : { prototypes::id::HTMLInputElement },
2436 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2437 : JSJitInfo::Getter,
2438 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
2439 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
2440 : false, /* isInfallible. False in setters. */
2441 : true, /* isMovable. Not relevant for setters. */
2442 : true, /* isEliminatable. Not relevant for setters. */
2443 : false, /* isAlwaysInSlot. Only relevant for getters. */
2444 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2445 : false, /* isTypedMethod. Only relevant for methods. */
2446 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2447 : };
2448 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2449 : static_assert(0 < 2, "There is no slot for us");
2450 : static const JSJitInfo defaultValue_setterinfo = {
2451 : { (JSJitGetterOp)set_defaultValue },
2452 : { prototypes::id::HTMLInputElement },
2453 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2454 : JSJitInfo::Setter,
2455 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2456 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2457 : false, /* isInfallible. False in setters. */
2458 : false, /* isMovable. Not relevant for setters. */
2459 : false, /* isEliminatable. Not relevant for setters. */
2460 : false, /* isAlwaysInSlot. Only relevant for getters. */
2461 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2462 : false, /* isTypedMethod. Only relevant for methods. */
2463 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2464 : };
2465 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2466 : static_assert(0 < 2, "There is no slot for us");
2467 :
2468 : static bool
2469 0 : get_value(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
2470 : {
2471 0 : DOMString result;
2472 0 : self->GetValue(result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem);
2473 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2474 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
2475 0 : return false;
2476 : }
2477 0 : return true;
2478 : }
2479 :
2480 : static bool
2481 1 : set_value(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
2482 : {
2483 2 : binding_detail::FakeString arg0;
2484 1 : if (!ConvertJSValueToString(cx, args[0], eEmpty, eStringify, arg0)) {
2485 0 : return false;
2486 : }
2487 1 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
2488 2 : Maybe<AutoCEReaction> ceReaction;
2489 1 : if (reactionsStack) {
2490 1 : ceReaction.emplace(reactionsStack);
2491 : }
2492 2 : binding_detail::FastErrorResult rv;
2493 1 : self->SetValue(NonNullHelper(Constify(arg0)), nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
2494 1 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2495 0 : return false;
2496 : }
2497 1 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2498 :
2499 1 : return true;
2500 : }
2501 :
2502 : static const JSJitInfo value_getterinfo = {
2503 : { (JSJitGetterOp)get_value },
2504 : { prototypes::id::HTMLInputElement },
2505 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2506 : JSJitInfo::Getter,
2507 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
2508 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
2509 : false, /* isInfallible. False in setters. */
2510 : true, /* isMovable. Not relevant for setters. */
2511 : true, /* isEliminatable. Not relevant for setters. */
2512 : false, /* isAlwaysInSlot. Only relevant for getters. */
2513 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2514 : false, /* isTypedMethod. Only relevant for methods. */
2515 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2516 : };
2517 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2518 : static_assert(0 < 2, "There is no slot for us");
2519 : static const JSJitInfo value_setterinfo = {
2520 : { (JSJitGetterOp)set_value },
2521 : { prototypes::id::HTMLInputElement },
2522 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2523 : JSJitInfo::Setter,
2524 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2525 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2526 : false, /* isInfallible. False in setters. */
2527 : false, /* isMovable. Not relevant for setters. */
2528 : false, /* isEliminatable. Not relevant for setters. */
2529 : false, /* isAlwaysInSlot. Only relevant for getters. */
2530 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2531 : false, /* isTypedMethod. Only relevant for methods. */
2532 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2533 : };
2534 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2535 : static_assert(0 < 2, "There is no slot for us");
2536 :
2537 : static bool
2538 0 : get_valueAsDate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
2539 : {
2540 0 : binding_detail::FastErrorResult rv;
2541 0 : Nullable<Date> result(self->GetValueAsDate(rv));
2542 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2543 0 : return false;
2544 : }
2545 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2546 0 : if (result.IsNull()) {
2547 0 : args.rval().setNull();
2548 0 : return true;
2549 : }
2550 0 : if (!result.Value().ToDateObject(cx, args.rval())) {
2551 0 : return false;
2552 : }
2553 0 : return true;
2554 : }
2555 :
2556 : static bool
2557 0 : set_valueAsDate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
2558 : {
2559 0 : Nullable<Date> arg0;
2560 0 : if (args[0].isObject()) {
2561 0 : JS::Rooted<JSObject*> possibleDateObject(cx, &args[0].toObject());
2562 : { // scope for isDate
2563 : bool isDate;
2564 0 : if (!JS_ObjectIsDate(cx, possibleDateObject, &isDate)) {
2565 0 : return false;
2566 : }
2567 0 : if (!isDate) {
2568 0 : ThrowErrorMessage(cx, MSG_NOT_DATE, "Value being assigned to HTMLInputElement.valueAsDate");
2569 0 : return false;
2570 : }
2571 0 : if (!arg0.SetValue().SetTimeStamp(cx, possibleDateObject)) {
2572 0 : return false;
2573 : }
2574 : }
2575 0 : } else if (args[0].isNullOrUndefined()) {
2576 0 : arg0.SetNull();
2577 : } else {
2578 0 : ThrowErrorMessage(cx, MSG_NOT_DATE, "Value being assigned to HTMLInputElement.valueAsDate");
2579 0 : return false;
2580 : }
2581 0 : binding_detail::FastErrorResult rv;
2582 0 : self->SetValueAsDate(Constify(arg0), rv);
2583 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2584 0 : return false;
2585 : }
2586 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2587 :
2588 0 : return true;
2589 : }
2590 :
2591 : static const JSJitInfo valueAsDate_getterinfo = {
2592 : { (JSJitGetterOp)get_valueAsDate },
2593 : { prototypes::id::HTMLInputElement },
2594 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2595 : JSJitInfo::Getter,
2596 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2597 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
2598 : false, /* isInfallible. False in setters. */
2599 : false, /* isMovable. Not relevant for setters. */
2600 : false, /* isEliminatable. Not relevant for setters. */
2601 : false, /* isAlwaysInSlot. Only relevant for getters. */
2602 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2603 : false, /* isTypedMethod. Only relevant for methods. */
2604 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2605 : };
2606 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2607 : static_assert(0 < 2, "There is no slot for us");
2608 : static const JSJitInfo valueAsDate_setterinfo = {
2609 : { (JSJitGetterOp)set_valueAsDate },
2610 : { prototypes::id::HTMLInputElement },
2611 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2612 : JSJitInfo::Setter,
2613 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2614 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2615 : false, /* isInfallible. False in setters. */
2616 : false, /* isMovable. Not relevant for setters. */
2617 : false, /* isEliminatable. Not relevant for setters. */
2618 : false, /* isAlwaysInSlot. Only relevant for getters. */
2619 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2620 : false, /* isTypedMethod. Only relevant for methods. */
2621 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2622 : };
2623 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2624 : static_assert(0 < 2, "There is no slot for us");
2625 :
2626 : static bool
2627 0 : get_valueAsNumber(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
2628 : {
2629 0 : double result(self->ValueAsNumber());
2630 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2631 0 : args.rval().set(JS_NumberValue(double(result)));
2632 0 : return true;
2633 : }
2634 :
2635 : static bool
2636 0 : set_valueAsNumber(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
2637 : {
2638 : double arg0;
2639 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
2640 0 : return false;
2641 : }
2642 0 : binding_detail::FastErrorResult rv;
2643 0 : self->SetValueAsNumber(arg0, rv);
2644 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2645 0 : return false;
2646 : }
2647 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2648 :
2649 0 : return true;
2650 : }
2651 :
2652 : static const JSJitInfo valueAsNumber_getterinfo = {
2653 : { (JSJitGetterOp)get_valueAsNumber },
2654 : { prototypes::id::HTMLInputElement },
2655 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2656 : JSJitInfo::Getter,
2657 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
2658 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
2659 : true, /* isInfallible. False in setters. */
2660 : true, /* isMovable. Not relevant for setters. */
2661 : true, /* isEliminatable. Not relevant for setters. */
2662 : false, /* isAlwaysInSlot. Only relevant for getters. */
2663 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2664 : false, /* isTypedMethod. Only relevant for methods. */
2665 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2666 : };
2667 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2668 : static_assert(0 < 2, "There is no slot for us");
2669 : static const JSJitInfo valueAsNumber_setterinfo = {
2670 : { (JSJitGetterOp)set_valueAsNumber },
2671 : { prototypes::id::HTMLInputElement },
2672 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2673 : JSJitInfo::Setter,
2674 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2675 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2676 : false, /* isInfallible. False in setters. */
2677 : false, /* isMovable. Not relevant for setters. */
2678 : false, /* isEliminatable. Not relevant for setters. */
2679 : false, /* isAlwaysInSlot. Only relevant for getters. */
2680 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2681 : false, /* isTypedMethod. Only relevant for methods. */
2682 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2683 : };
2684 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2685 : static_assert(0 < 2, "There is no slot for us");
2686 :
2687 : static bool
2688 0 : get_width(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
2689 : {
2690 0 : uint32_t result(self->Width());
2691 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2692 0 : args.rval().setNumber(result);
2693 0 : return true;
2694 : }
2695 :
2696 : static bool
2697 0 : set_width(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
2698 : {
2699 : uint32_t arg0;
2700 0 : if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
2701 0 : return false;
2702 : }
2703 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
2704 0 : Maybe<AutoCEReaction> ceReaction;
2705 0 : if (reactionsStack) {
2706 0 : ceReaction.emplace(reactionsStack);
2707 : }
2708 0 : self->SetWidth(arg0);
2709 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2710 :
2711 0 : return true;
2712 : }
2713 :
2714 : static const JSJitInfo width_getterinfo = {
2715 : { (JSJitGetterOp)get_width },
2716 : { prototypes::id::HTMLInputElement },
2717 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2718 : JSJitInfo::Getter,
2719 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2720 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
2721 : true, /* isInfallible. False in setters. */
2722 : false, /* isMovable. Not relevant for setters. */
2723 : false, /* isEliminatable. Not relevant for setters. */
2724 : false, /* isAlwaysInSlot. Only relevant for getters. */
2725 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2726 : false, /* isTypedMethod. Only relevant for methods. */
2727 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2728 : };
2729 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2730 : static_assert(0 < 2, "There is no slot for us");
2731 : static const JSJitInfo width_setterinfo = {
2732 : { (JSJitGetterOp)set_width },
2733 : { prototypes::id::HTMLInputElement },
2734 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2735 : JSJitInfo::Setter,
2736 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2737 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2738 : false, /* isInfallible. False in setters. */
2739 : false, /* isMovable. Not relevant for setters. */
2740 : false, /* isEliminatable. Not relevant for setters. */
2741 : false, /* isAlwaysInSlot. Only relevant for getters. */
2742 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2743 : false, /* isTypedMethod. Only relevant for methods. */
2744 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2745 : };
2746 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2747 : static_assert(0 < 2, "There is no slot for us");
2748 :
2749 : static bool
2750 0 : stepUp(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
2751 : {
2752 : int32_t arg0;
2753 0 : if (args.hasDefined(0)) {
2754 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
2755 0 : return false;
2756 : }
2757 : } else {
2758 0 : arg0 = 1;
2759 : }
2760 0 : binding_detail::FastErrorResult rv;
2761 0 : self->StepUp(arg0, rv);
2762 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2763 0 : return false;
2764 : }
2765 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2766 0 : args.rval().setUndefined();
2767 0 : return true;
2768 : }
2769 :
2770 : static const JSJitInfo stepUp_methodinfo = {
2771 : { (JSJitGetterOp)stepUp },
2772 : { prototypes::id::HTMLInputElement },
2773 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2774 : JSJitInfo::Method,
2775 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2776 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2777 : false, /* isInfallible. False in setters. */
2778 : false, /* isMovable. Not relevant for setters. */
2779 : false, /* isEliminatable. Not relevant for setters. */
2780 : false, /* isAlwaysInSlot. Only relevant for getters. */
2781 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2782 : false, /* isTypedMethod. Only relevant for methods. */
2783 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2784 : };
2785 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2786 : static_assert(0 < 2, "There is no slot for us");
2787 :
2788 : static bool
2789 0 : stepDown(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
2790 : {
2791 : int32_t arg0;
2792 0 : if (args.hasDefined(0)) {
2793 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
2794 0 : return false;
2795 : }
2796 : } else {
2797 0 : arg0 = 1;
2798 : }
2799 0 : binding_detail::FastErrorResult rv;
2800 0 : self->StepDown(arg0, rv);
2801 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2802 0 : return false;
2803 : }
2804 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2805 0 : args.rval().setUndefined();
2806 0 : return true;
2807 : }
2808 :
2809 : static const JSJitInfo stepDown_methodinfo = {
2810 : { (JSJitGetterOp)stepDown },
2811 : { prototypes::id::HTMLInputElement },
2812 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2813 : JSJitInfo::Method,
2814 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2815 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2816 : false, /* isInfallible. False in setters. */
2817 : false, /* isMovable. Not relevant for setters. */
2818 : false, /* isEliminatable. Not relevant for setters. */
2819 : false, /* isAlwaysInSlot. Only relevant for getters. */
2820 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2821 : false, /* isTypedMethod. Only relevant for methods. */
2822 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2823 : };
2824 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2825 : static_assert(0 < 2, "There is no slot for us");
2826 :
2827 : static bool
2828 0 : get_willValidate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
2829 : {
2830 0 : bool result(self->WillValidate());
2831 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2832 0 : args.rval().setBoolean(result);
2833 0 : return true;
2834 : }
2835 :
2836 : static const JSJitInfo willValidate_getterinfo = {
2837 : { (JSJitGetterOp)get_willValidate },
2838 : { prototypes::id::HTMLInputElement },
2839 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2840 : JSJitInfo::Getter,
2841 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
2842 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
2843 : true, /* isInfallible. False in setters. */
2844 : true, /* isMovable. Not relevant for setters. */
2845 : true, /* isEliminatable. Not relevant for setters. */
2846 : false, /* isAlwaysInSlot. Only relevant for getters. */
2847 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2848 : false, /* isTypedMethod. Only relevant for methods. */
2849 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2850 : };
2851 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2852 : static_assert(0 < 2, "There is no slot for us");
2853 :
2854 : static bool
2855 0 : get_validity(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
2856 : {
2857 0 : auto result(StrongOrRawPtr<mozilla::dom::ValidityState>(self->Validity()));
2858 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2859 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
2860 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
2861 0 : return false;
2862 : }
2863 0 : return true;
2864 : }
2865 :
2866 : static const JSJitInfo validity_getterinfo = {
2867 : { (JSJitGetterOp)get_validity },
2868 : { prototypes::id::HTMLInputElement },
2869 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2870 : JSJitInfo::Getter,
2871 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
2872 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
2873 : false, /* isInfallible. False in setters. */
2874 : true, /* isMovable. Not relevant for setters. */
2875 : true, /* isEliminatable. Not relevant for setters. */
2876 : false, /* isAlwaysInSlot. Only relevant for getters. */
2877 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2878 : false, /* isTypedMethod. Only relevant for methods. */
2879 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2880 : };
2881 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2882 : static_assert(0 < 2, "There is no slot for us");
2883 :
2884 : static bool
2885 0 : get_validationMessage(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
2886 : {
2887 0 : binding_detail::FastErrorResult rv;
2888 0 : DOMString result;
2889 0 : self->GetValidationMessage(result, rv);
2890 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2891 0 : return false;
2892 : }
2893 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2894 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
2895 0 : return false;
2896 : }
2897 0 : return true;
2898 : }
2899 :
2900 : static const JSJitInfo validationMessage_getterinfo = {
2901 : { (JSJitGetterOp)get_validationMessage },
2902 : { prototypes::id::HTMLInputElement },
2903 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2904 : JSJitInfo::Getter,
2905 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2906 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
2907 : false, /* isInfallible. False in setters. */
2908 : false, /* isMovable. Not relevant for setters. */
2909 : false, /* isEliminatable. Not relevant for setters. */
2910 : false, /* isAlwaysInSlot. Only relevant for getters. */
2911 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2912 : false, /* isTypedMethod. Only relevant for methods. */
2913 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2914 : };
2915 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2916 : static_assert(0 < 2, "There is no slot for us");
2917 :
2918 : static bool
2919 0 : checkValidity(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
2920 : {
2921 0 : bool result(self->CheckValidity());
2922 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2923 0 : args.rval().setBoolean(result);
2924 0 : return true;
2925 : }
2926 :
2927 : static const JSJitInfo checkValidity_methodinfo = {
2928 : { (JSJitGetterOp)checkValidity },
2929 : { prototypes::id::HTMLInputElement },
2930 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2931 : JSJitInfo::Method,
2932 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2933 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
2934 : true, /* isInfallible. False in setters. */
2935 : false, /* isMovable. Not relevant for setters. */
2936 : false, /* isEliminatable. Not relevant for setters. */
2937 : false, /* isAlwaysInSlot. Only relevant for getters. */
2938 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2939 : false, /* isTypedMethod. Only relevant for methods. */
2940 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2941 : };
2942 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2943 : static_assert(0 < 2, "There is no slot for us");
2944 :
2945 : static bool
2946 0 : reportValidity(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
2947 : {
2948 0 : bool result(self->ReportValidity());
2949 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2950 0 : args.rval().setBoolean(result);
2951 0 : return true;
2952 : }
2953 :
2954 : static const JSJitInfo reportValidity_methodinfo = {
2955 : { (JSJitGetterOp)reportValidity },
2956 : { prototypes::id::HTMLInputElement },
2957 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2958 : JSJitInfo::Method,
2959 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2960 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
2961 : true, /* isInfallible. False in setters. */
2962 : false, /* isMovable. Not relevant for setters. */
2963 : false, /* isEliminatable. Not relevant for setters. */
2964 : false, /* isAlwaysInSlot. Only relevant for getters. */
2965 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2966 : false, /* isTypedMethod. Only relevant for methods. */
2967 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2968 : };
2969 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2970 : static_assert(0 < 2, "There is no slot for us");
2971 :
2972 : static bool
2973 0 : setCustomValidity(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
2974 : {
2975 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
2976 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.setCustomValidity");
2977 : }
2978 0 : binding_detail::FakeString arg0;
2979 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
2980 0 : return false;
2981 : }
2982 0 : self->SetCustomValidity(NonNullHelper(Constify(arg0)));
2983 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2984 0 : args.rval().setUndefined();
2985 0 : return true;
2986 : }
2987 :
2988 : static const JSJitInfo setCustomValidity_methodinfo = {
2989 : { (JSJitGetterOp)setCustomValidity },
2990 : { prototypes::id::HTMLInputElement },
2991 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
2992 : JSJitInfo::Method,
2993 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2994 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2995 : false, /* isInfallible. False in setters. */
2996 : false, /* isMovable. Not relevant for setters. */
2997 : false, /* isEliminatable. Not relevant for setters. */
2998 : false, /* isAlwaysInSlot. Only relevant for getters. */
2999 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3000 : false, /* isTypedMethod. Only relevant for methods. */
3001 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3002 : };
3003 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3004 : static_assert(0 < 2, "There is no slot for us");
3005 :
3006 : static bool
3007 0 : get_labels(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
3008 : {
3009 0 : auto result(StrongOrRawPtr<nsINodeList>(self->GetLabels()));
3010 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3011 0 : if (!result) {
3012 0 : args.rval().setNull();
3013 0 : return true;
3014 : }
3015 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
3016 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
3017 0 : return false;
3018 : }
3019 0 : return true;
3020 : }
3021 :
3022 : static const JSJitInfo labels_getterinfo = {
3023 : { (JSJitGetterOp)get_labels },
3024 : { prototypes::id::HTMLInputElement },
3025 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3026 : JSJitInfo::Getter,
3027 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3028 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
3029 : false, /* isInfallible. False in setters. */
3030 : false, /* isMovable. Not relevant for setters. */
3031 : false, /* isEliminatable. Not relevant for setters. */
3032 : false, /* isAlwaysInSlot. Only relevant for getters. */
3033 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3034 : false, /* isTypedMethod. Only relevant for methods. */
3035 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3036 : };
3037 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3038 : static_assert(0 < 2, "There is no slot for us");
3039 :
3040 : static bool
3041 0 : select(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
3042 : {
3043 0 : self->Select();
3044 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3045 0 : args.rval().setUndefined();
3046 0 : return true;
3047 : }
3048 :
3049 : static const JSJitInfo select_methodinfo = {
3050 : { (JSJitGetterOp)select },
3051 : { prototypes::id::HTMLInputElement },
3052 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3053 : JSJitInfo::Method,
3054 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3055 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3056 : true, /* isInfallible. False in setters. */
3057 : false, /* isMovable. Not relevant for setters. */
3058 : false, /* isEliminatable. Not relevant for setters. */
3059 : false, /* isAlwaysInSlot. Only relevant for getters. */
3060 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3061 : false, /* isTypedMethod. Only relevant for methods. */
3062 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3063 : };
3064 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3065 : static_assert(0 < 2, "There is no slot for us");
3066 :
3067 : static bool
3068 0 : get_selectionStart(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
3069 : {
3070 0 : binding_detail::FastErrorResult rv;
3071 0 : Nullable<uint32_t> result(self->GetSelectionStart(rv));
3072 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3073 0 : return false;
3074 : }
3075 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3076 0 : if (result.IsNull()) {
3077 0 : args.rval().setNull();
3078 0 : return true;
3079 : }
3080 0 : args.rval().setNumber(result.Value());
3081 0 : return true;
3082 : }
3083 :
3084 : static bool
3085 1 : set_selectionStart(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
3086 : {
3087 2 : Nullable<uint32_t> arg0;
3088 1 : if (args[0].isNullOrUndefined()) {
3089 0 : arg0.SetNull();
3090 1 : } else if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0.SetValue())) {
3091 0 : return false;
3092 : }
3093 2 : binding_detail::FastErrorResult rv;
3094 1 : self->SetSelectionStart(Constify(arg0), rv);
3095 1 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3096 0 : return false;
3097 : }
3098 1 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3099 :
3100 1 : return true;
3101 : }
3102 :
3103 : static const JSJitInfo selectionStart_getterinfo = {
3104 : { (JSJitGetterOp)get_selectionStart },
3105 : { prototypes::id::HTMLInputElement },
3106 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3107 : JSJitInfo::Getter,
3108 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3109 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
3110 : false, /* isInfallible. False in setters. */
3111 : false, /* isMovable. Not relevant for setters. */
3112 : false, /* isEliminatable. Not relevant for setters. */
3113 : false, /* isAlwaysInSlot. Only relevant for getters. */
3114 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3115 : false, /* isTypedMethod. Only relevant for methods. */
3116 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3117 : };
3118 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3119 : static_assert(0 < 2, "There is no slot for us");
3120 : static const JSJitInfo selectionStart_setterinfo = {
3121 : { (JSJitGetterOp)set_selectionStart },
3122 : { prototypes::id::HTMLInputElement },
3123 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3124 : JSJitInfo::Setter,
3125 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3126 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3127 : false, /* isInfallible. False in setters. */
3128 : false, /* isMovable. Not relevant for setters. */
3129 : false, /* isEliminatable. Not relevant for setters. */
3130 : false, /* isAlwaysInSlot. Only relevant for getters. */
3131 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3132 : false, /* isTypedMethod. Only relevant for methods. */
3133 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3134 : };
3135 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3136 : static_assert(0 < 2, "There is no slot for us");
3137 :
3138 : static bool
3139 0 : get_selectionEnd(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
3140 : {
3141 0 : binding_detail::FastErrorResult rv;
3142 0 : Nullable<uint32_t> result(self->GetSelectionEnd(rv));
3143 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3144 0 : return false;
3145 : }
3146 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3147 0 : if (result.IsNull()) {
3148 0 : args.rval().setNull();
3149 0 : return true;
3150 : }
3151 0 : args.rval().setNumber(result.Value());
3152 0 : return true;
3153 : }
3154 :
3155 : static bool
3156 1 : set_selectionEnd(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
3157 : {
3158 2 : Nullable<uint32_t> arg0;
3159 1 : if (args[0].isNullOrUndefined()) {
3160 0 : arg0.SetNull();
3161 1 : } else if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0.SetValue())) {
3162 0 : return false;
3163 : }
3164 2 : binding_detail::FastErrorResult rv;
3165 1 : self->SetSelectionEnd(Constify(arg0), rv);
3166 1 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3167 0 : return false;
3168 : }
3169 1 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3170 :
3171 1 : return true;
3172 : }
3173 :
3174 : static const JSJitInfo selectionEnd_getterinfo = {
3175 : { (JSJitGetterOp)get_selectionEnd },
3176 : { prototypes::id::HTMLInputElement },
3177 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3178 : JSJitInfo::Getter,
3179 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3180 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
3181 : false, /* isInfallible. False in setters. */
3182 : false, /* isMovable. Not relevant for setters. */
3183 : false, /* isEliminatable. Not relevant for setters. */
3184 : false, /* isAlwaysInSlot. Only relevant for getters. */
3185 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3186 : false, /* isTypedMethod. Only relevant for methods. */
3187 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3188 : };
3189 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3190 : static_assert(0 < 2, "There is no slot for us");
3191 : static const JSJitInfo selectionEnd_setterinfo = {
3192 : { (JSJitGetterOp)set_selectionEnd },
3193 : { prototypes::id::HTMLInputElement },
3194 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3195 : JSJitInfo::Setter,
3196 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3197 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3198 : false, /* isInfallible. False in setters. */
3199 : false, /* isMovable. Not relevant for setters. */
3200 : false, /* isEliminatable. Not relevant for setters. */
3201 : false, /* isAlwaysInSlot. Only relevant for getters. */
3202 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3203 : false, /* isTypedMethod. Only relevant for methods. */
3204 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3205 : };
3206 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3207 : static_assert(0 < 2, "There is no slot for us");
3208 :
3209 : static bool
3210 0 : get_selectionDirection(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
3211 : {
3212 0 : binding_detail::FastErrorResult rv;
3213 0 : DOMString result;
3214 0 : self->GetSelectionDirection(result, rv);
3215 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3216 0 : return false;
3217 : }
3218 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3219 0 : if (!xpc::StringToJsval(cx, result, args.rval())) {
3220 0 : return false;
3221 : }
3222 0 : return true;
3223 : }
3224 :
3225 : static bool
3226 0 : set_selectionDirection(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
3227 : {
3228 0 : binding_detail::FakeString arg0;
3229 0 : if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
3230 0 : return false;
3231 : }
3232 0 : binding_detail::FastErrorResult rv;
3233 0 : self->SetSelectionDirection(NonNullHelper(Constify(arg0)), rv);
3234 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3235 0 : return false;
3236 : }
3237 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3238 :
3239 0 : return true;
3240 : }
3241 :
3242 : static const JSJitInfo selectionDirection_getterinfo = {
3243 : { (JSJitGetterOp)get_selectionDirection },
3244 : { prototypes::id::HTMLInputElement },
3245 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3246 : JSJitInfo::Getter,
3247 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3248 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
3249 : false, /* isInfallible. False in setters. */
3250 : false, /* isMovable. Not relevant for setters. */
3251 : false, /* isEliminatable. Not relevant for setters. */
3252 : false, /* isAlwaysInSlot. Only relevant for getters. */
3253 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3254 : false, /* isTypedMethod. Only relevant for methods. */
3255 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3256 : };
3257 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3258 : static_assert(0 < 2, "There is no slot for us");
3259 : static const JSJitInfo selectionDirection_setterinfo = {
3260 : { (JSJitGetterOp)set_selectionDirection },
3261 : { prototypes::id::HTMLInputElement },
3262 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3263 : JSJitInfo::Setter,
3264 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3265 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3266 : false, /* isInfallible. False in setters. */
3267 : false, /* isMovable. Not relevant for setters. */
3268 : false, /* isEliminatable. Not relevant for setters. */
3269 : false, /* isAlwaysInSlot. Only relevant for getters. */
3270 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3271 : false, /* isTypedMethod. Only relevant for methods. */
3272 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3273 : };
3274 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3275 : static_assert(0 < 2, "There is no slot for us");
3276 :
3277 : static bool
3278 0 : setRangeText(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
3279 : {
3280 0 : unsigned argcount = std::min(args.length(), 4u);
3281 0 : switch (argcount) {
3282 : case 1: {
3283 0 : binding_detail::FakeString arg0;
3284 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
3285 0 : return false;
3286 : }
3287 0 : binding_detail::FastErrorResult rv;
3288 0 : self->SetRangeText(NonNullHelper(Constify(arg0)), rv);
3289 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3290 0 : return false;
3291 : }
3292 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3293 0 : args.rval().setUndefined();
3294 0 : return true;
3295 : break;
3296 : }
3297 : case 3: {
3298 : MOZ_FALLTHROUGH;
3299 : }
3300 : case 4: {
3301 0 : binding_detail::FakeString arg0;
3302 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
3303 0 : return false;
3304 : }
3305 : uint32_t arg1;
3306 0 : if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
3307 0 : return false;
3308 : }
3309 : uint32_t arg2;
3310 0 : if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
3311 0 : return false;
3312 : }
3313 : SelectionMode arg3;
3314 0 : if (args.hasDefined(3)) {
3315 : {
3316 : int index;
3317 0 : if (!FindEnumStringIndex<true>(cx, args[3], SelectionModeValues::strings, "SelectionMode", "Argument 4 of HTMLInputElement.setRangeText", &index)) {
3318 0 : return false;
3319 : }
3320 0 : MOZ_ASSERT(index >= 0);
3321 0 : arg3 = static_cast<SelectionMode>(index);
3322 : }
3323 : } else {
3324 0 : arg3 = SelectionMode::Preserve;
3325 : }
3326 0 : binding_detail::FastErrorResult rv;
3327 0 : self->SetRangeText(NonNullHelper(Constify(arg0)), arg1, arg2, arg3, rv);
3328 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3329 0 : return false;
3330 : }
3331 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3332 0 : args.rval().setUndefined();
3333 0 : return true;
3334 : break;
3335 : }
3336 : default: {
3337 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.setRangeText");
3338 : break;
3339 : }
3340 : }
3341 : MOZ_CRASH("We have an always-returning default case");
3342 : return false;
3343 : }
3344 :
3345 : static const JSJitInfo setRangeText_methodinfo = {
3346 : { (JSJitGetterOp)setRangeText },
3347 : { prototypes::id::HTMLInputElement },
3348 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3349 : JSJitInfo::Method,
3350 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3351 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3352 : false, /* isInfallible. False in setters. */
3353 : false, /* isMovable. Not relevant for setters. */
3354 : false, /* isEliminatable. Not relevant for setters. */
3355 : false, /* isAlwaysInSlot. Only relevant for getters. */
3356 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3357 : false, /* isTypedMethod. Only relevant for methods. */
3358 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3359 : };
3360 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3361 : static_assert(0 < 2, "There is no slot for us");
3362 :
3363 : static bool
3364 0 : setSelectionRange(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
3365 : {
3366 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
3367 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.setSelectionRange");
3368 : }
3369 : uint32_t arg0;
3370 0 : if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
3371 0 : return false;
3372 : }
3373 : uint32_t arg1;
3374 0 : if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
3375 0 : return false;
3376 : }
3377 0 : Optional<nsAString> arg2;
3378 0 : binding_detail::FakeString arg2_holder;
3379 0 : if (args.hasDefined(2)) {
3380 0 : if (!ConvertJSValueToString(cx, args[2], eStringify, eStringify, arg2_holder)) {
3381 0 : return false;
3382 : }
3383 0 : arg2 = &arg2_holder;
3384 : }
3385 0 : binding_detail::FastErrorResult rv;
3386 0 : self->SetSelectionRange(arg0, arg1, NonNullHelper(Constify(arg2)), rv);
3387 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3388 0 : return false;
3389 : }
3390 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3391 0 : args.rval().setUndefined();
3392 0 : return true;
3393 : }
3394 :
3395 : static const JSJitInfo setSelectionRange_methodinfo = {
3396 : { (JSJitGetterOp)setSelectionRange },
3397 : { prototypes::id::HTMLInputElement },
3398 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3399 : JSJitInfo::Method,
3400 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3401 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3402 : false, /* isInfallible. False in setters. */
3403 : false, /* isMovable. Not relevant for setters. */
3404 : false, /* isEliminatable. Not relevant for setters. */
3405 : false, /* isAlwaysInSlot. Only relevant for getters. */
3406 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3407 : false, /* isTypedMethod. Only relevant for methods. */
3408 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3409 : };
3410 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3411 : static_assert(0 < 2, "There is no slot for us");
3412 :
3413 : static bool
3414 0 : get_align(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
3415 : {
3416 0 : DOMString result;
3417 0 : self->GetAlign(result);
3418 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3419 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
3420 0 : return false;
3421 : }
3422 0 : return true;
3423 : }
3424 :
3425 : static bool
3426 0 : set_align(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
3427 : {
3428 0 : binding_detail::FakeString arg0;
3429 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
3430 0 : return false;
3431 : }
3432 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
3433 0 : Maybe<AutoCEReaction> ceReaction;
3434 0 : if (reactionsStack) {
3435 0 : ceReaction.emplace(reactionsStack);
3436 : }
3437 0 : binding_detail::FastErrorResult rv;
3438 0 : self->SetAlign(NonNullHelper(Constify(arg0)), rv);
3439 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3440 0 : return false;
3441 : }
3442 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3443 :
3444 0 : return true;
3445 : }
3446 :
3447 : static const JSJitInfo align_getterinfo = {
3448 : { (JSJitGetterOp)get_align },
3449 : { prototypes::id::HTMLInputElement },
3450 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3451 : JSJitInfo::Getter,
3452 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
3453 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
3454 : false, /* isInfallible. False in setters. */
3455 : true, /* isMovable. Not relevant for setters. */
3456 : true, /* isEliminatable. Not relevant for setters. */
3457 : false, /* isAlwaysInSlot. Only relevant for getters. */
3458 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3459 : false, /* isTypedMethod. Only relevant for methods. */
3460 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3461 : };
3462 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3463 : static_assert(0 < 2, "There is no slot for us");
3464 : static const JSJitInfo align_setterinfo = {
3465 : { (JSJitGetterOp)set_align },
3466 : { prototypes::id::HTMLInputElement },
3467 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3468 : JSJitInfo::Setter,
3469 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3470 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3471 : false, /* isInfallible. False in setters. */
3472 : false, /* isMovable. Not relevant for setters. */
3473 : false, /* isEliminatable. Not relevant for setters. */
3474 : false, /* isAlwaysInSlot. Only relevant for getters. */
3475 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3476 : false, /* isTypedMethod. Only relevant for methods. */
3477 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3478 : };
3479 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3480 : static_assert(0 < 2, "There is no slot for us");
3481 :
3482 : static bool
3483 0 : get_useMap(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
3484 : {
3485 0 : DOMString result;
3486 0 : self->GetUseMap(result);
3487 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3488 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
3489 0 : return false;
3490 : }
3491 0 : return true;
3492 : }
3493 :
3494 : static bool
3495 0 : set_useMap(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
3496 : {
3497 0 : binding_detail::FakeString arg0;
3498 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
3499 0 : return false;
3500 : }
3501 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
3502 0 : Maybe<AutoCEReaction> ceReaction;
3503 0 : if (reactionsStack) {
3504 0 : ceReaction.emplace(reactionsStack);
3505 : }
3506 0 : binding_detail::FastErrorResult rv;
3507 0 : self->SetUseMap(NonNullHelper(Constify(arg0)), rv);
3508 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3509 0 : return false;
3510 : }
3511 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3512 :
3513 0 : return true;
3514 : }
3515 :
3516 : static const JSJitInfo useMap_getterinfo = {
3517 : { (JSJitGetterOp)get_useMap },
3518 : { prototypes::id::HTMLInputElement },
3519 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3520 : JSJitInfo::Getter,
3521 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
3522 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
3523 : false, /* isInfallible. False in setters. */
3524 : true, /* isMovable. Not relevant for setters. */
3525 : true, /* isEliminatable. Not relevant for setters. */
3526 : false, /* isAlwaysInSlot. Only relevant for getters. */
3527 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3528 : false, /* isTypedMethod. Only relevant for methods. */
3529 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3530 : };
3531 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3532 : static_assert(0 < 2, "There is no slot for us");
3533 : static const JSJitInfo useMap_setterinfo = {
3534 : { (JSJitGetterOp)set_useMap },
3535 : { prototypes::id::HTMLInputElement },
3536 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3537 : JSJitInfo::Setter,
3538 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3539 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3540 : false, /* isInfallible. False in setters. */
3541 : false, /* isMovable. Not relevant for setters. */
3542 : false, /* isEliminatable. Not relevant for setters. */
3543 : false, /* isAlwaysInSlot. Only relevant for getters. */
3544 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3545 : false, /* isTypedMethod. Only relevant for methods. */
3546 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3547 : };
3548 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3549 : static_assert(0 < 2, "There is no slot for us");
3550 :
3551 : static bool
3552 3 : get_controllers(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
3553 : {
3554 6 : binding_detail::FastErrorResult rv;
3555 3 : auto result(StrongOrRawPtr<nsIControllers>(self->GetControllers(rv)));
3556 3 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3557 0 : return false;
3558 : }
3559 3 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3560 3 : if (!WrapObject(cx, result, &NS_GET_IID(nsIControllers), args.rval())) {
3561 0 : return false;
3562 : }
3563 3 : return true;
3564 : }
3565 :
3566 : static const JSJitInfo controllers_getterinfo = {
3567 : { (JSJitGetterOp)get_controllers },
3568 : { prototypes::id::HTMLInputElement },
3569 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3570 : JSJitInfo::Getter,
3571 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3572 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
3573 : false, /* isInfallible. False in setters. */
3574 : false, /* isMovable. Not relevant for setters. */
3575 : false, /* isEliminatable. Not relevant for setters. */
3576 : false, /* isAlwaysInSlot. Only relevant for getters. */
3577 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3578 : false, /* isTypedMethod. Only relevant for methods. */
3579 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3580 : };
3581 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3582 : static_assert(0 < 2, "There is no slot for us");
3583 :
3584 : static bool
3585 0 : get_textLength(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
3586 : {
3587 0 : int32_t result(self->InputTextLength(nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem));
3588 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3589 0 : args.rval().setInt32(int32_t(result));
3590 0 : return true;
3591 : }
3592 :
3593 : static const JSJitInfo textLength_getterinfo = {
3594 : { (JSJitGetterOp)get_textLength },
3595 : { prototypes::id::HTMLInputElement },
3596 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3597 : JSJitInfo::Getter,
3598 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3599 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
3600 : true, /* isInfallible. False in setters. */
3601 : false, /* isMovable. Not relevant for setters. */
3602 : false, /* isEliminatable. Not relevant for setters. */
3603 : false, /* isAlwaysInSlot. Only relevant for getters. */
3604 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3605 : false, /* isTypedMethod. Only relevant for methods. */
3606 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3607 : };
3608 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3609 : static_assert(0 < 2, "There is no slot for us");
3610 :
3611 : static bool
3612 0 : mozGetFileNameArray(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
3613 : {
3614 0 : binding_detail::FastErrorResult rv;
3615 0 : nsTArray<nsString> result;
3616 0 : self->MozGetFileNameArray(result, rv);
3617 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3618 0 : return false;
3619 : }
3620 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3621 :
3622 0 : uint32_t length = result.Length();
3623 0 : JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
3624 0 : if (!returnArray) {
3625 0 : return false;
3626 : }
3627 : // Scope for 'tmp'
3628 : {
3629 0 : JS::Rooted<JS::Value> tmp(cx);
3630 0 : for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
3631 : // Control block to let us common up the JS_DefineElement calls when there
3632 : // are different ways to succeed at wrapping the object.
3633 : do {
3634 0 : if (!xpc::NonVoidStringToJsval(cx, result[sequenceIdx0], &tmp)) {
3635 0 : return false;
3636 : }
3637 0 : break;
3638 : } while (0);
3639 0 : if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
3640 : JSPROP_ENUMERATE)) {
3641 0 : return false;
3642 : }
3643 : }
3644 : }
3645 0 : args.rval().setObject(*returnArray);
3646 0 : return true;
3647 : }
3648 :
3649 : static const JSJitInfo mozGetFileNameArray_methodinfo = {
3650 : { (JSJitGetterOp)mozGetFileNameArray },
3651 : { prototypes::id::HTMLInputElement },
3652 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3653 : JSJitInfo::Method,
3654 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3655 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
3656 : false, /* isInfallible. False in setters. */
3657 : false, /* isMovable. Not relevant for setters. */
3658 : false, /* isEliminatable. Not relevant for setters. */
3659 : false, /* isAlwaysInSlot. Only relevant for getters. */
3660 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3661 : false, /* isTypedMethod. Only relevant for methods. */
3662 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3663 : };
3664 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3665 : static_assert(0 < 2, "There is no slot for us");
3666 :
3667 : static bool
3668 0 : mozSetFileNameArray(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
3669 : {
3670 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
3671 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.mozSetFileNameArray");
3672 : }
3673 0 : binding_detail::AutoSequence<nsString> arg0;
3674 0 : if (args[0].isObject()) {
3675 0 : JS::ForOfIterator iter(cx);
3676 0 : if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) {
3677 0 : return false;
3678 : }
3679 0 : if (!iter.valueIsIterable()) {
3680 0 : ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 1 of HTMLInputElement.mozSetFileNameArray");
3681 0 : return false;
3682 : }
3683 0 : binding_detail::AutoSequence<nsString> &arr = arg0;
3684 0 : JS::Rooted<JS::Value> temp(cx);
3685 : while (true) {
3686 : bool done;
3687 0 : if (!iter.next(&temp, &done)) {
3688 0 : return false;
3689 : }
3690 0 : if (done) {
3691 0 : break;
3692 : }
3693 0 : nsString* slotPtr = arr.AppendElement(mozilla::fallible);
3694 0 : if (!slotPtr) {
3695 0 : JS_ReportOutOfMemory(cx);
3696 0 : return false;
3697 : }
3698 0 : nsString& slot = *slotPtr;
3699 0 : if (!ConvertJSValueToString(cx, temp, eStringify, eStringify, slot)) {
3700 0 : return false;
3701 : }
3702 0 : }
3703 : } else {
3704 0 : ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 1 of HTMLInputElement.mozSetFileNameArray");
3705 0 : return false;
3706 : }
3707 0 : binding_detail::FastErrorResult rv;
3708 0 : self->MozSetFileNameArray(Constify(arg0), rv);
3709 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3710 0 : return false;
3711 : }
3712 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3713 0 : args.rval().setUndefined();
3714 0 : return true;
3715 : }
3716 :
3717 : static const JSJitInfo mozSetFileNameArray_methodinfo = {
3718 : { (JSJitGetterOp)mozSetFileNameArray },
3719 : { prototypes::id::HTMLInputElement },
3720 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3721 : JSJitInfo::Method,
3722 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3723 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3724 : false, /* isInfallible. False in setters. */
3725 : false, /* isMovable. Not relevant for setters. */
3726 : false, /* isEliminatable. Not relevant for setters. */
3727 : false, /* isAlwaysInSlot. Only relevant for getters. */
3728 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3729 : false, /* isTypedMethod. Only relevant for methods. */
3730 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3731 : };
3732 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3733 : static_assert(0 < 2, "There is no slot for us");
3734 :
3735 : static bool
3736 0 : mozSetFileArray(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
3737 : {
3738 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
3739 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.mozSetFileArray");
3740 : }
3741 0 : binding_detail::AutoSequence<OwningNonNull<mozilla::dom::File>> arg0;
3742 0 : if (args[0].isObject()) {
3743 0 : JS::ForOfIterator iter(cx);
3744 0 : if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) {
3745 0 : return false;
3746 : }
3747 0 : if (!iter.valueIsIterable()) {
3748 0 : ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 1 of HTMLInputElement.mozSetFileArray");
3749 0 : return false;
3750 : }
3751 0 : binding_detail::AutoSequence<OwningNonNull<mozilla::dom::File>> &arr = arg0;
3752 0 : JS::Rooted<JS::Value> temp(cx);
3753 : while (true) {
3754 : bool done;
3755 0 : if (!iter.next(&temp, &done)) {
3756 0 : return false;
3757 : }
3758 0 : if (done) {
3759 0 : break;
3760 : }
3761 0 : OwningNonNull<mozilla::dom::File>* slotPtr = arr.AppendElement(mozilla::fallible);
3762 0 : if (!slotPtr) {
3763 0 : JS_ReportOutOfMemory(cx);
3764 0 : return false;
3765 : }
3766 0 : OwningNonNull<mozilla::dom::File>& slot = *slotPtr;
3767 0 : if (temp.isObject()) {
3768 : static_assert(IsRefcounted<mozilla::dom::File>::value, "We can only store refcounted classes.");{
3769 0 : nsresult rv = UnwrapObject<prototypes::id::File, mozilla::dom::File>(&temp, slot);
3770 0 : if (NS_FAILED(rv)) {
3771 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Element of argument 1 of HTMLInputElement.mozSetFileArray", "File");
3772 0 : return false;
3773 : }
3774 : }
3775 : } else {
3776 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Element of argument 1 of HTMLInputElement.mozSetFileArray");
3777 0 : return false;
3778 : }
3779 0 : }
3780 : } else {
3781 0 : ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 1 of HTMLInputElement.mozSetFileArray");
3782 0 : return false;
3783 : }
3784 0 : self->MozSetFileArray(Constify(arg0));
3785 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3786 0 : args.rval().setUndefined();
3787 0 : return true;
3788 : }
3789 :
3790 : static const JSJitInfo mozSetFileArray_methodinfo = {
3791 : { (JSJitGetterOp)mozSetFileArray },
3792 : { prototypes::id::HTMLInputElement },
3793 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3794 : JSJitInfo::Method,
3795 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3796 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3797 : false, /* isInfallible. False in setters. */
3798 : false, /* isMovable. Not relevant for setters. */
3799 : false, /* isEliminatable. Not relevant for setters. */
3800 : false, /* isAlwaysInSlot. Only relevant for getters. */
3801 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3802 : false, /* isTypedMethod. Only relevant for methods. */
3803 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3804 : };
3805 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3806 : static_assert(0 < 2, "There is no slot for us");
3807 :
3808 : static bool
3809 0 : mozSetDirectory(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
3810 : {
3811 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
3812 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.mozSetDirectory");
3813 : }
3814 0 : binding_detail::FakeString arg0;
3815 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
3816 0 : return false;
3817 : }
3818 0 : binding_detail::FastErrorResult rv;
3819 0 : self->MozSetDirectory(NonNullHelper(Constify(arg0)), rv);
3820 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3821 0 : return false;
3822 : }
3823 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3824 0 : args.rval().setUndefined();
3825 0 : return true;
3826 : }
3827 :
3828 : static const JSJitInfo mozSetDirectory_methodinfo = {
3829 : { (JSJitGetterOp)mozSetDirectory },
3830 : { prototypes::id::HTMLInputElement },
3831 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3832 : JSJitInfo::Method,
3833 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3834 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3835 : false, /* isInfallible. False in setters. */
3836 : false, /* isMovable. Not relevant for setters. */
3837 : false, /* isEliminatable. Not relevant for setters. */
3838 : false, /* isAlwaysInSlot. Only relevant for getters. */
3839 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3840 : false, /* isTypedMethod. Only relevant for methods. */
3841 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3842 : };
3843 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3844 : static_assert(0 < 2, "There is no slot for us");
3845 :
3846 : static bool
3847 0 : mozSetDndFilesAndDirectories(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
3848 : {
3849 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
3850 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.mozSetDndFilesAndDirectories");
3851 : }
3852 0 : binding_detail::AutoSequence<OwningFileOrDirectory> arg0;
3853 0 : if (args[0].isObject()) {
3854 0 : JS::ForOfIterator iter(cx);
3855 0 : if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) {
3856 0 : return false;
3857 : }
3858 0 : if (!iter.valueIsIterable()) {
3859 0 : ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 1 of HTMLInputElement.mozSetDndFilesAndDirectories");
3860 0 : return false;
3861 : }
3862 0 : binding_detail::AutoSequence<OwningFileOrDirectory> &arr = arg0;
3863 0 : JS::Rooted<JS::Value> temp(cx);
3864 : while (true) {
3865 : bool done;
3866 0 : if (!iter.next(&temp, &done)) {
3867 0 : return false;
3868 : }
3869 0 : if (done) {
3870 0 : break;
3871 : }
3872 0 : OwningFileOrDirectory* slotPtr = arr.AppendElement(mozilla::fallible);
3873 0 : if (!slotPtr) {
3874 0 : JS_ReportOutOfMemory(cx);
3875 0 : return false;
3876 : }
3877 0 : OwningFileOrDirectory& slot = *slotPtr;
3878 : {
3879 0 : bool done = false, failed = false, tryNext;
3880 0 : if (temp.isObject()) {
3881 0 : done = (failed = !slot.TrySetToFile(cx, temp, tryNext, false)) || !tryNext ||
3882 0 : (failed = !slot.TrySetToDirectory(cx, temp, tryNext, false)) || !tryNext;
3883 :
3884 : }
3885 0 : if (failed) {
3886 0 : return false;
3887 : }
3888 0 : if (!done) {
3889 0 : ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Element of argument 1 of HTMLInputElement.mozSetDndFilesAndDirectories", "File, Directory");
3890 0 : return false;
3891 : }
3892 : }
3893 0 : }
3894 : } else {
3895 0 : ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 1 of HTMLInputElement.mozSetDndFilesAndDirectories");
3896 0 : return false;
3897 : }
3898 0 : self->MozSetDndFilesAndDirectories(Constify(arg0));
3899 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3900 0 : args.rval().setUndefined();
3901 0 : return true;
3902 : }
3903 :
3904 : static const JSJitInfo mozSetDndFilesAndDirectories_methodinfo = {
3905 : { (JSJitGetterOp)mozSetDndFilesAndDirectories },
3906 : { prototypes::id::HTMLInputElement },
3907 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3908 : JSJitInfo::Method,
3909 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3910 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3911 : false, /* isInfallible. False in setters. */
3912 : false, /* isMovable. Not relevant for setters. */
3913 : false, /* isEliminatable. Not relevant for setters. */
3914 : false, /* isAlwaysInSlot. Only relevant for getters. */
3915 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3916 : false, /* isTypedMethod. Only relevant for methods. */
3917 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3918 : };
3919 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3920 : static_assert(0 < 2, "There is no slot for us");
3921 :
3922 : static bool
3923 0 : get_ownerNumberControl(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
3924 : {
3925 0 : auto result(StrongOrRawPtr<mozilla::dom::HTMLInputElement>(self->GetOwnerNumberControl()));
3926 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3927 0 : if (!result) {
3928 0 : args.rval().setNull();
3929 0 : return true;
3930 : }
3931 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
3932 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
3933 0 : return false;
3934 : }
3935 0 : return true;
3936 : }
3937 :
3938 : static const JSJitInfo ownerNumberControl_getterinfo = {
3939 : { (JSJitGetterOp)get_ownerNumberControl },
3940 : { prototypes::id::HTMLInputElement },
3941 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3942 : JSJitInfo::Getter,
3943 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3944 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
3945 : false, /* isInfallible. False in setters. */
3946 : false, /* isMovable. Not relevant for setters. */
3947 : false, /* isEliminatable. Not relevant for setters. */
3948 : false, /* isAlwaysInSlot. Only relevant for getters. */
3949 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3950 : false, /* isTypedMethod. Only relevant for methods. */
3951 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3952 : };
3953 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3954 : static_assert(0 < 2, "There is no slot for us");
3955 :
3956 : static bool
3957 0 : mozIsTextField(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
3958 : {
3959 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
3960 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.mozIsTextField");
3961 : }
3962 : bool arg0;
3963 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
3964 0 : return false;
3965 : }
3966 0 : bool result(self->MozIsTextField(arg0));
3967 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3968 0 : args.rval().setBoolean(result);
3969 0 : return true;
3970 : }
3971 :
3972 : static const JSJitInfo mozIsTextField_methodinfo = {
3973 : { (JSJitGetterOp)mozIsTextField },
3974 : { prototypes::id::HTMLInputElement },
3975 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
3976 : JSJitInfo::Method,
3977 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3978 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
3979 : false, /* isInfallible. False in setters. */
3980 : false, /* isMovable. Not relevant for setters. */
3981 : false, /* isEliminatable. Not relevant for setters. */
3982 : false, /* isAlwaysInSlot. Only relevant for getters. */
3983 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3984 : false, /* isTypedMethod. Only relevant for methods. */
3985 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3986 : };
3987 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3988 : static_assert(0 < 2, "There is no slot for us");
3989 :
3990 : static bool
3991 0 : getAutocompleteInfo(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
3992 : {
3993 0 : Nullable<AutocompleteInfo> result;
3994 0 : self->GetAutocompleteInfo(result);
3995 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3996 0 : if (result.IsNull()) {
3997 0 : args.rval().setNull();
3998 0 : return true;
3999 : }
4000 0 : if (!result.Value().ToObjectInternal(cx, args.rval())) {
4001 0 : return false;
4002 : }
4003 0 : return true;
4004 : }
4005 :
4006 : static const JSJitInfo getAutocompleteInfo_methodinfo = {
4007 : { (JSJitGetterOp)getAutocompleteInfo },
4008 : { prototypes::id::HTMLInputElement },
4009 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4010 : JSJitInfo::Method,
4011 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4012 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
4013 : false, /* isInfallible. False in setters. */
4014 : false, /* isMovable. Not relevant for setters. */
4015 : false, /* isEliminatable. Not relevant for setters. */
4016 : false, /* isAlwaysInSlot. Only relevant for getters. */
4017 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4018 : false, /* isTypedMethod. Only relevant for methods. */
4019 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4020 : };
4021 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4022 : static_assert(0 < 2, "There is no slot for us");
4023 :
4024 : static bool
4025 1 : get_editor(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
4026 : {
4027 1 : auto result(StrongOrRawPtr<nsIEditor>(self->GetEditor()));
4028 1 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4029 1 : if (!result) {
4030 0 : args.rval().setNull();
4031 0 : return true;
4032 : }
4033 1 : if (!WrapObject(cx, result, &NS_GET_IID(nsIEditor), args.rval())) {
4034 0 : return false;
4035 : }
4036 1 : return true;
4037 : }
4038 :
4039 : static const JSJitInfo editor_getterinfo = {
4040 : { (JSJitGetterOp)get_editor },
4041 : { prototypes::id::HTMLInputElement },
4042 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4043 : JSJitInfo::Getter,
4044 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
4045 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
4046 : false, /* isInfallible. False in setters. */
4047 : true, /* isMovable. Not relevant for setters. */
4048 : true, /* isEliminatable. Not relevant for setters. */
4049 : false, /* isAlwaysInSlot. Only relevant for getters. */
4050 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4051 : false, /* isTypedMethod. Only relevant for methods. */
4052 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4053 : };
4054 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4055 : static_assert(0 < 2, "There is no slot for us");
4056 :
4057 : static bool
4058 0 : setUserInput(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
4059 : {
4060 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
4061 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.setUserInput");
4062 : }
4063 0 : binding_detail::FakeString arg0;
4064 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
4065 0 : return false;
4066 : }
4067 0 : JSCompartment* compartment = js::GetContextCompartment(cx);
4068 0 : MOZ_ASSERT(compartment);
4069 0 : JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
4070 : // Initializing a nonnull is pretty darn annoying...
4071 0 : NonNull<nsIPrincipal> subjectPrincipal;
4072 0 : subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
4073 0 : self->SetUserInput(NonNullHelper(Constify(arg0)), subjectPrincipal);
4074 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4075 0 : args.rval().setUndefined();
4076 0 : return true;
4077 : }
4078 :
4079 : static const JSJitInfo setUserInput_methodinfo = {
4080 : { (JSJitGetterOp)setUserInput },
4081 : { prototypes::id::HTMLInputElement },
4082 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4083 : JSJitInfo::Method,
4084 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4085 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4086 : false, /* isInfallible. False in setters. */
4087 : false, /* isMovable. Not relevant for setters. */
4088 : false, /* isEliminatable. Not relevant for setters. */
4089 : false, /* isAlwaysInSlot. Only relevant for getters. */
4090 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4091 : false, /* isTypedMethod. Only relevant for methods. */
4092 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4093 : };
4094 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4095 : static_assert(0 < 2, "There is no slot for us");
4096 :
4097 : static bool
4098 0 : get_allowdirs(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
4099 : {
4100 0 : bool result(self->Allowdirs());
4101 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4102 0 : args.rval().setBoolean(result);
4103 0 : return true;
4104 : }
4105 :
4106 : static bool
4107 0 : set_allowdirs(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
4108 : {
4109 : bool arg0;
4110 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
4111 0 : return false;
4112 : }
4113 0 : binding_detail::FastErrorResult rv;
4114 0 : self->SetAllowdirs(arg0, rv);
4115 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4116 0 : return false;
4117 : }
4118 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4119 :
4120 0 : return true;
4121 : }
4122 :
4123 : static const JSJitInfo allowdirs_getterinfo = {
4124 : { (JSJitGetterOp)get_allowdirs },
4125 : { prototypes::id::HTMLInputElement },
4126 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4127 : JSJitInfo::Getter,
4128 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4129 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
4130 : true, /* isInfallible. False in setters. */
4131 : false, /* isMovable. Not relevant for setters. */
4132 : false, /* isEliminatable. Not relevant for setters. */
4133 : false, /* isAlwaysInSlot. Only relevant for getters. */
4134 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4135 : false, /* isTypedMethod. Only relevant for methods. */
4136 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4137 : };
4138 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4139 : static_assert(0 < 2, "There is no slot for us");
4140 : static const JSJitInfo allowdirs_setterinfo = {
4141 : { (JSJitGetterOp)set_allowdirs },
4142 : { prototypes::id::HTMLInputElement },
4143 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4144 : JSJitInfo::Setter,
4145 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4146 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4147 : false, /* isInfallible. False in setters. */
4148 : false, /* isMovable. Not relevant for setters. */
4149 : false, /* isEliminatable. Not relevant for setters. */
4150 : false, /* isAlwaysInSlot. Only relevant for getters. */
4151 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4152 : false, /* isTypedMethod. Only relevant for methods. */
4153 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4154 : };
4155 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4156 : static_assert(0 < 2, "There is no slot for us");
4157 :
4158 : static bool
4159 0 : get_isFilesAndDirectoriesSupported(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
4160 : {
4161 0 : bool result(self->IsFilesAndDirectoriesSupported());
4162 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4163 0 : args.rval().setBoolean(result);
4164 0 : return true;
4165 : }
4166 :
4167 : static const JSJitInfo isFilesAndDirectoriesSupported_getterinfo = {
4168 : { (JSJitGetterOp)get_isFilesAndDirectoriesSupported },
4169 : { prototypes::id::HTMLInputElement },
4170 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4171 : JSJitInfo::Getter,
4172 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4173 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
4174 : true, /* isInfallible. False in setters. */
4175 : false, /* isMovable. Not relevant for setters. */
4176 : false, /* isEliminatable. Not relevant for setters. */
4177 : false, /* isAlwaysInSlot. Only relevant for getters. */
4178 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4179 : false, /* isTypedMethod. Only relevant for methods. */
4180 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4181 : };
4182 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4183 : static_assert(0 < 2, "There is no slot for us");
4184 :
4185 : static bool
4186 0 : getFilesAndDirectories(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
4187 : {
4188 0 : binding_detail::FastErrorResult rv;
4189 0 : auto result(StrongOrRawPtr<Promise>(self->GetFilesAndDirectories(rv)));
4190 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4191 0 : return false;
4192 : }
4193 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4194 0 : if (!ToJSValue(cx, result, args.rval())) {
4195 0 : return false;
4196 : }
4197 0 : return true;
4198 : }
4199 :
4200 : static bool
4201 0 : getFilesAndDirectories_promiseWrapper(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
4202 : {
4203 : // Make sure to save the callee before someone maybe messes
4204 : // with rval().
4205 0 : JS::Rooted<JSObject*> callee(cx, &args.callee());
4206 0 : bool ok = getFilesAndDirectories(cx, obj, self, args);
4207 0 : if (ok) {
4208 0 : return true;
4209 : }
4210 0 : return ConvertExceptionToPromise(cx, xpc::XrayAwareCalleeGlobal(callee),
4211 0 : args.rval());
4212 : }
4213 :
4214 : static const JSJitInfo getFilesAndDirectories_methodinfo = {
4215 : { (JSJitGetterOp)getFilesAndDirectories_promiseWrapper },
4216 : { prototypes::id::HTMLInputElement },
4217 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4218 : JSJitInfo::Method,
4219 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4220 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
4221 : false, /* isInfallible. False in setters. */
4222 : false, /* isMovable. Not relevant for setters. */
4223 : false, /* isEliminatable. Not relevant for setters. */
4224 : false, /* isAlwaysInSlot. Only relevant for getters. */
4225 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4226 : false, /* isTypedMethod. Only relevant for methods. */
4227 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4228 : };
4229 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4230 : static_assert(0 < 2, "There is no slot for us");
4231 :
4232 : static bool
4233 0 : getFiles(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
4234 : {
4235 : bool arg0;
4236 0 : if (args.hasDefined(0)) {
4237 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
4238 0 : return false;
4239 : }
4240 : } else {
4241 0 : arg0 = false;
4242 : }
4243 0 : binding_detail::FastErrorResult rv;
4244 0 : auto result(StrongOrRawPtr<Promise>(self->GetFiles(arg0, rv)));
4245 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4246 0 : return false;
4247 : }
4248 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4249 0 : if (!ToJSValue(cx, result, args.rval())) {
4250 0 : return false;
4251 : }
4252 0 : return true;
4253 : }
4254 :
4255 : static bool
4256 0 : getFiles_promiseWrapper(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
4257 : {
4258 : // Make sure to save the callee before someone maybe messes
4259 : // with rval().
4260 0 : JS::Rooted<JSObject*> callee(cx, &args.callee());
4261 0 : bool ok = getFiles(cx, obj, self, args);
4262 0 : if (ok) {
4263 0 : return true;
4264 : }
4265 0 : return ConvertExceptionToPromise(cx, xpc::XrayAwareCalleeGlobal(callee),
4266 0 : args.rval());
4267 : }
4268 :
4269 : static const JSJitInfo getFiles_methodinfo = {
4270 : { (JSJitGetterOp)getFiles_promiseWrapper },
4271 : { prototypes::id::HTMLInputElement },
4272 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4273 : JSJitInfo::Method,
4274 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4275 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
4276 : false, /* isInfallible. False in setters. */
4277 : false, /* isMovable. Not relevant for setters. */
4278 : false, /* isEliminatable. Not relevant for setters. */
4279 : false, /* isAlwaysInSlot. Only relevant for getters. */
4280 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4281 : false, /* isTypedMethod. Only relevant for methods. */
4282 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4283 : };
4284 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4285 : static_assert(0 < 2, "There is no slot for us");
4286 :
4287 : static bool
4288 0 : chooseDirectory(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
4289 : {
4290 0 : binding_detail::FastErrorResult rv;
4291 0 : self->ChooseDirectory(rv);
4292 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4293 0 : return false;
4294 : }
4295 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4296 0 : args.rval().setUndefined();
4297 0 : return true;
4298 : }
4299 :
4300 : static const JSJitInfo chooseDirectory_methodinfo = {
4301 : { (JSJitGetterOp)chooseDirectory },
4302 : { prototypes::id::HTMLInputElement },
4303 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4304 : JSJitInfo::Method,
4305 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4306 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4307 : false, /* isInfallible. False in setters. */
4308 : false, /* isMovable. Not relevant for setters. */
4309 : false, /* isEliminatable. Not relevant for setters. */
4310 : false, /* isAlwaysInSlot. Only relevant for getters. */
4311 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4312 : false, /* isTypedMethod. Only relevant for methods. */
4313 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4314 : };
4315 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4316 : static_assert(0 < 2, "There is no slot for us");
4317 :
4318 : static bool
4319 0 : get_webkitEntries(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
4320 : {
4321 : // Have to either root across the getter call or reget after.
4322 : bool isXray;
4323 0 : JS::Rooted<JSObject*> slotStorage(cx, GetCachedSlotStorageObject(cx, obj, &isXray));
4324 0 : if (!slotStorage) {
4325 0 : return false;
4326 : }
4327 0 : const size_t slotIndex = isXray ? (xpc::JSSLOT_EXPANDO_COUNT + 0) : (DOM_INSTANCE_RESERVED_SLOTS + 0);
4328 0 : MOZ_ASSERT(JSCLASS_RESERVED_SLOTS(js::GetObjectClass(slotStorage)) > slotIndex);
4329 : {
4330 : // Scope for cachedVal
4331 0 : JS::Value cachedVal = js::GetReservedSlot(slotStorage, slotIndex);
4332 0 : if (!cachedVal.isUndefined()) {
4333 0 : args.rval().set(cachedVal);
4334 : // The cached value is in the compartment of slotStorage,
4335 : // so wrap into the caller compartment as needed.
4336 0 : return MaybeWrapNonDOMObjectValue(cx, args.rval());
4337 : }
4338 : }
4339 :
4340 0 : nsTArray<StrongPtrForMember<mozilla::dom::FileSystemEntry>::Type> result;
4341 0 : self->GetWebkitEntries(result);
4342 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4343 : {
4344 0 : JS::Rooted<JSObject*> conversionScope(cx, isXray ? obj : slotStorage);
4345 0 : JSAutoCompartment ac(cx, conversionScope);
4346 : do { // block we break out of when done wrapping
4347 :
4348 0 : uint32_t length = result.Length();
4349 0 : JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
4350 0 : if (!returnArray) {
4351 0 : return false;
4352 : }
4353 : // Scope for 'tmp'
4354 : {
4355 0 : JS::Rooted<JS::Value> tmp(cx);
4356 0 : for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
4357 : // Control block to let us common up the JS_DefineElement calls when there
4358 : // are different ways to succeed at wrapping the object.
4359 : do {
4360 0 : if (!GetOrCreateDOMReflector(cx, result[sequenceIdx0], &tmp)) {
4361 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
4362 0 : return false;
4363 : }
4364 0 : break;
4365 : } while (0);
4366 0 : if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
4367 : JSPROP_ENUMERATE)) {
4368 0 : return false;
4369 : }
4370 : }
4371 : }
4372 0 : args.rval().setObject(*returnArray);
4373 0 : break;
4374 : } while (0);
4375 0 : JS::Rooted<JSObject*> rvalObj(cx, &args.rval().toObject());
4376 0 : if (!JS_FreezeObject(cx, rvalObj)) {
4377 0 : return false;
4378 : }
4379 : }
4380 : { // And now store things in the compartment of our slotStorage.
4381 0 : JSAutoCompartment ac(cx, slotStorage);
4382 : // Make a copy so that we don't do unnecessary wrapping on args.rval().
4383 0 : JS::Rooted<JS::Value> storedVal(cx, args.rval());
4384 0 : if (!MaybeWrapNonDOMObjectValue(cx, &storedVal)) {
4385 0 : return false;
4386 : }
4387 0 : js::SetReservedSlot(slotStorage, slotIndex, storedVal);
4388 0 : if (!isXray) {
4389 : // In the Xray case we don't need to do this, because getting the
4390 : // expando object already preserved our wrapper.
4391 0 : PreserveWrapper(self);
4392 : }
4393 : }
4394 : // And now make sure args.rval() is in the caller compartment
4395 0 : return MaybeWrapNonDOMObjectValue(cx, args.rval());
4396 : }
4397 :
4398 : static const JSJitInfo webkitEntries_getterinfo = {
4399 : { (JSJitGetterOp)get_webkitEntries },
4400 : { prototypes::id::HTMLInputElement },
4401 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4402 : JSJitInfo::Getter,
4403 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
4404 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
4405 : false, /* isInfallible. False in setters. */
4406 : true, /* isMovable. Not relevant for setters. */
4407 : true, /* isEliminatable. Not relevant for setters. */
4408 : false, /* isAlwaysInSlot. Only relevant for getters. */
4409 : true, /* isLazilyCachedInSlot. Only relevant for getters. */
4410 : false, /* isTypedMethod. Only relevant for methods. */
4411 : (DOM_INSTANCE_RESERVED_SLOTS + 0) /* Reserved slot index, if we're stored in a slot, else 0. */
4412 : };
4413 : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 0) <= JSJitInfo::maxSlotIndex, "We won't fit");
4414 : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 0) < 2, "There is no slot for us");
4415 :
4416 : static bool
4417 0 : get_webkitdirectory(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
4418 : {
4419 0 : bool result(self->WebkitDirectoryAttr());
4420 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4421 0 : args.rval().setBoolean(result);
4422 0 : return true;
4423 : }
4424 :
4425 : static bool
4426 0 : set_webkitdirectory(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
4427 : {
4428 : bool arg0;
4429 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
4430 0 : return false;
4431 : }
4432 0 : binding_detail::FastErrorResult rv;
4433 0 : self->SetWebkitDirectoryAttr(arg0, rv);
4434 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4435 0 : return false;
4436 : }
4437 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4438 :
4439 0 : return true;
4440 : }
4441 :
4442 : static const JSJitInfo webkitdirectory_getterinfo = {
4443 : { (JSJitGetterOp)get_webkitdirectory },
4444 : { prototypes::id::HTMLInputElement },
4445 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4446 : JSJitInfo::Getter,
4447 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4448 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
4449 : true, /* isInfallible. False in setters. */
4450 : false, /* isMovable. Not relevant for setters. */
4451 : false, /* isEliminatable. Not relevant for setters. */
4452 : false, /* isAlwaysInSlot. Only relevant for getters. */
4453 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4454 : false, /* isTypedMethod. Only relevant for methods. */
4455 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4456 : };
4457 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4458 : static_assert(0 < 2, "There is no slot for us");
4459 : static const JSJitInfo webkitdirectory_setterinfo = {
4460 : { (JSJitGetterOp)set_webkitdirectory },
4461 : { prototypes::id::HTMLInputElement },
4462 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4463 : JSJitInfo::Setter,
4464 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4465 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4466 : false, /* isInfallible. False in setters. */
4467 : false, /* isMovable. Not relevant for setters. */
4468 : false, /* isEliminatable. Not relevant for setters. */
4469 : false, /* isAlwaysInSlot. Only relevant for getters. */
4470 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4471 : false, /* isTypedMethod. Only relevant for methods. */
4472 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4473 : };
4474 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4475 : static_assert(0 < 2, "There is no slot for us");
4476 :
4477 : static bool
4478 0 : getDateTimeInputBoxValue(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
4479 : {
4480 0 : DateTimeValue result;
4481 0 : self->GetDateTimeInputBoxValue(result);
4482 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4483 0 : if (!result.ToObjectInternal(cx, args.rval())) {
4484 0 : return false;
4485 : }
4486 0 : return true;
4487 : }
4488 :
4489 : static const JSJitInfo getDateTimeInputBoxValue_methodinfo = {
4490 : { (JSJitGetterOp)getDateTimeInputBoxValue },
4491 : { prototypes::id::HTMLInputElement },
4492 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4493 : JSJitInfo::Method,
4494 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4495 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
4496 : false, /* isInfallible. False in setters. */
4497 : false, /* isMovable. Not relevant for setters. */
4498 : false, /* isEliminatable. Not relevant for setters. */
4499 : false, /* isAlwaysInSlot. Only relevant for getters. */
4500 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4501 : false, /* isTypedMethod. Only relevant for methods. */
4502 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4503 : };
4504 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4505 : static_assert(0 < 2, "There is no slot for us");
4506 :
4507 : static bool
4508 0 : updateDateTimeInputBox(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
4509 : {
4510 0 : binding_detail::FastDateTimeValue arg0;
4511 0 : if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue, "Argument 1 of HTMLInputElement.updateDateTimeInputBox", false)) {
4512 0 : return false;
4513 : }
4514 0 : self->UpdateDateTimeInputBox(Constify(arg0));
4515 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4516 0 : args.rval().setUndefined();
4517 0 : return true;
4518 : }
4519 :
4520 : static const JSJitInfo updateDateTimeInputBox_methodinfo = {
4521 : { (JSJitGetterOp)updateDateTimeInputBox },
4522 : { prototypes::id::HTMLInputElement },
4523 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4524 : JSJitInfo::Method,
4525 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4526 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4527 : false, /* isInfallible. False in setters. */
4528 : false, /* isMovable. Not relevant for setters. */
4529 : false, /* isEliminatable. Not relevant for setters. */
4530 : false, /* isAlwaysInSlot. Only relevant for getters. */
4531 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4532 : false, /* isTypedMethod. Only relevant for methods. */
4533 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4534 : };
4535 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4536 : static_assert(0 < 2, "There is no slot for us");
4537 :
4538 : static bool
4539 0 : setDateTimePickerState(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
4540 : {
4541 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
4542 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.setDateTimePickerState");
4543 : }
4544 : bool arg0;
4545 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
4546 0 : return false;
4547 : }
4548 0 : self->SetDateTimePickerState(arg0);
4549 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4550 0 : args.rval().setUndefined();
4551 0 : return true;
4552 : }
4553 :
4554 : static const JSJitInfo setDateTimePickerState_methodinfo = {
4555 : { (JSJitGetterOp)setDateTimePickerState },
4556 : { prototypes::id::HTMLInputElement },
4557 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4558 : JSJitInfo::Method,
4559 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4560 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4561 : false, /* isInfallible. False in setters. */
4562 : false, /* isMovable. Not relevant for setters. */
4563 : false, /* isEliminatable. Not relevant for setters. */
4564 : false, /* isAlwaysInSlot. Only relevant for getters. */
4565 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4566 : false, /* isTypedMethod. Only relevant for methods. */
4567 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4568 : };
4569 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4570 : static_assert(0 < 2, "There is no slot for us");
4571 :
4572 : static bool
4573 0 : openDateTimePicker(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
4574 : {
4575 0 : binding_detail::FastDateTimeValue arg0;
4576 0 : if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue, "Argument 1 of HTMLInputElement.openDateTimePicker", false)) {
4577 0 : return false;
4578 : }
4579 0 : self->OpenDateTimePicker(Constify(arg0));
4580 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4581 0 : args.rval().setUndefined();
4582 0 : return true;
4583 : }
4584 :
4585 : static const JSJitInfo openDateTimePicker_methodinfo = {
4586 : { (JSJitGetterOp)openDateTimePicker },
4587 : { prototypes::id::HTMLInputElement },
4588 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4589 : JSJitInfo::Method,
4590 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4591 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4592 : false, /* isInfallible. False in setters. */
4593 : false, /* isMovable. Not relevant for setters. */
4594 : false, /* isEliminatable. Not relevant for setters. */
4595 : false, /* isAlwaysInSlot. Only relevant for getters. */
4596 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4597 : false, /* isTypedMethod. Only relevant for methods. */
4598 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4599 : };
4600 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4601 : static_assert(0 < 2, "There is no slot for us");
4602 :
4603 : static bool
4604 0 : updateDateTimePicker(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
4605 : {
4606 0 : binding_detail::FastDateTimeValue arg0;
4607 0 : if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue, "Argument 1 of HTMLInputElement.updateDateTimePicker", false)) {
4608 0 : return false;
4609 : }
4610 0 : self->UpdateDateTimePicker(Constify(arg0));
4611 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4612 0 : args.rval().setUndefined();
4613 0 : return true;
4614 : }
4615 :
4616 : static const JSJitInfo updateDateTimePicker_methodinfo = {
4617 : { (JSJitGetterOp)updateDateTimePicker },
4618 : { prototypes::id::HTMLInputElement },
4619 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4620 : JSJitInfo::Method,
4621 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4622 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4623 : false, /* isInfallible. False in setters. */
4624 : false, /* isMovable. Not relevant for setters. */
4625 : false, /* isEliminatable. Not relevant for setters. */
4626 : false, /* isAlwaysInSlot. Only relevant for getters. */
4627 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4628 : false, /* isTypedMethod. Only relevant for methods. */
4629 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4630 : };
4631 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4632 : static_assert(0 < 2, "There is no slot for us");
4633 :
4634 : static bool
4635 0 : closeDateTimePicker(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
4636 : {
4637 0 : self->CloseDateTimePicker();
4638 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4639 0 : args.rval().setUndefined();
4640 0 : return true;
4641 : }
4642 :
4643 : static const JSJitInfo closeDateTimePicker_methodinfo = {
4644 : { (JSJitGetterOp)closeDateTimePicker },
4645 : { prototypes::id::HTMLInputElement },
4646 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4647 : JSJitInfo::Method,
4648 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4649 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4650 : true, /* isInfallible. False in setters. */
4651 : false, /* isMovable. Not relevant for setters. */
4652 : false, /* isEliminatable. Not relevant for setters. */
4653 : false, /* isAlwaysInSlot. Only relevant for getters. */
4654 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4655 : false, /* isTypedMethod. Only relevant for methods. */
4656 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4657 : };
4658 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4659 : static_assert(0 < 2, "There is no slot for us");
4660 :
4661 : static bool
4662 0 : setFocusState(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
4663 : {
4664 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
4665 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.setFocusState");
4666 : }
4667 : bool arg0;
4668 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
4669 0 : return false;
4670 : }
4671 0 : self->SetFocusState(arg0);
4672 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4673 0 : args.rval().setUndefined();
4674 0 : return true;
4675 : }
4676 :
4677 : static const JSJitInfo setFocusState_methodinfo = {
4678 : { (JSJitGetterOp)setFocusState },
4679 : { prototypes::id::HTMLInputElement },
4680 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4681 : JSJitInfo::Method,
4682 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4683 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4684 : false, /* isInfallible. False in setters. */
4685 : false, /* isMovable. Not relevant for setters. */
4686 : false, /* isEliminatable. Not relevant for setters. */
4687 : false, /* isAlwaysInSlot. Only relevant for getters. */
4688 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4689 : false, /* isTypedMethod. Only relevant for methods. */
4690 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4691 : };
4692 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4693 : static_assert(0 < 2, "There is no slot for us");
4694 :
4695 : static bool
4696 0 : updateValidityState(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
4697 : {
4698 0 : self->UpdateValidityState();
4699 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4700 0 : args.rval().setUndefined();
4701 0 : return true;
4702 : }
4703 :
4704 : static const JSJitInfo updateValidityState_methodinfo = {
4705 : { (JSJitGetterOp)updateValidityState },
4706 : { prototypes::id::HTMLInputElement },
4707 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4708 : JSJitInfo::Method,
4709 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4710 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4711 : true, /* isInfallible. False in setters. */
4712 : false, /* isMovable. Not relevant for setters. */
4713 : false, /* isEliminatable. Not relevant for setters. */
4714 : false, /* isAlwaysInSlot. Only relevant for getters. */
4715 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4716 : false, /* isTypedMethod. Only relevant for methods. */
4717 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4718 : };
4719 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4720 : static_assert(0 < 2, "There is no slot for us");
4721 :
4722 : static bool
4723 0 : getStep(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
4724 : {
4725 0 : double result(self->GetStepAsDouble());
4726 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4727 0 : args.rval().set(JS_NumberValue(double(result)));
4728 0 : return true;
4729 : }
4730 :
4731 : static const JSJitInfo getStep_methodinfo = {
4732 : { (JSJitGetterOp)getStep },
4733 : { prototypes::id::HTMLInputElement },
4734 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4735 : JSJitInfo::Method,
4736 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4737 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
4738 : true, /* isInfallible. False in setters. */
4739 : false, /* isMovable. Not relevant for setters. */
4740 : false, /* isEliminatable. Not relevant for setters. */
4741 : false, /* isAlwaysInSlot. Only relevant for getters. */
4742 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4743 : false, /* isTypedMethod. Only relevant for methods. */
4744 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4745 : };
4746 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4747 : static_assert(0 < 2, "There is no slot for us");
4748 :
4749 : static bool
4750 0 : getStepBase(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
4751 : {
4752 0 : double result(self->GetStepBaseAsDouble());
4753 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4754 0 : args.rval().set(JS_NumberValue(double(result)));
4755 0 : return true;
4756 : }
4757 :
4758 : static const JSJitInfo getStepBase_methodinfo = {
4759 : { (JSJitGetterOp)getStepBase },
4760 : { prototypes::id::HTMLInputElement },
4761 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4762 : JSJitInfo::Method,
4763 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4764 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
4765 : true, /* isInfallible. False in setters. */
4766 : false, /* isMovable. Not relevant for setters. */
4767 : false, /* isEliminatable. Not relevant for setters. */
4768 : false, /* isAlwaysInSlot. Only relevant for getters. */
4769 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4770 : false, /* isTypedMethod. Only relevant for methods. */
4771 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4772 : };
4773 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4774 : static_assert(0 < 2, "There is no slot for us");
4775 :
4776 : static bool
4777 0 : get_previewValue(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
4778 : {
4779 0 : DOMString result;
4780 0 : self->GetPreviewValue(result);
4781 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4782 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
4783 0 : return false;
4784 : }
4785 0 : return true;
4786 : }
4787 :
4788 : static bool
4789 0 : set_previewValue(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
4790 : {
4791 0 : binding_detail::FakeString arg0;
4792 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
4793 0 : return false;
4794 : }
4795 0 : self->SetPreviewValue(NonNullHelper(Constify(arg0)));
4796 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4797 :
4798 0 : return true;
4799 : }
4800 :
4801 : static const JSJitInfo previewValue_getterinfo = {
4802 : { (JSJitGetterOp)get_previewValue },
4803 : { prototypes::id::HTMLInputElement },
4804 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4805 : JSJitInfo::Getter,
4806 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4807 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
4808 : false, /* isInfallible. False in setters. */
4809 : false, /* isMovable. Not relevant for setters. */
4810 : false, /* isEliminatable. Not relevant for setters. */
4811 : false, /* isAlwaysInSlot. Only relevant for getters. */
4812 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4813 : false, /* isTypedMethod. Only relevant for methods. */
4814 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4815 : };
4816 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4817 : static_assert(0 < 2, "There is no slot for us");
4818 : static const JSJitInfo previewValue_setterinfo = {
4819 : { (JSJitGetterOp)set_previewValue },
4820 : { prototypes::id::HTMLInputElement },
4821 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4822 : JSJitInfo::Setter,
4823 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4824 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4825 : false, /* isInfallible. False in setters. */
4826 : false, /* isMovable. Not relevant for setters. */
4827 : false, /* isEliminatable. Not relevant for setters. */
4828 : false, /* isAlwaysInSlot. Only relevant for getters. */
4829 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4830 : false, /* isTypedMethod. Only relevant for methods. */
4831 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4832 : };
4833 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4834 : static_assert(0 < 2, "There is no slot for us");
4835 :
4836 : static bool
4837 0 : get_loadingEnabled(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
4838 : {
4839 0 : bool result(self->LoadingEnabled());
4840 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4841 0 : args.rval().setBoolean(result);
4842 0 : return true;
4843 : }
4844 :
4845 : static bool
4846 0 : set_loadingEnabled(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
4847 : {
4848 : bool arg0;
4849 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
4850 0 : return false;
4851 : }
4852 0 : self->SetLoadingEnabled(arg0);
4853 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4854 :
4855 0 : return true;
4856 : }
4857 :
4858 : static const JSJitInfo loadingEnabled_getterinfo = {
4859 : { (JSJitGetterOp)get_loadingEnabled },
4860 : { prototypes::id::HTMLInputElement },
4861 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4862 : JSJitInfo::Getter,
4863 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4864 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
4865 : true, /* isInfallible. False in setters. */
4866 : false, /* isMovable. Not relevant for setters. */
4867 : false, /* isEliminatable. Not relevant for setters. */
4868 : false, /* isAlwaysInSlot. Only relevant for getters. */
4869 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4870 : false, /* isTypedMethod. Only relevant for methods. */
4871 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4872 : };
4873 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4874 : static_assert(0 < 2, "There is no slot for us");
4875 : static const JSJitInfo loadingEnabled_setterinfo = {
4876 : { (JSJitGetterOp)set_loadingEnabled },
4877 : { prototypes::id::HTMLInputElement },
4878 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4879 : JSJitInfo::Setter,
4880 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4881 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4882 : false, /* isInfallible. False in setters. */
4883 : false, /* isMovable. Not relevant for setters. */
4884 : false, /* isEliminatable. Not relevant for setters. */
4885 : false, /* isAlwaysInSlot. Only relevant for getters. */
4886 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4887 : false, /* isTypedMethod. Only relevant for methods. */
4888 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4889 : };
4890 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4891 : static_assert(0 < 2, "There is no slot for us");
4892 :
4893 : static bool
4894 0 : get_imageBlockingStatus(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
4895 : {
4896 0 : int16_t result(self->ImageBlockingStatus());
4897 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4898 0 : args.rval().setInt32(int32_t(result));
4899 0 : return true;
4900 : }
4901 :
4902 : static const JSJitInfo imageBlockingStatus_getterinfo = {
4903 : { (JSJitGetterOp)get_imageBlockingStatus },
4904 : { prototypes::id::HTMLInputElement },
4905 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4906 : JSJitInfo::Getter,
4907 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4908 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
4909 : true, /* isInfallible. False in setters. */
4910 : false, /* isMovable. Not relevant for setters. */
4911 : false, /* isEliminatable. Not relevant for setters. */
4912 : false, /* isAlwaysInSlot. Only relevant for getters. */
4913 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4914 : false, /* isTypedMethod. Only relevant for methods. */
4915 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4916 : };
4917 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4918 : static_assert(0 < 2, "There is no slot for us");
4919 :
4920 : static bool
4921 0 : addObserver(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
4922 : {
4923 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
4924 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.addObserver");
4925 : }
4926 : imgINotificationObserver* arg0;
4927 0 : RefPtr<imgINotificationObserver> arg0_holder;
4928 0 : if (args[0].isObject()) {
4929 0 : JS::Rooted<JSObject*> source(cx, &args[0].toObject());
4930 0 : if (NS_FAILED(UnwrapArg<imgINotificationObserver>(cx, source, getter_AddRefs(arg0_holder)))) {
4931 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of HTMLInputElement.addObserver", "imgINotificationObserver");
4932 0 : return false;
4933 : }
4934 0 : MOZ_ASSERT(arg0_holder);
4935 0 : arg0 = arg0_holder;
4936 : } else {
4937 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of HTMLInputElement.addObserver");
4938 0 : return false;
4939 : }
4940 0 : self->AddObserver(NonNullHelper(arg0));
4941 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4942 0 : args.rval().setUndefined();
4943 0 : return true;
4944 : }
4945 :
4946 : static const JSJitInfo addObserver_methodinfo = {
4947 : { (JSJitGetterOp)addObserver },
4948 : { prototypes::id::HTMLInputElement },
4949 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4950 : JSJitInfo::Method,
4951 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4952 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4953 : false, /* isInfallible. False in setters. */
4954 : false, /* isMovable. Not relevant for setters. */
4955 : false, /* isEliminatable. Not relevant for setters. */
4956 : false, /* isAlwaysInSlot. Only relevant for getters. */
4957 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4958 : false, /* isTypedMethod. Only relevant for methods. */
4959 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4960 : };
4961 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4962 : static_assert(0 < 2, "There is no slot for us");
4963 :
4964 : static bool
4965 0 : removeObserver(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
4966 : {
4967 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
4968 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.removeObserver");
4969 : }
4970 : imgINotificationObserver* arg0;
4971 0 : RefPtr<imgINotificationObserver> arg0_holder;
4972 0 : if (args[0].isObject()) {
4973 0 : JS::Rooted<JSObject*> source(cx, &args[0].toObject());
4974 0 : if (NS_FAILED(UnwrapArg<imgINotificationObserver>(cx, source, getter_AddRefs(arg0_holder)))) {
4975 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of HTMLInputElement.removeObserver", "imgINotificationObserver");
4976 0 : return false;
4977 : }
4978 0 : MOZ_ASSERT(arg0_holder);
4979 0 : arg0 = arg0_holder;
4980 : } else {
4981 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of HTMLInputElement.removeObserver");
4982 0 : return false;
4983 : }
4984 0 : self->RemoveObserver(NonNullHelper(arg0));
4985 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4986 0 : args.rval().setUndefined();
4987 0 : return true;
4988 : }
4989 :
4990 : static const JSJitInfo removeObserver_methodinfo = {
4991 : { (JSJitGetterOp)removeObserver },
4992 : { prototypes::id::HTMLInputElement },
4993 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
4994 : JSJitInfo::Method,
4995 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4996 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4997 : false, /* isInfallible. False in setters. */
4998 : false, /* isMovable. Not relevant for setters. */
4999 : false, /* isEliminatable. Not relevant for setters. */
5000 : false, /* isAlwaysInSlot. Only relevant for getters. */
5001 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5002 : false, /* isTypedMethod. Only relevant for methods. */
5003 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5004 : };
5005 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5006 : static_assert(0 < 2, "There is no slot for us");
5007 :
5008 : static bool
5009 0 : getRequest(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
5010 : {
5011 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
5012 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.getRequest");
5013 : }
5014 : int32_t arg0;
5015 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
5016 0 : return false;
5017 : }
5018 0 : binding_detail::FastErrorResult rv;
5019 0 : auto result(StrongOrRawPtr<imgIRequest>(self->GetRequest(arg0, rv)));
5020 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5021 0 : return false;
5022 : }
5023 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5024 0 : if (!result) {
5025 0 : args.rval().setNull();
5026 0 : return true;
5027 : }
5028 0 : if (!WrapObject(cx, result, &NS_GET_IID(imgIRequest), args.rval())) {
5029 0 : return false;
5030 : }
5031 0 : return true;
5032 : }
5033 :
5034 : static const JSJitInfo getRequest_methodinfo = {
5035 : { (JSJitGetterOp)getRequest },
5036 : { prototypes::id::HTMLInputElement },
5037 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
5038 : JSJitInfo::Method,
5039 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5040 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
5041 : false, /* isInfallible. False in setters. */
5042 : false, /* isMovable. Not relevant for setters. */
5043 : false, /* isEliminatable. Not relevant for setters. */
5044 : false, /* isAlwaysInSlot. Only relevant for getters. */
5045 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5046 : false, /* isTypedMethod. Only relevant for methods. */
5047 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5048 : };
5049 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5050 : static_assert(0 < 2, "There is no slot for us");
5051 :
5052 : static bool
5053 0 : getRequestType(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
5054 : {
5055 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
5056 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.getRequestType");
5057 : }
5058 : imgIRequest* arg0;
5059 0 : RefPtr<imgIRequest> arg0_holder;
5060 0 : if (args[0].isObject()) {
5061 0 : JS::Rooted<JSObject*> source(cx, &args[0].toObject());
5062 0 : if (NS_FAILED(UnwrapArg<imgIRequest>(cx, source, getter_AddRefs(arg0_holder)))) {
5063 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of HTMLInputElement.getRequestType", "imgIRequest");
5064 0 : return false;
5065 : }
5066 0 : MOZ_ASSERT(arg0_holder);
5067 0 : arg0 = arg0_holder;
5068 : } else {
5069 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of HTMLInputElement.getRequestType");
5070 0 : return false;
5071 : }
5072 0 : binding_detail::FastErrorResult rv;
5073 0 : int32_t result(self->GetRequestType(NonNullHelper(arg0), rv));
5074 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5075 0 : return false;
5076 : }
5077 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5078 0 : args.rval().setInt32(int32_t(result));
5079 0 : return true;
5080 : }
5081 :
5082 : static const JSJitInfo getRequestType_methodinfo = {
5083 : { (JSJitGetterOp)getRequestType },
5084 : { prototypes::id::HTMLInputElement },
5085 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
5086 : JSJitInfo::Method,
5087 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5088 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
5089 : false, /* isInfallible. False in setters. */
5090 : false, /* isMovable. Not relevant for setters. */
5091 : false, /* isEliminatable. Not relevant for setters. */
5092 : false, /* isAlwaysInSlot. Only relevant for getters. */
5093 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5094 : false, /* isTypedMethod. Only relevant for methods. */
5095 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5096 : };
5097 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5098 : static_assert(0 < 2, "There is no slot for us");
5099 :
5100 : static bool
5101 0 : get_currentURI(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
5102 : {
5103 0 : binding_detail::FastErrorResult rv;
5104 0 : auto result(StrongOrRawPtr<nsIURI>(self->GetCurrentURI(rv)));
5105 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5106 0 : return false;
5107 : }
5108 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5109 0 : if (!result) {
5110 0 : args.rval().setNull();
5111 0 : return true;
5112 : }
5113 0 : if (!WrapObject(cx, result, &NS_GET_IID(nsIURI), args.rval())) {
5114 0 : return false;
5115 : }
5116 0 : return true;
5117 : }
5118 :
5119 : static const JSJitInfo currentURI_getterinfo = {
5120 : { (JSJitGetterOp)get_currentURI },
5121 : { prototypes::id::HTMLInputElement },
5122 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
5123 : JSJitInfo::Getter,
5124 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5125 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
5126 : false, /* isInfallible. False in setters. */
5127 : false, /* isMovable. Not relevant for setters. */
5128 : false, /* isEliminatable. Not relevant for setters. */
5129 : false, /* isAlwaysInSlot. Only relevant for getters. */
5130 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5131 : false, /* isTypedMethod. Only relevant for methods. */
5132 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5133 : };
5134 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5135 : static_assert(0 < 2, "There is no slot for us");
5136 :
5137 : static bool
5138 0 : forceReload(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
5139 : {
5140 0 : Optional<bool> arg0;
5141 0 : if (args.hasDefined(0)) {
5142 0 : arg0.Construct();
5143 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0.Value())) {
5144 0 : return false;
5145 : }
5146 : }
5147 0 : binding_detail::FastErrorResult rv;
5148 0 : self->ForceReload(Constify(arg0), rv);
5149 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5150 0 : return false;
5151 : }
5152 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5153 0 : args.rval().setUndefined();
5154 0 : return true;
5155 : }
5156 :
5157 : static const JSJitInfo forceReload_methodinfo = {
5158 : { (JSJitGetterOp)forceReload },
5159 : { prototypes::id::HTMLInputElement },
5160 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
5161 : JSJitInfo::Method,
5162 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5163 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
5164 : false, /* isInfallible. False in setters. */
5165 : false, /* isMovable. Not relevant for setters. */
5166 : false, /* isEliminatable. Not relevant for setters. */
5167 : false, /* isAlwaysInSlot. Only relevant for getters. */
5168 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5169 : false, /* isTypedMethod. Only relevant for methods. */
5170 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5171 : };
5172 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5173 : static_assert(0 < 2, "There is no slot for us");
5174 :
5175 : static bool
5176 0 : forceImageState(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
5177 : {
5178 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
5179 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.forceImageState");
5180 : }
5181 : bool arg0;
5182 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
5183 0 : return false;
5184 : }
5185 : uint64_t arg1;
5186 0 : if (!ValueToPrimitive<uint64_t, eDefault>(cx, args[1], &arg1)) {
5187 0 : return false;
5188 : }
5189 0 : self->ForceImageState(arg0, arg1);
5190 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5191 0 : args.rval().setUndefined();
5192 0 : return true;
5193 : }
5194 :
5195 : static const JSJitInfo forceImageState_methodinfo = {
5196 : { (JSJitGetterOp)forceImageState },
5197 : { prototypes::id::HTMLInputElement },
5198 : { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
5199 : JSJitInfo::Method,
5200 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5201 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
5202 : false, /* isInfallible. False in setters. */
5203 : false, /* isMovable. Not relevant for setters. */
5204 : false, /* isEliminatable. Not relevant for setters. */
5205 : false, /* isAlwaysInSlot. Only relevant for getters. */
5206 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5207 : false, /* isTypedMethod. Only relevant for methods. */
5208 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5209 : };
5210 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5211 : static_assert(0 < 2, "There is no slot for us");
5212 :
5213 : static bool
5214 0 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
5215 : {
5216 0 : mozilla::dom::HTMLInputElement* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::HTMLInputElement>(obj);
5217 : // We don't want to preserve if we don't have a wrapper, and we
5218 : // obviously can't preserve if we're not initialized.
5219 0 : if (self && self->GetWrapperPreserveColor()) {
5220 0 : PreserveWrapper(self);
5221 : }
5222 0 : return true;
5223 : }
5224 :
5225 : static void
5226 0 : _finalize(js::FreeOp* fop, JSObject* obj)
5227 : {
5228 0 : mozilla::dom::HTMLInputElement* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::HTMLInputElement>(obj);
5229 0 : if (self) {
5230 0 : ClearWrapper(self, self, obj);
5231 0 : AddForDeferredFinalization<mozilla::dom::HTMLInputElement>(self);
5232 : }
5233 0 : }
5234 :
5235 : static void
5236 0 : _objectMoved(JSObject* obj, const JSObject* old)
5237 : {
5238 0 : mozilla::dom::HTMLInputElement* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::HTMLInputElement>(obj);
5239 0 : if (self) {
5240 0 : UpdateWrapper(self, self, obj, old);
5241 : }
5242 0 : }
5243 :
5244 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
5245 : #if defined(__clang__)
5246 : #pragma clang diagnostic push
5247 : #pragma clang diagnostic ignored "-Wmissing-braces"
5248 : #endif
5249 : static const JSFunctionSpec sMethods_specs[] = {
5250 : JS_FNSPEC("stepUp", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&stepUp_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
5251 : JS_FNSPEC("stepDown", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&stepDown_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
5252 : JS_FNSPEC("checkValidity", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&checkValidity_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
5253 : JS_FNSPEC("reportValidity", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&reportValidity_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
5254 : JS_FNSPEC("setCustomValidity", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setCustomValidity_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
5255 : JS_FNSPEC("select", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&select_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
5256 : JS_FNSPEC("setRangeText", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setRangeText_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
5257 : JS_FNSPEC("setSelectionRange", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setSelectionRange_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
5258 : JS_FNSPEC("mozIsTextField", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&mozIsTextField_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
5259 : JS_FS_END,
5260 : JS_FNSPEC("setUserInput", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setUserInput_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
5261 : JS_FS_END,
5262 : JS_FNSPEC("getFilesAndDirectories", GenericPromiseReturningBindingMethod, reinterpret_cast<const JSJitInfo*>(&getFilesAndDirectories_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
5263 : JS_FNSPEC("getFiles", GenericPromiseReturningBindingMethod, reinterpret_cast<const JSJitInfo*>(&getFiles_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
5264 : JS_FNSPEC("chooseDirectory", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&chooseDirectory_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
5265 : JS_FS_END,
5266 : JS_FNSPEC("openDateTimePicker", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&openDateTimePicker_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
5267 : JS_FNSPEC("updateDateTimePicker", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&updateDateTimePicker_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
5268 : JS_FNSPEC("closeDateTimePicker", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&closeDateTimePicker_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
5269 : JS_FNSPEC("setFocusState", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setFocusState_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
5270 : JS_FNSPEC("updateValidityState", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&updateValidityState_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
5271 : JS_FNSPEC("getStep", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getStep_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
5272 : JS_FNSPEC("getStepBase", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getStepBase_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
5273 : JS_FS_END
5274 : };
5275 : #if defined(__clang__)
5276 : #pragma clang diagnostic pop
5277 : #endif
5278 :
5279 : static PrefableDisablers sMethods_disablers10 = {
5280 : true, false, 0, &IsChromeOrXBL
5281 : };
5282 :
5283 : static PrefableDisablers sMethods_disablers12 = {
5284 : true, false, 0, nullptr
5285 : };
5286 :
5287 : static PrefableDisablers sMethods_disablers16 = {
5288 : true, false, 0, &IsChromeOrXBL
5289 : };
5290 :
5291 : // Can't be const because the pref-enabled boolean needs to be writable
5292 : static Prefable<const JSFunctionSpec> sMethods[] = {
5293 : { nullptr, &sMethods_specs[0] },
5294 : { &sMethods_disablers10, &sMethods_specs[10] },
5295 : { &sMethods_disablers12, &sMethods_specs[12] },
5296 : { &sMethods_disablers16, &sMethods_specs[16] },
5297 : { nullptr, nullptr }
5298 : };
5299 :
5300 : static_assert(4 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
5301 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
5302 : static_assert(9 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
5303 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
5304 :
5305 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
5306 : #if defined(__clang__)
5307 : #pragma clang diagnostic push
5308 : #pragma clang diagnostic ignored "-Wmissing-braces"
5309 : #endif
5310 : static const JSFunctionSpec sChromeMethods_specs[] = {
5311 : JS_FNSPEC("mozGetFileNameArray", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&mozGetFileNameArray_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
5312 : JS_FNSPEC("mozSetFileNameArray", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&mozSetFileNameArray_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
5313 : JS_FNSPEC("mozSetFileArray", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&mozSetFileArray_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
5314 : JS_FNSPEC("mozSetDirectory", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&mozSetDirectory_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
5315 : JS_FNSPEC("mozSetDndFilesAndDirectories", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&mozSetDndFilesAndDirectories_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
5316 : JS_FNSPEC("getAutocompleteInfo", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getAutocompleteInfo_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
5317 : JS_FS_END,
5318 : JS_FNSPEC("getDateTimeInputBoxValue", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getDateTimeInputBoxValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
5319 : JS_FNSPEC("updateDateTimeInputBox", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&updateDateTimeInputBox_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
5320 : JS_FNSPEC("setDateTimePickerState", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setDateTimePickerState_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
5321 : JS_FS_END,
5322 : JS_FNSPEC("addObserver", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&addObserver_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
5323 : JS_FNSPEC("removeObserver", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&removeObserver_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
5324 : JS_FNSPEC("getRequest", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getRequest_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
5325 : JS_FNSPEC("getRequestType", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getRequestType_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
5326 : JS_FNSPEC("forceReload", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&forceReload_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
5327 : JS_FNSPEC("forceImageState", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&forceImageState_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
5328 : JS_FS_END
5329 : };
5330 : #if defined(__clang__)
5331 : #pragma clang diagnostic pop
5332 : #endif
5333 :
5334 : static PrefableDisablers sChromeMethods_disablers7 = {
5335 : true, false, 0, nullptr
5336 : };
5337 :
5338 : // Can't be const because the pref-enabled boolean needs to be writable
5339 : static Prefable<const JSFunctionSpec> sChromeMethods[] = {
5340 : { nullptr, &sChromeMethods_specs[0] },
5341 : { &sChromeMethods_disablers7, &sChromeMethods_specs[7] },
5342 : { nullptr, &sChromeMethods_specs[11] },
5343 : { nullptr, nullptr }
5344 : };
5345 :
5346 : static_assert(3 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
5347 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
5348 : static_assert(6 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
5349 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
5350 :
5351 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
5352 : #if defined(__clang__)
5353 : #pragma clang diagnostic push
5354 : #pragma clang diagnostic ignored "-Wmissing-braces"
5355 : #endif
5356 : static const JSPropertySpec sAttributes_specs[] = {
5357 : { "accept", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &accept_getterinfo, GenericBindingSetter, &accept_setterinfo },
5358 : { "alt", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &alt_getterinfo, GenericBindingSetter, &alt_setterinfo },
5359 : { "autocomplete", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &autocomplete_getterinfo, GenericBindingSetter, &autocomplete_setterinfo },
5360 : { "autofocus", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &autofocus_getterinfo, GenericBindingSetter, &autofocus_setterinfo },
5361 : { "defaultChecked", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &defaultChecked_getterinfo, GenericBindingSetter, &defaultChecked_setterinfo },
5362 : { "checked", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &checked_getterinfo, GenericBindingSetter, &checked_setterinfo },
5363 : { "disabled", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &disabled_getterinfo, GenericBindingSetter, &disabled_setterinfo },
5364 : { "form", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &form_getterinfo, nullptr, nullptr },
5365 : { "files", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &files_getterinfo, nullptr, nullptr },
5366 : { "formAction", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &formAction_getterinfo, GenericBindingSetter, &formAction_setterinfo },
5367 : { "formEnctype", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &formEnctype_getterinfo, GenericBindingSetter, &formEnctype_setterinfo },
5368 : { "formMethod", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &formMethod_getterinfo, GenericBindingSetter, &formMethod_setterinfo },
5369 : { "formNoValidate", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &formNoValidate_getterinfo, GenericBindingSetter, &formNoValidate_setterinfo },
5370 : { "formTarget", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &formTarget_getterinfo, GenericBindingSetter, &formTarget_setterinfo },
5371 : { "height", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &height_getterinfo, GenericBindingSetter, &height_setterinfo },
5372 : { "indeterminate", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &indeterminate_getterinfo, GenericBindingSetter, &indeterminate_setterinfo },
5373 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
5374 : { "inputMode", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &inputMode_getterinfo, GenericBindingSetter, &inputMode_setterinfo },
5375 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
5376 : { "list", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &list_getterinfo, nullptr, nullptr },
5377 : { "max", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &max_getterinfo, GenericBindingSetter, &max_setterinfo },
5378 : { "maxLength", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &maxLength_getterinfo, GenericBindingSetter, &maxLength_setterinfo },
5379 : { "min", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &min_getterinfo, GenericBindingSetter, &min_setterinfo },
5380 : { "minLength", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &minLength_getterinfo, GenericBindingSetter, &minLength_setterinfo },
5381 : { "multiple", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &multiple_getterinfo, GenericBindingSetter, &multiple_setterinfo },
5382 : { "name", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &name_getterinfo, GenericBindingSetter, &name_setterinfo },
5383 : { "pattern", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &pattern_getterinfo, GenericBindingSetter, &pattern_setterinfo },
5384 : { "placeholder", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &placeholder_getterinfo, GenericBindingSetter, &placeholder_setterinfo },
5385 : { "readOnly", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &readOnly_getterinfo, GenericBindingSetter, &readOnly_setterinfo },
5386 : { "required", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &required_getterinfo, GenericBindingSetter, &required_setterinfo },
5387 : { "size", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &size_getterinfo, GenericBindingSetter, &size_setterinfo },
5388 : { "src", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &src_getterinfo, GenericBindingSetter, &src_setterinfo },
5389 : { "step", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &step_getterinfo, GenericBindingSetter, &step_setterinfo },
5390 : { "type", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &type_getterinfo, GenericBindingSetter, &type_setterinfo },
5391 : { "defaultValue", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &defaultValue_getterinfo, GenericBindingSetter, &defaultValue_setterinfo },
5392 : { "value", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &value_getterinfo, GenericBindingSetter, &value_setterinfo },
5393 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
5394 : { "valueAsDate", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &valueAsDate_getterinfo, GenericBindingSetter, &valueAsDate_setterinfo },
5395 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
5396 : { "valueAsNumber", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &valueAsNumber_getterinfo, GenericBindingSetter, &valueAsNumber_setterinfo },
5397 : { "width", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &width_getterinfo, GenericBindingSetter, &width_setterinfo },
5398 : { "willValidate", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &willValidate_getterinfo, nullptr, nullptr },
5399 : { "validity", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &validity_getterinfo, nullptr, nullptr },
5400 : { "validationMessage", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &validationMessage_getterinfo, nullptr, nullptr },
5401 : { "labels", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &labels_getterinfo, nullptr, nullptr },
5402 : { "selectionStart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &selectionStart_getterinfo, GenericBindingSetter, &selectionStart_setterinfo },
5403 : { "selectionEnd", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &selectionEnd_getterinfo, GenericBindingSetter, &selectionEnd_setterinfo },
5404 : { "selectionDirection", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &selectionDirection_getterinfo, GenericBindingSetter, &selectionDirection_setterinfo },
5405 : { "align", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &align_getterinfo, GenericBindingSetter, &align_setterinfo },
5406 : { "useMap", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &useMap_getterinfo, GenericBindingSetter, &useMap_setterinfo },
5407 : { "textLength", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &textLength_getterinfo, nullptr, nullptr },
5408 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
5409 : { "allowdirs", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &allowdirs_getterinfo, GenericBindingSetter, &allowdirs_setterinfo },
5410 : { "isFilesAndDirectoriesSupported", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &isFilesAndDirectoriesSupported_getterinfo, nullptr, nullptr },
5411 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
5412 : { "webkitEntries", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &webkitEntries_getterinfo, nullptr, nullptr },
5413 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
5414 : { "webkitdirectory", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &webkitdirectory_getterinfo, GenericBindingSetter, &webkitdirectory_setterinfo },
5415 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
5416 : };
5417 : #if defined(__clang__)
5418 : #pragma clang diagnostic pop
5419 : #endif
5420 :
5421 : static PrefableDisablers sAttributes_disablers17 = {
5422 : true, false, 0, nullptr
5423 : };
5424 :
5425 : static PrefableDisablers sAttributes_disablers37 = {
5426 : true, false, 0, &HTMLInputElement::ValueAsDateEnabled
5427 : };
5428 :
5429 : static PrefableDisablers sAttributes_disablers52 = {
5430 : true, false, 0, nullptr
5431 : };
5432 :
5433 : static PrefableDisablers sAttributes_disablers55 = {
5434 : true, false, 0, nullptr
5435 : };
5436 :
5437 : static PrefableDisablers sAttributes_disablers57 = {
5438 : true, false, 0, nullptr
5439 : };
5440 :
5441 : // Can't be const because the pref-enabled boolean needs to be writable
5442 : static Prefable<const JSPropertySpec> sAttributes[] = {
5443 : { nullptr, &sAttributes_specs[0] },
5444 : { &sAttributes_disablers17, &sAttributes_specs[17] },
5445 : { nullptr, &sAttributes_specs[19] },
5446 : { &sAttributes_disablers37, &sAttributes_specs[37] },
5447 : { nullptr, &sAttributes_specs[39] },
5448 : { &sAttributes_disablers52, &sAttributes_specs[52] },
5449 : { &sAttributes_disablers55, &sAttributes_specs[55] },
5450 : { &sAttributes_disablers57, &sAttributes_specs[57] },
5451 : { nullptr, nullptr }
5452 : };
5453 :
5454 : static_assert(8 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
5455 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
5456 : static_assert(17 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
5457 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
5458 :
5459 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
5460 : #if defined(__clang__)
5461 : #pragma clang diagnostic push
5462 : #pragma clang diagnostic ignored "-Wmissing-braces"
5463 : #endif
5464 : static const JSPropertySpec sChromeAttributes_specs[] = {
5465 : { "controllers", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &controllers_getterinfo, nullptr, nullptr },
5466 : { "ownerNumberControl", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ownerNumberControl_getterinfo, nullptr, nullptr },
5467 : { "editor", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &editor_getterinfo, nullptr, nullptr },
5468 : { "previewValue", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &previewValue_getterinfo, GenericBindingSetter, &previewValue_setterinfo },
5469 : { "loadingEnabled", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &loadingEnabled_getterinfo, GenericBindingSetter, &loadingEnabled_setterinfo },
5470 : { "imageBlockingStatus", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &imageBlockingStatus_getterinfo, nullptr, nullptr },
5471 : { "currentURI", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, ¤tURI_getterinfo, nullptr, nullptr },
5472 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
5473 : };
5474 : #if defined(__clang__)
5475 : #pragma clang diagnostic pop
5476 : #endif
5477 :
5478 :
5479 : // Can't be const because the pref-enabled boolean needs to be writable
5480 : static Prefable<const JSPropertySpec> sChromeAttributes[] = {
5481 : { nullptr, &sChromeAttributes_specs[0] },
5482 : { nullptr, nullptr }
5483 : };
5484 :
5485 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
5486 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
5487 : static_assert(7 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
5488 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
5489 :
5490 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
5491 : #if defined(__clang__)
5492 : #pragma clang diagnostic push
5493 : #pragma clang diagnostic ignored "-Wmissing-braces"
5494 : #endif
5495 : static const ConstantSpec sChromeConstants_specs[] = {
5496 : { "UNKNOWN_REQUEST", JS::Int32Value(-1) },
5497 : { "CURRENT_REQUEST", JS::Int32Value(0) },
5498 : { "PENDING_REQUEST", JS::Int32Value(1) },
5499 : { 0, JS::UndefinedValue() }
5500 : };
5501 : #if defined(__clang__)
5502 : #pragma clang diagnostic pop
5503 : #endif
5504 :
5505 :
5506 : // Can't be const because the pref-enabled boolean needs to be writable
5507 : static Prefable<const ConstantSpec> sChromeConstants[] = {
5508 : { nullptr, &sChromeConstants_specs[0] },
5509 : { nullptr, nullptr }
5510 : };
5511 :
5512 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
5513 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
5514 : static_assert(3 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
5515 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
5516 :
5517 :
5518 : static uint16_t sNativeProperties_sortedPropertyIndices[71];
5519 : static PropertyInfo sNativeProperties_propertyInfos[71];
5520 :
5521 : static const NativePropertiesN<2> sNativeProperties = {
5522 : false, 0,
5523 : false, 0,
5524 : true, 0 /* sMethods */,
5525 : true, 1 /* sAttributes */,
5526 : false, 0,
5527 : false, 0,
5528 : false, 0,
5529 : -1,
5530 : 71,
5531 : sNativeProperties_sortedPropertyIndices,
5532 : {
5533 : { sMethods, &sNativeProperties_propertyInfos[0] },
5534 : { sAttributes, &sNativeProperties_propertyInfos[20] }
5535 : }
5536 : };
5537 : static_assert(71 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
5538 : "We have a property info count that is oversized");
5539 :
5540 : static uint16_t sChromeOnlyNativeProperties_sortedPropertyIndices[25];
5541 : static PropertyInfo sChromeOnlyNativeProperties_propertyInfos[25];
5542 :
5543 : static const NativePropertiesN<3> sChromeOnlyNativeProperties = {
5544 : false, 0,
5545 : false, 0,
5546 : true, 0 /* sChromeMethods */,
5547 : true, 1 /* sChromeAttributes */,
5548 : false, 0,
5549 : false, 0,
5550 : true, 2 /* sChromeConstants */,
5551 : -1,
5552 : 25,
5553 : sChromeOnlyNativeProperties_sortedPropertyIndices,
5554 : {
5555 : { sChromeMethods, &sChromeOnlyNativeProperties_propertyInfos[0] },
5556 : { sChromeAttributes, &sChromeOnlyNativeProperties_propertyInfos[15] },
5557 : { sChromeConstants, &sChromeOnlyNativeProperties_propertyInfos[22] }
5558 : }
5559 : };
5560 : static_assert(25 < 1ull << CHAR_BIT * sizeof(sChromeOnlyNativeProperties.propertyInfoCount),
5561 : "We have a property info count that is oversized");
5562 :
5563 : static bool
5564 0 : _constructor(JSContext* cx, unsigned argc, JS::Value* vp)
5565 : {
5566 0 : JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
5567 0 : JS::Rooted<JSObject*> obj(cx, &args.callee());
5568 0 : if (!args.isConstructing()) {
5569 : // XXXbz wish I could get the name from the callee instead of
5570 : // Adding more relocations
5571 0 : return ThrowConstructorWithoutNew(cx, "HTMLInputElement");
5572 : }
5573 :
5574 0 : GlobalObject global(cx, obj);
5575 0 : if (global.Failed()) {
5576 0 : return false;
5577 : }
5578 :
5579 : // The newTarget might be a cross-compartment wrapper. Get the underlying object
5580 : // so we can do the spec's object-identity checks.
5581 0 : JS::Rooted<JSObject*> newTarget(cx, js::CheckedUnwrap(&args.newTarget().toObject()));
5582 0 : if (!newTarget) {
5583 0 : return ThrowErrorMessage(cx, MSG_ILLEGAL_CONSTRUCTOR);
5584 : }
5585 :
5586 : // Step 2 of https://html.spec.whatwg.org/multipage/dom.html#htmlconstructor.
5587 : // Enter the compartment of our underlying newTarget object, so we end
5588 : // up comparing to the constructor object for our interface from that global.
5589 : {
5590 0 : JSAutoCompartment ac(cx, newTarget);
5591 0 : JS::Handle<JSObject*> constructor(GetConstructorObjectHandle(cx));
5592 0 : if (!constructor) {
5593 0 : return false;
5594 : }
5595 0 : if (newTarget == constructor) {
5596 0 : return ThrowErrorMessage(cx, MSG_ILLEGAL_CONSTRUCTOR);
5597 : }
5598 : }
5599 :
5600 0 : JS::Rooted<JSObject*> desiredProto(cx);
5601 0 : if (!GetDesiredProto(cx, args, &desiredProto)) {
5602 0 : return false;
5603 : }
5604 0 : if (!desiredProto) {
5605 : // Step 7 of https://html.spec.whatwg.org/multipage/dom.html#htmlconstructor.
5606 : // This fallback behavior is designed to match analogous behavior for the
5607 : // JavaScript built-ins. So we enter the compartment of our underlying
5608 : // newTarget object and fall back to the prototype object from that global.
5609 : // XXX The spec says to use GetFunctionRealm(), which is not actually
5610 : // the same thing as what we have here (e.g. in the case of scripted callable proxies
5611 : // whose target is not same-compartment with the proxy, or bound functions, etc).
5612 : // https://bugzilla.mozilla.org/show_bug.cgi?id=1317658
5613 : {
5614 0 : JSAutoCompartment ac(cx, newTarget);
5615 0 : desiredProto = GetProtoObjectHandle(cx);
5616 0 : if (!desiredProto) {
5617 0 : return false;
5618 : }
5619 : }
5620 :
5621 : // desiredProto is in the compartment of the underlying newTarget object.
5622 : // Wrap it into the context compartment.
5623 0 : if (!JS_WrapObject(cx, &desiredProto)) {
5624 0 : return false;
5625 : }
5626 : }
5627 :
5628 0 : bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj);
5629 0 : Maybe<JSAutoCompartment> ac;
5630 0 : if (objIsXray) {
5631 0 : obj = js::CheckedUnwrap(obj);
5632 0 : if (!obj) {
5633 0 : return false;
5634 : }
5635 0 : ac.emplace(cx, obj);
5636 0 : if (!JS_WrapObject(cx, &desiredProto)) {
5637 0 : return false;
5638 : }
5639 : }
5640 0 : binding_detail::FastErrorResult rv;
5641 0 : auto result(StrongOrRawPtr<mozilla::dom::HTMLInputElement>(CreateHTMLElement(global, args, rv)));
5642 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5643 0 : return false;
5644 : }
5645 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5646 : static_assert(!IsPointer<decltype(result)>::value,
5647 : "NewObject implies that we need to keep the object alive with a strong reference.");
5648 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) {
5649 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
5650 0 : return false;
5651 : }
5652 0 : return true;
5653 : }
5654 :
5655 : static const js::ClassOps sInterfaceObjectClassOps = {
5656 : nullptr, /* addProperty */
5657 : nullptr, /* delProperty */
5658 : nullptr, /* getProperty */
5659 : nullptr, /* setProperty */
5660 : nullptr, /* enumerate */
5661 : nullptr, /* newEnumerate */
5662 : nullptr, /* resolve */
5663 : nullptr, /* mayResolve */
5664 : nullptr, /* finalize */
5665 : _constructor, /* call */
5666 : nullptr, /* hasInstance */
5667 : _constructor, /* construct */
5668 : nullptr, /* trace */
5669 : };
5670 :
5671 : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
5672 : {
5673 : "Function",
5674 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
5675 : &sInterfaceObjectClassOps,
5676 : JS_NULL_CLASS_SPEC,
5677 : JS_NULL_CLASS_EXT,
5678 : &sInterfaceObjectClassObjectOps
5679 : },
5680 : eInterface,
5681 : true,
5682 : prototypes::id::HTMLInputElement,
5683 : PrototypeTraits<prototypes::id::HTMLInputElement>::Depth,
5684 : sNativePropertyHooks,
5685 : "function HTMLInputElement() {\n [native code]\n}",
5686 : HTMLElementBinding::GetConstructorObject
5687 : };
5688 :
5689 : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
5690 : {
5691 : "HTMLInputElementPrototype",
5692 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
5693 : JS_NULL_CLASS_OPS,
5694 : JS_NULL_CLASS_SPEC,
5695 : JS_NULL_CLASS_EXT,
5696 : JS_NULL_OBJECT_OPS
5697 : },
5698 : eInterfacePrototype,
5699 : false,
5700 : prototypes::id::HTMLInputElement,
5701 : PrototypeTraits<prototypes::id::HTMLInputElement>::Depth,
5702 : sNativePropertyHooks,
5703 : "[object HTMLInputElementPrototype]",
5704 : HTMLElementBinding::GetProtoObject
5705 : };
5706 :
5707 : JSObject*
5708 0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
5709 : {
5710 0 : return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
5711 : }
5712 :
5713 : static const js::ClassOps sClassOps = {
5714 : _addProperty, /* addProperty */
5715 : nullptr, /* delProperty */
5716 : nullptr, /* getProperty */
5717 : nullptr, /* setProperty */
5718 : nullptr, /* enumerate */
5719 : nullptr, /* newEnumerate */
5720 : nullptr, /* resolve */
5721 : nullptr, /* mayResolve */
5722 : _finalize, /* finalize */
5723 : nullptr, /* call */
5724 : nullptr, /* hasInstance */
5725 : nullptr, /* construct */
5726 : nullptr, /* trace */
5727 : };
5728 :
5729 : static const js::ClassExtension sClassExtension = {
5730 : nullptr, /* weakmapKeyDelegateOp */
5731 : _objectMoved /* objectMovedOp */
5732 : };
5733 :
5734 : static const DOMJSClass sClass = {
5735 : { "HTMLInputElement",
5736 : JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(2),
5737 : &sClassOps,
5738 : JS_NULL_CLASS_SPEC,
5739 : &sClassExtension,
5740 : JS_NULL_OBJECT_OPS
5741 : },
5742 : { prototypes::id::EventTarget, prototypes::id::Node, prototypes::id::Element, prototypes::id::HTMLElement, prototypes::id::HTMLInputElement, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
5743 : IsBaseOf<nsISupports, mozilla::dom::HTMLInputElement >::value,
5744 : sNativePropertyHooks,
5745 : FindAssociatedGlobalForNative<mozilla::dom::HTMLInputElement>::Get,
5746 : GetProtoObjectHandle,
5747 : GetCCParticipant<mozilla::dom::HTMLInputElement>::Get()
5748 : };
5749 : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
5750 : "Must have the right minimal number of reserved slots.");
5751 : static_assert(2 >= 2,
5752 : "Must have enough reserved slots.");
5753 :
5754 : const JSClass*
5755 0 : GetJSClass()
5756 : {
5757 0 : return sClass.ToJSClass();
5758 : }
5759 :
5760 : bool
5761 2 : Wrap(JSContext* aCx, mozilla::dom::HTMLInputElement* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
5762 : {
5763 : MOZ_ASSERT(static_cast<mozilla::dom::HTMLInputElement*>(aObject) ==
5764 : reinterpret_cast<mozilla::dom::HTMLInputElement*>(aObject),
5765 : "Multiple inheritance for mozilla::dom::HTMLInputElement is broken.");
5766 : MOZ_ASSERT(static_cast<nsGenericHTMLElement*>(aObject) ==
5767 : reinterpret_cast<nsGenericHTMLElement*>(aObject),
5768 : "Multiple inheritance for nsGenericHTMLElement is broken.");
5769 : MOZ_ASSERT(static_cast<mozilla::dom::Element*>(aObject) ==
5770 : reinterpret_cast<mozilla::dom::Element*>(aObject),
5771 : "Multiple inheritance for mozilla::dom::Element is broken.");
5772 : MOZ_ASSERT(static_cast<nsINode*>(aObject) ==
5773 : reinterpret_cast<nsINode*>(aObject),
5774 : "Multiple inheritance for nsINode is broken.");
5775 : MOZ_ASSERT(static_cast<mozilla::dom::EventTarget*>(aObject) ==
5776 : reinterpret_cast<mozilla::dom::EventTarget*>(aObject),
5777 : "Multiple inheritance for mozilla::dom::EventTarget is broken.");
5778 2 : MOZ_ASSERT(ToSupportsIsCorrect(aObject));
5779 2 : MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
5780 2 : MOZ_ASSERT(!aCache->GetWrapper(),
5781 : "You should probably not be using Wrap() directly; use "
5782 : "GetOrCreateDOMReflector instead");
5783 :
5784 2 : MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
5785 : "nsISupports must be on our primary inheritance chain");
5786 :
5787 4 : JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
5788 2 : if (!global) {
5789 0 : return false;
5790 : }
5791 2 : MOZ_ASSERT(JS_IsGlobalObject(global));
5792 2 : MOZ_ASSERT(JS::ObjectIsNotGray(global));
5793 :
5794 : // That might have ended up wrapping us already, due to the wonders
5795 : // of XBL. Check for that, and bail out as needed.
5796 2 : aReflector.set(aCache->GetWrapper());
5797 2 : if (aReflector) {
5798 : #ifdef DEBUG
5799 0 : binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
5800 : #endif // DEBUG
5801 0 : return true;
5802 : }
5803 :
5804 4 : JSAutoCompartment ac(aCx, global);
5805 2 : JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
5806 2 : if (!canonicalProto) {
5807 0 : return false;
5808 : }
5809 4 : JS::Rooted<JSObject*> proto(aCx);
5810 2 : if (aGivenProto) {
5811 0 : proto = aGivenProto;
5812 : // Unfortunately, while aGivenProto was in the compartment of aCx
5813 : // coming in, we changed compartments to that of "parent" so may need
5814 : // to wrap the proto here.
5815 0 : if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
5816 0 : if (!JS_WrapObject(aCx, &proto)) {
5817 0 : return false;
5818 : }
5819 : }
5820 : } else {
5821 2 : proto = canonicalProto;
5822 : }
5823 :
5824 4 : BindingJSObjectCreator<mozilla::dom::HTMLInputElement> creator(aCx);
5825 2 : creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
5826 2 : if (!aReflector) {
5827 0 : return false;
5828 : }
5829 :
5830 2 : aCache->SetWrapper(aReflector);
5831 2 : creator.InitializationSucceeded();
5832 :
5833 2 : MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
5834 : aCache->GetWrapperPreserveColor() == aReflector);
5835 : // If proto != canonicalProto, we have to preserve our wrapper;
5836 : // otherwise we won't be able to properly recreate it later, since
5837 : // we won't know what proto to use. Note that we don't check
5838 : // aGivenProto here, since it's entirely possible (and even
5839 : // somewhat common) to have a non-null aGivenProto which is the
5840 : // same as canonicalProto.
5841 2 : if (proto != canonicalProto) {
5842 0 : PreserveWrapper(aObject);
5843 : }
5844 :
5845 2 : return true;
5846 : }
5847 :
5848 : // This may allocate too many slots, because we only really need
5849 : // slots for our non-interface-typed members that we cache. But
5850 : // allocating slots only for those would make the slot index
5851 : // computations much more complicated, so let's do this the simple
5852 : // way for now.
5853 : DEFINE_XRAY_EXPANDO_CLASS(static, sXrayExpandoObjectClass, 1);
5854 :
5855 : const NativePropertyHooks sNativePropertyHooks[] = { {
5856 : nullptr,
5857 : nullptr,
5858 : nullptr,
5859 : { sNativeProperties.Upcast(), sChromeOnlyNativeProperties.Upcast() },
5860 : prototypes::id::HTMLInputElement,
5861 : constructors::id::HTMLInputElement,
5862 : HTMLElementBinding::sNativePropertyHooks,
5863 : &sXrayExpandoObjectClass
5864 : } };
5865 :
5866 : void
5867 0 : ClearCachedWebkitEntriesValue(mozilla::dom::HTMLInputElement* aObject)
5868 : {
5869 : JSObject* obj;
5870 0 : obj = aObject->GetWrapper();
5871 0 : if (!obj) {
5872 0 : return;
5873 : }
5874 0 : js::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 0), JS::UndefinedValue());
5875 0 : xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 0));
5876 : }
5877 :
5878 : void
5879 1 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
5880 : {
5881 1 : JS::Handle<JSObject*> parentProto(HTMLElementBinding::GetProtoObjectHandle(aCx));
5882 1 : if (!parentProto) {
5883 0 : return;
5884 : }
5885 :
5886 1 : JS::Handle<JSObject*> constructorProto(HTMLElementBinding::GetConstructorObjectHandle(aCx));
5887 1 : if (!constructorProto) {
5888 0 : return;
5889 : }
5890 :
5891 : static bool sIdsInited = false;
5892 1 : if (!sIdsInited && NS_IsMainThread()) {
5893 1 : if (!InitIds(aCx, sNativeProperties.Upcast())) {
5894 0 : return;
5895 : }
5896 1 : if (!InitIds(aCx, sChromeOnlyNativeProperties.Upcast())) {
5897 0 : return;
5898 : }
5899 1 : sIdsInited = true;
5900 : }
5901 :
5902 : static bool sPrefCachesInited = false;
5903 1 : if (!sPrefCachesInited && NS_IsMainThread()) {
5904 1 : sPrefCachesInited = true;
5905 1 : Preferences::AddBoolVarCache(&sMethods[2].disablers->enabled, "dom.input.dirpicker");
5906 1 : Preferences::AddBoolVarCache(&sMethods[3].disablers->enabled, "dom.forms.datetime");
5907 1 : Preferences::AddBoolVarCache(&sChromeMethods[1].disablers->enabled, "dom.forms.datetime");
5908 1 : Preferences::AddBoolVarCache(&sAttributes[1].disablers->enabled, "dom.forms.inputmode");
5909 1 : Preferences::AddBoolVarCache(&sAttributes[5].disablers->enabled, "dom.input.dirpicker");
5910 1 : Preferences::AddBoolVarCache(&sAttributes[6].disablers->enabled, "dom.webkitBlink.filesystem.enabled");
5911 1 : Preferences::AddBoolVarCache(&sAttributes[7].disablers->enabled, "dom.webkitBlink.dirPicker.enabled");
5912 : }
5913 :
5914 1 : JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::HTMLInputElement);
5915 1 : JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::HTMLInputElement);
5916 2 : dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
5917 : &sPrototypeClass.mBase, protoCache,
5918 : constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
5919 : interfaceCache,
5920 : sNativeProperties.Upcast(),
5921 1 : nsContentUtils::ThreadsafeIsSystemCaller(aCx) ? sChromeOnlyNativeProperties.Upcast() : nullptr,
5922 : "HTMLInputElement", aDefineOnGlobal,
5923 : nullptr,
5924 1 : false);
5925 : }
5926 :
5927 : JS::Handle<JSObject*>
5928 2 : GetProtoObjectHandle(JSContext* aCx)
5929 : {
5930 : /* Get the interface prototype object for this class. This will create the
5931 : object as needed. */
5932 2 : bool aDefineOnGlobal = true;
5933 :
5934 : /* Make sure our global is sane. Hopefully we can remove this sometime */
5935 2 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
5936 2 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
5937 0 : return nullptr;
5938 : }
5939 :
5940 : /* Check to see whether the interface objects are already installed */
5941 2 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
5942 2 : if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::HTMLInputElement)) {
5943 2 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
5944 1 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
5945 : }
5946 :
5947 : /*
5948 : * The object might _still_ be null, but that's OK.
5949 : *
5950 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
5951 : * traced by TraceProtoAndIfaceCache() and its contents are never
5952 : * changed after they have been set.
5953 : *
5954 : * Calling address() avoids the read read barrier that does gray
5955 : * unmarking, but it's not possible for the object to be gray here.
5956 : */
5957 :
5958 2 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::HTMLInputElement);
5959 2 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
5960 2 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
5961 : }
5962 :
5963 : JS::Handle<JSObject*>
5964 0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
5965 : {
5966 : /* Get the interface object for this class. This will create the object as
5967 : needed. */
5968 :
5969 : /* Make sure our global is sane. Hopefully we can remove this sometime */
5970 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
5971 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
5972 0 : return nullptr;
5973 : }
5974 :
5975 : /* Check to see whether the interface objects are already installed */
5976 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
5977 0 : if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::HTMLInputElement)) {
5978 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
5979 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
5980 : }
5981 :
5982 : /*
5983 : * The object might _still_ be null, but that's OK.
5984 : *
5985 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
5986 : * traced by TraceProtoAndIfaceCache() and its contents are never
5987 : * changed after they have been set.
5988 : *
5989 : * Calling address() avoids the read read barrier that does gray
5990 : * unmarking, but it's not possible for the object to be gray here.
5991 : */
5992 :
5993 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::HTMLInputElement);
5994 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
5995 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
5996 : }
5997 :
5998 : JSObject*
5999 0 : GetConstructorObject(JSContext* aCx)
6000 : {
6001 0 : return GetConstructorObjectHandle(aCx);
6002 : }
6003 :
6004 : } // namespace HTMLInputElementBinding
6005 :
6006 :
6007 :
6008 : } // namespace dom
6009 : } // namespace mozilla
|