Line data Source code
1 : /* THIS FILE IS AUTOGENERATED FROM XULTemplateBuilder.webidl BY Codegen.py - DO NOT EDIT */
2 :
3 : #include "AtomList.h"
4 : #include "WrapperFactory.h"
5 : #include "XULTemplateBuilderBinding.h"
6 : #include "mozilla/OwningNonNull.h"
7 : #include "mozilla/dom/BindingUtils.h"
8 : #include "mozilla/dom/DOMJSClass.h"
9 : #include "mozilla/dom/DataTransfer.h"
10 : #include "mozilla/dom/Element.h"
11 : #include "mozilla/dom/NonRefcountedDOMObject.h"
12 : #include "mozilla/dom/Nullable.h"
13 : #include "mozilla/dom/PrimitiveConversions.h"
14 : #include "mozilla/dom/TreeBoxObject.h"
15 : #include "mozilla/dom/XrayExpandoClass.h"
16 : #include "nsINode.h"
17 : #include "nsIRDFCompositeDataSource.h"
18 : #include "nsIRDFResource.h"
19 : #include "nsISupports.h"
20 : #include "nsITreeSelection.h"
21 : #include "nsIXULTemplateResult.h"
22 : #include "nsIXULTemplateRuleFilter.h"
23 : #include "nsTreeColumns.h"
24 : #include "nsXULTemplateBuilder.h"
25 : #include "nsXULTreeBuilder.h"
26 : #include "xpcjsid.h"
27 :
28 : namespace mozilla {
29 : namespace dom {
30 :
31 : namespace XULTemplateBuilderBinding {
32 :
33 : static bool
34 0 : get_root(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTemplateBuilder* self, JSJitGetterCallArgs args)
35 : {
36 0 : auto result(StrongOrRawPtr<mozilla::dom::Element>(self->GetRoot()));
37 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
38 0 : if (!result) {
39 0 : args.rval().setNull();
40 0 : return true;
41 : }
42 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
43 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
44 0 : return false;
45 : }
46 0 : return true;
47 : }
48 :
49 : static const JSJitInfo root_getterinfo = {
50 : { (JSJitGetterOp)get_root },
51 : { prototypes::id::XULTemplateBuilder },
52 : { PrototypeTraits<prototypes::id::XULTemplateBuilder>::Depth },
53 : JSJitInfo::Getter,
54 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
55 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
56 : false, /* isInfallible. False in setters. */
57 : false, /* isMovable. Not relevant for setters. */
58 : false, /* isEliminatable. Not relevant for setters. */
59 : false, /* isAlwaysInSlot. Only relevant for getters. */
60 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
61 : false, /* isTypedMethod. Only relevant for methods. */
62 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
63 : };
64 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
65 : static_assert(0 < 1, "There is no slot for us");
66 :
67 : static bool
68 0 : get_datasource(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTemplateBuilder* self, JSJitGetterCallArgs args)
69 : {
70 0 : auto result(StrongOrRawPtr<nsISupports>(self->GetDatasource()));
71 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
72 0 : if (!result) {
73 0 : args.rval().setNull();
74 0 : return true;
75 : }
76 0 : if (!WrapObject(cx, result, args.rval())) {
77 0 : return false;
78 : }
79 0 : return true;
80 : }
81 :
82 : static bool
83 0 : set_datasource(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTemplateBuilder* self, JSJitSetterCallArgs args)
84 : {
85 : nsISupports* arg0;
86 0 : RefPtr<nsISupports> arg0_holder;
87 0 : if (args[0].isObject()) {
88 0 : JS::Rooted<JSObject*> source(cx, &args[0].toObject());
89 0 : if (NS_FAILED(UnwrapArg<nsISupports>(cx, source, getter_AddRefs(arg0_holder)))) {
90 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Value being assigned to XULTemplateBuilder.datasource", "nsISupports");
91 0 : return false;
92 : }
93 0 : MOZ_ASSERT(arg0_holder);
94 0 : arg0 = arg0_holder;
95 0 : } else if (args[0].isNullOrUndefined()) {
96 0 : arg0 = nullptr;
97 : } else {
98 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Value being assigned to XULTemplateBuilder.datasource");
99 0 : return false;
100 : }
101 0 : binding_detail::FastErrorResult rv;
102 0 : self->SetDatasource(Constify(arg0), rv);
103 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
104 0 : return false;
105 : }
106 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
107 :
108 0 : return true;
109 : }
110 :
111 : static const JSJitInfo datasource_getterinfo = {
112 : { (JSJitGetterOp)get_datasource },
113 : { prototypes::id::XULTemplateBuilder },
114 : { PrototypeTraits<prototypes::id::XULTemplateBuilder>::Depth },
115 : JSJitInfo::Getter,
116 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
117 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
118 : false, /* isInfallible. False in setters. */
119 : false, /* isMovable. Not relevant for setters. */
120 : false, /* isEliminatable. Not relevant for setters. */
121 : false, /* isAlwaysInSlot. Only relevant for getters. */
122 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
123 : false, /* isTypedMethod. Only relevant for methods. */
124 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
125 : };
126 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
127 : static_assert(0 < 1, "There is no slot for us");
128 : static const JSJitInfo datasource_setterinfo = {
129 : { (JSJitGetterOp)set_datasource },
130 : { prototypes::id::XULTemplateBuilder },
131 : { PrototypeTraits<prototypes::id::XULTemplateBuilder>::Depth },
132 : JSJitInfo::Setter,
133 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
134 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
135 : false, /* isInfallible. False in setters. */
136 : false, /* isMovable. Not relevant for setters. */
137 : false, /* isEliminatable. Not relevant for setters. */
138 : false, /* isAlwaysInSlot. Only relevant for getters. */
139 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
140 : false, /* isTypedMethod. Only relevant for methods. */
141 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
142 : };
143 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
144 : static_assert(0 < 1, "There is no slot for us");
145 :
146 : static bool
147 0 : get_database(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTemplateBuilder* self, JSJitGetterCallArgs args)
148 : {
149 0 : auto result(StrongOrRawPtr<nsIRDFCompositeDataSource>(self->GetDatabase()));
150 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
151 0 : if (!result) {
152 0 : args.rval().setNull();
153 0 : return true;
154 : }
155 0 : if (!WrapObject(cx, result, &NS_GET_IID(nsIRDFCompositeDataSource), args.rval())) {
156 0 : return false;
157 : }
158 0 : return true;
159 : }
160 :
161 : static const JSJitInfo database_getterinfo = {
162 : { (JSJitGetterOp)get_database },
163 : { prototypes::id::XULTemplateBuilder },
164 : { PrototypeTraits<prototypes::id::XULTemplateBuilder>::Depth },
165 : JSJitInfo::Getter,
166 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
167 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
168 : false, /* isInfallible. False in setters. */
169 : false, /* isMovable. Not relevant for setters. */
170 : false, /* isEliminatable. Not relevant for setters. */
171 : false, /* isAlwaysInSlot. Only relevant for getters. */
172 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
173 : false, /* isTypedMethod. Only relevant for methods. */
174 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
175 : };
176 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
177 : static_assert(0 < 1, "There is no slot for us");
178 :
179 : static bool
180 0 : get_rootResult(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTemplateBuilder* self, JSJitGetterCallArgs args)
181 : {
182 0 : auto result(StrongOrRawPtr<nsIXULTemplateResult>(self->GetRootResult()));
183 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
184 0 : if (!result) {
185 0 : args.rval().setNull();
186 0 : return true;
187 : }
188 0 : if (!WrapObject(cx, result, &NS_GET_IID(nsIXULTemplateResult), args.rval())) {
189 0 : return false;
190 : }
191 0 : return true;
192 : }
193 :
194 : static const JSJitInfo rootResult_getterinfo = {
195 : { (JSJitGetterOp)get_rootResult },
196 : { prototypes::id::XULTemplateBuilder },
197 : { PrototypeTraits<prototypes::id::XULTemplateBuilder>::Depth },
198 : JSJitInfo::Getter,
199 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
200 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
201 : false, /* isInfallible. False in setters. */
202 : false, /* isMovable. Not relevant for setters. */
203 : false, /* isEliminatable. Not relevant for setters. */
204 : false, /* isAlwaysInSlot. Only relevant for getters. */
205 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
206 : false, /* isTypedMethod. Only relevant for methods. */
207 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
208 : };
209 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
210 : static_assert(0 < 1, "There is no slot for us");
211 :
212 : static bool
213 0 : rebuild(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTemplateBuilder* self, const JSJitMethodCallArgs& args)
214 : {
215 0 : binding_detail::FastErrorResult rv;
216 0 : self->Rebuild(rv);
217 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
218 0 : return false;
219 : }
220 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
221 0 : args.rval().setUndefined();
222 0 : return true;
223 : }
224 :
225 : static const JSJitInfo rebuild_methodinfo = {
226 : { (JSJitGetterOp)rebuild },
227 : { prototypes::id::XULTemplateBuilder },
228 : { PrototypeTraits<prototypes::id::XULTemplateBuilder>::Depth },
229 : JSJitInfo::Method,
230 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
231 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
232 : false, /* isInfallible. False in setters. */
233 : false, /* isMovable. Not relevant for setters. */
234 : false, /* 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 :
243 : static bool
244 0 : refresh(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTemplateBuilder* self, const JSJitMethodCallArgs& args)
245 : {
246 0 : binding_detail::FastErrorResult rv;
247 0 : self->Refresh(rv);
248 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
249 0 : return false;
250 : }
251 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
252 0 : args.rval().setUndefined();
253 0 : return true;
254 : }
255 :
256 : static const JSJitInfo refresh_methodinfo = {
257 : { (JSJitGetterOp)refresh },
258 : { prototypes::id::XULTemplateBuilder },
259 : { PrototypeTraits<prototypes::id::XULTemplateBuilder>::Depth },
260 : JSJitInfo::Method,
261 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
262 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
263 : false, /* isInfallible. False in setters. */
264 : false, /* isMovable. Not relevant for setters. */
265 : false, /* isEliminatable. Not relevant for setters. */
266 : false, /* isAlwaysInSlot. Only relevant for getters. */
267 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
268 : false, /* isTypedMethod. Only relevant for methods. */
269 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
270 : };
271 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
272 : static_assert(0 < 1, "There is no slot for us");
273 :
274 : static bool
275 0 : addResult(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTemplateBuilder* self, const JSJitMethodCallArgs& args)
276 : {
277 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
278 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTemplateBuilder.addResult");
279 : }
280 : nsIXULTemplateResult* arg0;
281 0 : RefPtr<nsIXULTemplateResult> arg0_holder;
282 0 : if (args[0].isObject()) {
283 0 : JS::Rooted<JSObject*> source(cx, &args[0].toObject());
284 0 : if (NS_FAILED(UnwrapArg<nsIXULTemplateResult>(cx, source, getter_AddRefs(arg0_holder)))) {
285 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of XULTemplateBuilder.addResult", "XULTemplateResult");
286 0 : return false;
287 : }
288 0 : MOZ_ASSERT(arg0_holder);
289 0 : arg0 = arg0_holder;
290 : } else {
291 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of XULTemplateBuilder.addResult");
292 0 : return false;
293 : }
294 0 : NonNull<nsINode> arg1;
295 0 : if (args[1].isObject()) {
296 : {
297 0 : nsresult rv = UnwrapObject<prototypes::id::Node, nsINode>(args[1], arg1);
298 0 : if (NS_FAILED(rv)) {
299 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of XULTemplateBuilder.addResult", "Node");
300 0 : return false;
301 : }
302 : }
303 : } else {
304 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of XULTemplateBuilder.addResult");
305 0 : return false;
306 : }
307 0 : binding_detail::FastErrorResult rv;
308 0 : self->AddResult(NonNullHelper(arg0), NonNullHelper(arg1), rv);
309 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
310 0 : return false;
311 : }
312 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
313 0 : args.rval().setUndefined();
314 0 : return true;
315 : }
316 :
317 : static const JSJitInfo addResult_methodinfo = {
318 : { (JSJitGetterOp)addResult },
319 : { prototypes::id::XULTemplateBuilder },
320 : { PrototypeTraits<prototypes::id::XULTemplateBuilder>::Depth },
321 : JSJitInfo::Method,
322 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
323 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
324 : false, /* isInfallible. False in setters. */
325 : false, /* isMovable. Not relevant for setters. */
326 : false, /* isEliminatable. Not relevant for setters. */
327 : false, /* isAlwaysInSlot. Only relevant for getters. */
328 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
329 : false, /* isTypedMethod. Only relevant for methods. */
330 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
331 : };
332 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
333 : static_assert(0 < 1, "There is no slot for us");
334 :
335 : static bool
336 0 : removeResult(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTemplateBuilder* self, const JSJitMethodCallArgs& args)
337 : {
338 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
339 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTemplateBuilder.removeResult");
340 : }
341 : nsIXULTemplateResult* arg0;
342 0 : RefPtr<nsIXULTemplateResult> arg0_holder;
343 0 : if (args[0].isObject()) {
344 0 : JS::Rooted<JSObject*> source(cx, &args[0].toObject());
345 0 : if (NS_FAILED(UnwrapArg<nsIXULTemplateResult>(cx, source, getter_AddRefs(arg0_holder)))) {
346 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of XULTemplateBuilder.removeResult", "XULTemplateResult");
347 0 : return false;
348 : }
349 0 : MOZ_ASSERT(arg0_holder);
350 0 : arg0 = arg0_holder;
351 : } else {
352 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of XULTemplateBuilder.removeResult");
353 0 : return false;
354 : }
355 0 : binding_detail::FastErrorResult rv;
356 0 : self->RemoveResult(NonNullHelper(arg0), rv);
357 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
358 0 : return false;
359 : }
360 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
361 0 : args.rval().setUndefined();
362 0 : return true;
363 : }
364 :
365 : static const JSJitInfo removeResult_methodinfo = {
366 : { (JSJitGetterOp)removeResult },
367 : { prototypes::id::XULTemplateBuilder },
368 : { PrototypeTraits<prototypes::id::XULTemplateBuilder>::Depth },
369 : JSJitInfo::Method,
370 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
371 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
372 : false, /* isInfallible. False in setters. */
373 : false, /* isMovable. Not relevant for setters. */
374 : false, /* isEliminatable. Not relevant for setters. */
375 : false, /* isAlwaysInSlot. Only relevant for getters. */
376 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
377 : false, /* isTypedMethod. Only relevant for methods. */
378 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
379 : };
380 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
381 : static_assert(0 < 1, "There is no slot for us");
382 :
383 : static bool
384 0 : replaceResult(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTemplateBuilder* self, const JSJitMethodCallArgs& args)
385 : {
386 0 : if (MOZ_UNLIKELY(args.length() < 3)) {
387 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTemplateBuilder.replaceResult");
388 : }
389 : nsIXULTemplateResult* arg0;
390 0 : RefPtr<nsIXULTemplateResult> arg0_holder;
391 0 : if (args[0].isObject()) {
392 0 : JS::Rooted<JSObject*> source(cx, &args[0].toObject());
393 0 : if (NS_FAILED(UnwrapArg<nsIXULTemplateResult>(cx, source, getter_AddRefs(arg0_holder)))) {
394 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of XULTemplateBuilder.replaceResult", "XULTemplateResult");
395 0 : return false;
396 : }
397 0 : MOZ_ASSERT(arg0_holder);
398 0 : arg0 = arg0_holder;
399 : } else {
400 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of XULTemplateBuilder.replaceResult");
401 0 : return false;
402 : }
403 : nsIXULTemplateResult* arg1;
404 0 : RefPtr<nsIXULTemplateResult> arg1_holder;
405 0 : if (args[1].isObject()) {
406 0 : JS::Rooted<JSObject*> source(cx, &args[1].toObject());
407 0 : if (NS_FAILED(UnwrapArg<nsIXULTemplateResult>(cx, source, getter_AddRefs(arg1_holder)))) {
408 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of XULTemplateBuilder.replaceResult", "XULTemplateResult");
409 0 : return false;
410 : }
411 0 : MOZ_ASSERT(arg1_holder);
412 0 : arg1 = arg1_holder;
413 : } else {
414 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of XULTemplateBuilder.replaceResult");
415 0 : return false;
416 : }
417 0 : NonNull<nsINode> arg2;
418 0 : if (args[2].isObject()) {
419 : {
420 0 : nsresult rv = UnwrapObject<prototypes::id::Node, nsINode>(args[2], arg2);
421 0 : if (NS_FAILED(rv)) {
422 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 3 of XULTemplateBuilder.replaceResult", "Node");
423 0 : return false;
424 : }
425 : }
426 : } else {
427 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 3 of XULTemplateBuilder.replaceResult");
428 0 : return false;
429 : }
430 0 : binding_detail::FastErrorResult rv;
431 0 : self->ReplaceResult(NonNullHelper(arg0), NonNullHelper(arg1), NonNullHelper(arg2), rv);
432 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
433 0 : return false;
434 : }
435 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
436 0 : args.rval().setUndefined();
437 0 : return true;
438 : }
439 :
440 : static const JSJitInfo replaceResult_methodinfo = {
441 : { (JSJitGetterOp)replaceResult },
442 : { prototypes::id::XULTemplateBuilder },
443 : { PrototypeTraits<prototypes::id::XULTemplateBuilder>::Depth },
444 : JSJitInfo::Method,
445 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
446 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
447 : false, /* isInfallible. False in setters. */
448 : false, /* isMovable. Not relevant for setters. */
449 : false, /* isEliminatable. Not relevant for setters. */
450 : false, /* isAlwaysInSlot. Only relevant for getters. */
451 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
452 : false, /* isTypedMethod. Only relevant for methods. */
453 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
454 : };
455 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
456 : static_assert(0 < 1, "There is no slot for us");
457 :
458 : static bool
459 0 : resultBindingChanged(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTemplateBuilder* self, const JSJitMethodCallArgs& args)
460 : {
461 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
462 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTemplateBuilder.resultBindingChanged");
463 : }
464 : nsIXULTemplateResult* arg0;
465 0 : RefPtr<nsIXULTemplateResult> arg0_holder;
466 0 : if (args[0].isObject()) {
467 0 : JS::Rooted<JSObject*> source(cx, &args[0].toObject());
468 0 : if (NS_FAILED(UnwrapArg<nsIXULTemplateResult>(cx, source, getter_AddRefs(arg0_holder)))) {
469 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of XULTemplateBuilder.resultBindingChanged", "XULTemplateResult");
470 0 : return false;
471 : }
472 0 : MOZ_ASSERT(arg0_holder);
473 0 : arg0 = arg0_holder;
474 : } else {
475 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of XULTemplateBuilder.resultBindingChanged");
476 0 : return false;
477 : }
478 0 : binding_detail::FastErrorResult rv;
479 0 : self->ResultBindingChanged(NonNullHelper(arg0), rv);
480 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
481 0 : return false;
482 : }
483 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
484 0 : args.rval().setUndefined();
485 0 : return true;
486 : }
487 :
488 : static const JSJitInfo resultBindingChanged_methodinfo = {
489 : { (JSJitGetterOp)resultBindingChanged },
490 : { prototypes::id::XULTemplateBuilder },
491 : { PrototypeTraits<prototypes::id::XULTemplateBuilder>::Depth },
492 : JSJitInfo::Method,
493 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
494 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
495 : false, /* isInfallible. False in setters. */
496 : false, /* isMovable. Not relevant for setters. */
497 : false, /* isEliminatable. Not relevant for setters. */
498 : false, /* isAlwaysInSlot. Only relevant for getters. */
499 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
500 : false, /* isTypedMethod. Only relevant for methods. */
501 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
502 : };
503 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
504 : static_assert(0 < 1, "There is no slot for us");
505 :
506 : static bool
507 0 : getResultForId(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTemplateBuilder* self, const JSJitMethodCallArgs& args)
508 : {
509 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
510 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTemplateBuilder.getResultForId");
511 : }
512 0 : binding_detail::FakeString arg0;
513 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
514 0 : return false;
515 : }
516 0 : binding_detail::FastErrorResult rv;
517 0 : auto result(StrongOrRawPtr<nsIXULTemplateResult>(self->GetResultForId(NonNullHelper(Constify(arg0)), rv)));
518 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
519 0 : return false;
520 : }
521 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
522 0 : if (!result) {
523 0 : args.rval().setNull();
524 0 : return true;
525 : }
526 0 : if (!WrapObject(cx, result, &NS_GET_IID(nsIXULTemplateResult), args.rval())) {
527 0 : return false;
528 : }
529 0 : return true;
530 : }
531 :
532 : static const JSJitInfo getResultForId_methodinfo = {
533 : { (JSJitGetterOp)getResultForId },
534 : { prototypes::id::XULTemplateBuilder },
535 : { PrototypeTraits<prototypes::id::XULTemplateBuilder>::Depth },
536 : JSJitInfo::Method,
537 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
538 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
539 : false, /* isInfallible. False in setters. */
540 : false, /* isMovable. Not relevant for setters. */
541 : false, /* isEliminatable. Not relevant for setters. */
542 : false, /* isAlwaysInSlot. Only relevant for getters. */
543 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
544 : false, /* isTypedMethod. Only relevant for methods. */
545 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
546 : };
547 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
548 : static_assert(0 < 1, "There is no slot for us");
549 :
550 : static bool
551 0 : getResultForContent(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTemplateBuilder* self, const JSJitMethodCallArgs& args)
552 : {
553 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
554 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTemplateBuilder.getResultForContent");
555 : }
556 0 : NonNull<mozilla::dom::Element> arg0;
557 0 : if (args[0].isObject()) {
558 : {
559 0 : nsresult rv = UnwrapObject<prototypes::id::Element, mozilla::dom::Element>(args[0], arg0);
560 0 : if (NS_FAILED(rv)) {
561 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of XULTemplateBuilder.getResultForContent", "Element");
562 0 : return false;
563 : }
564 : }
565 : } else {
566 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of XULTemplateBuilder.getResultForContent");
567 0 : return false;
568 : }
569 0 : auto result(StrongOrRawPtr<nsIXULTemplateResult>(self->GetResultForContent(NonNullHelper(arg0))));
570 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
571 0 : if (!result) {
572 0 : args.rval().setNull();
573 0 : return true;
574 : }
575 0 : if (!WrapObject(cx, result, &NS_GET_IID(nsIXULTemplateResult), args.rval())) {
576 0 : return false;
577 : }
578 0 : return true;
579 : }
580 :
581 : static const JSJitInfo getResultForContent_methodinfo = {
582 : { (JSJitGetterOp)getResultForContent },
583 : { prototypes::id::XULTemplateBuilder },
584 : { PrototypeTraits<prototypes::id::XULTemplateBuilder>::Depth },
585 : JSJitInfo::Method,
586 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
587 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
588 : false, /* isInfallible. False in setters. */
589 : false, /* isMovable. Not relevant for setters. */
590 : false, /* isEliminatable. Not relevant for setters. */
591 : false, /* isAlwaysInSlot. Only relevant for getters. */
592 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
593 : false, /* isTypedMethod. Only relevant for methods. */
594 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
595 : };
596 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
597 : static_assert(0 < 1, "There is no slot for us");
598 :
599 : static bool
600 0 : hasGeneratedContent(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTemplateBuilder* self, const JSJitMethodCallArgs& args)
601 : {
602 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
603 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTemplateBuilder.hasGeneratedContent");
604 : }
605 : nsIRDFResource* arg0;
606 0 : RefPtr<nsIRDFResource> arg0_holder;
607 0 : if (args[0].isObject()) {
608 0 : JS::Rooted<JSObject*> source(cx, &args[0].toObject());
609 0 : if (NS_FAILED(UnwrapArg<nsIRDFResource>(cx, source, getter_AddRefs(arg0_holder)))) {
610 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of XULTemplateBuilder.hasGeneratedContent", "MozRDFResource");
611 0 : return false;
612 : }
613 0 : MOZ_ASSERT(arg0_holder);
614 0 : arg0 = arg0_holder;
615 : } else {
616 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of XULTemplateBuilder.hasGeneratedContent");
617 0 : return false;
618 : }
619 0 : binding_detail::FakeString arg1;
620 0 : if (!ConvertJSValueToString(cx, args[1], eNull, eNull, arg1)) {
621 0 : return false;
622 : }
623 0 : binding_detail::FastErrorResult rv;
624 0 : bool result(self->HasGeneratedContent(NonNullHelper(arg0), NonNullHelper(Constify(arg1)), rv));
625 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
626 0 : return false;
627 : }
628 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
629 0 : args.rval().setBoolean(result);
630 0 : return true;
631 : }
632 :
633 : static const JSJitInfo hasGeneratedContent_methodinfo = {
634 : { (JSJitGetterOp)hasGeneratedContent },
635 : { prototypes::id::XULTemplateBuilder },
636 : { PrototypeTraits<prototypes::id::XULTemplateBuilder>::Depth },
637 : JSJitInfo::Method,
638 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
639 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
640 : false, /* isInfallible. False in setters. */
641 : false, /* isMovable. Not relevant for setters. */
642 : false, /* isEliminatable. Not relevant for setters. */
643 : false, /* isAlwaysInSlot. Only relevant for getters. */
644 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
645 : false, /* isTypedMethod. Only relevant for methods. */
646 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
647 : };
648 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
649 : static_assert(0 < 1, "There is no slot for us");
650 :
651 : static bool
652 0 : addRuleFilter(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTemplateBuilder* self, const JSJitMethodCallArgs& args)
653 : {
654 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
655 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTemplateBuilder.addRuleFilter");
656 : }
657 0 : NonNull<nsINode> arg0;
658 0 : if (args[0].isObject()) {
659 : {
660 0 : nsresult rv = UnwrapObject<prototypes::id::Node, nsINode>(args[0], arg0);
661 0 : if (NS_FAILED(rv)) {
662 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of XULTemplateBuilder.addRuleFilter", "Node");
663 0 : return false;
664 : }
665 : }
666 : } else {
667 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of XULTemplateBuilder.addRuleFilter");
668 0 : return false;
669 : }
670 : nsIXULTemplateRuleFilter* arg1;
671 0 : RefPtr<nsIXULTemplateRuleFilter> arg1_holder;
672 0 : if (args[1].isObject()) {
673 0 : JS::Rooted<JSObject*> source(cx, &args[1].toObject());
674 0 : if (NS_FAILED(UnwrapArg<nsIXULTemplateRuleFilter>(cx, source, getter_AddRefs(arg1_holder)))) {
675 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of XULTemplateBuilder.addRuleFilter", "XULTemplateRuleFilter");
676 0 : return false;
677 : }
678 0 : MOZ_ASSERT(arg1_holder);
679 0 : arg1 = arg1_holder;
680 : } else {
681 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of XULTemplateBuilder.addRuleFilter");
682 0 : return false;
683 : }
684 0 : binding_detail::FastErrorResult rv;
685 0 : self->AddRuleFilter(NonNullHelper(arg0), NonNullHelper(arg1), rv);
686 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
687 0 : return false;
688 : }
689 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
690 0 : args.rval().setUndefined();
691 0 : return true;
692 : }
693 :
694 : static const JSJitInfo addRuleFilter_methodinfo = {
695 : { (JSJitGetterOp)addRuleFilter },
696 : { prototypes::id::XULTemplateBuilder },
697 : { PrototypeTraits<prototypes::id::XULTemplateBuilder>::Depth },
698 : JSJitInfo::Method,
699 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
700 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
701 : false, /* isInfallible. False in setters. */
702 : false, /* isMovable. Not relevant for setters. */
703 : false, /* isEliminatable. Not relevant for setters. */
704 : false, /* isAlwaysInSlot. Only relevant for getters. */
705 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
706 : false, /* isTypedMethod. Only relevant for methods. */
707 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
708 : };
709 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
710 : static_assert(0 < 1, "There is no slot for us");
711 :
712 : static bool
713 0 : addListener(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTemplateBuilder* self, const JSJitMethodCallArgs& args)
714 : {
715 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
716 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTemplateBuilder.addListener");
717 : }
718 0 : RootedCallback<OwningNonNull<binding_detail::FastXULBuilderListener>> arg0(cx);
719 0 : if (args[0].isObject()) {
720 : { // scope for tempRoot
721 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
722 0 : arg0 = new binding_detail::FastXULBuilderListener(tempRoot);
723 : }
724 : } else {
725 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of XULTemplateBuilder.addListener");
726 0 : return false;
727 : }
728 0 : self->AddListener(NonNullHelper(arg0));
729 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
730 0 : args.rval().setUndefined();
731 0 : return true;
732 : }
733 :
734 : static const JSJitInfo addListener_methodinfo = {
735 : { (JSJitGetterOp)addListener },
736 : { prototypes::id::XULTemplateBuilder },
737 : { PrototypeTraits<prototypes::id::XULTemplateBuilder>::Depth },
738 : JSJitInfo::Method,
739 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
740 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
741 : false, /* isInfallible. False in setters. */
742 : false, /* isMovable. Not relevant for setters. */
743 : false, /* isEliminatable. Not relevant for setters. */
744 : false, /* isAlwaysInSlot. Only relevant for getters. */
745 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
746 : false, /* isTypedMethod. Only relevant for methods. */
747 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
748 : };
749 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
750 : static_assert(0 < 1, "There is no slot for us");
751 :
752 : static bool
753 0 : removeListener(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTemplateBuilder* self, const JSJitMethodCallArgs& args)
754 : {
755 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
756 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTemplateBuilder.removeListener");
757 : }
758 0 : RootedCallback<OwningNonNull<binding_detail::FastXULBuilderListener>> arg0(cx);
759 0 : if (args[0].isObject()) {
760 : { // scope for tempRoot
761 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
762 0 : arg0 = new binding_detail::FastXULBuilderListener(tempRoot);
763 : }
764 : } else {
765 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of XULTemplateBuilder.removeListener");
766 0 : return false;
767 : }
768 0 : self->RemoveListener(NonNullHelper(arg0));
769 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
770 0 : args.rval().setUndefined();
771 0 : return true;
772 : }
773 :
774 : static const JSJitInfo removeListener_methodinfo = {
775 : { (JSJitGetterOp)removeListener },
776 : { prototypes::id::XULTemplateBuilder },
777 : { PrototypeTraits<prototypes::id::XULTemplateBuilder>::Depth },
778 : JSJitInfo::Method,
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 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
794 : {
795 0 : nsXULTemplateBuilder* self = UnwrapPossiblyNotInitializedDOMObject<nsXULTemplateBuilder>(obj);
796 : // We don't want to preserve if we don't have a wrapper, and we
797 : // obviously can't preserve if we're not initialized.
798 0 : if (self && self->GetWrapperPreserveColor()) {
799 0 : PreserveWrapper(self);
800 : }
801 0 : return true;
802 : }
803 :
804 : static void
805 0 : _finalize(js::FreeOp* fop, JSObject* obj)
806 : {
807 0 : nsXULTemplateBuilder* self = UnwrapPossiblyNotInitializedDOMObject<nsXULTemplateBuilder>(obj);
808 0 : if (self) {
809 0 : ClearWrapper(self, self, obj);
810 0 : AddForDeferredFinalization<nsXULTemplateBuilder>(self);
811 : }
812 0 : }
813 :
814 : static void
815 0 : _objectMoved(JSObject* obj, const JSObject* old)
816 : {
817 0 : nsXULTemplateBuilder* self = UnwrapPossiblyNotInitializedDOMObject<nsXULTemplateBuilder>(obj);
818 0 : if (self) {
819 0 : UpdateWrapper(self, self, obj, old);
820 : }
821 0 : }
822 :
823 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
824 : #if defined(__clang__)
825 : #pragma clang diagnostic push
826 : #pragma clang diagnostic ignored "-Wmissing-braces"
827 : #endif
828 : static const JSFunctionSpec sMethods_specs[] = {
829 : JS_FNSPEC("rebuild", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&rebuild_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
830 : JS_FNSPEC("refresh", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&refresh_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
831 : JS_FNSPEC("addResult", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&addResult_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
832 : JS_FNSPEC("removeResult", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&removeResult_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
833 : JS_FNSPEC("replaceResult", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&replaceResult_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
834 : JS_FNSPEC("resultBindingChanged", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&resultBindingChanged_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
835 : JS_FNSPEC("getResultForId", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getResultForId_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
836 : JS_FNSPEC("getResultForContent", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getResultForContent_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
837 : JS_FNSPEC("hasGeneratedContent", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&hasGeneratedContent_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
838 : JS_FNSPEC("addRuleFilter", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&addRuleFilter_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
839 : JS_FNSPEC("addListener", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&addListener_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
840 : JS_FNSPEC("removeListener", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&removeListener_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
841 : JS_FS_END,
842 : JS_FNSPEC("QueryInterface", QueryInterface, nullptr, 1, 0, nullptr),
843 : JS_FS_END
844 : };
845 : #if defined(__clang__)
846 : #pragma clang diagnostic pop
847 : #endif
848 :
849 : static PrefableDisablers sMethods_disablers13 = {
850 : true, false, 0, &WantsQueryInterface<nsXULTemplateBuilder>::Enabled
851 : };
852 :
853 : // Can't be const because the pref-enabled boolean needs to be writable
854 : static Prefable<const JSFunctionSpec> sMethods[] = {
855 : { nullptr, &sMethods_specs[0] },
856 : { &sMethods_disablers13, &sMethods_specs[13] },
857 : { nullptr, nullptr }
858 : };
859 :
860 : static_assert(2 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
861 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
862 : static_assert(12 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
863 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
864 :
865 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
866 : #if defined(__clang__)
867 : #pragma clang diagnostic push
868 : #pragma clang diagnostic ignored "-Wmissing-braces"
869 : #endif
870 : static const JSPropertySpec sAttributes_specs[] = {
871 : { "root", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &root_getterinfo, nullptr, nullptr },
872 : { "datasource", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &datasource_getterinfo, GenericBindingSetter, &datasource_setterinfo },
873 : { "database", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &database_getterinfo, nullptr, nullptr },
874 : { "rootResult", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &rootResult_getterinfo, nullptr, nullptr },
875 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
876 : };
877 : #if defined(__clang__)
878 : #pragma clang diagnostic pop
879 : #endif
880 :
881 :
882 : // Can't be const because the pref-enabled boolean needs to be writable
883 : static Prefable<const JSPropertySpec> sAttributes[] = {
884 : { nullptr, &sAttributes_specs[0] },
885 : { nullptr, nullptr }
886 : };
887 :
888 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
889 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
890 : static_assert(4 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
891 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
892 :
893 :
894 : static uint16_t sNativeProperties_sortedPropertyIndices[17];
895 : static PropertyInfo sNativeProperties_propertyInfos[17];
896 :
897 : static const NativePropertiesN<2> sNativeProperties = {
898 : false, 0,
899 : false, 0,
900 : true, 0 /* sMethods */,
901 : true, 1 /* sAttributes */,
902 : false, 0,
903 : false, 0,
904 : false, 0,
905 : -1,
906 : 17,
907 : sNativeProperties_sortedPropertyIndices,
908 : {
909 : { sMethods, &sNativeProperties_propertyInfos[0] },
910 : { sAttributes, &sNativeProperties_propertyInfos[13] }
911 : }
912 : };
913 : static_assert(17 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
914 : "We have a property info count that is oversized");
915 :
916 : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
917 : {
918 : "Function",
919 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
920 : &sBoringInterfaceObjectClassClassOps,
921 : JS_NULL_CLASS_SPEC,
922 : JS_NULL_CLASS_EXT,
923 : &sInterfaceObjectClassObjectOps
924 : },
925 : eInterface,
926 : true,
927 : prototypes::id::XULTemplateBuilder,
928 : PrototypeTraits<prototypes::id::XULTemplateBuilder>::Depth,
929 : sNativePropertyHooks,
930 : "function XULTemplateBuilder() {\n [native code]\n}",
931 : JS::GetRealmFunctionPrototype
932 : };
933 :
934 : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
935 : {
936 : "XULTemplateBuilderPrototype",
937 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
938 : JS_NULL_CLASS_OPS,
939 : JS_NULL_CLASS_SPEC,
940 : JS_NULL_CLASS_EXT,
941 : JS_NULL_OBJECT_OPS
942 : },
943 : eInterfacePrototype,
944 : false,
945 : prototypes::id::XULTemplateBuilder,
946 : PrototypeTraits<prototypes::id::XULTemplateBuilder>::Depth,
947 : sNativePropertyHooks,
948 : "[object XULTemplateBuilderPrototype]",
949 : JS::GetRealmObjectPrototype
950 : };
951 :
952 : bool
953 0 : ConstructorEnabled(JSContext* aCx, JS::Handle<JSObject*> aObj)
954 : {
955 0 : return IsChromeOrXBL(aCx, aObj);
956 : }
957 :
958 : JSObject*
959 0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
960 : {
961 0 : return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
962 : }
963 :
964 : static const js::ClassOps sClassOps = {
965 : _addProperty, /* addProperty */
966 : nullptr, /* delProperty */
967 : nullptr, /* getProperty */
968 : nullptr, /* setProperty */
969 : nullptr, /* enumerate */
970 : nullptr, /* newEnumerate */
971 : nullptr, /* resolve */
972 : nullptr, /* mayResolve */
973 : _finalize, /* finalize */
974 : nullptr, /* call */
975 : nullptr, /* hasInstance */
976 : nullptr, /* construct */
977 : nullptr, /* trace */
978 : };
979 :
980 : static const js::ClassExtension sClassExtension = {
981 : nullptr, /* weakmapKeyDelegateOp */
982 : _objectMoved /* objectMovedOp */
983 : };
984 :
985 : static const DOMJSClass sClass = {
986 : { "XULTemplateBuilder",
987 : JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
988 : &sClassOps,
989 : JS_NULL_CLASS_SPEC,
990 : &sClassExtension,
991 : JS_NULL_OBJECT_OPS
992 : },
993 : { prototypes::id::XULTemplateBuilder, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
994 : IsBaseOf<nsISupports, nsXULTemplateBuilder >::value,
995 : sNativePropertyHooks,
996 : FindAssociatedGlobalForNative<nsXULTemplateBuilder>::Get,
997 : GetProtoObjectHandle,
998 : GetCCParticipant<nsXULTemplateBuilder>::Get()
999 : };
1000 : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
1001 : "Must have the right minimal number of reserved slots.");
1002 : static_assert(1 >= 1,
1003 : "Must have enough reserved slots.");
1004 :
1005 : const JSClass*
1006 0 : GetJSClass()
1007 : {
1008 0 : return sClass.ToJSClass();
1009 : }
1010 :
1011 : bool
1012 0 : Wrap(JSContext* aCx, nsXULTemplateBuilder* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
1013 : {
1014 : MOZ_ASSERT(static_cast<nsXULTemplateBuilder*>(aObject) ==
1015 : reinterpret_cast<nsXULTemplateBuilder*>(aObject),
1016 : "Multiple inheritance for nsXULTemplateBuilder is broken.");
1017 0 : MOZ_ASSERT(ToSupportsIsCorrect(aObject));
1018 0 : MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
1019 0 : MOZ_ASSERT(!aCache->GetWrapper(),
1020 : "You should probably not be using Wrap() directly; use "
1021 : "GetOrCreateDOMReflector instead");
1022 :
1023 0 : MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
1024 : "nsISupports must be on our primary inheritance chain");
1025 :
1026 0 : JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
1027 0 : if (!global) {
1028 0 : return false;
1029 : }
1030 0 : MOZ_ASSERT(JS_IsGlobalObject(global));
1031 0 : MOZ_ASSERT(JS::ObjectIsNotGray(global));
1032 :
1033 : // That might have ended up wrapping us already, due to the wonders
1034 : // of XBL. Check for that, and bail out as needed.
1035 0 : aReflector.set(aCache->GetWrapper());
1036 0 : if (aReflector) {
1037 : #ifdef DEBUG
1038 0 : binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
1039 : #endif // DEBUG
1040 0 : return true;
1041 : }
1042 :
1043 0 : JSAutoCompartment ac(aCx, global);
1044 0 : JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
1045 0 : if (!canonicalProto) {
1046 0 : return false;
1047 : }
1048 0 : JS::Rooted<JSObject*> proto(aCx);
1049 0 : if (aGivenProto) {
1050 0 : proto = aGivenProto;
1051 : // Unfortunately, while aGivenProto was in the compartment of aCx
1052 : // coming in, we changed compartments to that of "parent" so may need
1053 : // to wrap the proto here.
1054 0 : if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
1055 0 : if (!JS_WrapObject(aCx, &proto)) {
1056 0 : return false;
1057 : }
1058 : }
1059 : } else {
1060 0 : proto = canonicalProto;
1061 : }
1062 :
1063 0 : BindingJSObjectCreator<nsXULTemplateBuilder> creator(aCx);
1064 0 : creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
1065 0 : if (!aReflector) {
1066 0 : return false;
1067 : }
1068 :
1069 0 : aCache->SetWrapper(aReflector);
1070 0 : creator.InitializationSucceeded();
1071 :
1072 0 : MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
1073 : aCache->GetWrapperPreserveColor() == aReflector);
1074 : // If proto != canonicalProto, we have to preserve our wrapper;
1075 : // otherwise we won't be able to properly recreate it later, since
1076 : // we won't know what proto to use. Note that we don't check
1077 : // aGivenProto here, since it's entirely possible (and even
1078 : // somewhat common) to have a non-null aGivenProto which is the
1079 : // same as canonicalProto.
1080 0 : if (proto != canonicalProto) {
1081 0 : PreserveWrapper(aObject);
1082 : }
1083 :
1084 0 : return true;
1085 : }
1086 :
1087 : const NativePropertyHooks sNativePropertyHooks[] = { {
1088 : nullptr,
1089 : nullptr,
1090 : nullptr,
1091 : { sNativeProperties.Upcast(), nullptr },
1092 : prototypes::id::XULTemplateBuilder,
1093 : constructors::id::XULTemplateBuilder,
1094 : nullptr,
1095 : &DefaultXrayExpandoObjectClass
1096 : } };
1097 :
1098 : void
1099 0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
1100 : {
1101 0 : JS::Rooted<JSObject*> parentProto(aCx, JS::GetRealmObjectPrototype(aCx));
1102 0 : if (!parentProto) {
1103 0 : return;
1104 : }
1105 :
1106 0 : JS::Rooted<JSObject*> constructorProto(aCx, JS::GetRealmFunctionPrototype(aCx));
1107 0 : if (!constructorProto) {
1108 0 : return;
1109 : }
1110 :
1111 : static bool sIdsInited = false;
1112 0 : if (!sIdsInited && NS_IsMainThread()) {
1113 0 : if (!InitIds(aCx, sNativeProperties.Upcast())) {
1114 0 : return;
1115 : }
1116 0 : sIdsInited = true;
1117 : }
1118 :
1119 0 : JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::XULTemplateBuilder);
1120 0 : JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::XULTemplateBuilder);
1121 0 : dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
1122 : &sPrototypeClass.mBase, protoCache,
1123 : constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
1124 : interfaceCache,
1125 : sNativeProperties.Upcast(),
1126 : nullptr,
1127 : "XULTemplateBuilder", aDefineOnGlobal,
1128 : nullptr,
1129 0 : false);
1130 : }
1131 :
1132 : JS::Handle<JSObject*>
1133 0 : GetProtoObjectHandle(JSContext* aCx)
1134 : {
1135 : /* Get the interface prototype object for this class. This will create the
1136 : object as needed. */
1137 0 : bool aDefineOnGlobal = true;
1138 :
1139 : /* Make sure our global is sane. Hopefully we can remove this sometime */
1140 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
1141 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
1142 0 : return nullptr;
1143 : }
1144 :
1145 : /* Check to see whether the interface objects are already installed */
1146 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
1147 0 : if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::XULTemplateBuilder)) {
1148 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
1149 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
1150 : }
1151 :
1152 : /*
1153 : * The object might _still_ be null, but that's OK.
1154 : *
1155 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
1156 : * traced by TraceProtoAndIfaceCache() and its contents are never
1157 : * changed after they have been set.
1158 : *
1159 : * Calling address() avoids the read read barrier that does gray
1160 : * unmarking, but it's not possible for the object to be gray here.
1161 : */
1162 :
1163 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::XULTemplateBuilder);
1164 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
1165 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
1166 : }
1167 :
1168 : JSObject*
1169 0 : GetProtoObject(JSContext* aCx)
1170 : {
1171 0 : return GetProtoObjectHandle(aCx);
1172 : }
1173 :
1174 : JS::Handle<JSObject*>
1175 0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
1176 : {
1177 : /* Get the interface object for this class. This will create the object as
1178 : needed. */
1179 :
1180 : /* Make sure our global is sane. Hopefully we can remove this sometime */
1181 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
1182 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
1183 0 : return nullptr;
1184 : }
1185 :
1186 : /* Check to see whether the interface objects are already installed */
1187 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
1188 0 : if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::XULTemplateBuilder)) {
1189 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
1190 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
1191 : }
1192 :
1193 : /*
1194 : * The object might _still_ be null, but that's OK.
1195 : *
1196 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
1197 : * traced by TraceProtoAndIfaceCache() and its contents are never
1198 : * changed after they have been set.
1199 : *
1200 : * Calling address() avoids the read read barrier that does gray
1201 : * unmarking, but it's not possible for the object to be gray here.
1202 : */
1203 :
1204 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::XULTemplateBuilder);
1205 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
1206 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
1207 : }
1208 :
1209 : JSObject*
1210 0 : GetConstructorObject(JSContext* aCx)
1211 : {
1212 0 : return GetConstructorObjectHandle(aCx);
1213 : }
1214 :
1215 : } // namespace XULTemplateBuilderBinding
1216 :
1217 :
1218 :
1219 : namespace XULTreeBuilderBinding {
1220 :
1221 : static_assert(IsRefcounted<NativeType>::value == IsRefcounted<XULTemplateBuilderBinding::NativeType>::value,
1222 : "Can't inherit from an interface with a different ownership model.");
1223 :
1224 : static bool
1225 0 : getResourceAtIndex(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
1226 : {
1227 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
1228 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.getResourceAtIndex");
1229 : }
1230 : int32_t arg0;
1231 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
1232 0 : return false;
1233 : }
1234 0 : binding_detail::FastErrorResult rv;
1235 0 : auto result(StrongOrRawPtr<nsIRDFResource>(self->GetResourceAtIndex(arg0, rv)));
1236 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1237 0 : return false;
1238 : }
1239 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1240 0 : if (!result) {
1241 0 : args.rval().setNull();
1242 0 : return true;
1243 : }
1244 0 : if (!WrapObject(cx, result, &NS_GET_IID(nsIRDFResource), args.rval())) {
1245 0 : return false;
1246 : }
1247 0 : return true;
1248 : }
1249 :
1250 : static const JSJitInfo getResourceAtIndex_methodinfo = {
1251 : { (JSJitGetterOp)getResourceAtIndex },
1252 : { prototypes::id::XULTreeBuilder },
1253 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
1254 : JSJitInfo::Method,
1255 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1256 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
1257 : false, /* isInfallible. False in setters. */
1258 : false, /* isMovable. Not relevant for setters. */
1259 : false, /* isEliminatable. Not relevant for setters. */
1260 : false, /* isAlwaysInSlot. Only relevant for getters. */
1261 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1262 : false, /* isTypedMethod. Only relevant for methods. */
1263 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1264 : };
1265 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1266 : static_assert(0 < 1, "There is no slot for us");
1267 :
1268 : static bool
1269 0 : getIndexOfResource(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
1270 : {
1271 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
1272 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.getIndexOfResource");
1273 : }
1274 : nsIRDFResource* arg0;
1275 0 : RefPtr<nsIRDFResource> arg0_holder;
1276 0 : if (args[0].isObject()) {
1277 0 : JS::Rooted<JSObject*> source(cx, &args[0].toObject());
1278 0 : if (NS_FAILED(UnwrapArg<nsIRDFResource>(cx, source, getter_AddRefs(arg0_holder)))) {
1279 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of XULTreeBuilder.getIndexOfResource", "MozRDFResource");
1280 0 : return false;
1281 : }
1282 0 : MOZ_ASSERT(arg0_holder);
1283 0 : arg0 = arg0_holder;
1284 : } else {
1285 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of XULTreeBuilder.getIndexOfResource");
1286 0 : return false;
1287 : }
1288 0 : binding_detail::FastErrorResult rv;
1289 0 : int32_t result(self->GetIndexOfResource(NonNullHelper(arg0), rv));
1290 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1291 0 : return false;
1292 : }
1293 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1294 0 : args.rval().setInt32(int32_t(result));
1295 0 : return true;
1296 : }
1297 :
1298 : static const JSJitInfo getIndexOfResource_methodinfo = {
1299 : { (JSJitGetterOp)getIndexOfResource },
1300 : { prototypes::id::XULTreeBuilder },
1301 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
1302 : JSJitInfo::Method,
1303 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1304 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
1305 : false, /* isInfallible. False in setters. */
1306 : false, /* isMovable. Not relevant for setters. */
1307 : false, /* isEliminatable. Not relevant for setters. */
1308 : false, /* isAlwaysInSlot. Only relevant for getters. */
1309 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1310 : false, /* isTypedMethod. Only relevant for methods. */
1311 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1312 : };
1313 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1314 : static_assert(0 < 1, "There is no slot for us");
1315 :
1316 : static bool
1317 0 : addObserver(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
1318 : {
1319 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
1320 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.addObserver");
1321 : }
1322 0 : RootedCallback<OwningNonNull<binding_detail::FastXULTreeBuilderObserver>> arg0(cx);
1323 0 : if (args[0].isObject()) {
1324 : { // scope for tempRoot
1325 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
1326 0 : arg0 = new binding_detail::FastXULTreeBuilderObserver(tempRoot);
1327 : }
1328 : } else {
1329 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of XULTreeBuilder.addObserver");
1330 0 : return false;
1331 : }
1332 0 : self->AddObserver(NonNullHelper(arg0));
1333 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1334 0 : args.rval().setUndefined();
1335 0 : return true;
1336 : }
1337 :
1338 : static const JSJitInfo addObserver_methodinfo = {
1339 : { (JSJitGetterOp)addObserver },
1340 : { prototypes::id::XULTreeBuilder },
1341 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
1342 : JSJitInfo::Method,
1343 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1344 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1345 : false, /* isInfallible. False in setters. */
1346 : false, /* isMovable. Not relevant for setters. */
1347 : false, /* isEliminatable. Not relevant for setters. */
1348 : false, /* isAlwaysInSlot. Only relevant for getters. */
1349 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1350 : false, /* isTypedMethod. Only relevant for methods. */
1351 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1352 : };
1353 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1354 : static_assert(0 < 1, "There is no slot for us");
1355 :
1356 : static bool
1357 0 : removeObserver(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
1358 : {
1359 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
1360 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.removeObserver");
1361 : }
1362 0 : RootedCallback<OwningNonNull<binding_detail::FastXULTreeBuilderObserver>> arg0(cx);
1363 0 : if (args[0].isObject()) {
1364 : { // scope for tempRoot
1365 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
1366 0 : arg0 = new binding_detail::FastXULTreeBuilderObserver(tempRoot);
1367 : }
1368 : } else {
1369 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of XULTreeBuilder.removeObserver");
1370 0 : return false;
1371 : }
1372 0 : self->RemoveObserver(NonNullHelper(arg0));
1373 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1374 0 : args.rval().setUndefined();
1375 0 : return true;
1376 : }
1377 :
1378 : static const JSJitInfo removeObserver_methodinfo = {
1379 : { (JSJitGetterOp)removeObserver },
1380 : { prototypes::id::XULTreeBuilder },
1381 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
1382 : JSJitInfo::Method,
1383 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1384 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1385 : false, /* isInfallible. False in setters. */
1386 : false, /* isMovable. Not relevant for setters. */
1387 : false, /* isEliminatable. Not relevant for setters. */
1388 : false, /* isAlwaysInSlot. Only relevant for getters. */
1389 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1390 : false, /* isTypedMethod. Only relevant for methods. */
1391 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1392 : };
1393 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1394 : static_assert(0 < 1, "There is no slot for us");
1395 :
1396 : static bool
1397 0 : sort(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
1398 : {
1399 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
1400 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.sort");
1401 : }
1402 0 : NonNull<mozilla::dom::Element> arg0;
1403 0 : if (args[0].isObject()) {
1404 : {
1405 0 : nsresult rv = UnwrapObject<prototypes::id::Element, mozilla::dom::Element>(args[0], arg0);
1406 0 : if (NS_FAILED(rv)) {
1407 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of XULTreeBuilder.sort", "Element");
1408 0 : return false;
1409 : }
1410 : }
1411 : } else {
1412 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of XULTreeBuilder.sort");
1413 0 : return false;
1414 : }
1415 0 : self->Sort(NonNullHelper(arg0));
1416 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1417 0 : args.rval().setUndefined();
1418 0 : return true;
1419 : }
1420 :
1421 : static const JSJitInfo sort_methodinfo = {
1422 : { (JSJitGetterOp)sort },
1423 : { prototypes::id::XULTreeBuilder },
1424 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
1425 : JSJitInfo::Method,
1426 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1427 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1428 : false, /* isInfallible. False in setters. */
1429 : false, /* isMovable. Not relevant for setters. */
1430 : false, /* isEliminatable. Not relevant for setters. */
1431 : false, /* isAlwaysInSlot. Only relevant for getters. */
1432 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1433 : false, /* isTypedMethod. Only relevant for methods. */
1434 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1435 : };
1436 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1437 : static_assert(0 < 1, "There is no slot for us");
1438 :
1439 : static bool
1440 0 : get_rowCount(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, JSJitGetterCallArgs args)
1441 : {
1442 0 : int32_t result(self->RowCount());
1443 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1444 0 : args.rval().setInt32(int32_t(result));
1445 0 : return true;
1446 : }
1447 :
1448 : static const JSJitInfo rowCount_getterinfo = {
1449 : { (JSJitGetterOp)get_rowCount },
1450 : { prototypes::id::XULTreeBuilder },
1451 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
1452 : JSJitInfo::Getter,
1453 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1454 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
1455 : true, /* isInfallible. False in setters. */
1456 : false, /* isMovable. Not relevant for setters. */
1457 : false, /* isEliminatable. Not relevant for setters. */
1458 : false, /* isAlwaysInSlot. Only relevant for getters. */
1459 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1460 : false, /* isTypedMethod. Only relevant for methods. */
1461 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1462 : };
1463 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1464 : static_assert(0 < 1, "There is no slot for us");
1465 :
1466 : static bool
1467 0 : get_selection(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, JSJitGetterCallArgs args)
1468 : {
1469 0 : auto result(StrongOrRawPtr<nsITreeSelection>(self->GetSelection()));
1470 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1471 0 : if (!result) {
1472 0 : args.rval().setNull();
1473 0 : return true;
1474 : }
1475 0 : if (!WrapObject(cx, result, &NS_GET_IID(nsITreeSelection), args.rval())) {
1476 0 : return false;
1477 : }
1478 0 : return true;
1479 : }
1480 :
1481 : static bool
1482 0 : set_selection(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, JSJitSetterCallArgs args)
1483 : {
1484 : nsITreeSelection* arg0;
1485 0 : RefPtr<nsITreeSelection> arg0_holder;
1486 0 : if (args[0].isObject()) {
1487 0 : JS::Rooted<JSObject*> source(cx, &args[0].toObject());
1488 0 : if (NS_FAILED(UnwrapArg<nsITreeSelection>(cx, source, getter_AddRefs(arg0_holder)))) {
1489 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Value being assigned to XULTreeBuilder.selection", "nsITreeSelection");
1490 0 : return false;
1491 : }
1492 0 : MOZ_ASSERT(arg0_holder);
1493 0 : arg0 = arg0_holder;
1494 0 : } else if (args[0].isNullOrUndefined()) {
1495 0 : arg0 = nullptr;
1496 : } else {
1497 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Value being assigned to XULTreeBuilder.selection");
1498 0 : return false;
1499 : }
1500 0 : binding_detail::FastErrorResult rv;
1501 0 : self->SetSelection(Constify(arg0), rv);
1502 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1503 0 : return false;
1504 : }
1505 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1506 :
1507 0 : return true;
1508 : }
1509 :
1510 : static const JSJitInfo selection_getterinfo = {
1511 : { (JSJitGetterOp)get_selection },
1512 : { prototypes::id::XULTreeBuilder },
1513 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
1514 : JSJitInfo::Getter,
1515 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1516 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
1517 : false, /* isInfallible. False in setters. */
1518 : false, /* isMovable. Not relevant for setters. */
1519 : false, /* isEliminatable. Not relevant for setters. */
1520 : false, /* isAlwaysInSlot. Only relevant for getters. */
1521 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1522 : false, /* isTypedMethod. Only relevant for methods. */
1523 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1524 : };
1525 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1526 : static_assert(0 < 1, "There is no slot for us");
1527 : static const JSJitInfo selection_setterinfo = {
1528 : { (JSJitGetterOp)set_selection },
1529 : { prototypes::id::XULTreeBuilder },
1530 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
1531 : JSJitInfo::Setter,
1532 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1533 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1534 : false, /* isInfallible. False in setters. */
1535 : false, /* isMovable. Not relevant for setters. */
1536 : false, /* isEliminatable. Not relevant for setters. */
1537 : false, /* isAlwaysInSlot. Only relevant for getters. */
1538 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1539 : false, /* isTypedMethod. Only relevant for methods. */
1540 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1541 : };
1542 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1543 : static_assert(0 < 1, "There is no slot for us");
1544 :
1545 : static bool
1546 0 : getRowProperties(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
1547 : {
1548 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
1549 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.getRowProperties");
1550 : }
1551 : int32_t arg0;
1552 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
1553 0 : return false;
1554 : }
1555 0 : binding_detail::FastErrorResult rv;
1556 0 : DOMString result;
1557 0 : self->GetRowProperties(arg0, result, rv);
1558 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1559 0 : return false;
1560 : }
1561 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1562 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
1563 0 : return false;
1564 : }
1565 0 : return true;
1566 : }
1567 :
1568 : static const JSJitInfo getRowProperties_methodinfo = {
1569 : { (JSJitGetterOp)getRowProperties },
1570 : { prototypes::id::XULTreeBuilder },
1571 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
1572 : JSJitInfo::Method,
1573 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1574 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
1575 : false, /* isInfallible. False in setters. */
1576 : false, /* isMovable. Not relevant for setters. */
1577 : false, /* isEliminatable. Not relevant for setters. */
1578 : false, /* isAlwaysInSlot. Only relevant for getters. */
1579 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1580 : false, /* isTypedMethod. Only relevant for methods. */
1581 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1582 : };
1583 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1584 : static_assert(0 < 1, "There is no slot for us");
1585 :
1586 : static bool
1587 0 : getCellProperties(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
1588 : {
1589 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
1590 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.getCellProperties");
1591 : }
1592 : int32_t arg0;
1593 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
1594 0 : return false;
1595 : }
1596 0 : NonNull<nsTreeColumn> arg1;
1597 0 : if (args[1].isObject()) {
1598 : {
1599 0 : nsresult rv = UnwrapObject<prototypes::id::TreeColumn, nsTreeColumn>(args[1], arg1);
1600 0 : if (NS_FAILED(rv)) {
1601 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of XULTreeBuilder.getCellProperties", "TreeColumn");
1602 0 : return false;
1603 : }
1604 : }
1605 : } else {
1606 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of XULTreeBuilder.getCellProperties");
1607 0 : return false;
1608 : }
1609 0 : binding_detail::FastErrorResult rv;
1610 0 : DOMString result;
1611 0 : self->GetCellProperties(arg0, NonNullHelper(arg1), result, rv);
1612 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1613 0 : return false;
1614 : }
1615 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1616 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
1617 0 : return false;
1618 : }
1619 0 : return true;
1620 : }
1621 :
1622 : static const JSJitInfo getCellProperties_methodinfo = {
1623 : { (JSJitGetterOp)getCellProperties },
1624 : { prototypes::id::XULTreeBuilder },
1625 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
1626 : JSJitInfo::Method,
1627 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1628 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
1629 : false, /* isInfallible. False in setters. */
1630 : false, /* isMovable. Not relevant for setters. */
1631 : false, /* isEliminatable. Not relevant for setters. */
1632 : false, /* isAlwaysInSlot. Only relevant for getters. */
1633 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1634 : false, /* isTypedMethod. Only relevant for methods. */
1635 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1636 : };
1637 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1638 : static_assert(0 < 1, "There is no slot for us");
1639 :
1640 : static bool
1641 0 : getColumnProperties(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
1642 : {
1643 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
1644 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.getColumnProperties");
1645 : }
1646 0 : NonNull<nsTreeColumn> arg0;
1647 0 : if (args[0].isObject()) {
1648 : {
1649 0 : nsresult rv = UnwrapObject<prototypes::id::TreeColumn, nsTreeColumn>(args[0], arg0);
1650 0 : if (NS_FAILED(rv)) {
1651 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of XULTreeBuilder.getColumnProperties", "TreeColumn");
1652 0 : return false;
1653 : }
1654 : }
1655 : } else {
1656 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of XULTreeBuilder.getColumnProperties");
1657 0 : return false;
1658 : }
1659 0 : DOMString result;
1660 0 : self->GetColumnProperties(NonNullHelper(arg0), result);
1661 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1662 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
1663 0 : return false;
1664 : }
1665 0 : return true;
1666 : }
1667 :
1668 : static const JSJitInfo getColumnProperties_methodinfo = {
1669 : { (JSJitGetterOp)getColumnProperties },
1670 : { prototypes::id::XULTreeBuilder },
1671 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
1672 : JSJitInfo::Method,
1673 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1674 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
1675 : false, /* isInfallible. False in setters. */
1676 : false, /* isMovable. Not relevant for setters. */
1677 : false, /* isEliminatable. Not relevant for setters. */
1678 : false, /* isAlwaysInSlot. Only relevant for getters. */
1679 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1680 : false, /* isTypedMethod. Only relevant for methods. */
1681 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1682 : };
1683 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1684 : static_assert(0 < 1, "There is no slot for us");
1685 :
1686 : static bool
1687 0 : isContainer(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
1688 : {
1689 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
1690 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.isContainer");
1691 : }
1692 : int32_t arg0;
1693 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
1694 0 : return false;
1695 : }
1696 0 : binding_detail::FastErrorResult rv;
1697 0 : bool result(self->IsContainer(arg0, rv));
1698 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1699 0 : return false;
1700 : }
1701 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1702 0 : args.rval().setBoolean(result);
1703 0 : return true;
1704 : }
1705 :
1706 : static const JSJitInfo isContainer_methodinfo = {
1707 : { (JSJitGetterOp)isContainer },
1708 : { prototypes::id::XULTreeBuilder },
1709 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
1710 : JSJitInfo::Method,
1711 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1712 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1713 : false, /* isInfallible. False in setters. */
1714 : false, /* isMovable. Not relevant for setters. */
1715 : false, /* isEliminatable. Not relevant for setters. */
1716 : false, /* isAlwaysInSlot. Only relevant for getters. */
1717 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1718 : false, /* isTypedMethod. Only relevant for methods. */
1719 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1720 : };
1721 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1722 : static_assert(0 < 1, "There is no slot for us");
1723 :
1724 : static bool
1725 0 : isContainerOpen(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
1726 : {
1727 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
1728 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.isContainerOpen");
1729 : }
1730 : int32_t arg0;
1731 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
1732 0 : return false;
1733 : }
1734 0 : binding_detail::FastErrorResult rv;
1735 0 : bool result(self->IsContainerOpen(arg0, rv));
1736 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1737 0 : return false;
1738 : }
1739 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1740 0 : args.rval().setBoolean(result);
1741 0 : return true;
1742 : }
1743 :
1744 : static const JSJitInfo isContainerOpen_methodinfo = {
1745 : { (JSJitGetterOp)isContainerOpen },
1746 : { prototypes::id::XULTreeBuilder },
1747 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
1748 : JSJitInfo::Method,
1749 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1750 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1751 : false, /* isInfallible. False in setters. */
1752 : false, /* isMovable. Not relevant for setters. */
1753 : false, /* isEliminatable. Not relevant for setters. */
1754 : false, /* isAlwaysInSlot. Only relevant for getters. */
1755 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1756 : false, /* isTypedMethod. Only relevant for methods. */
1757 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1758 : };
1759 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1760 : static_assert(0 < 1, "There is no slot for us");
1761 :
1762 : static bool
1763 0 : isContainerEmpty(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
1764 : {
1765 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
1766 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.isContainerEmpty");
1767 : }
1768 : int32_t arg0;
1769 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
1770 0 : return false;
1771 : }
1772 0 : binding_detail::FastErrorResult rv;
1773 0 : bool result(self->IsContainerEmpty(arg0, rv));
1774 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1775 0 : return false;
1776 : }
1777 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1778 0 : args.rval().setBoolean(result);
1779 0 : return true;
1780 : }
1781 :
1782 : static const JSJitInfo isContainerEmpty_methodinfo = {
1783 : { (JSJitGetterOp)isContainerEmpty },
1784 : { prototypes::id::XULTreeBuilder },
1785 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
1786 : JSJitInfo::Method,
1787 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1788 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1789 : false, /* isInfallible. False in setters. */
1790 : false, /* isMovable. Not relevant for setters. */
1791 : false, /* isEliminatable. Not relevant for setters. */
1792 : false, /* isAlwaysInSlot. Only relevant for getters. */
1793 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1794 : false, /* isTypedMethod. Only relevant for methods. */
1795 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1796 : };
1797 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1798 : static_assert(0 < 1, "There is no slot for us");
1799 :
1800 : static bool
1801 0 : isSeparator(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
1802 : {
1803 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
1804 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.isSeparator");
1805 : }
1806 : int32_t arg0;
1807 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
1808 0 : return false;
1809 : }
1810 0 : binding_detail::FastErrorResult rv;
1811 0 : bool result(self->IsSeparator(arg0, rv));
1812 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1813 0 : return false;
1814 : }
1815 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1816 0 : args.rval().setBoolean(result);
1817 0 : return true;
1818 : }
1819 :
1820 : static const JSJitInfo isSeparator_methodinfo = {
1821 : { (JSJitGetterOp)isSeparator },
1822 : { prototypes::id::XULTreeBuilder },
1823 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
1824 : JSJitInfo::Method,
1825 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1826 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1827 : false, /* isInfallible. False in setters. */
1828 : false, /* isMovable. Not relevant for setters. */
1829 : false, /* isEliminatable. Not relevant for setters. */
1830 : false, /* isAlwaysInSlot. Only relevant for getters. */
1831 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1832 : false, /* isTypedMethod. Only relevant for methods. */
1833 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1834 : };
1835 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1836 : static_assert(0 < 1, "There is no slot for us");
1837 :
1838 : static bool
1839 0 : isSorted(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
1840 : {
1841 0 : bool result(self->IsSorted());
1842 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1843 0 : args.rval().setBoolean(result);
1844 0 : return true;
1845 : }
1846 :
1847 : static const JSJitInfo isSorted_methodinfo = {
1848 : { (JSJitGetterOp)isSorted },
1849 : { prototypes::id::XULTreeBuilder },
1850 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
1851 : JSJitInfo::Method,
1852 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1853 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1854 : true, /* isInfallible. False in setters. */
1855 : false, /* isMovable. Not relevant for setters. */
1856 : false, /* isEliminatable. Not relevant for setters. */
1857 : false, /* isAlwaysInSlot. Only relevant for getters. */
1858 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1859 : false, /* isTypedMethod. Only relevant for methods. */
1860 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1861 : };
1862 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1863 : static_assert(0 < 1, "There is no slot for us");
1864 :
1865 : static bool
1866 0 : canDrop(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
1867 : {
1868 0 : if (MOZ_UNLIKELY(args.length() < 3)) {
1869 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.canDrop");
1870 : }
1871 : int32_t arg0;
1872 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
1873 0 : return false;
1874 : }
1875 : int32_t arg1;
1876 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
1877 0 : return false;
1878 : }
1879 : mozilla::dom::DataTransfer* arg2;
1880 0 : if (args[2].isObject()) {
1881 : {
1882 0 : nsresult rv = UnwrapObject<prototypes::id::DataTransfer, mozilla::dom::DataTransfer>(args[2], arg2);
1883 0 : if (NS_FAILED(rv)) {
1884 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 3 of XULTreeBuilder.canDrop", "DataTransfer");
1885 0 : return false;
1886 : }
1887 : }
1888 0 : } else if (args[2].isNullOrUndefined()) {
1889 0 : arg2 = nullptr;
1890 : } else {
1891 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 3 of XULTreeBuilder.canDrop");
1892 0 : return false;
1893 : }
1894 0 : binding_detail::FastErrorResult rv;
1895 0 : bool result(self->CanDrop(arg0, arg1, Constify(arg2), rv));
1896 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1897 0 : return false;
1898 : }
1899 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1900 0 : args.rval().setBoolean(result);
1901 0 : return true;
1902 : }
1903 :
1904 : static const JSJitInfo canDrop_methodinfo = {
1905 : { (JSJitGetterOp)canDrop },
1906 : { prototypes::id::XULTreeBuilder },
1907 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
1908 : JSJitInfo::Method,
1909 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1910 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1911 : false, /* 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 : drop(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
1924 : {
1925 0 : if (MOZ_UNLIKELY(args.length() < 3)) {
1926 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.drop");
1927 : }
1928 : int32_t arg0;
1929 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
1930 0 : return false;
1931 : }
1932 : int32_t arg1;
1933 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
1934 0 : return false;
1935 : }
1936 : mozilla::dom::DataTransfer* arg2;
1937 0 : if (args[2].isObject()) {
1938 : {
1939 0 : nsresult rv = UnwrapObject<prototypes::id::DataTransfer, mozilla::dom::DataTransfer>(args[2], arg2);
1940 0 : if (NS_FAILED(rv)) {
1941 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 3 of XULTreeBuilder.drop", "DataTransfer");
1942 0 : return false;
1943 : }
1944 : }
1945 0 : } else if (args[2].isNullOrUndefined()) {
1946 0 : arg2 = nullptr;
1947 : } else {
1948 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 3 of XULTreeBuilder.drop");
1949 0 : return false;
1950 : }
1951 0 : binding_detail::FastErrorResult rv;
1952 0 : self->Drop(arg0, arg1, Constify(arg2), rv);
1953 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1954 0 : return false;
1955 : }
1956 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1957 0 : args.rval().setUndefined();
1958 0 : return true;
1959 : }
1960 :
1961 : static const JSJitInfo drop_methodinfo = {
1962 : { (JSJitGetterOp)drop },
1963 : { prototypes::id::XULTreeBuilder },
1964 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
1965 : JSJitInfo::Method,
1966 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1967 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1968 : false, /* isInfallible. False in setters. */
1969 : false, /* isMovable. Not relevant for setters. */
1970 : false, /* isEliminatable. Not relevant for setters. */
1971 : false, /* isAlwaysInSlot. Only relevant for getters. */
1972 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1973 : false, /* isTypedMethod. Only relevant for methods. */
1974 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1975 : };
1976 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1977 : static_assert(0 < 1, "There is no slot for us");
1978 :
1979 : static bool
1980 0 : getParentIndex(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
1981 : {
1982 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
1983 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.getParentIndex");
1984 : }
1985 : int32_t arg0;
1986 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
1987 0 : return false;
1988 : }
1989 0 : binding_detail::FastErrorResult rv;
1990 0 : int32_t result(self->GetParentIndex(arg0, rv));
1991 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1992 0 : return false;
1993 : }
1994 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1995 0 : args.rval().setInt32(int32_t(result));
1996 0 : return true;
1997 : }
1998 :
1999 : static const JSJitInfo getParentIndex_methodinfo = {
2000 : { (JSJitGetterOp)getParentIndex },
2001 : { prototypes::id::XULTreeBuilder },
2002 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
2003 : JSJitInfo::Method,
2004 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2005 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
2006 : false, /* isInfallible. False in setters. */
2007 : false, /* isMovable. Not relevant for setters. */
2008 : false, /* isEliminatable. Not relevant for setters. */
2009 : false, /* isAlwaysInSlot. Only relevant for getters. */
2010 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2011 : false, /* isTypedMethod. Only relevant for methods. */
2012 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2013 : };
2014 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2015 : static_assert(0 < 1, "There is no slot for us");
2016 :
2017 : static bool
2018 0 : hasNextSibling(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
2019 : {
2020 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
2021 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.hasNextSibling");
2022 : }
2023 : int32_t arg0;
2024 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
2025 0 : return false;
2026 : }
2027 : int32_t arg1;
2028 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
2029 0 : return false;
2030 : }
2031 0 : binding_detail::FastErrorResult rv;
2032 0 : bool result(self->HasNextSibling(arg0, arg1, rv));
2033 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2034 0 : return false;
2035 : }
2036 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2037 0 : args.rval().setBoolean(result);
2038 0 : return true;
2039 : }
2040 :
2041 : static const JSJitInfo hasNextSibling_methodinfo = {
2042 : { (JSJitGetterOp)hasNextSibling },
2043 : { prototypes::id::XULTreeBuilder },
2044 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
2045 : JSJitInfo::Method,
2046 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2047 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
2048 : false, /* isInfallible. False in setters. */
2049 : false, /* isMovable. Not relevant for setters. */
2050 : false, /* isEliminatable. Not relevant for setters. */
2051 : false, /* isAlwaysInSlot. Only relevant for getters. */
2052 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2053 : false, /* isTypedMethod. Only relevant for methods. */
2054 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2055 : };
2056 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2057 : static_assert(0 < 1, "There is no slot for us");
2058 :
2059 : static bool
2060 0 : getLevel(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
2061 : {
2062 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
2063 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.getLevel");
2064 : }
2065 : int32_t arg0;
2066 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
2067 0 : return false;
2068 : }
2069 0 : binding_detail::FastErrorResult rv;
2070 0 : int32_t result(self->GetLevel(arg0, rv));
2071 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2072 0 : return false;
2073 : }
2074 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2075 0 : args.rval().setInt32(int32_t(result));
2076 0 : return true;
2077 : }
2078 :
2079 : static const JSJitInfo getLevel_methodinfo = {
2080 : { (JSJitGetterOp)getLevel },
2081 : { prototypes::id::XULTreeBuilder },
2082 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
2083 : JSJitInfo::Method,
2084 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2085 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
2086 : false, /* isInfallible. False in setters. */
2087 : false, /* isMovable. Not relevant for setters. */
2088 : false, /* isEliminatable. Not relevant for setters. */
2089 : false, /* isAlwaysInSlot. Only relevant for getters. */
2090 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2091 : false, /* isTypedMethod. Only relevant for methods. */
2092 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2093 : };
2094 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2095 : static_assert(0 < 1, "There is no slot for us");
2096 :
2097 : static bool
2098 0 : getImageSrc(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
2099 : {
2100 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
2101 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.getImageSrc");
2102 : }
2103 : int32_t arg0;
2104 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
2105 0 : return false;
2106 : }
2107 0 : NonNull<nsTreeColumn> arg1;
2108 0 : if (args[1].isObject()) {
2109 : {
2110 0 : nsresult rv = UnwrapObject<prototypes::id::TreeColumn, nsTreeColumn>(args[1], arg1);
2111 0 : if (NS_FAILED(rv)) {
2112 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of XULTreeBuilder.getImageSrc", "TreeColumn");
2113 0 : return false;
2114 : }
2115 : }
2116 : } else {
2117 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of XULTreeBuilder.getImageSrc");
2118 0 : return false;
2119 : }
2120 0 : binding_detail::FastErrorResult rv;
2121 0 : DOMString result;
2122 0 : self->GetImageSrc(arg0, NonNullHelper(arg1), result, rv);
2123 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2124 0 : return false;
2125 : }
2126 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2127 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
2128 0 : return false;
2129 : }
2130 0 : return true;
2131 : }
2132 :
2133 : static const JSJitInfo getImageSrc_methodinfo = {
2134 : { (JSJitGetterOp)getImageSrc },
2135 : { prototypes::id::XULTreeBuilder },
2136 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
2137 : JSJitInfo::Method,
2138 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2139 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
2140 : false, /* isInfallible. False in setters. */
2141 : false, /* isMovable. Not relevant for setters. */
2142 : false, /* isEliminatable. Not relevant for setters. */
2143 : false, /* isAlwaysInSlot. Only relevant for getters. */
2144 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2145 : false, /* isTypedMethod. Only relevant for methods. */
2146 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2147 : };
2148 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2149 : static_assert(0 < 1, "There is no slot for us");
2150 :
2151 : static bool
2152 0 : getProgressMode(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
2153 : {
2154 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
2155 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.getProgressMode");
2156 : }
2157 : int32_t arg0;
2158 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
2159 0 : return false;
2160 : }
2161 0 : NonNull<nsTreeColumn> arg1;
2162 0 : if (args[1].isObject()) {
2163 : {
2164 0 : nsresult rv = UnwrapObject<prototypes::id::TreeColumn, nsTreeColumn>(args[1], arg1);
2165 0 : if (NS_FAILED(rv)) {
2166 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of XULTreeBuilder.getProgressMode", "TreeColumn");
2167 0 : return false;
2168 : }
2169 : }
2170 : } else {
2171 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of XULTreeBuilder.getProgressMode");
2172 0 : return false;
2173 : }
2174 0 : binding_detail::FastErrorResult rv;
2175 0 : int32_t result(self->GetProgressMode(arg0, NonNullHelper(arg1), rv));
2176 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2177 0 : return false;
2178 : }
2179 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2180 0 : args.rval().setInt32(int32_t(result));
2181 0 : return true;
2182 : }
2183 :
2184 : static const JSJitInfo getProgressMode_methodinfo = {
2185 : { (JSJitGetterOp)getProgressMode },
2186 : { prototypes::id::XULTreeBuilder },
2187 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
2188 : JSJitInfo::Method,
2189 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2190 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
2191 : false, /* isInfallible. False in setters. */
2192 : false, /* isMovable. Not relevant for setters. */
2193 : false, /* isEliminatable. Not relevant for setters. */
2194 : false, /* isAlwaysInSlot. Only relevant for getters. */
2195 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2196 : false, /* isTypedMethod. Only relevant for methods. */
2197 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2198 : };
2199 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2200 : static_assert(0 < 1, "There is no slot for us");
2201 :
2202 : static bool
2203 0 : getCellValue(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
2204 : {
2205 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
2206 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.getCellValue");
2207 : }
2208 : int32_t arg0;
2209 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
2210 0 : return false;
2211 : }
2212 0 : NonNull<nsTreeColumn> arg1;
2213 0 : if (args[1].isObject()) {
2214 : {
2215 0 : nsresult rv = UnwrapObject<prototypes::id::TreeColumn, nsTreeColumn>(args[1], arg1);
2216 0 : if (NS_FAILED(rv)) {
2217 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of XULTreeBuilder.getCellValue", "TreeColumn");
2218 0 : return false;
2219 : }
2220 : }
2221 : } else {
2222 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of XULTreeBuilder.getCellValue");
2223 0 : return false;
2224 : }
2225 0 : binding_detail::FastErrorResult rv;
2226 0 : DOMString result;
2227 0 : self->GetCellValue(arg0, NonNullHelper(arg1), result, rv);
2228 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2229 0 : return false;
2230 : }
2231 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2232 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
2233 0 : return false;
2234 : }
2235 0 : return true;
2236 : }
2237 :
2238 : static const JSJitInfo getCellValue_methodinfo = {
2239 : { (JSJitGetterOp)getCellValue },
2240 : { prototypes::id::XULTreeBuilder },
2241 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
2242 : JSJitInfo::Method,
2243 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2244 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
2245 : false, /* isInfallible. False in setters. */
2246 : false, /* isMovable. Not relevant for setters. */
2247 : false, /* isEliminatable. Not relevant for setters. */
2248 : false, /* isAlwaysInSlot. Only relevant for getters. */
2249 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2250 : false, /* isTypedMethod. Only relevant for methods. */
2251 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2252 : };
2253 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2254 : static_assert(0 < 1, "There is no slot for us");
2255 :
2256 : static bool
2257 0 : getCellText(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
2258 : {
2259 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
2260 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.getCellText");
2261 : }
2262 : int32_t arg0;
2263 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
2264 0 : return false;
2265 : }
2266 0 : NonNull<nsTreeColumn> arg1;
2267 0 : if (args[1].isObject()) {
2268 : {
2269 0 : nsresult rv = UnwrapObject<prototypes::id::TreeColumn, nsTreeColumn>(args[1], arg1);
2270 0 : if (NS_FAILED(rv)) {
2271 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of XULTreeBuilder.getCellText", "TreeColumn");
2272 0 : return false;
2273 : }
2274 : }
2275 : } else {
2276 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of XULTreeBuilder.getCellText");
2277 0 : return false;
2278 : }
2279 0 : binding_detail::FastErrorResult rv;
2280 0 : DOMString result;
2281 0 : self->GetCellText(arg0, NonNullHelper(arg1), result, rv);
2282 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2283 0 : return false;
2284 : }
2285 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2286 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
2287 0 : return false;
2288 : }
2289 0 : return true;
2290 : }
2291 :
2292 : static const JSJitInfo getCellText_methodinfo = {
2293 : { (JSJitGetterOp)getCellText },
2294 : { prototypes::id::XULTreeBuilder },
2295 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
2296 : JSJitInfo::Method,
2297 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2298 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
2299 : false, /* isInfallible. False in setters. */
2300 : false, /* isMovable. Not relevant for setters. */
2301 : false, /* isEliminatable. Not relevant for setters. */
2302 : false, /* isAlwaysInSlot. Only relevant for getters. */
2303 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2304 : false, /* isTypedMethod. Only relevant for methods. */
2305 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2306 : };
2307 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2308 : static_assert(0 < 1, "There is no slot for us");
2309 :
2310 : static bool
2311 0 : setTree(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
2312 : {
2313 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
2314 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.setTree");
2315 : }
2316 : mozilla::dom::TreeBoxObject* arg0;
2317 0 : if (args[0].isObject()) {
2318 : {
2319 0 : nsresult rv = UnwrapObject<prototypes::id::TreeBoxObject, mozilla::dom::TreeBoxObject>(args[0], arg0);
2320 0 : if (NS_FAILED(rv)) {
2321 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of XULTreeBuilder.setTree", "TreeBoxObject");
2322 0 : return false;
2323 : }
2324 : }
2325 0 : } else if (args[0].isNullOrUndefined()) {
2326 0 : arg0 = nullptr;
2327 : } else {
2328 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of XULTreeBuilder.setTree");
2329 0 : return false;
2330 : }
2331 0 : binding_detail::FastErrorResult rv;
2332 0 : self->SetTree(Constify(arg0), rv);
2333 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2334 0 : return false;
2335 : }
2336 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2337 0 : args.rval().setUndefined();
2338 0 : return true;
2339 : }
2340 :
2341 : static const JSJitInfo setTree_methodinfo = {
2342 : { (JSJitGetterOp)setTree },
2343 : { prototypes::id::XULTreeBuilder },
2344 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
2345 : JSJitInfo::Method,
2346 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2347 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2348 : false, /* isInfallible. False in setters. */
2349 : false, /* isMovable. Not relevant for setters. */
2350 : false, /* isEliminatable. Not relevant for setters. */
2351 : false, /* isAlwaysInSlot. Only relevant for getters. */
2352 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2353 : false, /* isTypedMethod. Only relevant for methods. */
2354 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2355 : };
2356 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2357 : static_assert(0 < 1, "There is no slot for us");
2358 :
2359 : static bool
2360 0 : toggleOpenState(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
2361 : {
2362 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
2363 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.toggleOpenState");
2364 : }
2365 : int32_t arg0;
2366 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
2367 0 : return false;
2368 : }
2369 0 : binding_detail::FastErrorResult rv;
2370 0 : self->ToggleOpenState(arg0, rv);
2371 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2372 0 : return false;
2373 : }
2374 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2375 0 : args.rval().setUndefined();
2376 0 : return true;
2377 : }
2378 :
2379 : static const JSJitInfo toggleOpenState_methodinfo = {
2380 : { (JSJitGetterOp)toggleOpenState },
2381 : { prototypes::id::XULTreeBuilder },
2382 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
2383 : JSJitInfo::Method,
2384 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2385 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2386 : false, /* isInfallible. False in setters. */
2387 : false, /* isMovable. Not relevant for setters. */
2388 : false, /* isEliminatable. Not relevant for setters. */
2389 : false, /* isAlwaysInSlot. Only relevant for getters. */
2390 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2391 : false, /* isTypedMethod. Only relevant for methods. */
2392 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2393 : };
2394 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2395 : static_assert(0 < 1, "There is no slot for us");
2396 :
2397 : static bool
2398 0 : cycleHeader(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
2399 : {
2400 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
2401 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.cycleHeader");
2402 : }
2403 0 : NonNull<nsTreeColumn> arg0;
2404 0 : if (args[0].isObject()) {
2405 : {
2406 0 : nsresult rv = UnwrapObject<prototypes::id::TreeColumn, nsTreeColumn>(args[0], arg0);
2407 0 : if (NS_FAILED(rv)) {
2408 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of XULTreeBuilder.cycleHeader", "TreeColumn");
2409 0 : return false;
2410 : }
2411 : }
2412 : } else {
2413 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of XULTreeBuilder.cycleHeader");
2414 0 : return false;
2415 : }
2416 0 : binding_detail::FastErrorResult rv;
2417 0 : self->CycleHeader(NonNullHelper(arg0), rv);
2418 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2419 0 : return false;
2420 : }
2421 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2422 0 : args.rval().setUndefined();
2423 0 : return true;
2424 : }
2425 :
2426 : static const JSJitInfo cycleHeader_methodinfo = {
2427 : { (JSJitGetterOp)cycleHeader },
2428 : { prototypes::id::XULTreeBuilder },
2429 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
2430 : JSJitInfo::Method,
2431 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2432 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2433 : false, /* isInfallible. False in setters. */
2434 : false, /* isMovable. Not relevant for setters. */
2435 : false, /* isEliminatable. Not relevant for setters. */
2436 : false, /* isAlwaysInSlot. Only relevant for getters. */
2437 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2438 : false, /* isTypedMethod. Only relevant for methods. */
2439 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2440 : };
2441 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2442 : static_assert(0 < 1, "There is no slot for us");
2443 :
2444 : static bool
2445 0 : selectionChanged(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
2446 : {
2447 0 : self->SelectionChanged();
2448 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2449 0 : args.rval().setUndefined();
2450 0 : return true;
2451 : }
2452 :
2453 : static const JSJitInfo selectionChanged_methodinfo = {
2454 : { (JSJitGetterOp)selectionChanged },
2455 : { prototypes::id::XULTreeBuilder },
2456 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
2457 : JSJitInfo::Method,
2458 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2459 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2460 : true, /* isInfallible. False in setters. */
2461 : false, /* isMovable. Not relevant for setters. */
2462 : false, /* isEliminatable. Not relevant for setters. */
2463 : false, /* isAlwaysInSlot. Only relevant for getters. */
2464 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2465 : false, /* isTypedMethod. Only relevant for methods. */
2466 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2467 : };
2468 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2469 : static_assert(0 < 1, "There is no slot for us");
2470 :
2471 : static bool
2472 0 : cycleCell(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
2473 : {
2474 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
2475 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.cycleCell");
2476 : }
2477 : int32_t arg0;
2478 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
2479 0 : return false;
2480 : }
2481 0 : NonNull<nsTreeColumn> arg1;
2482 0 : if (args[1].isObject()) {
2483 : {
2484 0 : nsresult rv = UnwrapObject<prototypes::id::TreeColumn, nsTreeColumn>(args[1], arg1);
2485 0 : if (NS_FAILED(rv)) {
2486 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of XULTreeBuilder.cycleCell", "TreeColumn");
2487 0 : return false;
2488 : }
2489 : }
2490 : } else {
2491 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of XULTreeBuilder.cycleCell");
2492 0 : return false;
2493 : }
2494 0 : self->CycleCell(arg0, NonNullHelper(arg1));
2495 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2496 0 : args.rval().setUndefined();
2497 0 : return true;
2498 : }
2499 :
2500 : static const JSJitInfo cycleCell_methodinfo = {
2501 : { (JSJitGetterOp)cycleCell },
2502 : { prototypes::id::XULTreeBuilder },
2503 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
2504 : JSJitInfo::Method,
2505 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2506 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2507 : false, /* isInfallible. False in setters. */
2508 : false, /* isMovable. Not relevant for setters. */
2509 : false, /* isEliminatable. Not relevant for setters. */
2510 : false, /* isAlwaysInSlot. Only relevant for getters. */
2511 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2512 : false, /* isTypedMethod. Only relevant for methods. */
2513 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2514 : };
2515 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2516 : static_assert(0 < 1, "There is no slot for us");
2517 :
2518 : static bool
2519 0 : isEditable(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
2520 : {
2521 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
2522 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.isEditable");
2523 : }
2524 : int32_t arg0;
2525 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
2526 0 : return false;
2527 : }
2528 0 : NonNull<nsTreeColumn> arg1;
2529 0 : if (args[1].isObject()) {
2530 : {
2531 0 : nsresult rv = UnwrapObject<prototypes::id::TreeColumn, nsTreeColumn>(args[1], arg1);
2532 0 : if (NS_FAILED(rv)) {
2533 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of XULTreeBuilder.isEditable", "TreeColumn");
2534 0 : return false;
2535 : }
2536 : }
2537 : } else {
2538 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of XULTreeBuilder.isEditable");
2539 0 : return false;
2540 : }
2541 0 : binding_detail::FastErrorResult rv;
2542 0 : bool result(self->IsEditable(arg0, NonNullHelper(arg1), rv));
2543 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2544 0 : return false;
2545 : }
2546 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2547 0 : args.rval().setBoolean(result);
2548 0 : return true;
2549 : }
2550 :
2551 : static const JSJitInfo isEditable_methodinfo = {
2552 : { (JSJitGetterOp)isEditable },
2553 : { prototypes::id::XULTreeBuilder },
2554 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
2555 : JSJitInfo::Method,
2556 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2557 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
2558 : false, /* isInfallible. False in setters. */
2559 : false, /* isMovable. Not relevant for setters. */
2560 : false, /* isEliminatable. Not relevant for setters. */
2561 : false, /* isAlwaysInSlot. Only relevant for getters. */
2562 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2563 : false, /* isTypedMethod. Only relevant for methods. */
2564 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2565 : };
2566 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2567 : static_assert(0 < 1, "There is no slot for us");
2568 :
2569 : static bool
2570 0 : isSelectable(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
2571 : {
2572 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
2573 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.isSelectable");
2574 : }
2575 : int32_t arg0;
2576 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
2577 0 : return false;
2578 : }
2579 0 : NonNull<nsTreeColumn> arg1;
2580 0 : if (args[1].isObject()) {
2581 : {
2582 0 : nsresult rv = UnwrapObject<prototypes::id::TreeColumn, nsTreeColumn>(args[1], arg1);
2583 0 : if (NS_FAILED(rv)) {
2584 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of XULTreeBuilder.isSelectable", "TreeColumn");
2585 0 : return false;
2586 : }
2587 : }
2588 : } else {
2589 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of XULTreeBuilder.isSelectable");
2590 0 : return false;
2591 : }
2592 0 : binding_detail::FastErrorResult rv;
2593 0 : bool result(self->IsSelectable(arg0, NonNullHelper(arg1), rv));
2594 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2595 0 : return false;
2596 : }
2597 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2598 0 : args.rval().setBoolean(result);
2599 0 : return true;
2600 : }
2601 :
2602 : static const JSJitInfo isSelectable_methodinfo = {
2603 : { (JSJitGetterOp)isSelectable },
2604 : { prototypes::id::XULTreeBuilder },
2605 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
2606 : JSJitInfo::Method,
2607 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2608 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
2609 : false, /* isInfallible. False in setters. */
2610 : false, /* isMovable. Not relevant for setters. */
2611 : false, /* isEliminatable. Not relevant for setters. */
2612 : false, /* isAlwaysInSlot. Only relevant for getters. */
2613 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2614 : false, /* isTypedMethod. Only relevant for methods. */
2615 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2616 : };
2617 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2618 : static_assert(0 < 1, "There is no slot for us");
2619 :
2620 : static bool
2621 0 : setCellValue(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
2622 : {
2623 0 : if (MOZ_UNLIKELY(args.length() < 3)) {
2624 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.setCellValue");
2625 : }
2626 : int32_t arg0;
2627 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
2628 0 : return false;
2629 : }
2630 0 : NonNull<nsTreeColumn> arg1;
2631 0 : if (args[1].isObject()) {
2632 : {
2633 0 : nsresult rv = UnwrapObject<prototypes::id::TreeColumn, nsTreeColumn>(args[1], arg1);
2634 0 : if (NS_FAILED(rv)) {
2635 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of XULTreeBuilder.setCellValue", "TreeColumn");
2636 0 : return false;
2637 : }
2638 : }
2639 : } else {
2640 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of XULTreeBuilder.setCellValue");
2641 0 : return false;
2642 : }
2643 0 : binding_detail::FakeString arg2;
2644 0 : if (!ConvertJSValueToString(cx, args[2], eStringify, eStringify, arg2)) {
2645 0 : return false;
2646 : }
2647 0 : binding_detail::FastErrorResult rv;
2648 0 : self->SetCellValue(arg0, NonNullHelper(arg1), NonNullHelper(Constify(arg2)), rv);
2649 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2650 0 : return false;
2651 : }
2652 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2653 0 : args.rval().setUndefined();
2654 0 : return true;
2655 : }
2656 :
2657 : static const JSJitInfo setCellValue_methodinfo = {
2658 : { (JSJitGetterOp)setCellValue },
2659 : { prototypes::id::XULTreeBuilder },
2660 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
2661 : JSJitInfo::Method,
2662 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2663 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2664 : false, /* isInfallible. False in setters. */
2665 : false, /* isMovable. Not relevant for setters. */
2666 : false, /* isEliminatable. Not relevant for setters. */
2667 : false, /* isAlwaysInSlot. Only relevant for getters. */
2668 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2669 : false, /* isTypedMethod. Only relevant for methods. */
2670 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2671 : };
2672 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2673 : static_assert(0 < 1, "There is no slot for us");
2674 :
2675 : static bool
2676 0 : setCellText(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
2677 : {
2678 0 : if (MOZ_UNLIKELY(args.length() < 3)) {
2679 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.setCellText");
2680 : }
2681 : int32_t arg0;
2682 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
2683 0 : return false;
2684 : }
2685 0 : NonNull<nsTreeColumn> arg1;
2686 0 : if (args[1].isObject()) {
2687 : {
2688 0 : nsresult rv = UnwrapObject<prototypes::id::TreeColumn, nsTreeColumn>(args[1], arg1);
2689 0 : if (NS_FAILED(rv)) {
2690 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of XULTreeBuilder.setCellText", "TreeColumn");
2691 0 : return false;
2692 : }
2693 : }
2694 : } else {
2695 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of XULTreeBuilder.setCellText");
2696 0 : return false;
2697 : }
2698 0 : binding_detail::FakeString arg2;
2699 0 : if (!ConvertJSValueToString(cx, args[2], eStringify, eStringify, arg2)) {
2700 0 : return false;
2701 : }
2702 0 : binding_detail::FastErrorResult rv;
2703 0 : self->SetCellText(arg0, NonNullHelper(arg1), NonNullHelper(Constify(arg2)), rv);
2704 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2705 0 : return false;
2706 : }
2707 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2708 0 : args.rval().setUndefined();
2709 0 : return true;
2710 : }
2711 :
2712 : static const JSJitInfo setCellText_methodinfo = {
2713 : { (JSJitGetterOp)setCellText },
2714 : { prototypes::id::XULTreeBuilder },
2715 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
2716 : JSJitInfo::Method,
2717 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2718 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2719 : false, /* isInfallible. False in setters. */
2720 : false, /* isMovable. Not relevant for setters. */
2721 : false, /* isEliminatable. Not relevant for setters. */
2722 : false, /* isAlwaysInSlot. Only relevant for getters. */
2723 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2724 : false, /* isTypedMethod. Only relevant for methods. */
2725 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2726 : };
2727 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2728 : static_assert(0 < 1, "There is no slot for us");
2729 :
2730 : static bool
2731 0 : performAction(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
2732 : {
2733 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
2734 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.performAction");
2735 : }
2736 0 : binding_detail::FakeString arg0;
2737 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
2738 0 : return false;
2739 : }
2740 0 : self->PerformAction(NonNullHelper(Constify(arg0)));
2741 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2742 0 : args.rval().setUndefined();
2743 0 : return true;
2744 : }
2745 :
2746 : static const JSJitInfo performAction_methodinfo = {
2747 : { (JSJitGetterOp)performAction },
2748 : { prototypes::id::XULTreeBuilder },
2749 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
2750 : JSJitInfo::Method,
2751 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2752 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2753 : false, /* isInfallible. False in setters. */
2754 : false, /* isMovable. Not relevant for setters. */
2755 : false, /* isEliminatable. Not relevant for setters. */
2756 : false, /* isAlwaysInSlot. Only relevant for getters. */
2757 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2758 : false, /* isTypedMethod. Only relevant for methods. */
2759 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2760 : };
2761 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2762 : static_assert(0 < 1, "There is no slot for us");
2763 :
2764 : static bool
2765 0 : performActionOnRow(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
2766 : {
2767 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
2768 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.performActionOnRow");
2769 : }
2770 0 : binding_detail::FakeString arg0;
2771 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
2772 0 : return false;
2773 : }
2774 : int32_t arg1;
2775 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
2776 0 : return false;
2777 : }
2778 0 : self->PerformActionOnRow(NonNullHelper(Constify(arg0)), arg1);
2779 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2780 0 : args.rval().setUndefined();
2781 0 : return true;
2782 : }
2783 :
2784 : static const JSJitInfo performActionOnRow_methodinfo = {
2785 : { (JSJitGetterOp)performActionOnRow },
2786 : { prototypes::id::XULTreeBuilder },
2787 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
2788 : JSJitInfo::Method,
2789 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2790 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2791 : false, /* isInfallible. False in setters. */
2792 : false, /* isMovable. Not relevant for setters. */
2793 : false, /* isEliminatable. Not relevant for setters. */
2794 : false, /* isAlwaysInSlot. Only relevant for getters. */
2795 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2796 : false, /* isTypedMethod. Only relevant for methods. */
2797 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2798 : };
2799 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2800 : static_assert(0 < 1, "There is no slot for us");
2801 :
2802 : static bool
2803 0 : performActionOnCell(JSContext* cx, JS::Handle<JSObject*> obj, nsXULTreeBuilder* self, const JSJitMethodCallArgs& args)
2804 : {
2805 0 : if (MOZ_UNLIKELY(args.length() < 3)) {
2806 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULTreeBuilder.performActionOnCell");
2807 : }
2808 0 : binding_detail::FakeString arg0;
2809 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
2810 0 : return false;
2811 : }
2812 : int32_t arg1;
2813 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
2814 0 : return false;
2815 : }
2816 0 : NonNull<nsTreeColumn> arg2;
2817 0 : if (args[2].isObject()) {
2818 : {
2819 0 : nsresult rv = UnwrapObject<prototypes::id::TreeColumn, nsTreeColumn>(args[2], arg2);
2820 0 : if (NS_FAILED(rv)) {
2821 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 3 of XULTreeBuilder.performActionOnCell", "TreeColumn");
2822 0 : return false;
2823 : }
2824 : }
2825 : } else {
2826 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 3 of XULTreeBuilder.performActionOnCell");
2827 0 : return false;
2828 : }
2829 0 : self->PerformActionOnCell(NonNullHelper(Constify(arg0)), arg1, NonNullHelper(arg2));
2830 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2831 0 : args.rval().setUndefined();
2832 0 : return true;
2833 : }
2834 :
2835 : static const JSJitInfo performActionOnCell_methodinfo = {
2836 : { (JSJitGetterOp)performActionOnCell },
2837 : { prototypes::id::XULTreeBuilder },
2838 : { PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth },
2839 : JSJitInfo::Method,
2840 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2841 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2842 : false, /* isInfallible. False in setters. */
2843 : false, /* isMovable. Not relevant for setters. */
2844 : false, /* isEliminatable. Not relevant for setters. */
2845 : false, /* isAlwaysInSlot. Only relevant for getters. */
2846 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2847 : false, /* isTypedMethod. Only relevant for methods. */
2848 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2849 : };
2850 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2851 : static_assert(0 < 1, "There is no slot for us");
2852 :
2853 : static bool
2854 0 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
2855 : {
2856 0 : nsXULTreeBuilder* self = UnwrapPossiblyNotInitializedDOMObject<nsXULTreeBuilder>(obj);
2857 : // We don't want to preserve if we don't have a wrapper, and we
2858 : // obviously can't preserve if we're not initialized.
2859 0 : if (self && self->GetWrapperPreserveColor()) {
2860 0 : PreserveWrapper(self);
2861 : }
2862 0 : return true;
2863 : }
2864 :
2865 : static void
2866 0 : _finalize(js::FreeOp* fop, JSObject* obj)
2867 : {
2868 0 : nsXULTreeBuilder* self = UnwrapPossiblyNotInitializedDOMObject<nsXULTreeBuilder>(obj);
2869 0 : if (self) {
2870 0 : ClearWrapper(self, self, obj);
2871 0 : AddForDeferredFinalization<nsXULTreeBuilder>(self);
2872 : }
2873 0 : }
2874 :
2875 : static void
2876 0 : _objectMoved(JSObject* obj, const JSObject* old)
2877 : {
2878 0 : nsXULTreeBuilder* self = UnwrapPossiblyNotInitializedDOMObject<nsXULTreeBuilder>(obj);
2879 0 : if (self) {
2880 0 : UpdateWrapper(self, self, obj, old);
2881 : }
2882 0 : }
2883 :
2884 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
2885 : #if defined(__clang__)
2886 : #pragma clang diagnostic push
2887 : #pragma clang diagnostic ignored "-Wmissing-braces"
2888 : #endif
2889 : static const JSFunctionSpec sMethods_specs[] = {
2890 : JS_FNSPEC("getResourceAtIndex", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getResourceAtIndex_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2891 : JS_FNSPEC("getIndexOfResource", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getIndexOfResource_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2892 : JS_FNSPEC("addObserver", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&addObserver_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2893 : JS_FNSPEC("removeObserver", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&removeObserver_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2894 : JS_FNSPEC("sort", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&sort_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2895 : JS_FNSPEC("getRowProperties", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getRowProperties_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2896 : JS_FNSPEC("getCellProperties", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getCellProperties_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
2897 : JS_FNSPEC("getColumnProperties", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getColumnProperties_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2898 : JS_FNSPEC("isContainer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&isContainer_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2899 : JS_FNSPEC("isContainerOpen", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&isContainerOpen_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2900 : JS_FNSPEC("isContainerEmpty", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&isContainerEmpty_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2901 : JS_FNSPEC("isSeparator", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&isSeparator_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2902 : JS_FNSPEC("isSorted", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&isSorted_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
2903 : JS_FNSPEC("canDrop", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&canDrop_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
2904 : JS_FNSPEC("drop", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&drop_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
2905 : JS_FNSPEC("getParentIndex", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getParentIndex_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2906 : JS_FNSPEC("hasNextSibling", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&hasNextSibling_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
2907 : JS_FNSPEC("getLevel", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getLevel_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2908 : JS_FNSPEC("getImageSrc", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getImageSrc_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
2909 : JS_FNSPEC("getProgressMode", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getProgressMode_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
2910 : JS_FNSPEC("getCellValue", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getCellValue_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
2911 : JS_FNSPEC("getCellText", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getCellText_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
2912 : JS_FNSPEC("setTree", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setTree_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2913 : JS_FNSPEC("toggleOpenState", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&toggleOpenState_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2914 : JS_FNSPEC("cycleHeader", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&cycleHeader_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2915 : JS_FNSPEC("selectionChanged", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&selectionChanged_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
2916 : JS_FNSPEC("cycleCell", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&cycleCell_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
2917 : JS_FNSPEC("isEditable", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&isEditable_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
2918 : JS_FNSPEC("isSelectable", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&isSelectable_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
2919 : JS_FNSPEC("setCellValue", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setCellValue_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
2920 : JS_FNSPEC("setCellText", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setCellText_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
2921 : JS_FNSPEC("performAction", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&performAction_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2922 : JS_FNSPEC("performActionOnRow", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&performActionOnRow_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
2923 : JS_FNSPEC("performActionOnCell", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&performActionOnCell_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
2924 : JS_FS_END
2925 : };
2926 : #if defined(__clang__)
2927 : #pragma clang diagnostic pop
2928 : #endif
2929 :
2930 :
2931 : // Can't be const because the pref-enabled boolean needs to be writable
2932 : static Prefable<const JSFunctionSpec> sMethods[] = {
2933 : { nullptr, &sMethods_specs[0] },
2934 : { nullptr, nullptr }
2935 : };
2936 :
2937 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
2938 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
2939 : static_assert(34 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
2940 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
2941 :
2942 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
2943 : #if defined(__clang__)
2944 : #pragma clang diagnostic push
2945 : #pragma clang diagnostic ignored "-Wmissing-braces"
2946 : #endif
2947 : static const JSPropertySpec sAttributes_specs[] = {
2948 : { "rowCount", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &rowCount_getterinfo, nullptr, nullptr },
2949 : { "selection", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &selection_getterinfo, GenericBindingSetter, &selection_setterinfo },
2950 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
2951 : };
2952 : #if defined(__clang__)
2953 : #pragma clang diagnostic pop
2954 : #endif
2955 :
2956 :
2957 : // Can't be const because the pref-enabled boolean needs to be writable
2958 : static Prefable<const JSPropertySpec> sAttributes[] = {
2959 : { nullptr, &sAttributes_specs[0] },
2960 : { nullptr, nullptr }
2961 : };
2962 :
2963 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
2964 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
2965 : static_assert(2 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
2966 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
2967 :
2968 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
2969 : #if defined(__clang__)
2970 : #pragma clang diagnostic push
2971 : #pragma clang diagnostic ignored "-Wmissing-braces"
2972 : #endif
2973 : static const ConstantSpec sConstants_specs[] = {
2974 : { "DROP_BEFORE", JS::Int32Value(-1) },
2975 : { "DROP_ON", JS::Int32Value(0) },
2976 : { "DROP_AFTER", JS::Int32Value(1) },
2977 : { "PROGRESS_NORMAL", JS::Int32Value(1) },
2978 : { "PROGRESS_UNDETERMINED", JS::Int32Value(2) },
2979 : { "PROGRESS_NONE", JS::Int32Value(3) },
2980 : { 0, JS::UndefinedValue() }
2981 : };
2982 : #if defined(__clang__)
2983 : #pragma clang diagnostic pop
2984 : #endif
2985 :
2986 :
2987 : // Can't be const because the pref-enabled boolean needs to be writable
2988 : static Prefable<const ConstantSpec> sConstants[] = {
2989 : { nullptr, &sConstants_specs[0] },
2990 : { nullptr, nullptr }
2991 : };
2992 :
2993 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
2994 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
2995 : static_assert(6 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
2996 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
2997 :
2998 :
2999 : static uint16_t sNativeProperties_sortedPropertyIndices[42];
3000 : static PropertyInfo sNativeProperties_propertyInfos[42];
3001 :
3002 : static const NativePropertiesN<3> sNativeProperties = {
3003 : false, 0,
3004 : false, 0,
3005 : true, 0 /* sMethods */,
3006 : true, 1 /* sAttributes */,
3007 : false, 0,
3008 : false, 0,
3009 : true, 2 /* sConstants */,
3010 : -1,
3011 : 42,
3012 : sNativeProperties_sortedPropertyIndices,
3013 : {
3014 : { sMethods, &sNativeProperties_propertyInfos[0] },
3015 : { sAttributes, &sNativeProperties_propertyInfos[34] },
3016 : { sConstants, &sNativeProperties_propertyInfos[36] }
3017 : }
3018 : };
3019 : static_assert(42 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
3020 : "We have a property info count that is oversized");
3021 :
3022 : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
3023 : {
3024 : "Function",
3025 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
3026 : &sBoringInterfaceObjectClassClassOps,
3027 : JS_NULL_CLASS_SPEC,
3028 : JS_NULL_CLASS_EXT,
3029 : &sInterfaceObjectClassObjectOps
3030 : },
3031 : eInterface,
3032 : true,
3033 : prototypes::id::XULTreeBuilder,
3034 : PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth,
3035 : sNativePropertyHooks,
3036 : "function XULTreeBuilder() {\n [native code]\n}",
3037 : XULTemplateBuilderBinding::GetConstructorObject
3038 : };
3039 :
3040 : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
3041 : {
3042 : "XULTreeBuilderPrototype",
3043 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
3044 : JS_NULL_CLASS_OPS,
3045 : JS_NULL_CLASS_SPEC,
3046 : JS_NULL_CLASS_EXT,
3047 : JS_NULL_OBJECT_OPS
3048 : },
3049 : eInterfacePrototype,
3050 : false,
3051 : prototypes::id::XULTreeBuilder,
3052 : PrototypeTraits<prototypes::id::XULTreeBuilder>::Depth,
3053 : sNativePropertyHooks,
3054 : "[object XULTreeBuilderPrototype]",
3055 : XULTemplateBuilderBinding::GetProtoObject
3056 : };
3057 :
3058 : bool
3059 0 : ConstructorEnabled(JSContext* aCx, JS::Handle<JSObject*> aObj)
3060 : {
3061 0 : return IsChromeOrXBL(aCx, aObj);
3062 : }
3063 :
3064 : JSObject*
3065 0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
3066 : {
3067 0 : return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
3068 : }
3069 :
3070 : static const js::ClassOps sClassOps = {
3071 : _addProperty, /* addProperty */
3072 : nullptr, /* delProperty */
3073 : nullptr, /* getProperty */
3074 : nullptr, /* setProperty */
3075 : nullptr, /* enumerate */
3076 : nullptr, /* newEnumerate */
3077 : nullptr, /* resolve */
3078 : nullptr, /* mayResolve */
3079 : _finalize, /* finalize */
3080 : nullptr, /* call */
3081 : nullptr, /* hasInstance */
3082 : nullptr, /* construct */
3083 : nullptr, /* trace */
3084 : };
3085 :
3086 : static const js::ClassExtension sClassExtension = {
3087 : nullptr, /* weakmapKeyDelegateOp */
3088 : _objectMoved /* objectMovedOp */
3089 : };
3090 :
3091 : static const DOMJSClass sClass = {
3092 : { "XULTreeBuilder",
3093 : JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
3094 : &sClassOps,
3095 : JS_NULL_CLASS_SPEC,
3096 : &sClassExtension,
3097 : JS_NULL_OBJECT_OPS
3098 : },
3099 : { prototypes::id::XULTemplateBuilder, prototypes::id::XULTreeBuilder, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
3100 : IsBaseOf<nsISupports, nsXULTreeBuilder >::value,
3101 : sNativePropertyHooks,
3102 : FindAssociatedGlobalForNative<nsXULTreeBuilder>::Get,
3103 : GetProtoObjectHandle,
3104 : GetCCParticipant<nsXULTreeBuilder>::Get()
3105 : };
3106 : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
3107 : "Must have the right minimal number of reserved slots.");
3108 : static_assert(1 >= 1,
3109 : "Must have enough reserved slots.");
3110 :
3111 : const JSClass*
3112 0 : GetJSClass()
3113 : {
3114 0 : return sClass.ToJSClass();
3115 : }
3116 :
3117 : bool
3118 0 : Wrap(JSContext* aCx, nsXULTreeBuilder* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
3119 : {
3120 : MOZ_ASSERT(static_cast<nsXULTreeBuilder*>(aObject) ==
3121 : reinterpret_cast<nsXULTreeBuilder*>(aObject),
3122 : "Multiple inheritance for nsXULTreeBuilder is broken.");
3123 : MOZ_ASSERT(static_cast<nsXULTemplateBuilder*>(aObject) ==
3124 : reinterpret_cast<nsXULTemplateBuilder*>(aObject),
3125 : "Multiple inheritance for nsXULTemplateBuilder is broken.");
3126 0 : MOZ_ASSERT(ToSupportsIsCorrect(aObject));
3127 0 : MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
3128 0 : MOZ_ASSERT(!aCache->GetWrapper(),
3129 : "You should probably not be using Wrap() directly; use "
3130 : "GetOrCreateDOMReflector instead");
3131 :
3132 0 : MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
3133 : "nsISupports must be on our primary inheritance chain");
3134 :
3135 0 : JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
3136 0 : if (!global) {
3137 0 : return false;
3138 : }
3139 0 : MOZ_ASSERT(JS_IsGlobalObject(global));
3140 0 : MOZ_ASSERT(JS::ObjectIsNotGray(global));
3141 :
3142 : // That might have ended up wrapping us already, due to the wonders
3143 : // of XBL. Check for that, and bail out as needed.
3144 0 : aReflector.set(aCache->GetWrapper());
3145 0 : if (aReflector) {
3146 : #ifdef DEBUG
3147 0 : binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
3148 : #endif // DEBUG
3149 0 : return true;
3150 : }
3151 :
3152 0 : JSAutoCompartment ac(aCx, global);
3153 0 : JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
3154 0 : if (!canonicalProto) {
3155 0 : return false;
3156 : }
3157 0 : JS::Rooted<JSObject*> proto(aCx);
3158 0 : if (aGivenProto) {
3159 0 : proto = aGivenProto;
3160 : // Unfortunately, while aGivenProto was in the compartment of aCx
3161 : // coming in, we changed compartments to that of "parent" so may need
3162 : // to wrap the proto here.
3163 0 : if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
3164 0 : if (!JS_WrapObject(aCx, &proto)) {
3165 0 : return false;
3166 : }
3167 : }
3168 : } else {
3169 0 : proto = canonicalProto;
3170 : }
3171 :
3172 0 : BindingJSObjectCreator<nsXULTreeBuilder> creator(aCx);
3173 0 : creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
3174 0 : if (!aReflector) {
3175 0 : return false;
3176 : }
3177 :
3178 0 : aCache->SetWrapper(aReflector);
3179 0 : creator.InitializationSucceeded();
3180 :
3181 0 : MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
3182 : aCache->GetWrapperPreserveColor() == aReflector);
3183 : // If proto != canonicalProto, we have to preserve our wrapper;
3184 : // otherwise we won't be able to properly recreate it later, since
3185 : // we won't know what proto to use. Note that we don't check
3186 : // aGivenProto here, since it's entirely possible (and even
3187 : // somewhat common) to have a non-null aGivenProto which is the
3188 : // same as canonicalProto.
3189 0 : if (proto != canonicalProto) {
3190 0 : PreserveWrapper(aObject);
3191 : }
3192 :
3193 0 : return true;
3194 : }
3195 :
3196 : const NativePropertyHooks sNativePropertyHooks[] = { {
3197 : nullptr,
3198 : nullptr,
3199 : nullptr,
3200 : { sNativeProperties.Upcast(), nullptr },
3201 : prototypes::id::XULTreeBuilder,
3202 : constructors::id::XULTreeBuilder,
3203 : XULTemplateBuilderBinding::sNativePropertyHooks,
3204 : &DefaultXrayExpandoObjectClass
3205 : } };
3206 :
3207 : void
3208 0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
3209 : {
3210 0 : JS::Handle<JSObject*> parentProto(XULTemplateBuilderBinding::GetProtoObjectHandle(aCx));
3211 0 : if (!parentProto) {
3212 0 : return;
3213 : }
3214 :
3215 0 : JS::Handle<JSObject*> constructorProto(XULTemplateBuilderBinding::GetConstructorObjectHandle(aCx));
3216 0 : if (!constructorProto) {
3217 0 : return;
3218 : }
3219 :
3220 : static bool sIdsInited = false;
3221 0 : if (!sIdsInited && NS_IsMainThread()) {
3222 0 : if (!InitIds(aCx, sNativeProperties.Upcast())) {
3223 0 : return;
3224 : }
3225 0 : sIdsInited = true;
3226 : }
3227 :
3228 0 : JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::XULTreeBuilder);
3229 0 : JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::XULTreeBuilder);
3230 0 : dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
3231 : &sPrototypeClass.mBase, protoCache,
3232 : constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
3233 : interfaceCache,
3234 : sNativeProperties.Upcast(),
3235 : nullptr,
3236 : "XULTreeBuilder", aDefineOnGlobal,
3237 : nullptr,
3238 0 : false);
3239 : }
3240 :
3241 : JS::Handle<JSObject*>
3242 0 : GetProtoObjectHandle(JSContext* aCx)
3243 : {
3244 : /* Get the interface prototype object for this class. This will create the
3245 : object as needed. */
3246 0 : bool aDefineOnGlobal = true;
3247 :
3248 : /* Make sure our global is sane. Hopefully we can remove this sometime */
3249 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
3250 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
3251 0 : return nullptr;
3252 : }
3253 :
3254 : /* Check to see whether the interface objects are already installed */
3255 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
3256 0 : if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::XULTreeBuilder)) {
3257 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
3258 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
3259 : }
3260 :
3261 : /*
3262 : * The object might _still_ be null, but that's OK.
3263 : *
3264 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
3265 : * traced by TraceProtoAndIfaceCache() and its contents are never
3266 : * changed after they have been set.
3267 : *
3268 : * Calling address() avoids the read read barrier that does gray
3269 : * unmarking, but it's not possible for the object to be gray here.
3270 : */
3271 :
3272 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::XULTreeBuilder);
3273 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
3274 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
3275 : }
3276 :
3277 : JS::Handle<JSObject*>
3278 0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
3279 : {
3280 : /* Get the interface object for this class. This will create the object as
3281 : needed. */
3282 :
3283 : /* Make sure our global is sane. Hopefully we can remove this sometime */
3284 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
3285 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
3286 0 : return nullptr;
3287 : }
3288 :
3289 : /* Check to see whether the interface objects are already installed */
3290 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
3291 0 : if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::XULTreeBuilder)) {
3292 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
3293 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
3294 : }
3295 :
3296 : /*
3297 : * The object might _still_ be null, but that's OK.
3298 : *
3299 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
3300 : * traced by TraceProtoAndIfaceCache() and its contents are never
3301 : * changed after they have been set.
3302 : *
3303 : * Calling address() avoids the read read barrier that does gray
3304 : * unmarking, but it's not possible for the object to be gray here.
3305 : */
3306 :
3307 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::XULTreeBuilder);
3308 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
3309 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
3310 : }
3311 :
3312 : JSObject*
3313 0 : GetConstructorObject(JSContext* aCx)
3314 : {
3315 0 : return GetConstructorObjectHandle(aCx);
3316 : }
3317 :
3318 : } // namespace XULTreeBuilderBinding
3319 :
3320 :
3321 :
3322 : namespace XULTreeBuilderObserverBinding {
3323 :
3324 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
3325 : #if defined(__clang__)
3326 : #pragma clang diagnostic push
3327 : #pragma clang diagnostic ignored "-Wmissing-braces"
3328 : #endif
3329 : static const ConstantSpec sConstants_specs[] = {
3330 : { "DROP_BEFORE", JS::Int32Value(-1) },
3331 : { "DROP_ON", JS::Int32Value(0) },
3332 : { "DROP_AFTER", JS::Int32Value(1) },
3333 : { 0, JS::UndefinedValue() }
3334 : };
3335 : #if defined(__clang__)
3336 : #pragma clang diagnostic pop
3337 : #endif
3338 :
3339 :
3340 : // Can't be const because the pref-enabled boolean needs to be writable
3341 : static Prefable<const ConstantSpec> sConstants[] = {
3342 : { nullptr, &sConstants_specs[0] },
3343 : { nullptr, nullptr }
3344 : };
3345 :
3346 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
3347 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
3348 : static_assert(3 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
3349 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
3350 :
3351 :
3352 : static uint16_t sNativeProperties_sortedPropertyIndices[3];
3353 : static PropertyInfo sNativeProperties_propertyInfos[3];
3354 :
3355 : static const NativePropertiesN<1> sNativeProperties = {
3356 : false, 0,
3357 : false, 0,
3358 : false, 0,
3359 : false, 0,
3360 : false, 0,
3361 : false, 0,
3362 : true, 0 /* sConstants */,
3363 : -1,
3364 : 3,
3365 : sNativeProperties_sortedPropertyIndices,
3366 : {
3367 : { sConstants, &sNativeProperties_propertyInfos[0] }
3368 : }
3369 : };
3370 : static_assert(3 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
3371 : "We have a property info count that is oversized");
3372 :
3373 : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
3374 : {
3375 : "Function",
3376 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
3377 : &sBoringInterfaceObjectClassClassOps,
3378 : JS_NULL_CLASS_SPEC,
3379 : JS_NULL_CLASS_EXT,
3380 : &sInterfaceObjectClassObjectOps
3381 : },
3382 : eInterface,
3383 : false,
3384 : prototypes::id::_ID_Count,
3385 : 0,
3386 : sNativePropertyHooks,
3387 : "function XULTreeBuilderObserver() {\n [native code]\n}",
3388 : JS::GetRealmFunctionPrototype
3389 : };
3390 :
3391 : bool
3392 0 : ConstructorEnabled(JSContext* aCx, JS::Handle<JSObject*> aObj)
3393 : {
3394 0 : return IsChromeOrXBL(aCx, aObj);
3395 : }
3396 :
3397 : JSObject*
3398 0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
3399 : {
3400 0 : return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
3401 : }
3402 :
3403 : const NativePropertyHooks sNativePropertyHooks[] = { {
3404 : nullptr,
3405 : nullptr,
3406 : nullptr,
3407 : { sNativeProperties.Upcast(), nullptr },
3408 : prototypes::id::_ID_Count,
3409 : constructors::id::XULTreeBuilderObserver,
3410 : nullptr,
3411 : &DefaultXrayExpandoObjectClass
3412 : } };
3413 :
3414 : void
3415 0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
3416 : {
3417 0 : JS::Rooted<JSObject*> constructorProto(aCx, JS::GetRealmFunctionPrototype(aCx));
3418 0 : if (!constructorProto) {
3419 0 : return;
3420 : }
3421 :
3422 : static bool sIdsInited = false;
3423 0 : if (!sIdsInited && NS_IsMainThread()) {
3424 0 : if (!InitIds(aCx, sNativeProperties.Upcast())) {
3425 0 : return;
3426 : }
3427 0 : sIdsInited = true;
3428 : }
3429 :
3430 0 : JS::Heap<JSObject*>* protoCache = nullptr;
3431 0 : JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::XULTreeBuilderObserver);
3432 0 : dom::CreateInterfaceObjects(aCx, aGlobal, nullptr,
3433 : nullptr, protoCache,
3434 : constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
3435 : interfaceCache,
3436 : sNativeProperties.Upcast(),
3437 : nullptr,
3438 : "XULTreeBuilderObserver", aDefineOnGlobal,
3439 : nullptr,
3440 0 : false);
3441 : }
3442 :
3443 : JS::Handle<JSObject*>
3444 0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
3445 : {
3446 : /* Get the interface object for this class. This will create the object as
3447 : needed. */
3448 :
3449 : /* Make sure our global is sane. Hopefully we can remove this sometime */
3450 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
3451 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
3452 0 : return nullptr;
3453 : }
3454 :
3455 : /* Check to see whether the interface objects are already installed */
3456 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
3457 0 : if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::XULTreeBuilderObserver)) {
3458 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
3459 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
3460 : }
3461 :
3462 : /*
3463 : * The object might _still_ be null, but that's OK.
3464 : *
3465 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
3466 : * traced by TraceProtoAndIfaceCache() and its contents are never
3467 : * changed after they have been set.
3468 : *
3469 : * Calling address() avoids the read read barrier that does gray
3470 : * unmarking, but it's not possible for the object to be gray here.
3471 : */
3472 :
3473 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::XULTreeBuilderObserver);
3474 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
3475 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
3476 : }
3477 :
3478 : JSObject*
3479 0 : GetConstructorObject(JSContext* aCx)
3480 : {
3481 0 : return GetConstructorObjectHandle(aCx);
3482 : }
3483 :
3484 : } // namespace XULTreeBuilderObserverBinding
3485 :
3486 :
3487 :
3488 : void
3489 0 : XULBuilderListener::WillRebuild(nsXULTemplateBuilder& aBuilder, ErrorResult& aRv, const char* aExecutionReason, ExceptionHandling aExceptionHandling, JSCompartment* aCompartment)
3490 : {
3491 0 : CallSetup s(this, aRv, "XULBuilderListener.willRebuild", aExceptionHandling, aCompartment);
3492 0 : JSContext* cx = s.GetContext();
3493 0 : if (!cx) {
3494 0 : MOZ_ASSERT(aRv.Failed());
3495 0 : return;
3496 : }
3497 0 : JS::Rooted<JS::Value> rval(cx, JS::UndefinedValue());
3498 0 : JS::AutoValueVector argv(cx);
3499 0 : if (!argv.resize(1)) {
3500 0 : aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
3501 0 : return;
3502 : }
3503 0 : unsigned argc = 1;
3504 :
3505 : do {
3506 0 : if (!GetOrCreateDOMReflector(cx, aBuilder, argv[0])) {
3507 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
3508 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3509 0 : return;
3510 : }
3511 0 : break;
3512 : } while (0);
3513 :
3514 0 : JS::Rooted<JS::Value> callable(cx);
3515 0 : XULBuilderListenerAtoms* atomsCache = GetAtomCache<XULBuilderListenerAtoms>(cx);
3516 0 : if ((!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) ||
3517 0 : !GetCallableProperty(cx, atomsCache->willRebuild_id, &callable)) {
3518 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3519 0 : return;
3520 : }
3521 0 : JS::Rooted<JS::Value> thisValue(cx, JS::ObjectValue(*mCallback));
3522 0 : if (!JS::Call(cx, thisValue, callable,
3523 0 : JS::HandleValueArray::subarray(argv, 0, argc), &rval)) {
3524 0 : aRv.NoteJSContextException(cx);
3525 0 : return;
3526 : }
3527 : }
3528 :
3529 : void
3530 0 : XULBuilderListener::DidRebuild(nsXULTemplateBuilder& aBuilder, ErrorResult& aRv, const char* aExecutionReason, ExceptionHandling aExceptionHandling, JSCompartment* aCompartment)
3531 : {
3532 0 : CallSetup s(this, aRv, "XULBuilderListener.didRebuild", aExceptionHandling, aCompartment);
3533 0 : JSContext* cx = s.GetContext();
3534 0 : if (!cx) {
3535 0 : MOZ_ASSERT(aRv.Failed());
3536 0 : return;
3537 : }
3538 0 : JS::Rooted<JS::Value> rval(cx, JS::UndefinedValue());
3539 0 : JS::AutoValueVector argv(cx);
3540 0 : if (!argv.resize(1)) {
3541 0 : aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
3542 0 : return;
3543 : }
3544 0 : unsigned argc = 1;
3545 :
3546 : do {
3547 0 : if (!GetOrCreateDOMReflector(cx, aBuilder, argv[0])) {
3548 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
3549 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3550 0 : return;
3551 : }
3552 0 : break;
3553 : } while (0);
3554 :
3555 0 : JS::Rooted<JS::Value> callable(cx);
3556 0 : XULBuilderListenerAtoms* atomsCache = GetAtomCache<XULBuilderListenerAtoms>(cx);
3557 0 : if ((!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) ||
3558 0 : !GetCallableProperty(cx, atomsCache->didRebuild_id, &callable)) {
3559 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3560 0 : return;
3561 : }
3562 0 : JS::Rooted<JS::Value> thisValue(cx, JS::ObjectValue(*mCallback));
3563 0 : if (!JS::Call(cx, thisValue, callable,
3564 0 : JS::HandleValueArray::subarray(argv, 0, argc), &rval)) {
3565 0 : aRv.NoteJSContextException(cx);
3566 0 : return;
3567 : }
3568 : }
3569 :
3570 : bool
3571 0 : XULBuilderListener::InitIds(JSContext* cx, XULBuilderListenerAtoms* atomsCache)
3572 : {
3573 0 : MOZ_ASSERT(!*reinterpret_cast<jsid**>(atomsCache));
3574 :
3575 : // Initialize these in reverse order so that any failure leaves the first one
3576 : // uninitialized.
3577 0 : if (!atomsCache->didRebuild_id.init(cx, "didRebuild") ||
3578 0 : !atomsCache->willRebuild_id.init(cx, "willRebuild")) {
3579 0 : return false;
3580 : }
3581 0 : return true;
3582 : }
3583 :
3584 :
3585 :
3586 : bool
3587 0 : XULTreeBuilderObserver::CanDrop(int32_t index, int32_t orientation, DataTransfer* dataTransfer, ErrorResult& aRv, const char* aExecutionReason, ExceptionHandling aExceptionHandling, JSCompartment* aCompartment)
3588 : {
3589 0 : CallSetup s(this, aRv, "XULTreeBuilderObserver.canDrop", aExceptionHandling, aCompartment);
3590 0 : JSContext* cx = s.GetContext();
3591 0 : if (!cx) {
3592 0 : MOZ_ASSERT(aRv.Failed());
3593 0 : return bool(0);
3594 : }
3595 0 : JS::Rooted<JS::Value> rval(cx, JS::UndefinedValue());
3596 0 : JS::AutoValueVector argv(cx);
3597 0 : if (!argv.resize(3)) {
3598 0 : aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
3599 0 : return bool(0);
3600 : }
3601 0 : unsigned argc = 3;
3602 :
3603 : do {
3604 0 : if (!dataTransfer) {
3605 0 : argv[2].setNull();
3606 0 : break;
3607 : }
3608 0 : if (!GetOrCreateDOMReflector(cx, dataTransfer, argv[2])) {
3609 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
3610 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3611 0 : return bool(0);
3612 : }
3613 0 : break;
3614 : } while (0);
3615 :
3616 : do {
3617 0 : argv[1].setInt32(int32_t(orientation));
3618 0 : break;
3619 : } while (0);
3620 :
3621 : do {
3622 0 : argv[0].setInt32(int32_t(index));
3623 0 : break;
3624 : } while (0);
3625 :
3626 0 : JS::Rooted<JS::Value> callable(cx);
3627 0 : XULTreeBuilderObserverAtoms* atomsCache = GetAtomCache<XULTreeBuilderObserverAtoms>(cx);
3628 0 : if ((!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) ||
3629 0 : !GetCallableProperty(cx, atomsCache->canDrop_id, &callable)) {
3630 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3631 0 : return bool(0);
3632 : }
3633 0 : JS::Rooted<JS::Value> thisValue(cx, JS::ObjectValue(*mCallback));
3634 0 : if (!JS::Call(cx, thisValue, callable,
3635 0 : JS::HandleValueArray::subarray(argv, 0, argc), &rval)) {
3636 0 : aRv.NoteJSContextException(cx);
3637 0 : return bool(0);
3638 : }
3639 : bool rvalDecl;
3640 0 : if (!ValueToPrimitive<bool, eDefault>(cx, rval, &rvalDecl)) {
3641 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3642 0 : return bool(0);
3643 : }
3644 0 : return rvalDecl;
3645 : }
3646 :
3647 : void
3648 0 : XULTreeBuilderObserver::OnDrop(int32_t row, int32_t orientation, DataTransfer* dataTransfer, ErrorResult& aRv, const char* aExecutionReason, ExceptionHandling aExceptionHandling, JSCompartment* aCompartment)
3649 : {
3650 0 : CallSetup s(this, aRv, "XULTreeBuilderObserver.onDrop", aExceptionHandling, aCompartment);
3651 0 : JSContext* cx = s.GetContext();
3652 0 : if (!cx) {
3653 0 : MOZ_ASSERT(aRv.Failed());
3654 0 : return;
3655 : }
3656 0 : JS::Rooted<JS::Value> rval(cx, JS::UndefinedValue());
3657 0 : JS::AutoValueVector argv(cx);
3658 0 : if (!argv.resize(3)) {
3659 0 : aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
3660 0 : return;
3661 : }
3662 0 : unsigned argc = 3;
3663 :
3664 : do {
3665 0 : if (!dataTransfer) {
3666 0 : argv[2].setNull();
3667 0 : break;
3668 : }
3669 0 : if (!GetOrCreateDOMReflector(cx, dataTransfer, argv[2])) {
3670 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
3671 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3672 0 : return;
3673 : }
3674 0 : break;
3675 : } while (0);
3676 :
3677 : do {
3678 0 : argv[1].setInt32(int32_t(orientation));
3679 0 : break;
3680 : } while (0);
3681 :
3682 : do {
3683 0 : argv[0].setInt32(int32_t(row));
3684 0 : break;
3685 : } while (0);
3686 :
3687 0 : JS::Rooted<JS::Value> callable(cx);
3688 0 : XULTreeBuilderObserverAtoms* atomsCache = GetAtomCache<XULTreeBuilderObserverAtoms>(cx);
3689 0 : if ((!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) ||
3690 0 : !GetCallableProperty(cx, atomsCache->onDrop_id, &callable)) {
3691 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3692 0 : return;
3693 : }
3694 0 : JS::Rooted<JS::Value> thisValue(cx, JS::ObjectValue(*mCallback));
3695 0 : if (!JS::Call(cx, thisValue, callable,
3696 0 : JS::HandleValueArray::subarray(argv, 0, argc), &rval)) {
3697 0 : aRv.NoteJSContextException(cx);
3698 0 : return;
3699 : }
3700 : }
3701 :
3702 : void
3703 0 : XULTreeBuilderObserver::OnToggleOpenState(int32_t index, ErrorResult& aRv, const char* aExecutionReason, ExceptionHandling aExceptionHandling, JSCompartment* aCompartment)
3704 : {
3705 0 : CallSetup s(this, aRv, "XULTreeBuilderObserver.onToggleOpenState", aExceptionHandling, aCompartment);
3706 0 : JSContext* cx = s.GetContext();
3707 0 : if (!cx) {
3708 0 : MOZ_ASSERT(aRv.Failed());
3709 0 : return;
3710 : }
3711 0 : JS::Rooted<JS::Value> rval(cx, JS::UndefinedValue());
3712 0 : JS::AutoValueVector argv(cx);
3713 0 : if (!argv.resize(1)) {
3714 0 : aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
3715 0 : return;
3716 : }
3717 0 : unsigned argc = 1;
3718 :
3719 : do {
3720 0 : argv[0].setInt32(int32_t(index));
3721 0 : break;
3722 : } while (0);
3723 :
3724 0 : JS::Rooted<JS::Value> callable(cx);
3725 0 : XULTreeBuilderObserverAtoms* atomsCache = GetAtomCache<XULTreeBuilderObserverAtoms>(cx);
3726 0 : if ((!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) ||
3727 0 : !GetCallableProperty(cx, atomsCache->onToggleOpenState_id, &callable)) {
3728 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3729 0 : return;
3730 : }
3731 0 : JS::Rooted<JS::Value> thisValue(cx, JS::ObjectValue(*mCallback));
3732 0 : if (!JS::Call(cx, thisValue, callable,
3733 0 : JS::HandleValueArray::subarray(argv, 0, argc), &rval)) {
3734 0 : aRv.NoteJSContextException(cx);
3735 0 : return;
3736 : }
3737 : }
3738 :
3739 : void
3740 0 : XULTreeBuilderObserver::OnCycleHeader(const nsAString& colID, Element* elt, ErrorResult& aRv, const char* aExecutionReason, ExceptionHandling aExceptionHandling, JSCompartment* aCompartment)
3741 : {
3742 0 : CallSetup s(this, aRv, "XULTreeBuilderObserver.onCycleHeader", aExceptionHandling, aCompartment);
3743 0 : JSContext* cx = s.GetContext();
3744 0 : if (!cx) {
3745 0 : MOZ_ASSERT(aRv.Failed());
3746 0 : return;
3747 : }
3748 0 : JS::Rooted<JS::Value> rval(cx, JS::UndefinedValue());
3749 0 : JS::AutoValueVector argv(cx);
3750 0 : if (!argv.resize(2)) {
3751 0 : aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
3752 0 : return;
3753 : }
3754 0 : unsigned argc = 2;
3755 :
3756 : do {
3757 0 : if (!elt) {
3758 0 : argv[1].setNull();
3759 0 : break;
3760 : }
3761 0 : if (!GetOrCreateDOMReflector(cx, elt, argv[1])) {
3762 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
3763 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3764 0 : return;
3765 : }
3766 0 : break;
3767 : } while (0);
3768 :
3769 : do {
3770 0 : nsString mutableStr(colID);
3771 0 : if (!xpc::NonVoidStringToJsval(cx, mutableStr, argv[0])) {
3772 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3773 0 : return;
3774 : }
3775 0 : break;
3776 : } while (0);
3777 :
3778 0 : JS::Rooted<JS::Value> callable(cx);
3779 0 : XULTreeBuilderObserverAtoms* atomsCache = GetAtomCache<XULTreeBuilderObserverAtoms>(cx);
3780 0 : if ((!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) ||
3781 0 : !GetCallableProperty(cx, atomsCache->onCycleHeader_id, &callable)) {
3782 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3783 0 : return;
3784 : }
3785 0 : JS::Rooted<JS::Value> thisValue(cx, JS::ObjectValue(*mCallback));
3786 0 : if (!JS::Call(cx, thisValue, callable,
3787 0 : JS::HandleValueArray::subarray(argv, 0, argc), &rval)) {
3788 0 : aRv.NoteJSContextException(cx);
3789 0 : return;
3790 : }
3791 : }
3792 :
3793 : void
3794 0 : XULTreeBuilderObserver::OnCycleCell(int32_t row, const nsAString& colID, ErrorResult& aRv, const char* aExecutionReason, ExceptionHandling aExceptionHandling, JSCompartment* aCompartment)
3795 : {
3796 0 : CallSetup s(this, aRv, "XULTreeBuilderObserver.onCycleCell", aExceptionHandling, aCompartment);
3797 0 : JSContext* cx = s.GetContext();
3798 0 : if (!cx) {
3799 0 : MOZ_ASSERT(aRv.Failed());
3800 0 : return;
3801 : }
3802 0 : JS::Rooted<JS::Value> rval(cx, JS::UndefinedValue());
3803 0 : JS::AutoValueVector argv(cx);
3804 0 : if (!argv.resize(2)) {
3805 0 : aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
3806 0 : return;
3807 : }
3808 0 : unsigned argc = 2;
3809 :
3810 : do {
3811 0 : nsString mutableStr(colID);
3812 0 : if (!xpc::NonVoidStringToJsval(cx, mutableStr, argv[1])) {
3813 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3814 0 : return;
3815 : }
3816 0 : break;
3817 : } while (0);
3818 :
3819 : do {
3820 0 : argv[0].setInt32(int32_t(row));
3821 0 : break;
3822 : } while (0);
3823 :
3824 0 : JS::Rooted<JS::Value> callable(cx);
3825 0 : XULTreeBuilderObserverAtoms* atomsCache = GetAtomCache<XULTreeBuilderObserverAtoms>(cx);
3826 0 : if ((!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) ||
3827 0 : !GetCallableProperty(cx, atomsCache->onCycleCell_id, &callable)) {
3828 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3829 0 : return;
3830 : }
3831 0 : JS::Rooted<JS::Value> thisValue(cx, JS::ObjectValue(*mCallback));
3832 0 : if (!JS::Call(cx, thisValue, callable,
3833 0 : JS::HandleValueArray::subarray(argv, 0, argc), &rval)) {
3834 0 : aRv.NoteJSContextException(cx);
3835 0 : return;
3836 : }
3837 : }
3838 :
3839 : void
3840 0 : XULTreeBuilderObserver::OnSelectionChanged(ErrorResult& aRv, const char* aExecutionReason, ExceptionHandling aExceptionHandling, JSCompartment* aCompartment)
3841 : {
3842 0 : CallSetup s(this, aRv, "XULTreeBuilderObserver.onSelectionChanged", aExceptionHandling, aCompartment);
3843 0 : JSContext* cx = s.GetContext();
3844 0 : if (!cx) {
3845 0 : MOZ_ASSERT(aRv.Failed());
3846 0 : return;
3847 : }
3848 0 : JS::Rooted<JS::Value> rval(cx, JS::UndefinedValue());
3849 :
3850 0 : JS::Rooted<JS::Value> callable(cx);
3851 0 : XULTreeBuilderObserverAtoms* atomsCache = GetAtomCache<XULTreeBuilderObserverAtoms>(cx);
3852 0 : if ((!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) ||
3853 0 : !GetCallableProperty(cx, atomsCache->onSelectionChanged_id, &callable)) {
3854 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3855 0 : return;
3856 : }
3857 0 : JS::Rooted<JS::Value> thisValue(cx, JS::ObjectValue(*mCallback));
3858 0 : if (!JS::Call(cx, thisValue, callable,
3859 0 : JS::HandleValueArray::empty(), &rval)) {
3860 0 : aRv.NoteJSContextException(cx);
3861 0 : return;
3862 : }
3863 : }
3864 :
3865 : void
3866 0 : XULTreeBuilderObserver::OnPerformAction(const nsAString& action, ErrorResult& aRv, const char* aExecutionReason, ExceptionHandling aExceptionHandling, JSCompartment* aCompartment)
3867 : {
3868 0 : CallSetup s(this, aRv, "XULTreeBuilderObserver.onPerformAction", aExceptionHandling, aCompartment);
3869 0 : JSContext* cx = s.GetContext();
3870 0 : if (!cx) {
3871 0 : MOZ_ASSERT(aRv.Failed());
3872 0 : return;
3873 : }
3874 0 : JS::Rooted<JS::Value> rval(cx, JS::UndefinedValue());
3875 0 : JS::AutoValueVector argv(cx);
3876 0 : if (!argv.resize(1)) {
3877 0 : aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
3878 0 : return;
3879 : }
3880 0 : unsigned argc = 1;
3881 :
3882 : do {
3883 0 : nsString mutableStr(action);
3884 0 : if (!xpc::NonVoidStringToJsval(cx, mutableStr, argv[0])) {
3885 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3886 0 : return;
3887 : }
3888 0 : break;
3889 : } while (0);
3890 :
3891 0 : JS::Rooted<JS::Value> callable(cx);
3892 0 : XULTreeBuilderObserverAtoms* atomsCache = GetAtomCache<XULTreeBuilderObserverAtoms>(cx);
3893 0 : if ((!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) ||
3894 0 : !GetCallableProperty(cx, atomsCache->onPerformAction_id, &callable)) {
3895 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3896 0 : return;
3897 : }
3898 0 : JS::Rooted<JS::Value> thisValue(cx, JS::ObjectValue(*mCallback));
3899 0 : if (!JS::Call(cx, thisValue, callable,
3900 0 : JS::HandleValueArray::subarray(argv, 0, argc), &rval)) {
3901 0 : aRv.NoteJSContextException(cx);
3902 0 : return;
3903 : }
3904 : }
3905 :
3906 : void
3907 0 : XULTreeBuilderObserver::OnPerformActionOnRow(const nsAString& action, int32_t row, ErrorResult& aRv, const char* aExecutionReason, ExceptionHandling aExceptionHandling, JSCompartment* aCompartment)
3908 : {
3909 0 : CallSetup s(this, aRv, "XULTreeBuilderObserver.onPerformActionOnRow", aExceptionHandling, aCompartment);
3910 0 : JSContext* cx = s.GetContext();
3911 0 : if (!cx) {
3912 0 : MOZ_ASSERT(aRv.Failed());
3913 0 : return;
3914 : }
3915 0 : JS::Rooted<JS::Value> rval(cx, JS::UndefinedValue());
3916 0 : JS::AutoValueVector argv(cx);
3917 0 : if (!argv.resize(2)) {
3918 0 : aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
3919 0 : return;
3920 : }
3921 0 : unsigned argc = 2;
3922 :
3923 : do {
3924 0 : argv[1].setInt32(int32_t(row));
3925 0 : break;
3926 : } while (0);
3927 :
3928 : do {
3929 0 : nsString mutableStr(action);
3930 0 : if (!xpc::NonVoidStringToJsval(cx, mutableStr, argv[0])) {
3931 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3932 0 : return;
3933 : }
3934 0 : break;
3935 : } while (0);
3936 :
3937 0 : JS::Rooted<JS::Value> callable(cx);
3938 0 : XULTreeBuilderObserverAtoms* atomsCache = GetAtomCache<XULTreeBuilderObserverAtoms>(cx);
3939 0 : if ((!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) ||
3940 0 : !GetCallableProperty(cx, atomsCache->onPerformActionOnRow_id, &callable)) {
3941 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3942 0 : return;
3943 : }
3944 0 : JS::Rooted<JS::Value> thisValue(cx, JS::ObjectValue(*mCallback));
3945 0 : if (!JS::Call(cx, thisValue, callable,
3946 0 : JS::HandleValueArray::subarray(argv, 0, argc), &rval)) {
3947 0 : aRv.NoteJSContextException(cx);
3948 0 : return;
3949 : }
3950 : }
3951 :
3952 : void
3953 0 : XULTreeBuilderObserver::OnPerformActionOnCell(const nsAString& action, int32_t row, const nsAString& colID, ErrorResult& aRv, const char* aExecutionReason, ExceptionHandling aExceptionHandling, JSCompartment* aCompartment)
3954 : {
3955 0 : CallSetup s(this, aRv, "XULTreeBuilderObserver.onPerformActionOnCell", aExceptionHandling, aCompartment);
3956 0 : JSContext* cx = s.GetContext();
3957 0 : if (!cx) {
3958 0 : MOZ_ASSERT(aRv.Failed());
3959 0 : return;
3960 : }
3961 0 : JS::Rooted<JS::Value> rval(cx, JS::UndefinedValue());
3962 0 : JS::AutoValueVector argv(cx);
3963 0 : if (!argv.resize(3)) {
3964 0 : aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
3965 0 : return;
3966 : }
3967 0 : unsigned argc = 3;
3968 :
3969 : do {
3970 0 : nsString mutableStr(colID);
3971 0 : if (!xpc::NonVoidStringToJsval(cx, mutableStr, argv[2])) {
3972 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3973 0 : return;
3974 : }
3975 0 : break;
3976 : } while (0);
3977 :
3978 : do {
3979 0 : argv[1].setInt32(int32_t(row));
3980 0 : break;
3981 : } while (0);
3982 :
3983 : do {
3984 0 : nsString mutableStr(action);
3985 0 : if (!xpc::NonVoidStringToJsval(cx, mutableStr, argv[0])) {
3986 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3987 0 : return;
3988 : }
3989 0 : break;
3990 : } while (0);
3991 :
3992 0 : JS::Rooted<JS::Value> callable(cx);
3993 0 : XULTreeBuilderObserverAtoms* atomsCache = GetAtomCache<XULTreeBuilderObserverAtoms>(cx);
3994 0 : if ((!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) ||
3995 0 : !GetCallableProperty(cx, atomsCache->onPerformActionOnCell_id, &callable)) {
3996 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
3997 0 : return;
3998 : }
3999 0 : JS::Rooted<JS::Value> thisValue(cx, JS::ObjectValue(*mCallback));
4000 0 : if (!JS::Call(cx, thisValue, callable,
4001 0 : JS::HandleValueArray::subarray(argv, 0, argc), &rval)) {
4002 0 : aRv.NoteJSContextException(cx);
4003 0 : return;
4004 : }
4005 : }
4006 :
4007 : bool
4008 0 : XULTreeBuilderObserver::InitIds(JSContext* cx, XULTreeBuilderObserverAtoms* atomsCache)
4009 : {
4010 0 : MOZ_ASSERT(!*reinterpret_cast<jsid**>(atomsCache));
4011 :
4012 : // Initialize these in reverse order so that any failure leaves the first one
4013 : // uninitialized.
4014 0 : if (!atomsCache->onPerformActionOnCell_id.init(cx, "onPerformActionOnCell") ||
4015 0 : !atomsCache->onPerformActionOnRow_id.init(cx, "onPerformActionOnRow") ||
4016 0 : !atomsCache->onPerformAction_id.init(cx, "onPerformAction") ||
4017 0 : !atomsCache->onSelectionChanged_id.init(cx, "onSelectionChanged") ||
4018 0 : !atomsCache->onCycleCell_id.init(cx, "onCycleCell") ||
4019 0 : !atomsCache->onCycleHeader_id.init(cx, "onCycleHeader") ||
4020 0 : !atomsCache->onToggleOpenState_id.init(cx, "onToggleOpenState") ||
4021 0 : !atomsCache->onDrop_id.init(cx, "onDrop") ||
4022 0 : !atomsCache->canDrop_id.init(cx, "canDrop")) {
4023 0 : return false;
4024 : }
4025 0 : return true;
4026 : }
4027 :
4028 :
4029 :
4030 : namespace binding_detail {
4031 : } // namespace binding_detail
4032 :
4033 :
4034 : namespace binding_detail {
4035 : } // namespace binding_detail
4036 :
4037 :
4038 : } // namespace dom
4039 : } // namespace mozilla
|