Line data Source code
1 : /* THIS FILE IS AUTOGENERATED FROM HTMLAppletElement.webidl BY Codegen.py - DO NOT EDIT */
2 :
3 : #include "HTMLAppletElementBinding.h"
4 : #include "HTMLElementBinding.h"
5 : #include "HTMLObjectElementBinding.h"
6 : #include "WrapperFactory.h"
7 : #include "imgINotificationObserver.h"
8 : #include "imgIRequest.h"
9 : #include "mozilla/OwningNonNull.h"
10 : #include "mozilla/dom/BindingUtils.h"
11 : #include "mozilla/dom/DOMJSClass.h"
12 : #include "mozilla/dom/HTMLIFrameElement.h"
13 : #include "mozilla/dom/HTMLSharedObjectElement.h"
14 : #include "mozilla/dom/NonRefcountedDOMObject.h"
15 : #include "mozilla/dom/Nullable.h"
16 : #include "mozilla/dom/PrimitiveConversions.h"
17 : #include "mozilla/dom/XrayExpandoClass.h"
18 : #include "nsContentUtils.h"
19 : #include "nsIFrameLoader.h"
20 : #include "nsIURI.h"
21 : #include "nsPIDOMWindow.h"
22 : #include "nsXULElement.h"
23 :
24 : namespace mozilla {
25 : namespace dom {
26 :
27 : namespace HTMLAppletElementBinding {
28 :
29 : static_assert(IsRefcounted<NativeType>::value == IsRefcounted<HTMLElementBinding::NativeType>::value,
30 : "Can't inherit from an interface with a different ownership model.");
31 :
32 : static bool
33 0 : get_align(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
34 : {
35 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
36 : // Return false from the JSNative in order to trigger
37 : // an uncatchable exception.
38 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
39 0 : return false;
40 : }
41 0 : DOMString result;
42 0 : self->GetAlign(result);
43 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
44 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
45 0 : return false;
46 : }
47 0 : return true;
48 : }
49 :
50 : static bool
51 0 : set_align(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
52 : {
53 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
54 : // Return false from the JSNative in order to trigger
55 : // an uncatchable exception.
56 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
57 0 : return false;
58 : }
59 0 : binding_detail::FakeString arg0;
60 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
61 0 : return false;
62 : }
63 0 : binding_detail::FastErrorResult rv;
64 0 : self->SetAlign(NonNullHelper(Constify(arg0)), rv);
65 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
66 0 : return false;
67 : }
68 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
69 :
70 0 : return true;
71 : }
72 :
73 : static const JSJitInfo align_getterinfo = {
74 : { (JSJitGetterOp)get_align },
75 : { prototypes::id::HTMLAppletElement },
76 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
77 : JSJitInfo::Getter,
78 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
79 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
80 : false, /* isInfallible. False in setters. */
81 : true, /* isMovable. Not relevant for setters. */
82 : true, /* isEliminatable. Not relevant for setters. */
83 : false, /* isAlwaysInSlot. Only relevant for getters. */
84 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
85 : false, /* isTypedMethod. Only relevant for methods. */
86 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
87 : };
88 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
89 : static_assert(0 < 1, "There is no slot for us");
90 : static const JSJitInfo align_setterinfo = {
91 : { (JSJitGetterOp)set_align },
92 : { prototypes::id::HTMLAppletElement },
93 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
94 : JSJitInfo::Setter,
95 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
96 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
97 : false, /* isInfallible. False in setters. */
98 : false, /* isMovable. Not relevant for setters. */
99 : false, /* isEliminatable. Not relevant for setters. */
100 : false, /* isAlwaysInSlot. Only relevant for getters. */
101 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
102 : false, /* isTypedMethod. Only relevant for methods. */
103 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
104 : };
105 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
106 : static_assert(0 < 1, "There is no slot for us");
107 :
108 : static bool
109 0 : get_alt(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
110 : {
111 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
112 : // Return false from the JSNative in order to trigger
113 : // an uncatchable exception.
114 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
115 0 : return false;
116 : }
117 0 : DOMString result;
118 0 : self->GetAlt(result);
119 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
120 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
121 0 : return false;
122 : }
123 0 : return true;
124 : }
125 :
126 : static bool
127 0 : set_alt(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
128 : {
129 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
130 : // Return false from the JSNative in order to trigger
131 : // an uncatchable exception.
132 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
133 0 : return false;
134 : }
135 0 : binding_detail::FakeString arg0;
136 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
137 0 : return false;
138 : }
139 0 : binding_detail::FastErrorResult rv;
140 0 : self->SetAlt(NonNullHelper(Constify(arg0)), rv);
141 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
142 0 : return false;
143 : }
144 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
145 :
146 0 : return true;
147 : }
148 :
149 : static const JSJitInfo alt_getterinfo = {
150 : { (JSJitGetterOp)get_alt },
151 : { prototypes::id::HTMLAppletElement },
152 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
153 : JSJitInfo::Getter,
154 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
155 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
156 : false, /* isInfallible. False in setters. */
157 : true, /* isMovable. Not relevant for setters. */
158 : true, /* isEliminatable. Not relevant for setters. */
159 : false, /* isAlwaysInSlot. Only relevant for getters. */
160 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
161 : false, /* isTypedMethod. Only relevant for methods. */
162 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
163 : };
164 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
165 : static_assert(0 < 1, "There is no slot for us");
166 : static const JSJitInfo alt_setterinfo = {
167 : { (JSJitGetterOp)set_alt },
168 : { prototypes::id::HTMLAppletElement },
169 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
170 : JSJitInfo::Setter,
171 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
172 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
173 : false, /* isInfallible. False in setters. */
174 : false, /* isMovable. Not relevant for setters. */
175 : false, /* isEliminatable. Not relevant for setters. */
176 : false, /* isAlwaysInSlot. Only relevant for getters. */
177 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
178 : false, /* isTypedMethod. Only relevant for methods. */
179 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
180 : };
181 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
182 : static_assert(0 < 1, "There is no slot for us");
183 :
184 : static bool
185 0 : get_archive(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
186 : {
187 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
188 : // Return false from the JSNative in order to trigger
189 : // an uncatchable exception.
190 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
191 0 : return false;
192 : }
193 0 : DOMString result;
194 0 : self->GetArchive(result);
195 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
196 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
197 0 : return false;
198 : }
199 0 : return true;
200 : }
201 :
202 : static bool
203 0 : set_archive(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
204 : {
205 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
206 : // Return false from the JSNative in order to trigger
207 : // an uncatchable exception.
208 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
209 0 : return false;
210 : }
211 0 : binding_detail::FakeString arg0;
212 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
213 0 : return false;
214 : }
215 0 : binding_detail::FastErrorResult rv;
216 0 : self->SetArchive(NonNullHelper(Constify(arg0)), rv);
217 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
218 0 : return false;
219 : }
220 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
221 :
222 0 : return true;
223 : }
224 :
225 : static const JSJitInfo archive_getterinfo = {
226 : { (JSJitGetterOp)get_archive },
227 : { prototypes::id::HTMLAppletElement },
228 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
229 : JSJitInfo::Getter,
230 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
231 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
232 : false, /* isInfallible. False in setters. */
233 : true, /* isMovable. Not relevant for setters. */
234 : true, /* isEliminatable. Not relevant for setters. */
235 : false, /* isAlwaysInSlot. Only relevant for getters. */
236 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
237 : false, /* isTypedMethod. Only relevant for methods. */
238 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
239 : };
240 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
241 : static_assert(0 < 1, "There is no slot for us");
242 : static const JSJitInfo archive_setterinfo = {
243 : { (JSJitGetterOp)set_archive },
244 : { prototypes::id::HTMLAppletElement },
245 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
246 : JSJitInfo::Setter,
247 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
248 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
249 : false, /* isInfallible. False in setters. */
250 : false, /* isMovable. Not relevant for setters. */
251 : false, /* isEliminatable. Not relevant for setters. */
252 : false, /* isAlwaysInSlot. Only relevant for getters. */
253 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
254 : false, /* isTypedMethod. Only relevant for methods. */
255 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
256 : };
257 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
258 : static_assert(0 < 1, "There is no slot for us");
259 :
260 : static bool
261 0 : get_code(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
262 : {
263 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
264 : // Return false from the JSNative in order to trigger
265 : // an uncatchable exception.
266 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
267 0 : return false;
268 : }
269 0 : DOMString result;
270 0 : self->GetCode(result);
271 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
272 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
273 0 : return false;
274 : }
275 0 : return true;
276 : }
277 :
278 : static bool
279 0 : set_code(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
280 : {
281 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
282 : // Return false from the JSNative in order to trigger
283 : // an uncatchable exception.
284 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
285 0 : return false;
286 : }
287 0 : binding_detail::FakeString arg0;
288 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
289 0 : return false;
290 : }
291 0 : binding_detail::FastErrorResult rv;
292 0 : self->SetCode(NonNullHelper(Constify(arg0)), rv);
293 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
294 0 : return false;
295 : }
296 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
297 :
298 0 : return true;
299 : }
300 :
301 : static const JSJitInfo code_getterinfo = {
302 : { (JSJitGetterOp)get_code },
303 : { prototypes::id::HTMLAppletElement },
304 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
305 : JSJitInfo::Getter,
306 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
307 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
308 : false, /* isInfallible. False in setters. */
309 : true, /* isMovable. Not relevant for setters. */
310 : true, /* isEliminatable. Not relevant for setters. */
311 : false, /* isAlwaysInSlot. Only relevant for getters. */
312 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
313 : false, /* isTypedMethod. Only relevant for methods. */
314 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
315 : };
316 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
317 : static_assert(0 < 1, "There is no slot for us");
318 : static const JSJitInfo code_setterinfo = {
319 : { (JSJitGetterOp)set_code },
320 : { prototypes::id::HTMLAppletElement },
321 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
322 : JSJitInfo::Setter,
323 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
324 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
325 : false, /* isInfallible. False in setters. */
326 : false, /* isMovable. Not relevant for setters. */
327 : false, /* isEliminatable. Not relevant for setters. */
328 : false, /* isAlwaysInSlot. Only relevant for getters. */
329 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
330 : false, /* isTypedMethod. Only relevant for methods. */
331 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
332 : };
333 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
334 : static_assert(0 < 1, "There is no slot for us");
335 :
336 : static bool
337 0 : get_codeBase(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
338 : {
339 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
340 : // Return false from the JSNative in order to trigger
341 : // an uncatchable exception.
342 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
343 0 : return false;
344 : }
345 0 : DOMString result;
346 0 : self->GetCodeBase(result);
347 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
348 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
349 0 : return false;
350 : }
351 0 : return true;
352 : }
353 :
354 : static bool
355 0 : set_codeBase(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
356 : {
357 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
358 : // Return false from the JSNative in order to trigger
359 : // an uncatchable exception.
360 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
361 0 : return false;
362 : }
363 0 : binding_detail::FakeString arg0;
364 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
365 0 : return false;
366 : }
367 0 : binding_detail::FastErrorResult rv;
368 0 : self->SetCodeBase(NonNullHelper(Constify(arg0)), rv);
369 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
370 0 : return false;
371 : }
372 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
373 :
374 0 : return true;
375 : }
376 :
377 : static const JSJitInfo codeBase_getterinfo = {
378 : { (JSJitGetterOp)get_codeBase },
379 : { prototypes::id::HTMLAppletElement },
380 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
381 : JSJitInfo::Getter,
382 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
383 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
384 : false, /* isInfallible. False in setters. */
385 : true, /* isMovable. Not relevant for setters. */
386 : true, /* isEliminatable. Not relevant for setters. */
387 : false, /* isAlwaysInSlot. Only relevant for getters. */
388 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
389 : false, /* isTypedMethod. Only relevant for methods. */
390 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
391 : };
392 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
393 : static_assert(0 < 1, "There is no slot for us");
394 : static const JSJitInfo codeBase_setterinfo = {
395 : { (JSJitGetterOp)set_codeBase },
396 : { prototypes::id::HTMLAppletElement },
397 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
398 : JSJitInfo::Setter,
399 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
400 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
401 : false, /* isInfallible. False in setters. */
402 : false, /* isMovable. Not relevant for setters. */
403 : false, /* isEliminatable. Not relevant for setters. */
404 : false, /* isAlwaysInSlot. Only relevant for getters. */
405 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
406 : false, /* isTypedMethod. Only relevant for methods. */
407 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
408 : };
409 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
410 : static_assert(0 < 1, "There is no slot for us");
411 :
412 : static bool
413 0 : get_height(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
414 : {
415 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
416 : // Return false from the JSNative in order to trigger
417 : // an uncatchable exception.
418 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
419 0 : return false;
420 : }
421 0 : DOMString result;
422 0 : self->GetHeight(result);
423 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
424 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
425 0 : return false;
426 : }
427 0 : return true;
428 : }
429 :
430 : static bool
431 0 : set_height(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
432 : {
433 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
434 : // Return false from the JSNative in order to trigger
435 : // an uncatchable exception.
436 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
437 0 : return false;
438 : }
439 0 : binding_detail::FakeString arg0;
440 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
441 0 : return false;
442 : }
443 0 : binding_detail::FastErrorResult rv;
444 0 : self->SetHeight(NonNullHelper(Constify(arg0)), rv);
445 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
446 0 : return false;
447 : }
448 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
449 :
450 0 : return true;
451 : }
452 :
453 : static const JSJitInfo height_getterinfo = {
454 : { (JSJitGetterOp)get_height },
455 : { prototypes::id::HTMLAppletElement },
456 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
457 : JSJitInfo::Getter,
458 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
459 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
460 : false, /* isInfallible. False in setters. */
461 : true, /* isMovable. Not relevant for setters. */
462 : true, /* isEliminatable. Not relevant for setters. */
463 : false, /* isAlwaysInSlot. Only relevant for getters. */
464 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
465 : false, /* isTypedMethod. Only relevant for methods. */
466 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
467 : };
468 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
469 : static_assert(0 < 1, "There is no slot for us");
470 : static const JSJitInfo height_setterinfo = {
471 : { (JSJitGetterOp)set_height },
472 : { prototypes::id::HTMLAppletElement },
473 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
474 : JSJitInfo::Setter,
475 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
476 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
477 : false, /* isInfallible. False in setters. */
478 : false, /* isMovable. Not relevant for setters. */
479 : false, /* isEliminatable. Not relevant for setters. */
480 : false, /* isAlwaysInSlot. Only relevant for getters. */
481 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
482 : false, /* isTypedMethod. Only relevant for methods. */
483 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
484 : };
485 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
486 : static_assert(0 < 1, "There is no slot for us");
487 :
488 : static bool
489 0 : get_hspace(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
490 : {
491 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
492 : // Return false from the JSNative in order to trigger
493 : // an uncatchable exception.
494 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
495 0 : return false;
496 : }
497 0 : uint32_t result(self->Hspace());
498 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
499 0 : args.rval().setNumber(result);
500 0 : return true;
501 : }
502 :
503 : static bool
504 0 : set_hspace(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
505 : {
506 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
507 : // Return false from the JSNative in order to trigger
508 : // an uncatchable exception.
509 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
510 0 : return false;
511 : }
512 : uint32_t arg0;
513 0 : if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
514 0 : return false;
515 : }
516 0 : binding_detail::FastErrorResult rv;
517 0 : self->SetHspace(arg0, rv);
518 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
519 0 : return false;
520 : }
521 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
522 :
523 0 : return true;
524 : }
525 :
526 : static const JSJitInfo hspace_getterinfo = {
527 : { (JSJitGetterOp)get_hspace },
528 : { prototypes::id::HTMLAppletElement },
529 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
530 : JSJitInfo::Getter,
531 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
532 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
533 : true, /* isInfallible. False in setters. */
534 : true, /* isMovable. Not relevant for setters. */
535 : true, /* isEliminatable. Not relevant for setters. */
536 : false, /* isAlwaysInSlot. Only relevant for getters. */
537 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
538 : false, /* isTypedMethod. Only relevant for methods. */
539 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
540 : };
541 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
542 : static_assert(0 < 1, "There is no slot for us");
543 : static const JSJitInfo hspace_setterinfo = {
544 : { (JSJitGetterOp)set_hspace },
545 : { prototypes::id::HTMLAppletElement },
546 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
547 : JSJitInfo::Setter,
548 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
549 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
550 : false, /* isInfallible. False in setters. */
551 : false, /* isMovable. Not relevant for setters. */
552 : false, /* isEliminatable. Not relevant for setters. */
553 : false, /* isAlwaysInSlot. Only relevant for getters. */
554 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
555 : false, /* isTypedMethod. Only relevant for methods. */
556 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
557 : };
558 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
559 : static_assert(0 < 1, "There is no slot for us");
560 :
561 : static bool
562 0 : get_name(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
563 : {
564 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
565 : // Return false from the JSNative in order to trigger
566 : // an uncatchable exception.
567 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
568 0 : return false;
569 : }
570 0 : DOMString result;
571 0 : self->GetName(result);
572 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
573 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
574 0 : return false;
575 : }
576 0 : return true;
577 : }
578 :
579 : static bool
580 0 : set_name(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
581 : {
582 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
583 : // Return false from the JSNative in order to trigger
584 : // an uncatchable exception.
585 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
586 0 : return false;
587 : }
588 0 : binding_detail::FakeString arg0;
589 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
590 0 : return false;
591 : }
592 0 : binding_detail::FastErrorResult rv;
593 0 : self->SetName(NonNullHelper(Constify(arg0)), rv);
594 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
595 0 : return false;
596 : }
597 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
598 :
599 0 : return true;
600 : }
601 :
602 : static const JSJitInfo name_getterinfo = {
603 : { (JSJitGetterOp)get_name },
604 : { prototypes::id::HTMLAppletElement },
605 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
606 : JSJitInfo::Getter,
607 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
608 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
609 : false, /* isInfallible. False in setters. */
610 : true, /* isMovable. Not relevant for setters. */
611 : true, /* isEliminatable. Not relevant for setters. */
612 : false, /* isAlwaysInSlot. Only relevant for getters. */
613 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
614 : false, /* isTypedMethod. Only relevant for methods. */
615 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
616 : };
617 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
618 : static_assert(0 < 1, "There is no slot for us");
619 : static const JSJitInfo name_setterinfo = {
620 : { (JSJitGetterOp)set_name },
621 : { prototypes::id::HTMLAppletElement },
622 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
623 : JSJitInfo::Setter,
624 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
625 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
626 : false, /* isInfallible. False in setters. */
627 : false, /* isMovable. Not relevant for setters. */
628 : false, /* isEliminatable. Not relevant for setters. */
629 : false, /* isAlwaysInSlot. Only relevant for getters. */
630 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
631 : false, /* isTypedMethod. Only relevant for methods. */
632 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
633 : };
634 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
635 : static_assert(0 < 1, "There is no slot for us");
636 :
637 : static bool
638 0 : get_object(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
639 : {
640 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
641 : // Return false from the JSNative in order to trigger
642 : // an uncatchable exception.
643 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
644 0 : return false;
645 : }
646 0 : DOMString result;
647 0 : self->GetObject(result);
648 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
649 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
650 0 : return false;
651 : }
652 0 : return true;
653 : }
654 :
655 : static bool
656 0 : set_object(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
657 : {
658 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
659 : // Return false from the JSNative in order to trigger
660 : // an uncatchable exception.
661 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
662 0 : return false;
663 : }
664 0 : binding_detail::FakeString arg0;
665 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
666 0 : return false;
667 : }
668 0 : binding_detail::FastErrorResult rv;
669 0 : self->SetObject(NonNullHelper(Constify(arg0)), rv);
670 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
671 0 : return false;
672 : }
673 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
674 :
675 0 : return true;
676 : }
677 :
678 : static const JSJitInfo object_getterinfo = {
679 : { (JSJitGetterOp)get_object },
680 : { prototypes::id::HTMLAppletElement },
681 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
682 : JSJitInfo::Getter,
683 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
684 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
685 : false, /* isInfallible. False in setters. */
686 : true, /* isMovable. Not relevant for setters. */
687 : true, /* isEliminatable. Not relevant for setters. */
688 : false, /* isAlwaysInSlot. Only relevant for getters. */
689 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
690 : false, /* isTypedMethod. Only relevant for methods. */
691 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
692 : };
693 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
694 : static_assert(0 < 1, "There is no slot for us");
695 : static const JSJitInfo object_setterinfo = {
696 : { (JSJitGetterOp)set_object },
697 : { prototypes::id::HTMLAppletElement },
698 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
699 : JSJitInfo::Setter,
700 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
701 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
702 : false, /* isInfallible. False in setters. */
703 : false, /* isMovable. Not relevant for setters. */
704 : false, /* isEliminatable. Not relevant for setters. */
705 : false, /* isAlwaysInSlot. Only relevant for getters. */
706 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
707 : false, /* isTypedMethod. Only relevant for methods. */
708 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
709 : };
710 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
711 : static_assert(0 < 1, "There is no slot for us");
712 :
713 : static bool
714 0 : get_vspace(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
715 : {
716 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
717 : // Return false from the JSNative in order to trigger
718 : // an uncatchable exception.
719 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
720 0 : return false;
721 : }
722 0 : uint32_t result(self->Vspace());
723 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
724 0 : args.rval().setNumber(result);
725 0 : return true;
726 : }
727 :
728 : static bool
729 0 : set_vspace(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
730 : {
731 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
732 : // Return false from the JSNative in order to trigger
733 : // an uncatchable exception.
734 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
735 0 : return false;
736 : }
737 : uint32_t arg0;
738 0 : if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
739 0 : return false;
740 : }
741 0 : binding_detail::FastErrorResult rv;
742 0 : self->SetVspace(arg0, rv);
743 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
744 0 : return false;
745 : }
746 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
747 :
748 0 : return true;
749 : }
750 :
751 : static const JSJitInfo vspace_getterinfo = {
752 : { (JSJitGetterOp)get_vspace },
753 : { prototypes::id::HTMLAppletElement },
754 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
755 : JSJitInfo::Getter,
756 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
757 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
758 : true, /* isInfallible. False in setters. */
759 : true, /* isMovable. Not relevant for setters. */
760 : true, /* isEliminatable. Not relevant for setters. */
761 : false, /* isAlwaysInSlot. Only relevant for getters. */
762 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
763 : false, /* isTypedMethod. Only relevant for methods. */
764 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
765 : };
766 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
767 : static_assert(0 < 1, "There is no slot for us");
768 : static const JSJitInfo vspace_setterinfo = {
769 : { (JSJitGetterOp)set_vspace },
770 : { prototypes::id::HTMLAppletElement },
771 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
772 : JSJitInfo::Setter,
773 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
774 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
775 : false, /* isInfallible. False in setters. */
776 : false, /* isMovable. Not relevant for setters. */
777 : false, /* isEliminatable. Not relevant for setters. */
778 : false, /* isAlwaysInSlot. Only relevant for getters. */
779 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
780 : false, /* isTypedMethod. Only relevant for methods. */
781 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
782 : };
783 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
784 : static_assert(0 < 1, "There is no slot for us");
785 :
786 : static bool
787 0 : get_width(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
788 : {
789 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
790 : // Return false from the JSNative in order to trigger
791 : // an uncatchable exception.
792 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
793 0 : return false;
794 : }
795 0 : DOMString result;
796 0 : self->GetWidth(result);
797 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
798 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
799 0 : return false;
800 : }
801 0 : return true;
802 : }
803 :
804 : static bool
805 0 : set_width(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
806 : {
807 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
808 : // Return false from the JSNative in order to trigger
809 : // an uncatchable exception.
810 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
811 0 : return false;
812 : }
813 0 : binding_detail::FakeString arg0;
814 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
815 0 : return false;
816 : }
817 0 : binding_detail::FastErrorResult rv;
818 0 : self->SetWidth(NonNullHelper(Constify(arg0)), rv);
819 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
820 0 : return false;
821 : }
822 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
823 :
824 0 : return true;
825 : }
826 :
827 : static const JSJitInfo width_getterinfo = {
828 : { (JSJitGetterOp)get_width },
829 : { prototypes::id::HTMLAppletElement },
830 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
831 : JSJitInfo::Getter,
832 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
833 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
834 : false, /* isInfallible. False in setters. */
835 : true, /* isMovable. Not relevant for setters. */
836 : true, /* isEliminatable. Not relevant for setters. */
837 : false, /* isAlwaysInSlot. Only relevant for getters. */
838 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
839 : false, /* isTypedMethod. Only relevant for methods. */
840 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
841 : };
842 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
843 : static_assert(0 < 1, "There is no slot for us");
844 : static const JSJitInfo width_setterinfo = {
845 : { (JSJitGetterOp)set_width },
846 : { prototypes::id::HTMLAppletElement },
847 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
848 : JSJitInfo::Setter,
849 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
850 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
851 : false, /* isInfallible. False in setters. */
852 : false, /* isMovable. Not relevant for setters. */
853 : false, /* isEliminatable. Not relevant for setters. */
854 : false, /* isAlwaysInSlot. Only relevant for getters. */
855 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
856 : false, /* isTypedMethod. Only relevant for methods. */
857 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
858 : };
859 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
860 : static_assert(0 < 1, "There is no slot for us");
861 :
862 : static bool
863 0 : get_frameLoader(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
864 : {
865 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
866 : // Return false from the JSNative in order to trigger
867 : // an uncatchable exception.
868 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
869 0 : return false;
870 : }
871 0 : auto result(StrongOrRawPtr<nsIFrameLoader>(self->GetFrameLoader()));
872 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
873 0 : if (!result) {
874 0 : args.rval().setNull();
875 0 : return true;
876 : }
877 0 : if (!WrapObject(cx, result, &NS_GET_IID(nsIFrameLoader), args.rval())) {
878 0 : return false;
879 : }
880 0 : return true;
881 : }
882 :
883 : static const JSJitInfo frameLoader_getterinfo = {
884 : { (JSJitGetterOp)get_frameLoader },
885 : { prototypes::id::HTMLAppletElement },
886 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
887 : JSJitInfo::Getter,
888 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
889 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
890 : false, /* isInfallible. False in setters. */
891 : false, /* isMovable. Not relevant for setters. */
892 : false, /* isEliminatable. Not relevant for setters. */
893 : false, /* isAlwaysInSlot. Only relevant for getters. */
894 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
895 : false, /* isTypedMethod. Only relevant for methods. */
896 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
897 : };
898 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
899 : static_assert(0 < 1, "There is no slot for us");
900 :
901 : static bool
902 0 : setIsPrerendered(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
903 : {
904 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
905 : // Return false from the JSNative in order to trigger
906 : // an uncatchable exception.
907 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
908 0 : return false;
909 : }
910 0 : self->SetIsPrerendered();
911 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
912 0 : args.rval().setUndefined();
913 0 : return true;
914 : }
915 :
916 : static const JSJitInfo setIsPrerendered_methodinfo = {
917 : { (JSJitGetterOp)setIsPrerendered },
918 : { prototypes::id::HTMLAppletElement },
919 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
920 : JSJitInfo::Method,
921 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
922 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
923 : true, /* isInfallible. False in setters. */
924 : false, /* isMovable. Not relevant for setters. */
925 : false, /* isEliminatable. Not relevant for setters. */
926 : false, /* isAlwaysInSlot. Only relevant for getters. */
927 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
928 : false, /* isTypedMethod. Only relevant for methods. */
929 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
930 : };
931 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
932 : static_assert(0 < 1, "There is no slot for us");
933 :
934 : static bool
935 0 : presetOpenerWindow(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
936 : {
937 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
938 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLAppletElement.presetOpenerWindow");
939 : }
940 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
941 : // Return false from the JSNative in order to trigger
942 : // an uncatchable exception.
943 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
944 0 : return false;
945 : }
946 : nsPIDOMWindowOuter* arg0;
947 0 : RefPtr<nsPIDOMWindowOuter> arg0_holder;
948 0 : if (args[0].isObject()) {
949 0 : JS::Rooted<JSObject*> source(cx, &args[0].toObject());
950 0 : if (NS_FAILED(UnwrapArg<nsPIDOMWindowOuter>(cx, source, getter_AddRefs(arg0_holder)))) {
951 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of HTMLAppletElement.presetOpenerWindow", "WindowProxy");
952 0 : return false;
953 : }
954 0 : MOZ_ASSERT(arg0_holder);
955 0 : arg0 = arg0_holder;
956 0 : } else if (args[0].isNullOrUndefined()) {
957 0 : arg0 = nullptr;
958 : } else {
959 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of HTMLAppletElement.presetOpenerWindow");
960 0 : return false;
961 : }
962 0 : binding_detail::FastErrorResult rv;
963 0 : self->PresetOpenerWindow(Constify(arg0), rv);
964 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
965 0 : return false;
966 : }
967 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
968 0 : args.rval().setUndefined();
969 0 : return true;
970 : }
971 :
972 : static const JSJitInfo presetOpenerWindow_methodinfo = {
973 : { (JSJitGetterOp)presetOpenerWindow },
974 : { prototypes::id::HTMLAppletElement },
975 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
976 : JSJitInfo::Method,
977 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
978 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
979 : false, /* isInfallible. False in setters. */
980 : false, /* isMovable. Not relevant for setters. */
981 : false, /* isEliminatable. Not relevant for setters. */
982 : false, /* isAlwaysInSlot. Only relevant for getters. */
983 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
984 : false, /* isTypedMethod. Only relevant for methods. */
985 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
986 : };
987 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
988 : static_assert(0 < 1, "There is no slot for us");
989 :
990 : static bool
991 0 : swapFrameLoaders(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
992 : {
993 0 : unsigned argcount = std::min(args.length(), 1u);
994 0 : switch (argcount) {
995 : case 1: {
996 0 : if (args[0].isObject()) {
997 : do {
998 0 : NonNull<nsXULElement> arg0;
999 : {
1000 0 : nsresult rv = UnwrapObject<prototypes::id::XULElement, nsXULElement>(args[0], arg0);
1001 0 : if (NS_FAILED(rv)) {
1002 0 : break;
1003 : }
1004 : }
1005 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1006 : // Return false from the JSNative in order to trigger
1007 : // an uncatchable exception.
1008 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1009 0 : return false;
1010 : }
1011 0 : binding_detail::FastErrorResult rv;
1012 0 : self->SwapFrameLoaders(NonNullHelper(arg0), rv);
1013 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1014 0 : return false;
1015 : }
1016 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1017 0 : args.rval().setUndefined();
1018 0 : return true;
1019 : } while (0);
1020 : do {
1021 0 : NonNull<mozilla::dom::HTMLIFrameElement> arg0;
1022 : {
1023 0 : nsresult rv = UnwrapObject<prototypes::id::HTMLIFrameElement, mozilla::dom::HTMLIFrameElement>(args[0], arg0);
1024 0 : if (NS_FAILED(rv)) {
1025 0 : break;
1026 : }
1027 : }
1028 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1029 : // Return false from the JSNative in order to trigger
1030 : // an uncatchable exception.
1031 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1032 0 : return false;
1033 : }
1034 0 : binding_detail::FastErrorResult rv;
1035 0 : self->SwapFrameLoaders(NonNullHelper(arg0), rv);
1036 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1037 0 : return false;
1038 : }
1039 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1040 0 : args.rval().setUndefined();
1041 0 : return true;
1042 : } while (0);
1043 : }
1044 0 : return ThrowErrorMessage(cx, MSG_OVERLOAD_RESOLUTION_FAILED, "1", "1", "HTMLAppletElement.swapFrameLoaders");
1045 : break;
1046 : }
1047 : default: {
1048 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLAppletElement.swapFrameLoaders");
1049 : break;
1050 : }
1051 : }
1052 : MOZ_CRASH("We have an always-returning default case");
1053 : return false;
1054 : }
1055 :
1056 : static const JSJitInfo swapFrameLoaders_methodinfo = {
1057 : { (JSJitGetterOp)swapFrameLoaders },
1058 : { prototypes::id::HTMLAppletElement },
1059 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1060 : JSJitInfo::Method,
1061 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1062 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1063 : false, /* isInfallible. False in setters. */
1064 : false, /* isMovable. Not relevant for setters. */
1065 : false, /* isEliminatable. Not relevant for setters. */
1066 : false, /* isAlwaysInSlot. Only relevant for getters. */
1067 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1068 : false, /* isTypedMethod. Only relevant for methods. */
1069 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1070 : };
1071 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1072 : static_assert(0 < 1, "There is no slot for us");
1073 :
1074 : static bool
1075 0 : get_loadingEnabled(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
1076 : {
1077 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1078 : // Return false from the JSNative in order to trigger
1079 : // an uncatchable exception.
1080 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1081 0 : return false;
1082 : }
1083 0 : bool result(self->LoadingEnabled());
1084 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1085 0 : args.rval().setBoolean(result);
1086 0 : return true;
1087 : }
1088 :
1089 : static bool
1090 0 : set_loadingEnabled(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
1091 : {
1092 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1093 : // Return false from the JSNative in order to trigger
1094 : // an uncatchable exception.
1095 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1096 0 : return false;
1097 : }
1098 : bool arg0;
1099 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
1100 0 : return false;
1101 : }
1102 0 : self->SetLoadingEnabled(arg0);
1103 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1104 :
1105 0 : return true;
1106 : }
1107 :
1108 : static const JSJitInfo loadingEnabled_getterinfo = {
1109 : { (JSJitGetterOp)get_loadingEnabled },
1110 : { prototypes::id::HTMLAppletElement },
1111 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1112 : JSJitInfo::Getter,
1113 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1114 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1115 : true, /* isInfallible. False in setters. */
1116 : false, /* isMovable. Not relevant for setters. */
1117 : false, /* isEliminatable. Not relevant for setters. */
1118 : false, /* isAlwaysInSlot. Only relevant for getters. */
1119 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1120 : false, /* isTypedMethod. Only relevant for methods. */
1121 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1122 : };
1123 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1124 : static_assert(0 < 1, "There is no slot for us");
1125 : static const JSJitInfo loadingEnabled_setterinfo = {
1126 : { (JSJitGetterOp)set_loadingEnabled },
1127 : { prototypes::id::HTMLAppletElement },
1128 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1129 : JSJitInfo::Setter,
1130 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1131 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1132 : false, /* isInfallible. False in setters. */
1133 : false, /* isMovable. Not relevant for setters. */
1134 : false, /* isEliminatable. Not relevant for setters. */
1135 : false, /* isAlwaysInSlot. Only relevant for getters. */
1136 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1137 : false, /* isTypedMethod. Only relevant for methods. */
1138 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1139 : };
1140 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1141 : static_assert(0 < 1, "There is no slot for us");
1142 :
1143 : static bool
1144 0 : get_imageBlockingStatus(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
1145 : {
1146 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1147 : // Return false from the JSNative in order to trigger
1148 : // an uncatchable exception.
1149 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1150 0 : return false;
1151 : }
1152 0 : int16_t result(self->ImageBlockingStatus());
1153 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1154 0 : args.rval().setInt32(int32_t(result));
1155 0 : return true;
1156 : }
1157 :
1158 : static const JSJitInfo imageBlockingStatus_getterinfo = {
1159 : { (JSJitGetterOp)get_imageBlockingStatus },
1160 : { prototypes::id::HTMLAppletElement },
1161 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1162 : JSJitInfo::Getter,
1163 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1164 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
1165 : true, /* isInfallible. False in setters. */
1166 : false, /* isMovable. Not relevant for setters. */
1167 : false, /* isEliminatable. Not relevant for setters. */
1168 : false, /* isAlwaysInSlot. Only relevant for getters. */
1169 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1170 : false, /* isTypedMethod. Only relevant for methods. */
1171 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1172 : };
1173 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1174 : static_assert(0 < 1, "There is no slot for us");
1175 :
1176 : static bool
1177 0 : addObserver(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
1178 : {
1179 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
1180 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLAppletElement.addObserver");
1181 : }
1182 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1183 : // Return false from the JSNative in order to trigger
1184 : // an uncatchable exception.
1185 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1186 0 : return false;
1187 : }
1188 : imgINotificationObserver* arg0;
1189 0 : RefPtr<imgINotificationObserver> arg0_holder;
1190 0 : if (args[0].isObject()) {
1191 0 : JS::Rooted<JSObject*> source(cx, &args[0].toObject());
1192 0 : if (NS_FAILED(UnwrapArg<imgINotificationObserver>(cx, source, getter_AddRefs(arg0_holder)))) {
1193 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of HTMLAppletElement.addObserver", "imgINotificationObserver");
1194 0 : return false;
1195 : }
1196 0 : MOZ_ASSERT(arg0_holder);
1197 0 : arg0 = arg0_holder;
1198 : } else {
1199 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of HTMLAppletElement.addObserver");
1200 0 : return false;
1201 : }
1202 0 : self->AddObserver(NonNullHelper(arg0));
1203 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1204 0 : args.rval().setUndefined();
1205 0 : return true;
1206 : }
1207 :
1208 : static const JSJitInfo addObserver_methodinfo = {
1209 : { (JSJitGetterOp)addObserver },
1210 : { prototypes::id::HTMLAppletElement },
1211 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1212 : JSJitInfo::Method,
1213 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1214 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1215 : false, /* isInfallible. False in setters. */
1216 : false, /* isMovable. Not relevant for setters. */
1217 : false, /* isEliminatable. Not relevant for setters. */
1218 : false, /* isAlwaysInSlot. Only relevant for getters. */
1219 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1220 : false, /* isTypedMethod. Only relevant for methods. */
1221 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1222 : };
1223 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1224 : static_assert(0 < 1, "There is no slot for us");
1225 :
1226 : static bool
1227 0 : removeObserver(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
1228 : {
1229 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
1230 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLAppletElement.removeObserver");
1231 : }
1232 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1233 : // Return false from the JSNative in order to trigger
1234 : // an uncatchable exception.
1235 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1236 0 : return false;
1237 : }
1238 : imgINotificationObserver* arg0;
1239 0 : RefPtr<imgINotificationObserver> arg0_holder;
1240 0 : if (args[0].isObject()) {
1241 0 : JS::Rooted<JSObject*> source(cx, &args[0].toObject());
1242 0 : if (NS_FAILED(UnwrapArg<imgINotificationObserver>(cx, source, getter_AddRefs(arg0_holder)))) {
1243 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of HTMLAppletElement.removeObserver", "imgINotificationObserver");
1244 0 : return false;
1245 : }
1246 0 : MOZ_ASSERT(arg0_holder);
1247 0 : arg0 = arg0_holder;
1248 : } else {
1249 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of HTMLAppletElement.removeObserver");
1250 0 : return false;
1251 : }
1252 0 : self->RemoveObserver(NonNullHelper(arg0));
1253 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1254 0 : args.rval().setUndefined();
1255 0 : return true;
1256 : }
1257 :
1258 : static const JSJitInfo removeObserver_methodinfo = {
1259 : { (JSJitGetterOp)removeObserver },
1260 : { prototypes::id::HTMLAppletElement },
1261 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1262 : JSJitInfo::Method,
1263 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1264 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1265 : false, /* isInfallible. False in setters. */
1266 : false, /* isMovable. Not relevant for setters. */
1267 : false, /* isEliminatable. Not relevant for setters. */
1268 : false, /* isAlwaysInSlot. Only relevant for getters. */
1269 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1270 : false, /* isTypedMethod. Only relevant for methods. */
1271 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1272 : };
1273 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1274 : static_assert(0 < 1, "There is no slot for us");
1275 :
1276 : static bool
1277 0 : getRequest(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
1278 : {
1279 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
1280 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLAppletElement.getRequest");
1281 : }
1282 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1283 : // Return false from the JSNative in order to trigger
1284 : // an uncatchable exception.
1285 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1286 0 : return false;
1287 : }
1288 : int32_t arg0;
1289 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
1290 0 : return false;
1291 : }
1292 0 : binding_detail::FastErrorResult rv;
1293 0 : auto result(StrongOrRawPtr<imgIRequest>(self->GetRequest(arg0, rv)));
1294 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1295 0 : return false;
1296 : }
1297 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1298 0 : if (!result) {
1299 0 : args.rval().setNull();
1300 0 : return true;
1301 : }
1302 0 : if (!WrapObject(cx, result, &NS_GET_IID(imgIRequest), args.rval())) {
1303 0 : return false;
1304 : }
1305 0 : return true;
1306 : }
1307 :
1308 : static const JSJitInfo getRequest_methodinfo = {
1309 : { (JSJitGetterOp)getRequest },
1310 : { prototypes::id::HTMLAppletElement },
1311 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1312 : JSJitInfo::Method,
1313 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1314 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
1315 : false, /* isInfallible. False in setters. */
1316 : false, /* isMovable. Not relevant for setters. */
1317 : false, /* isEliminatable. Not relevant for setters. */
1318 : false, /* isAlwaysInSlot. Only relevant for getters. */
1319 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1320 : false, /* isTypedMethod. Only relevant for methods. */
1321 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1322 : };
1323 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1324 : static_assert(0 < 1, "There is no slot for us");
1325 :
1326 : static bool
1327 0 : getRequestType(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
1328 : {
1329 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
1330 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLAppletElement.getRequestType");
1331 : }
1332 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1333 : // Return false from the JSNative in order to trigger
1334 : // an uncatchable exception.
1335 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1336 0 : return false;
1337 : }
1338 : imgIRequest* arg0;
1339 0 : RefPtr<imgIRequest> arg0_holder;
1340 0 : if (args[0].isObject()) {
1341 0 : JS::Rooted<JSObject*> source(cx, &args[0].toObject());
1342 0 : if (NS_FAILED(UnwrapArg<imgIRequest>(cx, source, getter_AddRefs(arg0_holder)))) {
1343 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of HTMLAppletElement.getRequestType", "imgIRequest");
1344 0 : return false;
1345 : }
1346 0 : MOZ_ASSERT(arg0_holder);
1347 0 : arg0 = arg0_holder;
1348 : } else {
1349 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of HTMLAppletElement.getRequestType");
1350 0 : return false;
1351 : }
1352 0 : binding_detail::FastErrorResult rv;
1353 0 : int32_t result(self->GetRequestType(NonNullHelper(arg0), rv));
1354 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1355 0 : return false;
1356 : }
1357 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1358 0 : args.rval().setInt32(int32_t(result));
1359 0 : return true;
1360 : }
1361 :
1362 : static const JSJitInfo getRequestType_methodinfo = {
1363 : { (JSJitGetterOp)getRequestType },
1364 : { prototypes::id::HTMLAppletElement },
1365 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1366 : JSJitInfo::Method,
1367 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1368 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
1369 : false, /* isInfallible. False in setters. */
1370 : false, /* isMovable. Not relevant for setters. */
1371 : false, /* isEliminatable. Not relevant for setters. */
1372 : false, /* isAlwaysInSlot. Only relevant for getters. */
1373 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1374 : false, /* isTypedMethod. Only relevant for methods. */
1375 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1376 : };
1377 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1378 : static_assert(0 < 1, "There is no slot for us");
1379 :
1380 : static bool
1381 0 : get_currentURI(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
1382 : {
1383 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1384 : // Return false from the JSNative in order to trigger
1385 : // an uncatchable exception.
1386 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1387 0 : return false;
1388 : }
1389 0 : binding_detail::FastErrorResult rv;
1390 0 : auto result(StrongOrRawPtr<nsIURI>(self->GetCurrentURI(rv)));
1391 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1392 0 : return false;
1393 : }
1394 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1395 0 : if (!result) {
1396 0 : args.rval().setNull();
1397 0 : return true;
1398 : }
1399 0 : if (!WrapObject(cx, result, &NS_GET_IID(nsIURI), args.rval())) {
1400 0 : return false;
1401 : }
1402 0 : return true;
1403 : }
1404 :
1405 : static const JSJitInfo currentURI_getterinfo = {
1406 : { (JSJitGetterOp)get_currentURI },
1407 : { prototypes::id::HTMLAppletElement },
1408 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1409 : JSJitInfo::Getter,
1410 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1411 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
1412 : false, /* isInfallible. False in setters. */
1413 : false, /* isMovable. Not relevant for setters. */
1414 : false, /* isEliminatable. Not relevant for setters. */
1415 : false, /* isAlwaysInSlot. Only relevant for getters. */
1416 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1417 : false, /* isTypedMethod. Only relevant for methods. */
1418 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1419 : };
1420 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1421 : static_assert(0 < 1, "There is no slot for us");
1422 :
1423 : static bool
1424 0 : forceReload(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
1425 : {
1426 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1427 : // Return false from the JSNative in order to trigger
1428 : // an uncatchable exception.
1429 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1430 0 : return false;
1431 : }
1432 0 : Optional<bool> arg0;
1433 0 : if (args.hasDefined(0)) {
1434 0 : arg0.Construct();
1435 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0.Value())) {
1436 0 : return false;
1437 : }
1438 : }
1439 0 : binding_detail::FastErrorResult rv;
1440 0 : self->ForceReload(Constify(arg0), rv);
1441 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1442 0 : return false;
1443 : }
1444 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1445 0 : args.rval().setUndefined();
1446 0 : return true;
1447 : }
1448 :
1449 : static const JSJitInfo forceReload_methodinfo = {
1450 : { (JSJitGetterOp)forceReload },
1451 : { prototypes::id::HTMLAppletElement },
1452 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1453 : JSJitInfo::Method,
1454 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1455 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1456 : false, /* isInfallible. False in setters. */
1457 : false, /* isMovable. Not relevant for setters. */
1458 : false, /* isEliminatable. Not relevant for setters. */
1459 : false, /* isAlwaysInSlot. Only relevant for getters. */
1460 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1461 : false, /* isTypedMethod. Only relevant for methods. */
1462 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1463 : };
1464 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1465 : static_assert(0 < 1, "There is no slot for us");
1466 :
1467 : static bool
1468 0 : forceImageState(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
1469 : {
1470 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
1471 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLAppletElement.forceImageState");
1472 : }
1473 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1474 : // Return false from the JSNative in order to trigger
1475 : // an uncatchable exception.
1476 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1477 0 : return false;
1478 : }
1479 : bool arg0;
1480 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
1481 0 : return false;
1482 : }
1483 : uint64_t arg1;
1484 0 : if (!ValueToPrimitive<uint64_t, eDefault>(cx, args[1], &arg1)) {
1485 0 : return false;
1486 : }
1487 0 : self->ForceImageState(arg0, arg1);
1488 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1489 0 : args.rval().setUndefined();
1490 0 : return true;
1491 : }
1492 :
1493 : static const JSJitInfo forceImageState_methodinfo = {
1494 : { (JSJitGetterOp)forceImageState },
1495 : { prototypes::id::HTMLAppletElement },
1496 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1497 : JSJitInfo::Method,
1498 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1499 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1500 : false, /* isInfallible. False in setters. */
1501 : false, /* isMovable. Not relevant for setters. */
1502 : false, /* isEliminatable. Not relevant for setters. */
1503 : false, /* isAlwaysInSlot. Only relevant for getters. */
1504 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1505 : false, /* isTypedMethod. Only relevant for methods. */
1506 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1507 : };
1508 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1509 : static_assert(0 < 1, "There is no slot for us");
1510 :
1511 : static bool
1512 0 : get_actualType(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
1513 : {
1514 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1515 : // Return false from the JSNative in order to trigger
1516 : // an uncatchable exception.
1517 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1518 0 : return false;
1519 : }
1520 0 : DOMString result;
1521 0 : self->GetActualType(result);
1522 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1523 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
1524 0 : return false;
1525 : }
1526 0 : return true;
1527 : }
1528 :
1529 : static const JSJitInfo actualType_getterinfo = {
1530 : { (JSJitGetterOp)get_actualType },
1531 : { prototypes::id::HTMLAppletElement },
1532 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1533 : JSJitInfo::Getter,
1534 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1535 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
1536 : false, /* isInfallible. False in setters. */
1537 : false, /* isMovable. Not relevant for setters. */
1538 : false, /* isEliminatable. Not relevant for setters. */
1539 : false, /* isAlwaysInSlot. Only relevant for getters. */
1540 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1541 : false, /* isTypedMethod. Only relevant for methods. */
1542 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1543 : };
1544 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1545 : static_assert(0 < 1, "There is no slot for us");
1546 :
1547 : static bool
1548 0 : get_displayedType(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
1549 : {
1550 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1551 : // Return false from the JSNative in order to trigger
1552 : // an uncatchable exception.
1553 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1554 0 : return false;
1555 : }
1556 0 : uint32_t result(self->DisplayedType());
1557 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1558 0 : args.rval().setNumber(result);
1559 0 : return true;
1560 : }
1561 :
1562 : static const JSJitInfo displayedType_getterinfo = {
1563 : { (JSJitGetterOp)get_displayedType },
1564 : { prototypes::id::HTMLAppletElement },
1565 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1566 : JSJitInfo::Getter,
1567 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1568 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
1569 : true, /* isInfallible. False in setters. */
1570 : false, /* isMovable. Not relevant for setters. */
1571 : false, /* isEliminatable. Not relevant for setters. */
1572 : false, /* isAlwaysInSlot. Only relevant for getters. */
1573 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1574 : false, /* isTypedMethod. Only relevant for methods. */
1575 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1576 : };
1577 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1578 : static_assert(0 < 1, "There is no slot for us");
1579 :
1580 : static bool
1581 0 : getContentTypeForMIMEType(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
1582 : {
1583 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
1584 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLAppletElement.getContentTypeForMIMEType");
1585 : }
1586 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1587 : // Return false from the JSNative in order to trigger
1588 : // an uncatchable exception.
1589 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1590 0 : return false;
1591 : }
1592 0 : binding_detail::FakeString arg0;
1593 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
1594 0 : return false;
1595 : }
1596 0 : uint32_t result(self->GetContentTypeForMIMEType(NonNullHelper(Constify(arg0))));
1597 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1598 0 : args.rval().setNumber(result);
1599 0 : return true;
1600 : }
1601 :
1602 : static const JSJitInfo getContentTypeForMIMEType_methodinfo = {
1603 : { (JSJitGetterOp)getContentTypeForMIMEType },
1604 : { prototypes::id::HTMLAppletElement },
1605 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1606 : JSJitInfo::Method,
1607 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1608 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
1609 : false, /* isInfallible. False in setters. */
1610 : false, /* isMovable. Not relevant for setters. */
1611 : false, /* isEliminatable. Not relevant for setters. */
1612 : false, /* isAlwaysInSlot. Only relevant for getters. */
1613 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1614 : false, /* isTypedMethod. Only relevant for methods. */
1615 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1616 : };
1617 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1618 : static_assert(0 < 1, "There is no slot for us");
1619 :
1620 : static bool
1621 0 : getPluginAttributes(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
1622 : {
1623 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1624 : // Return false from the JSNative in order to trigger
1625 : // an uncatchable exception.
1626 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1627 0 : return false;
1628 : }
1629 0 : nsTArray<MozPluginParameter> result;
1630 0 : self->GetPluginAttributes(result);
1631 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1632 :
1633 0 : uint32_t length = result.Length();
1634 0 : JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
1635 0 : if (!returnArray) {
1636 0 : return false;
1637 : }
1638 : // Scope for 'tmp'
1639 : {
1640 0 : JS::Rooted<JS::Value> tmp(cx);
1641 0 : for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
1642 : // Control block to let us common up the JS_DefineElement calls when there
1643 : // are different ways to succeed at wrapping the object.
1644 : do {
1645 0 : if (!result[sequenceIdx0].ToObjectInternal(cx, &tmp)) {
1646 0 : return false;
1647 : }
1648 0 : break;
1649 : } while (0);
1650 0 : if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
1651 : JSPROP_ENUMERATE)) {
1652 0 : return false;
1653 : }
1654 : }
1655 : }
1656 0 : args.rval().setObject(*returnArray);
1657 0 : return true;
1658 : }
1659 :
1660 : static const JSJitInfo getPluginAttributes_methodinfo = {
1661 : { (JSJitGetterOp)getPluginAttributes },
1662 : { prototypes::id::HTMLAppletElement },
1663 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1664 : JSJitInfo::Method,
1665 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1666 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
1667 : false, /* isInfallible. False in setters. */
1668 : false, /* isMovable. Not relevant for setters. */
1669 : false, /* isEliminatable. Not relevant for setters. */
1670 : false, /* isAlwaysInSlot. Only relevant for getters. */
1671 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1672 : false, /* isTypedMethod. Only relevant for methods. */
1673 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1674 : };
1675 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1676 : static_assert(0 < 1, "There is no slot for us");
1677 :
1678 : static bool
1679 0 : getPluginParameters(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
1680 : {
1681 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1682 : // Return false from the JSNative in order to trigger
1683 : // an uncatchable exception.
1684 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1685 0 : return false;
1686 : }
1687 0 : nsTArray<MozPluginParameter> result;
1688 0 : self->GetPluginParameters(result);
1689 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1690 :
1691 0 : uint32_t length = result.Length();
1692 0 : JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
1693 0 : if (!returnArray) {
1694 0 : return false;
1695 : }
1696 : // Scope for 'tmp'
1697 : {
1698 0 : JS::Rooted<JS::Value> tmp(cx);
1699 0 : for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
1700 : // Control block to let us common up the JS_DefineElement calls when there
1701 : // are different ways to succeed at wrapping the object.
1702 : do {
1703 0 : if (!result[sequenceIdx0].ToObjectInternal(cx, &tmp)) {
1704 0 : return false;
1705 : }
1706 0 : break;
1707 : } while (0);
1708 0 : if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
1709 : JSPROP_ENUMERATE)) {
1710 0 : return false;
1711 : }
1712 : }
1713 : }
1714 0 : args.rval().setObject(*returnArray);
1715 0 : return true;
1716 : }
1717 :
1718 : static const JSJitInfo getPluginParameters_methodinfo = {
1719 : { (JSJitGetterOp)getPluginParameters },
1720 : { prototypes::id::HTMLAppletElement },
1721 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1722 : JSJitInfo::Method,
1723 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1724 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
1725 : false, /* isInfallible. False in setters. */
1726 : false, /* isMovable. Not relevant for setters. */
1727 : false, /* isEliminatable. Not relevant for setters. */
1728 : false, /* isAlwaysInSlot. Only relevant for getters. */
1729 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1730 : false, /* isTypedMethod. Only relevant for methods. */
1731 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1732 : };
1733 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1734 : static_assert(0 < 1, "There is no slot for us");
1735 :
1736 : static bool
1737 0 : playPlugin(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
1738 : {
1739 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1740 : // Return false from the JSNative in order to trigger
1741 : // an uncatchable exception.
1742 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1743 0 : return false;
1744 : }
1745 0 : binding_detail::FastErrorResult rv;
1746 0 : self->PlayPlugin(SystemCallerGuarantee(), rv);
1747 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1748 0 : return false;
1749 : }
1750 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1751 0 : args.rval().setUndefined();
1752 0 : return true;
1753 : }
1754 :
1755 : static const JSJitInfo playPlugin_methodinfo = {
1756 : { (JSJitGetterOp)playPlugin },
1757 : { prototypes::id::HTMLAppletElement },
1758 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1759 : JSJitInfo::Method,
1760 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1761 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1762 : false, /* isInfallible. False in setters. */
1763 : false, /* isMovable. Not relevant for setters. */
1764 : false, /* isEliminatable. Not relevant for setters. */
1765 : false, /* isAlwaysInSlot. Only relevant for getters. */
1766 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1767 : false, /* isTypedMethod. Only relevant for methods. */
1768 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1769 : };
1770 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1771 : static_assert(0 < 1, "There is no slot for us");
1772 :
1773 : static bool
1774 0 : reload(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
1775 : {
1776 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
1777 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLAppletElement.reload");
1778 : }
1779 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1780 : // Return false from the JSNative in order to trigger
1781 : // an uncatchable exception.
1782 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1783 0 : return false;
1784 : }
1785 : bool arg0;
1786 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
1787 0 : return false;
1788 : }
1789 0 : binding_detail::FastErrorResult rv;
1790 0 : self->Reload(arg0, rv);
1791 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1792 0 : return false;
1793 : }
1794 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1795 0 : args.rval().setUndefined();
1796 0 : return true;
1797 : }
1798 :
1799 : static const JSJitInfo reload_methodinfo = {
1800 : { (JSJitGetterOp)reload },
1801 : { prototypes::id::HTMLAppletElement },
1802 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1803 : JSJitInfo::Method,
1804 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1805 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1806 : false, /* isInfallible. False in setters. */
1807 : false, /* isMovable. Not relevant for setters. */
1808 : false, /* isEliminatable. Not relevant for setters. */
1809 : false, /* isAlwaysInSlot. Only relevant for getters. */
1810 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1811 : false, /* isTypedMethod. Only relevant for methods. */
1812 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1813 : };
1814 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1815 : static_assert(0 < 1, "There is no slot for us");
1816 :
1817 : static bool
1818 0 : get_activated(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
1819 : {
1820 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1821 : // Return false from the JSNative in order to trigger
1822 : // an uncatchable exception.
1823 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1824 0 : return false;
1825 : }
1826 0 : bool result(self->Activated());
1827 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1828 0 : args.rval().setBoolean(result);
1829 0 : return true;
1830 : }
1831 :
1832 : static const JSJitInfo activated_getterinfo = {
1833 : { (JSJitGetterOp)get_activated },
1834 : { prototypes::id::HTMLAppletElement },
1835 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1836 : JSJitInfo::Getter,
1837 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1838 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1839 : true, /* isInfallible. False in setters. */
1840 : false, /* isMovable. Not relevant for setters. */
1841 : false, /* isEliminatable. Not relevant for setters. */
1842 : false, /* isAlwaysInSlot. Only relevant for getters. */
1843 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1844 : false, /* isTypedMethod. Only relevant for methods. */
1845 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1846 : };
1847 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1848 : static_assert(0 < 1, "There is no slot for us");
1849 :
1850 : static bool
1851 0 : get_srcURI(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
1852 : {
1853 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1854 : // Return false from the JSNative in order to trigger
1855 : // an uncatchable exception.
1856 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1857 0 : return false;
1858 : }
1859 0 : auto result(StrongOrRawPtr<nsIURI>(self->GetSrcURI()));
1860 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1861 0 : if (!result) {
1862 0 : args.rval().setNull();
1863 0 : return true;
1864 : }
1865 0 : if (!WrapObject(cx, result, &NS_GET_IID(nsIURI), args.rval())) {
1866 0 : return false;
1867 : }
1868 0 : return true;
1869 : }
1870 :
1871 : static const JSJitInfo srcURI_getterinfo = {
1872 : { (JSJitGetterOp)get_srcURI },
1873 : { prototypes::id::HTMLAppletElement },
1874 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1875 : JSJitInfo::Getter,
1876 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1877 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
1878 : false, /* isInfallible. False in setters. */
1879 : false, /* isMovable. Not relevant for setters. */
1880 : false, /* isEliminatable. Not relevant for setters. */
1881 : false, /* isAlwaysInSlot. Only relevant for getters. */
1882 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1883 : false, /* isTypedMethod. Only relevant for methods. */
1884 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1885 : };
1886 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1887 : static_assert(0 < 1, "There is no slot for us");
1888 :
1889 : static bool
1890 0 : get_defaultFallbackType(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
1891 : {
1892 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1893 : // Return false from the JSNative in order to trigger
1894 : // an uncatchable exception.
1895 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1896 0 : return false;
1897 : }
1898 0 : uint32_t result(self->DefaultFallbackType());
1899 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1900 0 : args.rval().setNumber(result);
1901 0 : return true;
1902 : }
1903 :
1904 : static const JSJitInfo defaultFallbackType_getterinfo = {
1905 : { (JSJitGetterOp)get_defaultFallbackType },
1906 : { prototypes::id::HTMLAppletElement },
1907 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1908 : JSJitInfo::Getter,
1909 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1910 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
1911 : true, /* isInfallible. False in setters. */
1912 : false, /* isMovable. Not relevant for setters. */
1913 : false, /* isEliminatable. Not relevant for setters. */
1914 : false, /* isAlwaysInSlot. Only relevant for getters. */
1915 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1916 : false, /* isTypedMethod. Only relevant for methods. */
1917 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1918 : };
1919 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1920 : static_assert(0 < 1, "There is no slot for us");
1921 :
1922 : static bool
1923 0 : get_pluginFallbackType(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
1924 : {
1925 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1926 : // Return false from the JSNative in order to trigger
1927 : // an uncatchable exception.
1928 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1929 0 : return false;
1930 : }
1931 0 : uint32_t result(self->PluginFallbackType());
1932 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1933 0 : args.rval().setNumber(result);
1934 0 : return true;
1935 : }
1936 :
1937 : static const JSJitInfo pluginFallbackType_getterinfo = {
1938 : { (JSJitGetterOp)get_pluginFallbackType },
1939 : { prototypes::id::HTMLAppletElement },
1940 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1941 : JSJitInfo::Getter,
1942 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1943 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
1944 : true, /* isInfallible. False in setters. */
1945 : false, /* isMovable. Not relevant for setters. */
1946 : false, /* isEliminatable. Not relevant for setters. */
1947 : false, /* isAlwaysInSlot. Only relevant for getters. */
1948 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1949 : false, /* isTypedMethod. Only relevant for methods. */
1950 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1951 : };
1952 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1953 : static_assert(0 < 1, "There is no slot for us");
1954 :
1955 : static bool
1956 0 : get_hasRunningPlugin(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
1957 : {
1958 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1959 : // Return false from the JSNative in order to trigger
1960 : // an uncatchable exception.
1961 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1962 0 : return false;
1963 : }
1964 0 : bool result(self->HasRunningPlugin());
1965 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1966 0 : args.rval().setBoolean(result);
1967 0 : return true;
1968 : }
1969 :
1970 : static const JSJitInfo hasRunningPlugin_getterinfo = {
1971 : { (JSJitGetterOp)get_hasRunningPlugin },
1972 : { prototypes::id::HTMLAppletElement },
1973 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
1974 : JSJitInfo::Getter,
1975 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1976 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1977 : true, /* isInfallible. False in setters. */
1978 : false, /* isMovable. Not relevant for setters. */
1979 : false, /* isEliminatable. Not relevant for setters. */
1980 : false, /* isAlwaysInSlot. Only relevant for getters. */
1981 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1982 : false, /* isTypedMethod. Only relevant for methods. */
1983 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1984 : };
1985 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1986 : static_assert(0 < 1, "There is no slot for us");
1987 :
1988 : static bool
1989 0 : skipFakePlugins(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
1990 : {
1991 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1992 : // Return false from the JSNative in order to trigger
1993 : // an uncatchable exception.
1994 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1995 0 : return false;
1996 : }
1997 0 : binding_detail::FastErrorResult rv;
1998 0 : self->SkipFakePlugins(rv);
1999 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2000 0 : return false;
2001 : }
2002 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2003 0 : args.rval().setUndefined();
2004 0 : return true;
2005 : }
2006 :
2007 : static const JSJitInfo skipFakePlugins_methodinfo = {
2008 : { (JSJitGetterOp)skipFakePlugins },
2009 : { prototypes::id::HTMLAppletElement },
2010 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
2011 : JSJitInfo::Method,
2012 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2013 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2014 : false, /* isInfallible. False in setters. */
2015 : false, /* isMovable. Not relevant for setters. */
2016 : false, /* isEliminatable. Not relevant for setters. */
2017 : false, /* isAlwaysInSlot. Only relevant for getters. */
2018 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2019 : false, /* isTypedMethod. Only relevant for methods. */
2020 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2021 : };
2022 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2023 : static_assert(0 < 1, "There is no slot for us");
2024 :
2025 : static bool
2026 0 : get_runID(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
2027 : {
2028 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
2029 : // Return false from the JSNative in order to trigger
2030 : // an uncatchable exception.
2031 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2032 0 : return false;
2033 : }
2034 0 : binding_detail::FastErrorResult rv;
2035 0 : uint32_t result(self->GetRunID(SystemCallerGuarantee(), rv));
2036 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2037 0 : return false;
2038 : }
2039 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2040 0 : args.rval().setNumber(result);
2041 0 : return true;
2042 : }
2043 :
2044 : static const JSJitInfo runID_getterinfo = {
2045 : { (JSJitGetterOp)get_runID },
2046 : { prototypes::id::HTMLAppletElement },
2047 : { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
2048 : JSJitInfo::Getter,
2049 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2050 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
2051 : false, /* isInfallible. False in setters. */
2052 : false, /* isMovable. Not relevant for setters. */
2053 : false, /* isEliminatable. Not relevant for setters. */
2054 : false, /* isAlwaysInSlot. Only relevant for getters. */
2055 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2056 : false, /* isTypedMethod. Only relevant for methods. */
2057 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2058 : };
2059 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2060 : static_assert(0 < 1, "There is no slot for us");
2061 :
2062 : static bool
2063 0 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
2064 : {
2065 0 : mozilla::dom::HTMLSharedObjectElement* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::HTMLSharedObjectElement>(obj);
2066 : // We don't want to preserve if we don't have a wrapper, and we
2067 : // obviously can't preserve if we're not initialized.
2068 0 : if (self && self->GetWrapperPreserveColor()) {
2069 0 : PreserveWrapper(self);
2070 : }
2071 0 : return true;
2072 : }
2073 :
2074 : static void
2075 0 : _finalize(js::FreeOp* fop, JSObject* obj)
2076 : {
2077 0 : mozilla::dom::HTMLSharedObjectElement* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::HTMLSharedObjectElement>(obj);
2078 0 : if (self) {
2079 0 : ClearWrapper(self, self, obj);
2080 0 : AddForDeferredFinalization<mozilla::dom::HTMLSharedObjectElement>(self);
2081 : }
2082 0 : }
2083 :
2084 : static void
2085 0 : _objectMoved(JSObject* obj, const JSObject* old)
2086 : {
2087 0 : mozilla::dom::HTMLSharedObjectElement* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::HTMLSharedObjectElement>(obj);
2088 0 : if (self) {
2089 0 : UpdateWrapper(self, self, obj, old);
2090 : }
2091 0 : }
2092 :
2093 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
2094 : #if defined(__clang__)
2095 : #pragma clang diagnostic push
2096 : #pragma clang diagnostic ignored "-Wmissing-braces"
2097 : #endif
2098 : static const JSFunctionSpec sChromeMethods_specs[] = {
2099 : JS_FNSPEC("setIsPrerendered", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setIsPrerendered_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
2100 : JS_FNSPEC("presetOpenerWindow", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&presetOpenerWindow_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2101 : JS_FNSPEC("swapFrameLoaders", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&swapFrameLoaders_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2102 : JS_FNSPEC("addObserver", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&addObserver_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2103 : JS_FNSPEC("removeObserver", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&removeObserver_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2104 : JS_FNSPEC("getRequest", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getRequest_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2105 : JS_FNSPEC("getRequestType", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getRequestType_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2106 : JS_FNSPEC("forceReload", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&forceReload_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
2107 : JS_FNSPEC("forceImageState", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&forceImageState_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
2108 : JS_FNSPEC("getContentTypeForMIMEType", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getContentTypeForMIMEType_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2109 : JS_FNSPEC("getPluginAttributes", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getPluginAttributes_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
2110 : JS_FNSPEC("getPluginParameters", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getPluginParameters_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
2111 : JS_FNSPEC("playPlugin", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&playPlugin_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
2112 : JS_FNSPEC("reload", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&reload_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2113 : JS_FNSPEC("skipFakePlugins", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&skipFakePlugins_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
2114 : JS_FS_END
2115 : };
2116 : #if defined(__clang__)
2117 : #pragma clang diagnostic pop
2118 : #endif
2119 :
2120 :
2121 : // Can't be const because the pref-enabled boolean needs to be writable
2122 : static Prefable<const JSFunctionSpec> sChromeMethods[] = {
2123 : { nullptr, &sChromeMethods_specs[0] },
2124 : { nullptr, nullptr }
2125 : };
2126 :
2127 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
2128 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
2129 : static_assert(15 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
2130 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
2131 :
2132 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
2133 : #if defined(__clang__)
2134 : #pragma clang diagnostic push
2135 : #pragma clang diagnostic ignored "-Wmissing-braces"
2136 : #endif
2137 : static const JSPropertySpec sAttributes_specs[] = {
2138 : { "align", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &align_getterinfo, GenericBindingSetter, &align_setterinfo },
2139 : { "alt", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &alt_getterinfo, GenericBindingSetter, &alt_setterinfo },
2140 : { "archive", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &archive_getterinfo, GenericBindingSetter, &archive_setterinfo },
2141 : { "code", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &code_getterinfo, GenericBindingSetter, &code_setterinfo },
2142 : { "codeBase", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &codeBase_getterinfo, GenericBindingSetter, &codeBase_setterinfo },
2143 : { "height", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &height_getterinfo, GenericBindingSetter, &height_setterinfo },
2144 : { "hspace", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &hspace_getterinfo, GenericBindingSetter, &hspace_setterinfo },
2145 : { "name", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &name_getterinfo, GenericBindingSetter, &name_setterinfo },
2146 : { "object", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &object_getterinfo, GenericBindingSetter, &object_setterinfo },
2147 : { "vspace", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &vspace_getterinfo, GenericBindingSetter, &vspace_setterinfo },
2148 : { "width", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &width_getterinfo, GenericBindingSetter, &width_setterinfo },
2149 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
2150 : };
2151 : #if defined(__clang__)
2152 : #pragma clang diagnostic pop
2153 : #endif
2154 :
2155 :
2156 : // Can't be const because the pref-enabled boolean needs to be writable
2157 : static Prefable<const JSPropertySpec> sAttributes[] = {
2158 : { nullptr, &sAttributes_specs[0] },
2159 : { nullptr, nullptr }
2160 : };
2161 :
2162 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
2163 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
2164 : static_assert(11 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
2165 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
2166 :
2167 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
2168 : #if defined(__clang__)
2169 : #pragma clang diagnostic push
2170 : #pragma clang diagnostic ignored "-Wmissing-braces"
2171 : #endif
2172 : static const JSPropertySpec sChromeAttributes_specs[] = {
2173 : { "frameLoader", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &frameLoader_getterinfo, nullptr, nullptr },
2174 : { "loadingEnabled", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &loadingEnabled_getterinfo, GenericBindingSetter, &loadingEnabled_setterinfo },
2175 : { "imageBlockingStatus", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &imageBlockingStatus_getterinfo, nullptr, nullptr },
2176 : { "currentURI", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, ¤tURI_getterinfo, nullptr, nullptr },
2177 : { "actualType", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &actualType_getterinfo, nullptr, nullptr },
2178 : { "displayedType", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &displayedType_getterinfo, nullptr, nullptr },
2179 : { "activated", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &activated_getterinfo, nullptr, nullptr },
2180 : { "srcURI", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &srcURI_getterinfo, nullptr, nullptr },
2181 : { "defaultFallbackType", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &defaultFallbackType_getterinfo, nullptr, nullptr },
2182 : { "pluginFallbackType", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &pluginFallbackType_getterinfo, nullptr, nullptr },
2183 : { "hasRunningPlugin", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &hasRunningPlugin_getterinfo, nullptr, nullptr },
2184 : { "runID", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &runID_getterinfo, nullptr, nullptr },
2185 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
2186 : };
2187 : #if defined(__clang__)
2188 : #pragma clang diagnostic pop
2189 : #endif
2190 :
2191 :
2192 : // Can't be const because the pref-enabled boolean needs to be writable
2193 : static Prefable<const JSPropertySpec> sChromeAttributes[] = {
2194 : { nullptr, &sChromeAttributes_specs[0] },
2195 : { nullptr, nullptr }
2196 : };
2197 :
2198 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
2199 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
2200 : static_assert(12 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
2201 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
2202 :
2203 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
2204 : #if defined(__clang__)
2205 : #pragma clang diagnostic push
2206 : #pragma clang diagnostic ignored "-Wmissing-braces"
2207 : #endif
2208 : static const ConstantSpec sChromeConstants_specs[] = {
2209 : { "UNKNOWN_REQUEST", JS::Int32Value(-1) },
2210 : { "CURRENT_REQUEST", JS::Int32Value(0) },
2211 : { "PENDING_REQUEST", JS::Int32Value(1) },
2212 : { "TYPE_LOADING", JS::NumberValue(0U) },
2213 : { "TYPE_IMAGE", JS::NumberValue(1U) },
2214 : { "TYPE_PLUGIN", JS::NumberValue(2U) },
2215 : { "TYPE_FAKE_PLUGIN", JS::NumberValue(3U) },
2216 : { "TYPE_DOCUMENT", JS::NumberValue(4U) },
2217 : { "TYPE_NULL", JS::NumberValue(5U) },
2218 : { "PLUGIN_UNSUPPORTED", JS::NumberValue(0U) },
2219 : { "PLUGIN_ALTERNATE", JS::NumberValue(1U) },
2220 : { "PLUGIN_DISABLED", JS::NumberValue(2U) },
2221 : { "PLUGIN_BLOCKLISTED", JS::NumberValue(3U) },
2222 : { "PLUGIN_OUTDATED", JS::NumberValue(4U) },
2223 : { "PLUGIN_CRASHED", JS::NumberValue(5U) },
2224 : { "PLUGIN_SUPPRESSED", JS::NumberValue(6U) },
2225 : { "PLUGIN_USER_DISABLED", JS::NumberValue(7U) },
2226 : { "PLUGIN_CLICK_TO_PLAY", JS::NumberValue(8U) },
2227 : { "PLUGIN_VULNERABLE_UPDATABLE", JS::NumberValue(9U) },
2228 : { "PLUGIN_VULNERABLE_NO_UPDATE", JS::NumberValue(10U) },
2229 : { 0, JS::UndefinedValue() }
2230 : };
2231 : #if defined(__clang__)
2232 : #pragma clang diagnostic pop
2233 : #endif
2234 :
2235 :
2236 : // Can't be const because the pref-enabled boolean needs to be writable
2237 : static Prefable<const ConstantSpec> sChromeConstants[] = {
2238 : { nullptr, &sChromeConstants_specs[0] },
2239 : { nullptr, nullptr }
2240 : };
2241 :
2242 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
2243 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
2244 : static_assert(20 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
2245 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
2246 :
2247 :
2248 : static uint16_t sNativeProperties_sortedPropertyIndices[11];
2249 : static PropertyInfo sNativeProperties_propertyInfos[11];
2250 :
2251 : static const NativePropertiesN<1> sNativeProperties = {
2252 : false, 0,
2253 : false, 0,
2254 : false, 0,
2255 : true, 0 /* sAttributes */,
2256 : false, 0,
2257 : false, 0,
2258 : false, 0,
2259 : -1,
2260 : 11,
2261 : sNativeProperties_sortedPropertyIndices,
2262 : {
2263 : { sAttributes, &sNativeProperties_propertyInfos[0] }
2264 : }
2265 : };
2266 : static_assert(11 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
2267 : "We have a property info count that is oversized");
2268 :
2269 : static uint16_t sChromeOnlyNativeProperties_sortedPropertyIndices[47];
2270 : static PropertyInfo sChromeOnlyNativeProperties_propertyInfos[47];
2271 :
2272 : static const NativePropertiesN<3> sChromeOnlyNativeProperties = {
2273 : false, 0,
2274 : false, 0,
2275 : true, 0 /* sChromeMethods */,
2276 : true, 1 /* sChromeAttributes */,
2277 : false, 0,
2278 : false, 0,
2279 : true, 2 /* sChromeConstants */,
2280 : -1,
2281 : 47,
2282 : sChromeOnlyNativeProperties_sortedPropertyIndices,
2283 : {
2284 : { sChromeMethods, &sChromeOnlyNativeProperties_propertyInfos[0] },
2285 : { sChromeAttributes, &sChromeOnlyNativeProperties_propertyInfos[15] },
2286 : { sChromeConstants, &sChromeOnlyNativeProperties_propertyInfos[27] }
2287 : }
2288 : };
2289 : static_assert(47 < 1ull << CHAR_BIT * sizeof(sChromeOnlyNativeProperties.propertyInfoCount),
2290 : "We have a property info count that is oversized");
2291 :
2292 : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
2293 : {
2294 : "Function",
2295 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
2296 : &sBoringInterfaceObjectClassClassOps,
2297 : JS_NULL_CLASS_SPEC,
2298 : JS_NULL_CLASS_EXT,
2299 : &sInterfaceObjectClassObjectOps
2300 : },
2301 : eInterface,
2302 : true,
2303 : prototypes::id::HTMLAppletElement,
2304 : PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth,
2305 : sNativePropertyHooks,
2306 : "function HTMLAppletElement() {\n [native code]\n}",
2307 : HTMLElementBinding::GetConstructorObject
2308 : };
2309 :
2310 : static bool
2311 0 : _resolve(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, bool* resolvedp)
2312 : {
2313 0 : mozilla::dom::HTMLSharedObjectElement* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::HTMLSharedObjectElement>(obj);
2314 0 : JS::Rooted<JS::PropertyDescriptor> desc(cx);
2315 0 : if (!self->DoResolve(cx, obj, id, &desc)) {
2316 0 : return false;
2317 : }
2318 0 : if (!desc.object()) {
2319 0 : return true;
2320 : }
2321 : // If desc.value() is undefined, then the DoResolve call
2322 : // has already defined it on the object. Don't try to also
2323 : // define it.
2324 0 : if (!desc.value().isUndefined()) {
2325 0 : desc.attributesRef() |= JSPROP_RESOLVING;
2326 0 : if (!JS_DefinePropertyById(cx, obj, id, desc)) {
2327 0 : return false;
2328 : }
2329 : }
2330 0 : *resolvedp = true;
2331 0 : return true;
2332 : }
2333 :
2334 : static bool
2335 0 : _mayResolve(const JSAtomState& names, jsid id, JSObject* maybeObj)
2336 : {
2337 0 : return mozilla::dom::HTMLSharedObjectElement::MayResolve(id);
2338 : }
2339 :
2340 : static bool
2341 0 : _newEnumerate(JSContext* cx, JS::Handle<JSObject*> obj, JS::AutoIdVector& properties, bool enumerableOnly)
2342 : {
2343 : mozilla::dom::HTMLSharedObjectElement* self;
2344 0 : JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
2345 : {
2346 0 : nsresult rv = UnwrapObject<prototypes::id::HTMLAppletElement, mozilla::dom::HTMLSharedObjectElement>(&rootSelf, self);
2347 0 : if (NS_FAILED(rv)) {
2348 0 : return ThrowErrorMessage(cx, MSG_THIS_DOES_NOT_IMPLEMENT_INTERFACE, "Value", "HTMLAppletElement");
2349 : }
2350 : }
2351 0 : binding_detail::FastErrorResult rv;
2352 0 : self->GetOwnPropertyNames(cx, properties, enumerableOnly, rv);
2353 0 : if (rv.MaybeSetPendingException(cx)) {
2354 0 : return false;
2355 : }
2356 0 : return true;
2357 : }
2358 :
2359 : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
2360 : {
2361 : "HTMLAppletElementPrototype",
2362 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
2363 : JS_NULL_CLASS_OPS,
2364 : JS_NULL_CLASS_SPEC,
2365 : JS_NULL_CLASS_EXT,
2366 : JS_NULL_OBJECT_OPS
2367 : },
2368 : eInterfacePrototype,
2369 : false,
2370 : prototypes::id::HTMLAppletElement,
2371 : PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth,
2372 : sNativePropertyHooks,
2373 : "[object HTMLAppletElementPrototype]",
2374 : HTMLElementBinding::GetProtoObject
2375 : };
2376 :
2377 : JSObject*
2378 0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
2379 : {
2380 0 : return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
2381 : }
2382 :
2383 : static const js::ClassOps sClassOps = {
2384 : _addProperty, /* addProperty */
2385 : nullptr, /* delProperty */
2386 : nullptr, /* getProperty */
2387 : nullptr, /* setProperty */
2388 : nullptr, /* enumerate */
2389 : _newEnumerate, /* newEnumerate */
2390 : _resolve, /* resolve */
2391 : _mayResolve, /* mayResolve */
2392 : _finalize, /* finalize */
2393 : nullptr, /* call */
2394 : nullptr, /* hasInstance */
2395 : nullptr, /* construct */
2396 : nullptr, /* trace */
2397 : };
2398 :
2399 : static const js::ClassExtension sClassExtension = {
2400 : nullptr, /* weakmapKeyDelegateOp */
2401 : _objectMoved /* objectMovedOp */
2402 : };
2403 :
2404 : static const DOMJSClass sClass = {
2405 : { "HTMLAppletElement",
2406 : JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
2407 : &sClassOps,
2408 : JS_NULL_CLASS_SPEC,
2409 : &sClassExtension,
2410 : JS_NULL_OBJECT_OPS
2411 : },
2412 : { prototypes::id::EventTarget, prototypes::id::Node, prototypes::id::Element, prototypes::id::HTMLElement, prototypes::id::HTMLAppletElement, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
2413 : IsBaseOf<nsISupports, mozilla::dom::HTMLSharedObjectElement >::value,
2414 : sNativePropertyHooks,
2415 : FindAssociatedGlobalForNative<mozilla::dom::HTMLSharedObjectElement>::Get,
2416 : GetProtoObjectHandle,
2417 : GetCCParticipant<mozilla::dom::HTMLSharedObjectElement>::Get()
2418 : };
2419 : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
2420 : "Must have the right minimal number of reserved slots.");
2421 : static_assert(1 >= 1,
2422 : "Must have enough reserved slots.");
2423 :
2424 : const JSClass*
2425 0 : GetJSClass()
2426 : {
2427 0 : return sClass.ToJSClass();
2428 : }
2429 :
2430 : bool
2431 0 : Wrap(JSContext* aCx, mozilla::dom::HTMLSharedObjectElement* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
2432 : {
2433 : MOZ_ASSERT(static_cast<mozilla::dom::HTMLSharedObjectElement*>(aObject) ==
2434 : reinterpret_cast<mozilla::dom::HTMLSharedObjectElement*>(aObject),
2435 : "Multiple inheritance for mozilla::dom::HTMLSharedObjectElement is broken.");
2436 : MOZ_ASSERT(static_cast<nsGenericHTMLElement*>(aObject) ==
2437 : reinterpret_cast<nsGenericHTMLElement*>(aObject),
2438 : "Multiple inheritance for nsGenericHTMLElement is broken.");
2439 : MOZ_ASSERT(static_cast<mozilla::dom::Element*>(aObject) ==
2440 : reinterpret_cast<mozilla::dom::Element*>(aObject),
2441 : "Multiple inheritance for mozilla::dom::Element is broken.");
2442 : MOZ_ASSERT(static_cast<nsINode*>(aObject) ==
2443 : reinterpret_cast<nsINode*>(aObject),
2444 : "Multiple inheritance for nsINode is broken.");
2445 : MOZ_ASSERT(static_cast<mozilla::dom::EventTarget*>(aObject) ==
2446 : reinterpret_cast<mozilla::dom::EventTarget*>(aObject),
2447 : "Multiple inheritance for mozilla::dom::EventTarget is broken.");
2448 0 : MOZ_ASSERT(ToSupportsIsCorrect(aObject));
2449 0 : MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
2450 0 : MOZ_ASSERT(!aCache->GetWrapper(),
2451 : "You should probably not be using Wrap() directly; use "
2452 : "GetOrCreateDOMReflector instead");
2453 :
2454 0 : MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
2455 : "nsISupports must be on our primary inheritance chain");
2456 :
2457 0 : JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
2458 0 : if (!global) {
2459 0 : return false;
2460 : }
2461 0 : MOZ_ASSERT(JS_IsGlobalObject(global));
2462 0 : MOZ_ASSERT(JS::ObjectIsNotGray(global));
2463 :
2464 : // That might have ended up wrapping us already, due to the wonders
2465 : // of XBL. Check for that, and bail out as needed.
2466 0 : aReflector.set(aCache->GetWrapper());
2467 0 : if (aReflector) {
2468 : #ifdef DEBUG
2469 0 : binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
2470 : #endif // DEBUG
2471 0 : return true;
2472 : }
2473 :
2474 0 : JSAutoCompartment ac(aCx, global);
2475 0 : JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
2476 0 : if (!canonicalProto) {
2477 0 : return false;
2478 : }
2479 0 : JS::Rooted<JSObject*> proto(aCx);
2480 0 : if (aGivenProto) {
2481 0 : proto = aGivenProto;
2482 : // Unfortunately, while aGivenProto was in the compartment of aCx
2483 : // coming in, we changed compartments to that of "parent" so may need
2484 : // to wrap the proto here.
2485 0 : if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
2486 0 : if (!JS_WrapObject(aCx, &proto)) {
2487 0 : return false;
2488 : }
2489 : }
2490 : } else {
2491 0 : proto = canonicalProto;
2492 : }
2493 :
2494 0 : BindingJSObjectCreator<mozilla::dom::HTMLSharedObjectElement> creator(aCx);
2495 0 : creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
2496 0 : if (!aReflector) {
2497 0 : return false;
2498 : }
2499 :
2500 0 : aCache->SetWrapper(aReflector);
2501 0 : creator.InitializationSucceeded();
2502 :
2503 0 : MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
2504 : aCache->GetWrapperPreserveColor() == aReflector);
2505 : // If proto != canonicalProto, we have to preserve our wrapper;
2506 : // otherwise we won't be able to properly recreate it later, since
2507 : // we won't know what proto to use. Note that we don't check
2508 : // aGivenProto here, since it's entirely possible (and even
2509 : // somewhat common) to have a non-null aGivenProto which is the
2510 : // same as canonicalProto.
2511 0 : if (proto != canonicalProto) {
2512 0 : PreserveWrapper(aObject);
2513 : }
2514 :
2515 0 : return true;
2516 : }
2517 :
2518 : const NativePropertyHooks sNativePropertyHooks[] = { {
2519 : nullptr,
2520 : nullptr,
2521 : nullptr,
2522 : { sNativeProperties.Upcast(), sChromeOnlyNativeProperties.Upcast() },
2523 : prototypes::id::HTMLAppletElement,
2524 : constructors::id::HTMLAppletElement,
2525 : HTMLElementBinding::sNativePropertyHooks,
2526 : &DefaultXrayExpandoObjectClass
2527 : } };
2528 :
2529 : void
2530 0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
2531 : {
2532 0 : JS::Handle<JSObject*> parentProto(HTMLElementBinding::GetProtoObjectHandle(aCx));
2533 0 : if (!parentProto) {
2534 0 : return;
2535 : }
2536 :
2537 0 : JS::Handle<JSObject*> constructorProto(HTMLElementBinding::GetConstructorObjectHandle(aCx));
2538 0 : if (!constructorProto) {
2539 0 : return;
2540 : }
2541 :
2542 : static bool sIdsInited = false;
2543 0 : if (!sIdsInited && NS_IsMainThread()) {
2544 0 : if (!InitIds(aCx, sNativeProperties.Upcast())) {
2545 0 : return;
2546 : }
2547 0 : if (!InitIds(aCx, sChromeOnlyNativeProperties.Upcast())) {
2548 0 : return;
2549 : }
2550 0 : sIdsInited = true;
2551 : }
2552 :
2553 0 : JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::HTMLAppletElement);
2554 0 : JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::HTMLAppletElement);
2555 0 : dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
2556 : &sPrototypeClass.mBase, protoCache,
2557 : constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
2558 : interfaceCache,
2559 : sNativeProperties.Upcast(),
2560 0 : nsContentUtils::ThreadsafeIsSystemCaller(aCx) ? sChromeOnlyNativeProperties.Upcast() : nullptr,
2561 : "HTMLAppletElement", aDefineOnGlobal,
2562 : nullptr,
2563 0 : false);
2564 : }
2565 :
2566 : JS::Handle<JSObject*>
2567 0 : GetProtoObjectHandle(JSContext* aCx)
2568 : {
2569 : /* Get the interface prototype object for this class. This will create the
2570 : object as needed. */
2571 0 : bool aDefineOnGlobal = true;
2572 :
2573 : /* Make sure our global is sane. Hopefully we can remove this sometime */
2574 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
2575 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
2576 0 : return nullptr;
2577 : }
2578 :
2579 : /* Check to see whether the interface objects are already installed */
2580 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
2581 0 : if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::HTMLAppletElement)) {
2582 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
2583 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
2584 : }
2585 :
2586 : /*
2587 : * The object might _still_ be null, but that's OK.
2588 : *
2589 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
2590 : * traced by TraceProtoAndIfaceCache() and its contents are never
2591 : * changed after they have been set.
2592 : *
2593 : * Calling address() avoids the read read barrier that does gray
2594 : * unmarking, but it's not possible for the object to be gray here.
2595 : */
2596 :
2597 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::HTMLAppletElement);
2598 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
2599 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
2600 : }
2601 :
2602 : JS::Handle<JSObject*>
2603 0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
2604 : {
2605 : /* Get the interface object for this class. This will create the object as
2606 : needed. */
2607 :
2608 : /* Make sure our global is sane. Hopefully we can remove this sometime */
2609 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
2610 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
2611 0 : return nullptr;
2612 : }
2613 :
2614 : /* Check to see whether the interface objects are already installed */
2615 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
2616 0 : if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::HTMLAppletElement)) {
2617 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
2618 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
2619 : }
2620 :
2621 : /*
2622 : * The object might _still_ be null, but that's OK.
2623 : *
2624 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
2625 : * traced by TraceProtoAndIfaceCache() and its contents are never
2626 : * changed after they have been set.
2627 : *
2628 : * Calling address() avoids the read read barrier that does gray
2629 : * unmarking, but it's not possible for the object to be gray here.
2630 : */
2631 :
2632 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::HTMLAppletElement);
2633 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
2634 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
2635 : }
2636 :
2637 : JSObject*
2638 0 : GetConstructorObject(JSContext* aCx)
2639 : {
2640 0 : return GetConstructorObjectHandle(aCx);
2641 : }
2642 :
2643 : } // namespace HTMLAppletElementBinding
2644 :
2645 :
2646 :
2647 : } // namespace dom
2648 : } // namespace mozilla
|