Coverage Report

Created: 2018-09-25 14:53

/work/obj-fuzz/dom/bindings/XMLHttpRequestEventTargetBinding.cpp
Line
Count
Source (jump to first uncovered line)
1
/* THIS FILE IS AUTOGENERATED FROM XMLHttpRequestEventTarget.webidl BY Codegen.py - DO NOT EDIT */
2
3
#include "EventHandlerBinding.h"
4
#include "EventTargetBinding.h"
5
#include "WrapperFactory.h"
6
#include "XMLHttpRequestEventTargetBinding.h"
7
#include "mozilla/OwningNonNull.h"
8
#include "mozilla/dom/BindingUtils.h"
9
#include "mozilla/dom/DOMJSClass.h"
10
#include "mozilla/dom/NonRefcountedDOMObject.h"
11
#include "mozilla/dom/Nullable.h"
12
#include "mozilla/dom/XMLHttpRequestEventTarget.h"
13
#include "mozilla/dom/XrayExpandoClass.h"
14
#include "nsThreadUtils.h"
15
#include "xpcprivate.h"
16
17
namespace mozilla {
18
namespace dom {
19
20
namespace binding_detail {}; // Just to make sure it's known as a namespace
21
using namespace mozilla::dom::binding_detail;
22
23
24
namespace XMLHttpRequestEventTarget_Binding {
25
26
static_assert(IsRefcounted<NativeType>::value == IsRefcounted<EventTarget_Binding::NativeType>::value,
27
              "Can't inherit from an interface with a different ownership model.");
28
29
MOZ_CAN_RUN_SCRIPT static bool
30
get_onloadstart(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::XMLHttpRequestEventTarget* self, JSJitGetterCallArgs args)
31
0
{
32
0
  AUTO_PROFILER_LABEL_FAST("get XMLHttpRequestEventTarget.onloadstart", DOM, cx);
33
0
34
0
  RefPtr<EventHandlerNonNull> result(self->GetOnloadstart());
35
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
36
0
  if (result) {
37
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
38
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
39
0
      return false;
40
0
    }
41
0
    return true;
42
0
  } else {
43
0
    args.rval().setNull();
44
0
    return true;
45
0
  }
46
0
}
47
48
MOZ_CAN_RUN_SCRIPT static bool
49
set_onloadstart(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::XMLHttpRequestEventTarget* self, JSJitSetterCallArgs args)
50
0
{
51
0
  AUTO_PROFILER_LABEL_FAST("set XMLHttpRequestEventTarget.onloadstart", DOM, cx);
52
0
53
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
54
0
  if (args[0].isObject()) {
55
0
    { // scope for tempRoot and tempGlobalRoot if needed
56
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
57
0
    }
58
0
  } else {
59
0
    arg0 = nullptr;
60
0
  }
61
0
  self->SetOnloadstart(Constify(arg0));
62
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
63
0
64
0
  return true;
65
0
}
66
67
static const JSJitInfo onloadstart_getterinfo = {
68
  { (JSJitGetterOp)get_onloadstart },
69
  { prototypes::id::XMLHttpRequestEventTarget },
70
  { PrototypeTraits<prototypes::id::XMLHttpRequestEventTarget>::Depth },
71
  JSJitInfo::Getter,
72
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
73
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
74
  false,  /* isInfallible. False in setters. */
75
  false,  /* isMovable.  Not relevant for setters. */
76
  false, /* isEliminatable.  Not relevant for setters. */
77
  false, /* isAlwaysInSlot.  Only relevant for getters. */
78
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
79
  false,  /* isTypedMethod.  Only relevant for methods. */
80
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
81
};
82
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
83
static_assert(0 < 1, "There is no slot for us");
84
static const JSJitInfo onloadstart_setterinfo = {
85
  { (JSJitGetterOp)set_onloadstart },
86
  { prototypes::id::XMLHttpRequestEventTarget },
87
  { PrototypeTraits<prototypes::id::XMLHttpRequestEventTarget>::Depth },
88
  JSJitInfo::Setter,
89
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
90
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
91
  false,  /* isInfallible. False in setters. */
92
  false,  /* isMovable.  Not relevant for setters. */
93
  false, /* isEliminatable.  Not relevant for setters. */
94
  false, /* isAlwaysInSlot.  Only relevant for getters. */
95
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
96
  false,  /* isTypedMethod.  Only relevant for methods. */
97
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
98
};
99
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
100
static_assert(0 < 1, "There is no slot for us");
101
102
MOZ_CAN_RUN_SCRIPT static bool
103
get_onprogress(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::XMLHttpRequestEventTarget* self, JSJitGetterCallArgs args)
104
0
{
105
0
  AUTO_PROFILER_LABEL_FAST("get XMLHttpRequestEventTarget.onprogress", DOM, cx);
106
0
107
0
  RefPtr<EventHandlerNonNull> result(self->GetOnprogress());
108
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
109
0
  if (result) {
110
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
111
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
112
0
      return false;
113
0
    }
114
0
    return true;
115
0
  } else {
116
0
    args.rval().setNull();
117
0
    return true;
118
0
  }
119
0
}
120
121
MOZ_CAN_RUN_SCRIPT static bool
122
set_onprogress(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::XMLHttpRequestEventTarget* self, JSJitSetterCallArgs args)
123
0
{
124
0
  AUTO_PROFILER_LABEL_FAST("set XMLHttpRequestEventTarget.onprogress", DOM, cx);
125
0
126
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
127
0
  if (args[0].isObject()) {
128
0
    { // scope for tempRoot and tempGlobalRoot if needed
129
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
130
0
    }
131
0
  } else {
132
0
    arg0 = nullptr;
133
0
  }
134
0
  self->SetOnprogress(Constify(arg0));
135
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
136
0
137
0
  return true;
138
0
}
139
140
static const JSJitInfo onprogress_getterinfo = {
141
  { (JSJitGetterOp)get_onprogress },
142
  { prototypes::id::XMLHttpRequestEventTarget },
143
  { PrototypeTraits<prototypes::id::XMLHttpRequestEventTarget>::Depth },
144
  JSJitInfo::Getter,
145
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
146
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
147
  false,  /* isInfallible. False in setters. */
148
  false,  /* isMovable.  Not relevant for setters. */
149
  false, /* isEliminatable.  Not relevant for setters. */
150
  false, /* isAlwaysInSlot.  Only relevant for getters. */
151
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
152
  false,  /* isTypedMethod.  Only relevant for methods. */
153
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
154
};
155
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
156
static_assert(0 < 1, "There is no slot for us");
157
static const JSJitInfo onprogress_setterinfo = {
158
  { (JSJitGetterOp)set_onprogress },
159
  { prototypes::id::XMLHttpRequestEventTarget },
160
  { PrototypeTraits<prototypes::id::XMLHttpRequestEventTarget>::Depth },
161
  JSJitInfo::Setter,
162
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
163
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
164
  false,  /* isInfallible. False in setters. */
165
  false,  /* isMovable.  Not relevant for setters. */
166
  false, /* isEliminatable.  Not relevant for setters. */
167
  false, /* isAlwaysInSlot.  Only relevant for getters. */
168
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
169
  false,  /* isTypedMethod.  Only relevant for methods. */
170
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
171
};
172
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
173
static_assert(0 < 1, "There is no slot for us");
174
175
MOZ_CAN_RUN_SCRIPT static bool
176
get_onabort(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::XMLHttpRequestEventTarget* self, JSJitGetterCallArgs args)
177
0
{
178
0
  AUTO_PROFILER_LABEL_FAST("get XMLHttpRequestEventTarget.onabort", DOM, cx);
179
0
180
0
  RefPtr<EventHandlerNonNull> result(self->GetOnabort());
181
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
182
0
  if (result) {
183
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
184
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
185
0
      return false;
186
0
    }
187
0
    return true;
188
0
  } else {
189
0
    args.rval().setNull();
190
0
    return true;
191
0
  }
192
0
}
193
194
MOZ_CAN_RUN_SCRIPT static bool
195
set_onabort(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::XMLHttpRequestEventTarget* self, JSJitSetterCallArgs args)
196
0
{
197
0
  AUTO_PROFILER_LABEL_FAST("set XMLHttpRequestEventTarget.onabort", DOM, cx);
198
0
199
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
200
0
  if (args[0].isObject()) {
201
0
    { // scope for tempRoot and tempGlobalRoot if needed
202
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
203
0
    }
204
0
  } else {
205
0
    arg0 = nullptr;
206
0
  }
207
0
  self->SetOnabort(Constify(arg0));
208
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
209
0
210
0
  return true;
211
0
}
212
213
static const JSJitInfo onabort_getterinfo = {
214
  { (JSJitGetterOp)get_onabort },
215
  { prototypes::id::XMLHttpRequestEventTarget },
216
  { PrototypeTraits<prototypes::id::XMLHttpRequestEventTarget>::Depth },
217
  JSJitInfo::Getter,
218
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
219
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
220
  false,  /* isInfallible. False in setters. */
221
  false,  /* isMovable.  Not relevant for setters. */
222
  false, /* isEliminatable.  Not relevant for setters. */
223
  false, /* isAlwaysInSlot.  Only relevant for getters. */
224
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
225
  false,  /* isTypedMethod.  Only relevant for methods. */
226
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
227
};
228
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
229
static_assert(0 < 1, "There is no slot for us");
230
static const JSJitInfo onabort_setterinfo = {
231
  { (JSJitGetterOp)set_onabort },
232
  { prototypes::id::XMLHttpRequestEventTarget },
233
  { PrototypeTraits<prototypes::id::XMLHttpRequestEventTarget>::Depth },
234
  JSJitInfo::Setter,
235
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
236
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
237
  false,  /* isInfallible. False in setters. */
238
  false,  /* isMovable.  Not relevant for setters. */
239
  false, /* isEliminatable.  Not relevant for setters. */
240
  false, /* isAlwaysInSlot.  Only relevant for getters. */
241
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
242
  false,  /* isTypedMethod.  Only relevant for methods. */
243
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
244
};
245
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
246
static_assert(0 < 1, "There is no slot for us");
247
248
MOZ_CAN_RUN_SCRIPT static bool
249
get_onerror(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::XMLHttpRequestEventTarget* self, JSJitGetterCallArgs args)
250
0
{
251
0
  AUTO_PROFILER_LABEL_FAST("get XMLHttpRequestEventTarget.onerror", DOM, cx);
252
0
253
0
  RefPtr<EventHandlerNonNull> result(self->GetOnerror());
254
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
255
0
  if (result) {
256
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
257
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
258
0
      return false;
259
0
    }
260
0
    return true;
261
0
  } else {
262
0
    args.rval().setNull();
263
0
    return true;
264
0
  }
265
0
}
266
267
MOZ_CAN_RUN_SCRIPT static bool
268
set_onerror(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::XMLHttpRequestEventTarget* self, JSJitSetterCallArgs args)
269
0
{
270
0
  AUTO_PROFILER_LABEL_FAST("set XMLHttpRequestEventTarget.onerror", DOM, cx);
271
0
272
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
273
0
  if (args[0].isObject()) {
274
0
    { // scope for tempRoot and tempGlobalRoot if needed
275
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
276
0
    }
277
0
  } else {
278
0
    arg0 = nullptr;
279
0
  }
280
0
  self->SetOnerror(Constify(arg0));
281
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
282
0
283
0
  return true;
284
0
}
285
286
static const JSJitInfo onerror_getterinfo = {
287
  { (JSJitGetterOp)get_onerror },
288
  { prototypes::id::XMLHttpRequestEventTarget },
289
  { PrototypeTraits<prototypes::id::XMLHttpRequestEventTarget>::Depth },
290
  JSJitInfo::Getter,
291
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
292
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
293
  false,  /* isInfallible. False in setters. */
294
  false,  /* isMovable.  Not relevant for setters. */
295
  false, /* isEliminatable.  Not relevant for setters. */
296
  false, /* isAlwaysInSlot.  Only relevant for getters. */
297
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
298
  false,  /* isTypedMethod.  Only relevant for methods. */
299
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
300
};
301
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
302
static_assert(0 < 1, "There is no slot for us");
303
static const JSJitInfo onerror_setterinfo = {
304
  { (JSJitGetterOp)set_onerror },
305
  { prototypes::id::XMLHttpRequestEventTarget },
306
  { PrototypeTraits<prototypes::id::XMLHttpRequestEventTarget>::Depth },
307
  JSJitInfo::Setter,
308
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
309
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
310
  false,  /* isInfallible. False in setters. */
311
  false,  /* isMovable.  Not relevant for setters. */
312
  false, /* isEliminatable.  Not relevant for setters. */
313
  false, /* isAlwaysInSlot.  Only relevant for getters. */
314
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
315
  false,  /* isTypedMethod.  Only relevant for methods. */
316
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
317
};
318
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
319
static_assert(0 < 1, "There is no slot for us");
320
321
MOZ_CAN_RUN_SCRIPT static bool
322
get_onload(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::XMLHttpRequestEventTarget* self, JSJitGetterCallArgs args)
323
0
{
324
0
  AUTO_PROFILER_LABEL_FAST("get XMLHttpRequestEventTarget.onload", DOM, cx);
325
0
326
0
  RefPtr<EventHandlerNonNull> result(self->GetOnload());
327
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
328
0
  if (result) {
329
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
330
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
331
0
      return false;
332
0
    }
333
0
    return true;
334
0
  } else {
335
0
    args.rval().setNull();
336
0
    return true;
337
0
  }
338
0
}
339
340
MOZ_CAN_RUN_SCRIPT static bool
341
set_onload(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::XMLHttpRequestEventTarget* self, JSJitSetterCallArgs args)
342
0
{
343
0
  AUTO_PROFILER_LABEL_FAST("set XMLHttpRequestEventTarget.onload", DOM, cx);
344
0
345
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
346
0
  if (args[0].isObject()) {
347
0
    { // scope for tempRoot and tempGlobalRoot if needed
348
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
349
0
    }
350
0
  } else {
351
0
    arg0 = nullptr;
352
0
  }
353
0
  self->SetOnload(Constify(arg0));
354
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
355
0
356
0
  return true;
357
0
}
358
359
static const JSJitInfo onload_getterinfo = {
360
  { (JSJitGetterOp)get_onload },
361
  { prototypes::id::XMLHttpRequestEventTarget },
362
  { PrototypeTraits<prototypes::id::XMLHttpRequestEventTarget>::Depth },
363
  JSJitInfo::Getter,
364
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
365
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
366
  false,  /* isInfallible. False in setters. */
367
  false,  /* isMovable.  Not relevant for setters. */
368
  false, /* isEliminatable.  Not relevant for setters. */
369
  false, /* isAlwaysInSlot.  Only relevant for getters. */
370
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
371
  false,  /* isTypedMethod.  Only relevant for methods. */
372
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
373
};
374
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
375
static_assert(0 < 1, "There is no slot for us");
376
static const JSJitInfo onload_setterinfo = {
377
  { (JSJitGetterOp)set_onload },
378
  { prototypes::id::XMLHttpRequestEventTarget },
379
  { PrototypeTraits<prototypes::id::XMLHttpRequestEventTarget>::Depth },
380
  JSJitInfo::Setter,
381
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
382
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
383
  false,  /* isInfallible. False in setters. */
384
  false,  /* isMovable.  Not relevant for setters. */
385
  false, /* isEliminatable.  Not relevant for setters. */
386
  false, /* isAlwaysInSlot.  Only relevant for getters. */
387
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
388
  false,  /* isTypedMethod.  Only relevant for methods. */
389
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
390
};
391
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
392
static_assert(0 < 1, "There is no slot for us");
393
394
MOZ_CAN_RUN_SCRIPT static bool
395
get_ontimeout(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::XMLHttpRequestEventTarget* self, JSJitGetterCallArgs args)
396
0
{
397
0
  AUTO_PROFILER_LABEL_FAST("get XMLHttpRequestEventTarget.ontimeout", DOM, cx);
398
0
399
0
  RefPtr<EventHandlerNonNull> result(self->GetOntimeout());
400
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
401
0
  if (result) {
402
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
403
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
404
0
      return false;
405
0
    }
406
0
    return true;
407
0
  } else {
408
0
    args.rval().setNull();
409
0
    return true;
410
0
  }
411
0
}
412
413
MOZ_CAN_RUN_SCRIPT static bool
414
set_ontimeout(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::XMLHttpRequestEventTarget* self, JSJitSetterCallArgs args)
415
0
{
416
0
  AUTO_PROFILER_LABEL_FAST("set XMLHttpRequestEventTarget.ontimeout", DOM, cx);
417
0
418
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
419
0
  if (args[0].isObject()) {
420
0
    { // scope for tempRoot and tempGlobalRoot if needed
421
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
422
0
    }
423
0
  } else {
424
0
    arg0 = nullptr;
425
0
  }
426
0
  self->SetOntimeout(Constify(arg0));
427
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
428
0
429
0
  return true;
430
0
}
431
432
static const JSJitInfo ontimeout_getterinfo = {
433
  { (JSJitGetterOp)get_ontimeout },
434
  { prototypes::id::XMLHttpRequestEventTarget },
435
  { PrototypeTraits<prototypes::id::XMLHttpRequestEventTarget>::Depth },
436
  JSJitInfo::Getter,
437
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
438
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
439
  false,  /* isInfallible. False in setters. */
440
  false,  /* isMovable.  Not relevant for setters. */
441
  false, /* isEliminatable.  Not relevant for setters. */
442
  false, /* isAlwaysInSlot.  Only relevant for getters. */
443
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
444
  false,  /* isTypedMethod.  Only relevant for methods. */
445
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
446
};
447
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
448
static_assert(0 < 1, "There is no slot for us");
449
static const JSJitInfo ontimeout_setterinfo = {
450
  { (JSJitGetterOp)set_ontimeout },
451
  { prototypes::id::XMLHttpRequestEventTarget },
452
  { PrototypeTraits<prototypes::id::XMLHttpRequestEventTarget>::Depth },
453
  JSJitInfo::Setter,
454
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
455
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
456
  false,  /* isInfallible. False in setters. */
457
  false,  /* isMovable.  Not relevant for setters. */
458
  false, /* isEliminatable.  Not relevant for setters. */
459
  false, /* isAlwaysInSlot.  Only relevant for getters. */
460
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
461
  false,  /* isTypedMethod.  Only relevant for methods. */
462
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
463
};
464
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
465
static_assert(0 < 1, "There is no slot for us");
466
467
MOZ_CAN_RUN_SCRIPT static bool
468
get_onloadend(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::XMLHttpRequestEventTarget* self, JSJitGetterCallArgs args)
469
0
{
470
0
  AUTO_PROFILER_LABEL_FAST("get XMLHttpRequestEventTarget.onloadend", DOM, cx);
471
0
472
0
  RefPtr<EventHandlerNonNull> result(self->GetOnloadend());
473
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
474
0
  if (result) {
475
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
476
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
477
0
      return false;
478
0
    }
479
0
    return true;
480
0
  } else {
481
0
    args.rval().setNull();
482
0
    return true;
483
0
  }
484
0
}
485
486
MOZ_CAN_RUN_SCRIPT static bool
487
set_onloadend(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::XMLHttpRequestEventTarget* self, JSJitSetterCallArgs args)
488
0
{
489
0
  AUTO_PROFILER_LABEL_FAST("set XMLHttpRequestEventTarget.onloadend", DOM, cx);
490
0
491
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
492
0
  if (args[0].isObject()) {
493
0
    { // scope for tempRoot and tempGlobalRoot if needed
494
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
495
0
    }
496
0
  } else {
497
0
    arg0 = nullptr;
498
0
  }
499
0
  self->SetOnloadend(Constify(arg0));
500
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
501
0
502
0
  return true;
503
0
}
504
505
static const JSJitInfo onloadend_getterinfo = {
506
  { (JSJitGetterOp)get_onloadend },
507
  { prototypes::id::XMLHttpRequestEventTarget },
508
  { PrototypeTraits<prototypes::id::XMLHttpRequestEventTarget>::Depth },
509
  JSJitInfo::Getter,
510
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
511
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
512
  false,  /* isInfallible. False in setters. */
513
  false,  /* isMovable.  Not relevant for setters. */
514
  false, /* isEliminatable.  Not relevant for setters. */
515
  false, /* isAlwaysInSlot.  Only relevant for getters. */
516
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
517
  false,  /* isTypedMethod.  Only relevant for methods. */
518
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
519
};
520
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
521
static_assert(0 < 1, "There is no slot for us");
522
static const JSJitInfo onloadend_setterinfo = {
523
  { (JSJitGetterOp)set_onloadend },
524
  { prototypes::id::XMLHttpRequestEventTarget },
525
  { PrototypeTraits<prototypes::id::XMLHttpRequestEventTarget>::Depth },
526
  JSJitInfo::Setter,
527
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
528
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
529
  false,  /* isInfallible. False in setters. */
530
  false,  /* isMovable.  Not relevant for setters. */
531
  false, /* isEliminatable.  Not relevant for setters. */
532
  false, /* isAlwaysInSlot.  Only relevant for getters. */
533
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
534
  false,  /* isTypedMethod.  Only relevant for methods. */
535
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
536
};
537
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
538
static_assert(0 < 1, "There is no slot for us");
539
540
// We deliberately use brace-elision to make Visual Studio produce better initalization code.
541
#if defined(__clang__)
542
#pragma clang diagnostic push
543
#pragma clang diagnostic ignored "-Wmissing-braces"
544
#endif
545
static const JSPropertySpec sAttributes_specs[] = {
546
  { "onloadstart", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &onloadstart_getterinfo, GenericSetter<NormalThisPolicy>, &onloadstart_setterinfo },
547
  { "onprogress", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &onprogress_getterinfo, GenericSetter<NormalThisPolicy>, &onprogress_setterinfo },
548
  { "onabort", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &onabort_getterinfo, GenericSetter<NormalThisPolicy>, &onabort_setterinfo },
549
  { "onerror", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &onerror_getterinfo, GenericSetter<NormalThisPolicy>, &onerror_setterinfo },
550
  { "onload", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &onload_getterinfo, GenericSetter<NormalThisPolicy>, &onload_setterinfo },
551
  { "ontimeout", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &ontimeout_getterinfo, GenericSetter<NormalThisPolicy>, &ontimeout_setterinfo },
552
  { "onloadend", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &onloadend_getterinfo, GenericSetter<NormalThisPolicy>, &onloadend_setterinfo },
553
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
554
};
555
#if defined(__clang__)
556
#pragma clang diagnostic pop
557
#endif
558
559
560
static const Prefable<const JSPropertySpec> sAttributes[] = {
561
  { nullptr, &sAttributes_specs[0] },
562
  { nullptr, nullptr }
563
};
564
565
static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
566
    "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
567
static_assert(7 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
568
    "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
569
570
571
static uint16_t sNativeProperties_sortedPropertyIndices[7];
572
static PropertyInfo sNativeProperties_propertyInfos[7];
573
574
static const NativePropertiesN<1> sNativeProperties = {
575
  false, 0,
576
  false, 0,
577
  false, 0,
578
  true,  0 /* sAttributes */,
579
  false, 0,
580
  false, 0,
581
  false, 0,
582
  -1,
583
  7,
584
  sNativeProperties_sortedPropertyIndices,
585
  {
586
    { sAttributes, &sNativeProperties_propertyInfos[0] }
587
  }
588
};
589
static_assert(7 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
590
    "We have a property info count that is oversized");
591
592
static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
593
  {
594
    "Function",
595
    JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
596
    &sBoringInterfaceObjectClassClassOps,
597
    JS_NULL_CLASS_SPEC,
598
    JS_NULL_CLASS_EXT,
599
    &sInterfaceObjectClassObjectOps
600
  },
601
  eInterface,
602
  true,
603
  prototypes::id::XMLHttpRequestEventTarget,
604
  PrototypeTraits<prototypes::id::XMLHttpRequestEventTarget>::Depth,
605
  sNativePropertyHooks,
606
  "function XMLHttpRequestEventTarget() {\n    [native code]\n}",
607
  EventTarget_Binding::GetConstructorObject
608
};
609
610
static const DOMIfaceAndProtoJSClass sPrototypeClass = {
611
  {
612
    "XMLHttpRequestEventTargetPrototype",
613
    JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
614
    JS_NULL_CLASS_OPS,
615
    JS_NULL_CLASS_SPEC,
616
    JS_NULL_CLASS_EXT,
617
    JS_NULL_OBJECT_OPS
618
  },
619
  eInterfacePrototype,
620
  false,
621
  prototypes::id::XMLHttpRequestEventTarget,
622
  PrototypeTraits<prototypes::id::XMLHttpRequestEventTarget>::Depth,
623
  sNativePropertyHooks,
624
  "[object XMLHttpRequestEventTargetPrototype]",
625
  EventTarget_Binding::GetProtoObject
626
};
627
628
bool
629
ConstructorEnabled(JSContext* aCx, JS::Handle<JSObject*> aObj)
630
0
{
631
0
  if (!NS_IsMainThread()) {
632
0
    const char* name = js::GetObjectClass(aObj)->name;
633
0
    if (strcmp(name, "DedicatedWorkerGlobalScope") && strcmp(name, "SharedWorkerGlobalScope")) {
634
0
      return false;
635
0
    }
636
0
  }
637
0
638
0
  return true;
639
0
}
640
641
const NativePropertyHooks sNativePropertyHooks[] = { {
642
  nullptr,
643
  nullptr,
644
  nullptr,
645
  { sNativeProperties.Upcast(), nullptr },
646
  prototypes::id::XMLHttpRequestEventTarget,
647
  constructors::id::XMLHttpRequestEventTarget,
648
  EventTarget_Binding::sNativePropertyHooks,
649
  &DefaultXrayExpandoObjectClass
650
} };
651
652
void
653
CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
654
0
{
655
0
  JS::Handle<JSObject*> parentProto(EventTarget_Binding::GetProtoObjectHandle(aCx));
656
0
  if (!parentProto) {
657
0
    return;
658
0
  }
659
0
660
0
  JS::Handle<JSObject*> constructorProto(EventTarget_Binding::GetConstructorObjectHandle(aCx));
661
0
  if (!constructorProto) {
662
0
    return;
663
0
  }
664
0
665
0
  static bool sIdsInited = false;
666
0
  if (!sIdsInited && NS_IsMainThread()) {
667
0
    if (!InitIds(aCx, sNativeProperties.Upcast())) {
668
0
      return;
669
0
    }
670
0
    sIdsInited = true;
671
0
  }
672
0
673
0
  JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::XMLHttpRequestEventTarget);
674
0
  JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::XMLHttpRequestEventTarget);
675
0
  dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
676
0
                              &sPrototypeClass.mBase, protoCache,
677
0
                              nullptr,
678
0
                              constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
679
0
                              interfaceCache,
680
0
                              sNativeProperties.Upcast(),
681
0
                              nullptr,
682
0
                              "XMLHttpRequestEventTarget", aDefineOnGlobal,
683
0
                              nullptr,
684
0
                              false);
685
0
}
686
687
JSObject*
688
GetProtoObject(JSContext* aCx)
689
0
{
690
0
  return GetProtoObjectHandle(aCx);
691
0
}
692
693
JSObject*
694
GetConstructorObject(JSContext* aCx)
695
0
{
696
0
  return GetConstructorObjectHandle(aCx);
697
0
}
698
699
} // namespace XMLHttpRequestEventTarget_Binding
700
701
702
703
} // namespace dom
704
} // namespace mozilla