Line data Source code
1 : /* THIS FILE IS AUTOGENERATED FROM HTMLFrameSetElement.webidl BY Codegen.py - DO NOT EDIT */
2 :
3 : #include "EventHandlerBinding.h"
4 : #include "HTMLElementBinding.h"
5 : #include "HTMLFrameSetElementBinding.h"
6 : #include "WrapperFactory.h"
7 : #include "mozilla/OwningNonNull.h"
8 : #include "mozilla/dom/BindingUtils.h"
9 : #include "mozilla/dom/CustomElementRegistry.h"
10 : #include "mozilla/dom/DOMJSClass.h"
11 : #include "mozilla/dom/HTMLFrameSetElement.h"
12 : #include "mozilla/dom/NonRefcountedDOMObject.h"
13 : #include "mozilla/dom/Nullable.h"
14 : #include "mozilla/dom/XrayExpandoClass.h"
15 :
16 : namespace mozilla {
17 : namespace dom {
18 :
19 : namespace HTMLFrameSetElementBinding {
20 :
21 : static_assert(IsRefcounted<NativeType>::value == IsRefcounted<HTMLElementBinding::NativeType>::value,
22 : "Can't inherit from an interface with a different ownership model.");
23 :
24 : static bool
25 0 : get_cols(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitGetterCallArgs args)
26 : {
27 0 : DOMString result;
28 0 : self->GetCols(result);
29 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
30 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
31 0 : return false;
32 : }
33 0 : return true;
34 : }
35 :
36 : static bool
37 0 : set_cols(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitSetterCallArgs args)
38 : {
39 0 : binding_detail::FakeString arg0;
40 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
41 0 : return false;
42 : }
43 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
44 0 : Maybe<AutoCEReaction> ceReaction;
45 0 : if (reactionsStack) {
46 0 : ceReaction.emplace(reactionsStack);
47 : }
48 0 : binding_detail::FastErrorResult rv;
49 0 : self->SetCols(NonNullHelper(Constify(arg0)), rv);
50 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
51 0 : return false;
52 : }
53 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
54 :
55 0 : return true;
56 : }
57 :
58 : static const JSJitInfo cols_getterinfo = {
59 : { (JSJitGetterOp)get_cols },
60 : { prototypes::id::HTMLFrameSetElement },
61 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
62 : JSJitInfo::Getter,
63 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
64 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
65 : false, /* isInfallible. False in setters. */
66 : false, /* isMovable. Not relevant for setters. */
67 : false, /* isEliminatable. Not relevant for setters. */
68 : false, /* isAlwaysInSlot. Only relevant for getters. */
69 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
70 : false, /* isTypedMethod. Only relevant for methods. */
71 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
72 : };
73 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
74 : static_assert(0 < 1, "There is no slot for us");
75 : static const JSJitInfo cols_setterinfo = {
76 : { (JSJitGetterOp)set_cols },
77 : { prototypes::id::HTMLFrameSetElement },
78 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
79 : JSJitInfo::Setter,
80 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
81 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
82 : false, /* isInfallible. False in setters. */
83 : false, /* isMovable. Not relevant for setters. */
84 : false, /* isEliminatable. Not relevant for setters. */
85 : false, /* isAlwaysInSlot. Only relevant for getters. */
86 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
87 : false, /* isTypedMethod. Only relevant for methods. */
88 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
89 : };
90 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
91 : static_assert(0 < 1, "There is no slot for us");
92 :
93 : static bool
94 0 : get_rows(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitGetterCallArgs args)
95 : {
96 0 : DOMString result;
97 0 : self->GetRows(result);
98 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
99 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
100 0 : return false;
101 : }
102 0 : return true;
103 : }
104 :
105 : static bool
106 0 : set_rows(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitSetterCallArgs args)
107 : {
108 0 : binding_detail::FakeString arg0;
109 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
110 0 : return false;
111 : }
112 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
113 0 : Maybe<AutoCEReaction> ceReaction;
114 0 : if (reactionsStack) {
115 0 : ceReaction.emplace(reactionsStack);
116 : }
117 0 : binding_detail::FastErrorResult rv;
118 0 : self->SetRows(NonNullHelper(Constify(arg0)), rv);
119 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
120 0 : return false;
121 : }
122 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
123 :
124 0 : return true;
125 : }
126 :
127 : static const JSJitInfo rows_getterinfo = {
128 : { (JSJitGetterOp)get_rows },
129 : { prototypes::id::HTMLFrameSetElement },
130 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
131 : JSJitInfo::Getter,
132 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
133 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
134 : false, /* isInfallible. False in setters. */
135 : false, /* isMovable. Not relevant for setters. */
136 : false, /* isEliminatable. Not relevant for setters. */
137 : false, /* isAlwaysInSlot. Only relevant for getters. */
138 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
139 : false, /* isTypedMethod. Only relevant for methods. */
140 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
141 : };
142 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
143 : static_assert(0 < 1, "There is no slot for us");
144 : static const JSJitInfo rows_setterinfo = {
145 : { (JSJitGetterOp)set_rows },
146 : { prototypes::id::HTMLFrameSetElement },
147 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
148 : JSJitInfo::Setter,
149 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
150 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
151 : false, /* isInfallible. False in setters. */
152 : false, /* isMovable. Not relevant for setters. */
153 : false, /* isEliminatable. Not relevant for setters. */
154 : false, /* isAlwaysInSlot. Only relevant for getters. */
155 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
156 : false, /* isTypedMethod. Only relevant for methods. */
157 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
158 : };
159 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
160 : static_assert(0 < 1, "There is no slot for us");
161 :
162 : static bool
163 0 : get_onafterprint(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitGetterCallArgs args)
164 : {
165 0 : RefPtr<EventHandlerNonNull> result(self->GetOnafterprint());
166 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
167 0 : if (result) {
168 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
169 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
170 0 : return false;
171 : }
172 0 : return true;
173 : } else {
174 0 : args.rval().setNull();
175 0 : return true;
176 : }
177 : }
178 :
179 : static bool
180 0 : set_onafterprint(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitSetterCallArgs args)
181 : {
182 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
183 0 : if (args[0].isObject()) {
184 : { // scope for tempRoot
185 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
186 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
187 : }
188 : } else {
189 0 : arg0 = nullptr;
190 : }
191 0 : self->SetOnafterprint(Constify(arg0));
192 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
193 :
194 0 : return true;
195 : }
196 :
197 : static const JSJitInfo onafterprint_getterinfo = {
198 : { (JSJitGetterOp)get_onafterprint },
199 : { prototypes::id::HTMLFrameSetElement },
200 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
201 : JSJitInfo::Getter,
202 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
203 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
204 : false, /* isInfallible. False in setters. */
205 : false, /* isMovable. Not relevant for setters. */
206 : false, /* isEliminatable. Not relevant for setters. */
207 : false, /* isAlwaysInSlot. Only relevant for getters. */
208 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
209 : false, /* isTypedMethod. Only relevant for methods. */
210 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
211 : };
212 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
213 : static_assert(0 < 1, "There is no slot for us");
214 : static const JSJitInfo onafterprint_setterinfo = {
215 : { (JSJitGetterOp)set_onafterprint },
216 : { prototypes::id::HTMLFrameSetElement },
217 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
218 : JSJitInfo::Setter,
219 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
220 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
221 : false, /* isInfallible. False in setters. */
222 : false, /* isMovable. Not relevant for setters. */
223 : false, /* isEliminatable. Not relevant for setters. */
224 : false, /* isAlwaysInSlot. Only relevant for getters. */
225 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
226 : false, /* isTypedMethod. Only relevant for methods. */
227 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
228 : };
229 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
230 : static_assert(0 < 1, "There is no slot for us");
231 :
232 : static bool
233 0 : get_onbeforeprint(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitGetterCallArgs args)
234 : {
235 0 : RefPtr<EventHandlerNonNull> result(self->GetOnbeforeprint());
236 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
237 0 : if (result) {
238 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
239 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
240 0 : return false;
241 : }
242 0 : return true;
243 : } else {
244 0 : args.rval().setNull();
245 0 : return true;
246 : }
247 : }
248 :
249 : static bool
250 0 : set_onbeforeprint(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitSetterCallArgs args)
251 : {
252 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
253 0 : if (args[0].isObject()) {
254 : { // scope for tempRoot
255 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
256 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
257 : }
258 : } else {
259 0 : arg0 = nullptr;
260 : }
261 0 : self->SetOnbeforeprint(Constify(arg0));
262 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
263 :
264 0 : return true;
265 : }
266 :
267 : static const JSJitInfo onbeforeprint_getterinfo = {
268 : { (JSJitGetterOp)get_onbeforeprint },
269 : { prototypes::id::HTMLFrameSetElement },
270 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
271 : JSJitInfo::Getter,
272 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
273 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
274 : false, /* isInfallible. False in setters. */
275 : false, /* isMovable. Not relevant for setters. */
276 : false, /* isEliminatable. Not relevant for setters. */
277 : false, /* isAlwaysInSlot. Only relevant for getters. */
278 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
279 : false, /* isTypedMethod. Only relevant for methods. */
280 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
281 : };
282 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
283 : static_assert(0 < 1, "There is no slot for us");
284 : static const JSJitInfo onbeforeprint_setterinfo = {
285 : { (JSJitGetterOp)set_onbeforeprint },
286 : { prototypes::id::HTMLFrameSetElement },
287 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
288 : JSJitInfo::Setter,
289 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
290 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
291 : false, /* isInfallible. False in setters. */
292 : false, /* isMovable. Not relevant for setters. */
293 : false, /* isEliminatable. Not relevant for setters. */
294 : false, /* isAlwaysInSlot. Only relevant for getters. */
295 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
296 : false, /* isTypedMethod. Only relevant for methods. */
297 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
298 : };
299 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
300 : static_assert(0 < 1, "There is no slot for us");
301 :
302 : static bool
303 0 : get_onbeforeunload(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitGetterCallArgs args)
304 : {
305 0 : RefPtr<OnBeforeUnloadEventHandlerNonNull> result(self->GetOnbeforeunload());
306 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
307 0 : if (result) {
308 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
309 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
310 0 : return false;
311 : }
312 0 : return true;
313 : } else {
314 0 : args.rval().setNull();
315 0 : return true;
316 : }
317 : }
318 :
319 : static bool
320 0 : set_onbeforeunload(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitSetterCallArgs args)
321 : {
322 0 : RootedCallback<RefPtr<binding_detail::FastOnBeforeUnloadEventHandlerNonNull>> arg0(cx);
323 0 : if (args[0].isObject()) {
324 : { // scope for tempRoot
325 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
326 0 : arg0 = new binding_detail::FastOnBeforeUnloadEventHandlerNonNull(tempRoot);
327 : }
328 : } else {
329 0 : arg0 = nullptr;
330 : }
331 0 : self->SetOnbeforeunload(Constify(arg0));
332 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
333 :
334 0 : return true;
335 : }
336 :
337 : static const JSJitInfo onbeforeunload_getterinfo = {
338 : { (JSJitGetterOp)get_onbeforeunload },
339 : { prototypes::id::HTMLFrameSetElement },
340 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
341 : JSJitInfo::Getter,
342 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
343 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
344 : false, /* isInfallible. False in setters. */
345 : false, /* isMovable. Not relevant for setters. */
346 : false, /* isEliminatable. Not relevant for setters. */
347 : false, /* isAlwaysInSlot. Only relevant for getters. */
348 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
349 : false, /* isTypedMethod. Only relevant for methods. */
350 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
351 : };
352 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
353 : static_assert(0 < 1, "There is no slot for us");
354 : static const JSJitInfo onbeforeunload_setterinfo = {
355 : { (JSJitGetterOp)set_onbeforeunload },
356 : { prototypes::id::HTMLFrameSetElement },
357 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
358 : JSJitInfo::Setter,
359 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
360 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
361 : false, /* isInfallible. False in setters. */
362 : false, /* isMovable. Not relevant for setters. */
363 : false, /* isEliminatable. Not relevant for setters. */
364 : false, /* isAlwaysInSlot. Only relevant for getters. */
365 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
366 : false, /* isTypedMethod. Only relevant for methods. */
367 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
368 : };
369 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
370 : static_assert(0 < 1, "There is no slot for us");
371 :
372 : static bool
373 0 : get_onhashchange(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitGetterCallArgs args)
374 : {
375 0 : RefPtr<EventHandlerNonNull> result(self->GetOnhashchange());
376 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
377 0 : if (result) {
378 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
379 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
380 0 : return false;
381 : }
382 0 : return true;
383 : } else {
384 0 : args.rval().setNull();
385 0 : return true;
386 : }
387 : }
388 :
389 : static bool
390 0 : set_onhashchange(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitSetterCallArgs args)
391 : {
392 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
393 0 : if (args[0].isObject()) {
394 : { // scope for tempRoot
395 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
396 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
397 : }
398 : } else {
399 0 : arg0 = nullptr;
400 : }
401 0 : self->SetOnhashchange(Constify(arg0));
402 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
403 :
404 0 : return true;
405 : }
406 :
407 : static const JSJitInfo onhashchange_getterinfo = {
408 : { (JSJitGetterOp)get_onhashchange },
409 : { prototypes::id::HTMLFrameSetElement },
410 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
411 : JSJitInfo::Getter,
412 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
413 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
414 : false, /* isInfallible. False in setters. */
415 : false, /* isMovable. Not relevant for setters. */
416 : false, /* isEliminatable. Not relevant for setters. */
417 : false, /* isAlwaysInSlot. Only relevant for getters. */
418 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
419 : false, /* isTypedMethod. Only relevant for methods. */
420 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
421 : };
422 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
423 : static_assert(0 < 1, "There is no slot for us");
424 : static const JSJitInfo onhashchange_setterinfo = {
425 : { (JSJitGetterOp)set_onhashchange },
426 : { prototypes::id::HTMLFrameSetElement },
427 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
428 : JSJitInfo::Setter,
429 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
430 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
431 : false, /* isInfallible. False in setters. */
432 : false, /* isMovable. Not relevant for setters. */
433 : false, /* isEliminatable. Not relevant for setters. */
434 : false, /* isAlwaysInSlot. Only relevant for getters. */
435 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
436 : false, /* isTypedMethod. Only relevant for methods. */
437 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
438 : };
439 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
440 : static_assert(0 < 1, "There is no slot for us");
441 :
442 : static bool
443 0 : get_onlanguagechange(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitGetterCallArgs args)
444 : {
445 0 : RefPtr<EventHandlerNonNull> result(self->GetOnlanguagechange());
446 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
447 0 : if (result) {
448 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
449 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
450 0 : return false;
451 : }
452 0 : return true;
453 : } else {
454 0 : args.rval().setNull();
455 0 : return true;
456 : }
457 : }
458 :
459 : static bool
460 0 : set_onlanguagechange(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitSetterCallArgs args)
461 : {
462 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
463 0 : if (args[0].isObject()) {
464 : { // scope for tempRoot
465 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
466 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
467 : }
468 : } else {
469 0 : arg0 = nullptr;
470 : }
471 0 : self->SetOnlanguagechange(Constify(arg0));
472 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
473 :
474 0 : return true;
475 : }
476 :
477 : static const JSJitInfo onlanguagechange_getterinfo = {
478 : { (JSJitGetterOp)get_onlanguagechange },
479 : { prototypes::id::HTMLFrameSetElement },
480 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
481 : JSJitInfo::Getter,
482 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
483 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
484 : false, /* isInfallible. False in setters. */
485 : false, /* isMovable. Not relevant for setters. */
486 : false, /* isEliminatable. Not relevant for setters. */
487 : false, /* isAlwaysInSlot. Only relevant for getters. */
488 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
489 : false, /* isTypedMethod. Only relevant for methods. */
490 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
491 : };
492 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
493 : static_assert(0 < 1, "There is no slot for us");
494 : static const JSJitInfo onlanguagechange_setterinfo = {
495 : { (JSJitGetterOp)set_onlanguagechange },
496 : { prototypes::id::HTMLFrameSetElement },
497 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
498 : JSJitInfo::Setter,
499 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
500 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
501 : false, /* isInfallible. False in setters. */
502 : false, /* isMovable. Not relevant for setters. */
503 : false, /* isEliminatable. Not relevant for setters. */
504 : false, /* isAlwaysInSlot. Only relevant for getters. */
505 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
506 : false, /* isTypedMethod. Only relevant for methods. */
507 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
508 : };
509 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
510 : static_assert(0 < 1, "There is no slot for us");
511 :
512 : static bool
513 0 : get_onmessage(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitGetterCallArgs args)
514 : {
515 0 : RefPtr<EventHandlerNonNull> result(self->GetOnmessage());
516 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
517 0 : if (result) {
518 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
519 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
520 0 : return false;
521 : }
522 0 : return true;
523 : } else {
524 0 : args.rval().setNull();
525 0 : return true;
526 : }
527 : }
528 :
529 : static bool
530 0 : set_onmessage(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitSetterCallArgs args)
531 : {
532 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
533 0 : if (args[0].isObject()) {
534 : { // scope for tempRoot
535 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
536 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
537 : }
538 : } else {
539 0 : arg0 = nullptr;
540 : }
541 0 : self->SetOnmessage(Constify(arg0));
542 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
543 :
544 0 : return true;
545 : }
546 :
547 : static const JSJitInfo onmessage_getterinfo = {
548 : { (JSJitGetterOp)get_onmessage },
549 : { prototypes::id::HTMLFrameSetElement },
550 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
551 : JSJitInfo::Getter,
552 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
553 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
554 : false, /* isInfallible. False in setters. */
555 : false, /* isMovable. Not relevant for setters. */
556 : false, /* isEliminatable. Not relevant for setters. */
557 : false, /* isAlwaysInSlot. Only relevant for getters. */
558 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
559 : false, /* isTypedMethod. Only relevant for methods. */
560 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
561 : };
562 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
563 : static_assert(0 < 1, "There is no slot for us");
564 : static const JSJitInfo onmessage_setterinfo = {
565 : { (JSJitGetterOp)set_onmessage },
566 : { prototypes::id::HTMLFrameSetElement },
567 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
568 : JSJitInfo::Setter,
569 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
570 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
571 : false, /* isInfallible. False in setters. */
572 : false, /* isMovable. Not relevant for setters. */
573 : false, /* isEliminatable. Not relevant for setters. */
574 : false, /* isAlwaysInSlot. Only relevant for getters. */
575 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
576 : false, /* isTypedMethod. Only relevant for methods. */
577 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
578 : };
579 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
580 : static_assert(0 < 1, "There is no slot for us");
581 :
582 : static bool
583 0 : get_onoffline(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitGetterCallArgs args)
584 : {
585 0 : RefPtr<EventHandlerNonNull> result(self->GetOnoffline());
586 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
587 0 : if (result) {
588 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
589 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
590 0 : return false;
591 : }
592 0 : return true;
593 : } else {
594 0 : args.rval().setNull();
595 0 : return true;
596 : }
597 : }
598 :
599 : static bool
600 0 : set_onoffline(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitSetterCallArgs args)
601 : {
602 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
603 0 : if (args[0].isObject()) {
604 : { // scope for tempRoot
605 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
606 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
607 : }
608 : } else {
609 0 : arg0 = nullptr;
610 : }
611 0 : self->SetOnoffline(Constify(arg0));
612 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
613 :
614 0 : return true;
615 : }
616 :
617 : static const JSJitInfo onoffline_getterinfo = {
618 : { (JSJitGetterOp)get_onoffline },
619 : { prototypes::id::HTMLFrameSetElement },
620 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
621 : JSJitInfo::Getter,
622 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
623 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
624 : false, /* isInfallible. False in setters. */
625 : false, /* isMovable. Not relevant for setters. */
626 : false, /* isEliminatable. Not relevant for setters. */
627 : false, /* isAlwaysInSlot. Only relevant for getters. */
628 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
629 : false, /* isTypedMethod. Only relevant for methods. */
630 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
631 : };
632 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
633 : static_assert(0 < 1, "There is no slot for us");
634 : static const JSJitInfo onoffline_setterinfo = {
635 : { (JSJitGetterOp)set_onoffline },
636 : { prototypes::id::HTMLFrameSetElement },
637 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
638 : JSJitInfo::Setter,
639 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
640 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
641 : false, /* isInfallible. False in setters. */
642 : false, /* isMovable. Not relevant for setters. */
643 : false, /* isEliminatable. Not relevant for setters. */
644 : false, /* isAlwaysInSlot. Only relevant for getters. */
645 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
646 : false, /* isTypedMethod. Only relevant for methods. */
647 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
648 : };
649 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
650 : static_assert(0 < 1, "There is no slot for us");
651 :
652 : static bool
653 0 : get_ononline(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitGetterCallArgs args)
654 : {
655 0 : RefPtr<EventHandlerNonNull> result(self->GetOnonline());
656 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
657 0 : if (result) {
658 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
659 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
660 0 : return false;
661 : }
662 0 : return true;
663 : } else {
664 0 : args.rval().setNull();
665 0 : return true;
666 : }
667 : }
668 :
669 : static bool
670 0 : set_ononline(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitSetterCallArgs args)
671 : {
672 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
673 0 : if (args[0].isObject()) {
674 : { // scope for tempRoot
675 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
676 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
677 : }
678 : } else {
679 0 : arg0 = nullptr;
680 : }
681 0 : self->SetOnonline(Constify(arg0));
682 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
683 :
684 0 : return true;
685 : }
686 :
687 : static const JSJitInfo ononline_getterinfo = {
688 : { (JSJitGetterOp)get_ononline },
689 : { prototypes::id::HTMLFrameSetElement },
690 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
691 : JSJitInfo::Getter,
692 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
693 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
694 : false, /* isInfallible. False in setters. */
695 : false, /* isMovable. Not relevant for setters. */
696 : false, /* isEliminatable. Not relevant for setters. */
697 : false, /* isAlwaysInSlot. Only relevant for getters. */
698 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
699 : false, /* isTypedMethod. Only relevant for methods. */
700 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
701 : };
702 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
703 : static_assert(0 < 1, "There is no slot for us");
704 : static const JSJitInfo ononline_setterinfo = {
705 : { (JSJitGetterOp)set_ononline },
706 : { prototypes::id::HTMLFrameSetElement },
707 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
708 : JSJitInfo::Setter,
709 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
710 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
711 : false, /* isInfallible. False in setters. */
712 : false, /* isMovable. Not relevant for setters. */
713 : false, /* isEliminatable. Not relevant for setters. */
714 : false, /* isAlwaysInSlot. Only relevant for getters. */
715 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
716 : false, /* isTypedMethod. Only relevant for methods. */
717 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
718 : };
719 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
720 : static_assert(0 < 1, "There is no slot for us");
721 :
722 : static bool
723 0 : get_onpagehide(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitGetterCallArgs args)
724 : {
725 0 : RefPtr<EventHandlerNonNull> result(self->GetOnpagehide());
726 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
727 0 : if (result) {
728 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
729 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
730 0 : return false;
731 : }
732 0 : return true;
733 : } else {
734 0 : args.rval().setNull();
735 0 : return true;
736 : }
737 : }
738 :
739 : static bool
740 0 : set_onpagehide(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitSetterCallArgs args)
741 : {
742 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
743 0 : if (args[0].isObject()) {
744 : { // scope for tempRoot
745 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
746 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
747 : }
748 : } else {
749 0 : arg0 = nullptr;
750 : }
751 0 : self->SetOnpagehide(Constify(arg0));
752 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
753 :
754 0 : return true;
755 : }
756 :
757 : static const JSJitInfo onpagehide_getterinfo = {
758 : { (JSJitGetterOp)get_onpagehide },
759 : { prototypes::id::HTMLFrameSetElement },
760 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
761 : JSJitInfo::Getter,
762 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
763 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
764 : false, /* isInfallible. False in setters. */
765 : false, /* isMovable. Not relevant for setters. */
766 : false, /* isEliminatable. Not relevant for setters. */
767 : false, /* isAlwaysInSlot. Only relevant for getters. */
768 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
769 : false, /* isTypedMethod. Only relevant for methods. */
770 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
771 : };
772 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
773 : static_assert(0 < 1, "There is no slot for us");
774 : static const JSJitInfo onpagehide_setterinfo = {
775 : { (JSJitGetterOp)set_onpagehide },
776 : { prototypes::id::HTMLFrameSetElement },
777 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
778 : JSJitInfo::Setter,
779 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
780 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
781 : false, /* isInfallible. False in setters. */
782 : false, /* isMovable. Not relevant for setters. */
783 : false, /* isEliminatable. Not relevant for setters. */
784 : false, /* isAlwaysInSlot. Only relevant for getters. */
785 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
786 : false, /* isTypedMethod. Only relevant for methods. */
787 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
788 : };
789 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
790 : static_assert(0 < 1, "There is no slot for us");
791 :
792 : static bool
793 0 : get_onpageshow(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitGetterCallArgs args)
794 : {
795 0 : RefPtr<EventHandlerNonNull> result(self->GetOnpageshow());
796 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
797 0 : if (result) {
798 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
799 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
800 0 : return false;
801 : }
802 0 : return true;
803 : } else {
804 0 : args.rval().setNull();
805 0 : return true;
806 : }
807 : }
808 :
809 : static bool
810 0 : set_onpageshow(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitSetterCallArgs args)
811 : {
812 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
813 0 : if (args[0].isObject()) {
814 : { // scope for tempRoot
815 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
816 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
817 : }
818 : } else {
819 0 : arg0 = nullptr;
820 : }
821 0 : self->SetOnpageshow(Constify(arg0));
822 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
823 :
824 0 : return true;
825 : }
826 :
827 : static const JSJitInfo onpageshow_getterinfo = {
828 : { (JSJitGetterOp)get_onpageshow },
829 : { prototypes::id::HTMLFrameSetElement },
830 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
831 : JSJitInfo::Getter,
832 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
833 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
834 : false, /* isInfallible. False in setters. */
835 : false, /* isMovable. Not relevant for setters. */
836 : false, /* 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 onpageshow_setterinfo = {
845 : { (JSJitGetterOp)set_onpageshow },
846 : { prototypes::id::HTMLFrameSetElement },
847 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::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_onpopstate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitGetterCallArgs args)
864 : {
865 0 : RefPtr<EventHandlerNonNull> result(self->GetOnpopstate());
866 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
867 0 : if (result) {
868 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
869 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
870 0 : return false;
871 : }
872 0 : return true;
873 : } else {
874 0 : args.rval().setNull();
875 0 : return true;
876 : }
877 : }
878 :
879 : static bool
880 0 : set_onpopstate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitSetterCallArgs args)
881 : {
882 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
883 0 : if (args[0].isObject()) {
884 : { // scope for tempRoot
885 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
886 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
887 : }
888 : } else {
889 0 : arg0 = nullptr;
890 : }
891 0 : self->SetOnpopstate(Constify(arg0));
892 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
893 :
894 0 : return true;
895 : }
896 :
897 : static const JSJitInfo onpopstate_getterinfo = {
898 : { (JSJitGetterOp)get_onpopstate },
899 : { prototypes::id::HTMLFrameSetElement },
900 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
901 : JSJitInfo::Getter,
902 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
903 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
904 : false, /* isInfallible. False in setters. */
905 : false, /* isMovable. Not relevant for setters. */
906 : false, /* isEliminatable. Not relevant for setters. */
907 : false, /* isAlwaysInSlot. Only relevant for getters. */
908 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
909 : false, /* isTypedMethod. Only relevant for methods. */
910 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
911 : };
912 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
913 : static_assert(0 < 1, "There is no slot for us");
914 : static const JSJitInfo onpopstate_setterinfo = {
915 : { (JSJitGetterOp)set_onpopstate },
916 : { prototypes::id::HTMLFrameSetElement },
917 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
918 : JSJitInfo::Setter,
919 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
920 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
921 : false, /* isInfallible. False in setters. */
922 : false, /* isMovable. Not relevant for setters. */
923 : false, /* isEliminatable. Not relevant for setters. */
924 : false, /* isAlwaysInSlot. Only relevant for getters. */
925 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
926 : false, /* isTypedMethod. Only relevant for methods. */
927 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
928 : };
929 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
930 : static_assert(0 < 1, "There is no slot for us");
931 :
932 : static bool
933 0 : get_onstorage(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitGetterCallArgs args)
934 : {
935 0 : RefPtr<EventHandlerNonNull> result(self->GetOnstorage());
936 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
937 0 : if (result) {
938 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
939 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
940 0 : return false;
941 : }
942 0 : return true;
943 : } else {
944 0 : args.rval().setNull();
945 0 : return true;
946 : }
947 : }
948 :
949 : static bool
950 0 : set_onstorage(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitSetterCallArgs args)
951 : {
952 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
953 0 : if (args[0].isObject()) {
954 : { // scope for tempRoot
955 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
956 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
957 : }
958 : } else {
959 0 : arg0 = nullptr;
960 : }
961 0 : self->SetOnstorage(Constify(arg0));
962 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
963 :
964 0 : return true;
965 : }
966 :
967 : static const JSJitInfo onstorage_getterinfo = {
968 : { (JSJitGetterOp)get_onstorage },
969 : { prototypes::id::HTMLFrameSetElement },
970 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
971 : JSJitInfo::Getter,
972 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
973 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
974 : false, /* isInfallible. False in setters. */
975 : false, /* isMovable. Not relevant for setters. */
976 : false, /* isEliminatable. Not relevant for setters. */
977 : false, /* isAlwaysInSlot. Only relevant for getters. */
978 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
979 : false, /* isTypedMethod. Only relevant for methods. */
980 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
981 : };
982 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
983 : static_assert(0 < 1, "There is no slot for us");
984 : static const JSJitInfo onstorage_setterinfo = {
985 : { (JSJitGetterOp)set_onstorage },
986 : { prototypes::id::HTMLFrameSetElement },
987 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
988 : JSJitInfo::Setter,
989 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
990 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
991 : false, /* isInfallible. False in setters. */
992 : false, /* isMovable. Not relevant for setters. */
993 : false, /* isEliminatable. Not relevant for setters. */
994 : false, /* isAlwaysInSlot. Only relevant for getters. */
995 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
996 : false, /* isTypedMethod. Only relevant for methods. */
997 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
998 : };
999 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1000 : static_assert(0 < 1, "There is no slot for us");
1001 :
1002 : static bool
1003 0 : get_onunload(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitGetterCallArgs args)
1004 : {
1005 0 : RefPtr<EventHandlerNonNull> result(self->GetOnunload());
1006 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1007 0 : if (result) {
1008 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
1009 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
1010 0 : return false;
1011 : }
1012 0 : return true;
1013 : } else {
1014 0 : args.rval().setNull();
1015 0 : return true;
1016 : }
1017 : }
1018 :
1019 : static bool
1020 0 : set_onunload(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLFrameSetElement* self, JSJitSetterCallArgs args)
1021 : {
1022 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
1023 0 : if (args[0].isObject()) {
1024 : { // scope for tempRoot
1025 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
1026 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
1027 : }
1028 : } else {
1029 0 : arg0 = nullptr;
1030 : }
1031 0 : self->SetOnunload(Constify(arg0));
1032 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1033 :
1034 0 : return true;
1035 : }
1036 :
1037 : static const JSJitInfo onunload_getterinfo = {
1038 : { (JSJitGetterOp)get_onunload },
1039 : { prototypes::id::HTMLFrameSetElement },
1040 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
1041 : JSJitInfo::Getter,
1042 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1043 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
1044 : false, /* isInfallible. False in setters. */
1045 : false, /* isMovable. Not relevant for setters. */
1046 : false, /* isEliminatable. Not relevant for setters. */
1047 : false, /* isAlwaysInSlot. Only relevant for getters. */
1048 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1049 : false, /* isTypedMethod. Only relevant for methods. */
1050 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1051 : };
1052 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1053 : static_assert(0 < 1, "There is no slot for us");
1054 : static const JSJitInfo onunload_setterinfo = {
1055 : { (JSJitGetterOp)set_onunload },
1056 : { prototypes::id::HTMLFrameSetElement },
1057 : { PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth },
1058 : JSJitInfo::Setter,
1059 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1060 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1061 : false, /* isInfallible. False in setters. */
1062 : false, /* isMovable. Not relevant for setters. */
1063 : false, /* isEliminatable. Not relevant for setters. */
1064 : false, /* isAlwaysInSlot. Only relevant for getters. */
1065 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1066 : false, /* isTypedMethod. Only relevant for methods. */
1067 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1068 : };
1069 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1070 : static_assert(0 < 1, "There is no slot for us");
1071 :
1072 : static bool
1073 0 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
1074 : {
1075 0 : mozilla::dom::HTMLFrameSetElement* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::HTMLFrameSetElement>(obj);
1076 : // We don't want to preserve if we don't have a wrapper, and we
1077 : // obviously can't preserve if we're not initialized.
1078 0 : if (self && self->GetWrapperPreserveColor()) {
1079 0 : PreserveWrapper(self);
1080 : }
1081 0 : return true;
1082 : }
1083 :
1084 : static void
1085 0 : _finalize(js::FreeOp* fop, JSObject* obj)
1086 : {
1087 0 : mozilla::dom::HTMLFrameSetElement* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::HTMLFrameSetElement>(obj);
1088 0 : if (self) {
1089 0 : ClearWrapper(self, self, obj);
1090 0 : AddForDeferredFinalization<mozilla::dom::HTMLFrameSetElement>(self);
1091 : }
1092 0 : }
1093 :
1094 : static void
1095 0 : _objectMoved(JSObject* obj, const JSObject* old)
1096 : {
1097 0 : mozilla::dom::HTMLFrameSetElement* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::HTMLFrameSetElement>(obj);
1098 0 : if (self) {
1099 0 : UpdateWrapper(self, self, obj, old);
1100 : }
1101 0 : }
1102 :
1103 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
1104 : #if defined(__clang__)
1105 : #pragma clang diagnostic push
1106 : #pragma clang diagnostic ignored "-Wmissing-braces"
1107 : #endif
1108 : static const JSPropertySpec sAttributes_specs[] = {
1109 : { "cols", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &cols_getterinfo, GenericBindingSetter, &cols_setterinfo },
1110 : { "rows", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &rows_getterinfo, GenericBindingSetter, &rows_setterinfo },
1111 : { "onafterprint", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onafterprint_getterinfo, GenericBindingSetter, &onafterprint_setterinfo },
1112 : { "onbeforeprint", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onbeforeprint_getterinfo, GenericBindingSetter, &onbeforeprint_setterinfo },
1113 : { "onbeforeunload", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onbeforeunload_getterinfo, GenericBindingSetter, &onbeforeunload_setterinfo },
1114 : { "onhashchange", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onhashchange_getterinfo, GenericBindingSetter, &onhashchange_setterinfo },
1115 : { "onlanguagechange", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onlanguagechange_getterinfo, GenericBindingSetter, &onlanguagechange_setterinfo },
1116 : { "onmessage", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmessage_getterinfo, GenericBindingSetter, &onmessage_setterinfo },
1117 : { "onoffline", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onoffline_getterinfo, GenericBindingSetter, &onoffline_setterinfo },
1118 : { "ononline", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ononline_getterinfo, GenericBindingSetter, &ononline_setterinfo },
1119 : { "onpagehide", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpagehide_getterinfo, GenericBindingSetter, &onpagehide_setterinfo },
1120 : { "onpageshow", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpageshow_getterinfo, GenericBindingSetter, &onpageshow_setterinfo },
1121 : { "onpopstate", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpopstate_getterinfo, GenericBindingSetter, &onpopstate_setterinfo },
1122 : { "onstorage", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onstorage_getterinfo, GenericBindingSetter, &onstorage_setterinfo },
1123 : { "onunload", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onunload_getterinfo, GenericBindingSetter, &onunload_setterinfo },
1124 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
1125 : };
1126 : #if defined(__clang__)
1127 : #pragma clang diagnostic pop
1128 : #endif
1129 :
1130 :
1131 : // Can't be const because the pref-enabled boolean needs to be writable
1132 : static Prefable<const JSPropertySpec> sAttributes[] = {
1133 : { nullptr, &sAttributes_specs[0] },
1134 : { nullptr, nullptr }
1135 : };
1136 :
1137 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
1138 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
1139 : static_assert(15 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
1140 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
1141 :
1142 :
1143 : static uint16_t sNativeProperties_sortedPropertyIndices[15];
1144 : static PropertyInfo sNativeProperties_propertyInfos[15];
1145 :
1146 : static const NativePropertiesN<1> sNativeProperties = {
1147 : false, 0,
1148 : false, 0,
1149 : false, 0,
1150 : true, 0 /* sAttributes */,
1151 : false, 0,
1152 : false, 0,
1153 : false, 0,
1154 : -1,
1155 : 15,
1156 : sNativeProperties_sortedPropertyIndices,
1157 : {
1158 : { sAttributes, &sNativeProperties_propertyInfos[0] }
1159 : }
1160 : };
1161 : static_assert(15 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
1162 : "We have a property info count that is oversized");
1163 :
1164 : static bool
1165 0 : _constructor(JSContext* cx, unsigned argc, JS::Value* vp)
1166 : {
1167 0 : JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
1168 0 : JS::Rooted<JSObject*> obj(cx, &args.callee());
1169 0 : if (!args.isConstructing()) {
1170 : // XXXbz wish I could get the name from the callee instead of
1171 : // Adding more relocations
1172 0 : return ThrowConstructorWithoutNew(cx, "HTMLFrameSetElement");
1173 : }
1174 :
1175 0 : GlobalObject global(cx, obj);
1176 0 : if (global.Failed()) {
1177 0 : return false;
1178 : }
1179 :
1180 : // The newTarget might be a cross-compartment wrapper. Get the underlying object
1181 : // so we can do the spec's object-identity checks.
1182 0 : JS::Rooted<JSObject*> newTarget(cx, js::CheckedUnwrap(&args.newTarget().toObject()));
1183 0 : if (!newTarget) {
1184 0 : return ThrowErrorMessage(cx, MSG_ILLEGAL_CONSTRUCTOR);
1185 : }
1186 :
1187 : // Step 2 of https://html.spec.whatwg.org/multipage/dom.html#htmlconstructor.
1188 : // Enter the compartment of our underlying newTarget object, so we end
1189 : // up comparing to the constructor object for our interface from that global.
1190 : {
1191 0 : JSAutoCompartment ac(cx, newTarget);
1192 0 : JS::Handle<JSObject*> constructor(GetConstructorObjectHandle(cx));
1193 0 : if (!constructor) {
1194 0 : return false;
1195 : }
1196 0 : if (newTarget == constructor) {
1197 0 : return ThrowErrorMessage(cx, MSG_ILLEGAL_CONSTRUCTOR);
1198 : }
1199 : }
1200 :
1201 0 : JS::Rooted<JSObject*> desiredProto(cx);
1202 0 : if (!GetDesiredProto(cx, args, &desiredProto)) {
1203 0 : return false;
1204 : }
1205 0 : if (!desiredProto) {
1206 : // Step 7 of https://html.spec.whatwg.org/multipage/dom.html#htmlconstructor.
1207 : // This fallback behavior is designed to match analogous behavior for the
1208 : // JavaScript built-ins. So we enter the compartment of our underlying
1209 : // newTarget object and fall back to the prototype object from that global.
1210 : // XXX The spec says to use GetFunctionRealm(), which is not actually
1211 : // the same thing as what we have here (e.g. in the case of scripted callable proxies
1212 : // whose target is not same-compartment with the proxy, or bound functions, etc).
1213 : // https://bugzilla.mozilla.org/show_bug.cgi?id=1317658
1214 : {
1215 0 : JSAutoCompartment ac(cx, newTarget);
1216 0 : desiredProto = GetProtoObjectHandle(cx);
1217 0 : if (!desiredProto) {
1218 0 : return false;
1219 : }
1220 : }
1221 :
1222 : // desiredProto is in the compartment of the underlying newTarget object.
1223 : // Wrap it into the context compartment.
1224 0 : if (!JS_WrapObject(cx, &desiredProto)) {
1225 0 : return false;
1226 : }
1227 : }
1228 :
1229 0 : bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj);
1230 0 : Maybe<JSAutoCompartment> ac;
1231 0 : if (objIsXray) {
1232 0 : obj = js::CheckedUnwrap(obj);
1233 0 : if (!obj) {
1234 0 : return false;
1235 : }
1236 0 : ac.emplace(cx, obj);
1237 0 : if (!JS_WrapObject(cx, &desiredProto)) {
1238 0 : return false;
1239 : }
1240 : }
1241 0 : binding_detail::FastErrorResult rv;
1242 0 : auto result(StrongOrRawPtr<mozilla::dom::HTMLFrameSetElement>(CreateHTMLElement(global, args, rv)));
1243 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1244 0 : return false;
1245 : }
1246 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1247 : static_assert(!IsPointer<decltype(result)>::value,
1248 : "NewObject implies that we need to keep the object alive with a strong reference.");
1249 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) {
1250 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1251 0 : return false;
1252 : }
1253 0 : return true;
1254 : }
1255 :
1256 : static const js::ClassOps sInterfaceObjectClassOps = {
1257 : nullptr, /* addProperty */
1258 : nullptr, /* delProperty */
1259 : nullptr, /* getProperty */
1260 : nullptr, /* setProperty */
1261 : nullptr, /* enumerate */
1262 : nullptr, /* newEnumerate */
1263 : nullptr, /* resolve */
1264 : nullptr, /* mayResolve */
1265 : nullptr, /* finalize */
1266 : _constructor, /* call */
1267 : nullptr, /* hasInstance */
1268 : _constructor, /* construct */
1269 : nullptr, /* trace */
1270 : };
1271 :
1272 : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
1273 : {
1274 : "Function",
1275 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
1276 : &sInterfaceObjectClassOps,
1277 : JS_NULL_CLASS_SPEC,
1278 : JS_NULL_CLASS_EXT,
1279 : &sInterfaceObjectClassObjectOps
1280 : },
1281 : eInterface,
1282 : true,
1283 : prototypes::id::HTMLFrameSetElement,
1284 : PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth,
1285 : sNativePropertyHooks,
1286 : "function HTMLFrameSetElement() {\n [native code]\n}",
1287 : HTMLElementBinding::GetConstructorObject
1288 : };
1289 :
1290 : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
1291 : {
1292 : "HTMLFrameSetElementPrototype",
1293 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
1294 : JS_NULL_CLASS_OPS,
1295 : JS_NULL_CLASS_SPEC,
1296 : JS_NULL_CLASS_EXT,
1297 : JS_NULL_OBJECT_OPS
1298 : },
1299 : eInterfacePrototype,
1300 : false,
1301 : prototypes::id::HTMLFrameSetElement,
1302 : PrototypeTraits<prototypes::id::HTMLFrameSetElement>::Depth,
1303 : sNativePropertyHooks,
1304 : "[object HTMLFrameSetElementPrototype]",
1305 : HTMLElementBinding::GetProtoObject
1306 : };
1307 :
1308 : JSObject*
1309 0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
1310 : {
1311 0 : return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
1312 : }
1313 :
1314 : static const js::ClassOps sClassOps = {
1315 : _addProperty, /* addProperty */
1316 : nullptr, /* delProperty */
1317 : nullptr, /* getProperty */
1318 : nullptr, /* setProperty */
1319 : nullptr, /* enumerate */
1320 : nullptr, /* newEnumerate */
1321 : nullptr, /* resolve */
1322 : nullptr, /* mayResolve */
1323 : _finalize, /* finalize */
1324 : nullptr, /* call */
1325 : nullptr, /* hasInstance */
1326 : nullptr, /* construct */
1327 : nullptr, /* trace */
1328 : };
1329 :
1330 : static const js::ClassExtension sClassExtension = {
1331 : nullptr, /* weakmapKeyDelegateOp */
1332 : _objectMoved /* objectMovedOp */
1333 : };
1334 :
1335 : static const DOMJSClass sClass = {
1336 : { "HTMLFrameSetElement",
1337 : JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
1338 : &sClassOps,
1339 : JS_NULL_CLASS_SPEC,
1340 : &sClassExtension,
1341 : JS_NULL_OBJECT_OPS
1342 : },
1343 : { prototypes::id::EventTarget, prototypes::id::Node, prototypes::id::Element, prototypes::id::HTMLElement, prototypes::id::HTMLFrameSetElement, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
1344 : IsBaseOf<nsISupports, mozilla::dom::HTMLFrameSetElement >::value,
1345 : sNativePropertyHooks,
1346 : FindAssociatedGlobalForNative<mozilla::dom::HTMLFrameSetElement>::Get,
1347 : GetProtoObjectHandle,
1348 : GetCCParticipant<mozilla::dom::HTMLFrameSetElement>::Get()
1349 : };
1350 : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
1351 : "Must have the right minimal number of reserved slots.");
1352 : static_assert(1 >= 1,
1353 : "Must have enough reserved slots.");
1354 :
1355 : const JSClass*
1356 0 : GetJSClass()
1357 : {
1358 0 : return sClass.ToJSClass();
1359 : }
1360 :
1361 : bool
1362 0 : Wrap(JSContext* aCx, mozilla::dom::HTMLFrameSetElement* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
1363 : {
1364 : MOZ_ASSERT(static_cast<mozilla::dom::HTMLFrameSetElement*>(aObject) ==
1365 : reinterpret_cast<mozilla::dom::HTMLFrameSetElement*>(aObject),
1366 : "Multiple inheritance for mozilla::dom::HTMLFrameSetElement is broken.");
1367 : MOZ_ASSERT(static_cast<nsGenericHTMLElement*>(aObject) ==
1368 : reinterpret_cast<nsGenericHTMLElement*>(aObject),
1369 : "Multiple inheritance for nsGenericHTMLElement is broken.");
1370 : MOZ_ASSERT(static_cast<mozilla::dom::Element*>(aObject) ==
1371 : reinterpret_cast<mozilla::dom::Element*>(aObject),
1372 : "Multiple inheritance for mozilla::dom::Element is broken.");
1373 : MOZ_ASSERT(static_cast<nsINode*>(aObject) ==
1374 : reinterpret_cast<nsINode*>(aObject),
1375 : "Multiple inheritance for nsINode is broken.");
1376 : MOZ_ASSERT(static_cast<mozilla::dom::EventTarget*>(aObject) ==
1377 : reinterpret_cast<mozilla::dom::EventTarget*>(aObject),
1378 : "Multiple inheritance for mozilla::dom::EventTarget is broken.");
1379 0 : MOZ_ASSERT(ToSupportsIsCorrect(aObject));
1380 0 : MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
1381 0 : MOZ_ASSERT(!aCache->GetWrapper(),
1382 : "You should probably not be using Wrap() directly; use "
1383 : "GetOrCreateDOMReflector instead");
1384 :
1385 0 : MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
1386 : "nsISupports must be on our primary inheritance chain");
1387 :
1388 0 : JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
1389 0 : if (!global) {
1390 0 : return false;
1391 : }
1392 0 : MOZ_ASSERT(JS_IsGlobalObject(global));
1393 0 : MOZ_ASSERT(JS::ObjectIsNotGray(global));
1394 :
1395 : // That might have ended up wrapping us already, due to the wonders
1396 : // of XBL. Check for that, and bail out as needed.
1397 0 : aReflector.set(aCache->GetWrapper());
1398 0 : if (aReflector) {
1399 : #ifdef DEBUG
1400 0 : binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
1401 : #endif // DEBUG
1402 0 : return true;
1403 : }
1404 :
1405 0 : JSAutoCompartment ac(aCx, global);
1406 0 : JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
1407 0 : if (!canonicalProto) {
1408 0 : return false;
1409 : }
1410 0 : JS::Rooted<JSObject*> proto(aCx);
1411 0 : if (aGivenProto) {
1412 0 : proto = aGivenProto;
1413 : // Unfortunately, while aGivenProto was in the compartment of aCx
1414 : // coming in, we changed compartments to that of "parent" so may need
1415 : // to wrap the proto here.
1416 0 : if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
1417 0 : if (!JS_WrapObject(aCx, &proto)) {
1418 0 : return false;
1419 : }
1420 : }
1421 : } else {
1422 0 : proto = canonicalProto;
1423 : }
1424 :
1425 0 : BindingJSObjectCreator<mozilla::dom::HTMLFrameSetElement> creator(aCx);
1426 0 : creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
1427 0 : if (!aReflector) {
1428 0 : return false;
1429 : }
1430 :
1431 0 : aCache->SetWrapper(aReflector);
1432 0 : creator.InitializationSucceeded();
1433 :
1434 0 : MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
1435 : aCache->GetWrapperPreserveColor() == aReflector);
1436 : // If proto != canonicalProto, we have to preserve our wrapper;
1437 : // otherwise we won't be able to properly recreate it later, since
1438 : // we won't know what proto to use. Note that we don't check
1439 : // aGivenProto here, since it's entirely possible (and even
1440 : // somewhat common) to have a non-null aGivenProto which is the
1441 : // same as canonicalProto.
1442 0 : if (proto != canonicalProto) {
1443 0 : PreserveWrapper(aObject);
1444 : }
1445 :
1446 0 : return true;
1447 : }
1448 :
1449 : const NativePropertyHooks sNativePropertyHooks[] = { {
1450 : nullptr,
1451 : nullptr,
1452 : nullptr,
1453 : { sNativeProperties.Upcast(), nullptr },
1454 : prototypes::id::HTMLFrameSetElement,
1455 : constructors::id::HTMLFrameSetElement,
1456 : HTMLElementBinding::sNativePropertyHooks,
1457 : &DefaultXrayExpandoObjectClass
1458 : } };
1459 :
1460 : void
1461 0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
1462 : {
1463 0 : JS::Handle<JSObject*> parentProto(HTMLElementBinding::GetProtoObjectHandle(aCx));
1464 0 : if (!parentProto) {
1465 0 : return;
1466 : }
1467 :
1468 0 : JS::Handle<JSObject*> constructorProto(HTMLElementBinding::GetConstructorObjectHandle(aCx));
1469 0 : if (!constructorProto) {
1470 0 : return;
1471 : }
1472 :
1473 : static bool sIdsInited = false;
1474 0 : if (!sIdsInited && NS_IsMainThread()) {
1475 0 : if (!InitIds(aCx, sNativeProperties.Upcast())) {
1476 0 : return;
1477 : }
1478 0 : sIdsInited = true;
1479 : }
1480 :
1481 0 : JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::HTMLFrameSetElement);
1482 0 : JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::HTMLFrameSetElement);
1483 0 : dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
1484 : &sPrototypeClass.mBase, protoCache,
1485 : constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
1486 : interfaceCache,
1487 : sNativeProperties.Upcast(),
1488 : nullptr,
1489 : "HTMLFrameSetElement", aDefineOnGlobal,
1490 : nullptr,
1491 0 : false);
1492 : }
1493 :
1494 : JS::Handle<JSObject*>
1495 0 : GetProtoObjectHandle(JSContext* aCx)
1496 : {
1497 : /* Get the interface prototype object for this class. This will create the
1498 : object as needed. */
1499 0 : bool aDefineOnGlobal = true;
1500 :
1501 : /* Make sure our global is sane. Hopefully we can remove this sometime */
1502 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
1503 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
1504 0 : return nullptr;
1505 : }
1506 :
1507 : /* Check to see whether the interface objects are already installed */
1508 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
1509 0 : if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::HTMLFrameSetElement)) {
1510 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
1511 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
1512 : }
1513 :
1514 : /*
1515 : * The object might _still_ be null, but that's OK.
1516 : *
1517 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
1518 : * traced by TraceProtoAndIfaceCache() and its contents are never
1519 : * changed after they have been set.
1520 : *
1521 : * Calling address() avoids the read read barrier that does gray
1522 : * unmarking, but it's not possible for the object to be gray here.
1523 : */
1524 :
1525 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::HTMLFrameSetElement);
1526 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
1527 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
1528 : }
1529 :
1530 : JS::Handle<JSObject*>
1531 0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
1532 : {
1533 : /* Get the interface object for this class. This will create the object as
1534 : needed. */
1535 :
1536 : /* Make sure our global is sane. Hopefully we can remove this sometime */
1537 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
1538 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
1539 0 : return nullptr;
1540 : }
1541 :
1542 : /* Check to see whether the interface objects are already installed */
1543 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
1544 0 : if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::HTMLFrameSetElement)) {
1545 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
1546 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
1547 : }
1548 :
1549 : /*
1550 : * The object might _still_ be null, but that's OK.
1551 : *
1552 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
1553 : * traced by TraceProtoAndIfaceCache() and its contents are never
1554 : * changed after they have been set.
1555 : *
1556 : * Calling address() avoids the read read barrier that does gray
1557 : * unmarking, but it's not possible for the object to be gray here.
1558 : */
1559 :
1560 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::HTMLFrameSetElement);
1561 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
1562 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
1563 : }
1564 :
1565 : JSObject*
1566 0 : GetConstructorObject(JSContext* aCx)
1567 : {
1568 0 : return GetConstructorObjectHandle(aCx);
1569 : }
1570 :
1571 : } // namespace HTMLFrameSetElementBinding
1572 :
1573 :
1574 :
1575 : } // namespace dom
1576 : } // namespace mozilla
|