Coverage Report

Created: 2018-09-25 14:53

/work/obj-fuzz/dist/include/mozilla/dom/CallbackObject.h
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
3
/* This Source Code Form is subject to the terms of the Mozilla Public
4
 * License, v. 2.0. If a copy of the MPL was not distributed with this
5
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7
/**
8
 * A common base class for representing WebIDL callback function and
9
 * callback interface types in C++.
10
 *
11
 * This class implements common functionality like lifetime
12
 * management, initialization with the JS object, and setup of the
13
 * call environment.  Subclasses are responsible for providing methods
14
 * that do the call into JS as needed.
15
 */
16
17
#ifndef mozilla_dom_CallbackObject_h
18
#define mozilla_dom_CallbackObject_h
19
20
#include "nsISupports.h"
21
#include "nsISupportsImpl.h"
22
#include "nsCycleCollectionParticipant.h"
23
#include "js/Wrapper.h"
24
#include "mozilla/Assertions.h"
25
#include "mozilla/ErrorResult.h"
26
#include "mozilla/HoldDropJSObjects.h"
27
#include "mozilla/MemoryReporting.h"
28
#include "mozilla/OwningNonNull.h"
29
#include "mozilla/dom/ScriptSettings.h"
30
#include "nsWrapperCache.h"
31
#include "nsJSEnvironment.h"
32
#include "xpcpublic.h"
33
#include "jsapi.h"
34
#include "js/TracingAPI.h"
35
36
namespace mozilla {
37
namespace dom {
38
39
#define DOM_CALLBACKOBJECT_IID \
40
{ 0xbe74c190, 0x6d76, 0x4991, \
41
 { 0x84, 0xb9, 0x65, 0x06, 0x99, 0xe6, 0x93, 0x2b } }
42
43
class CallbackObject : public nsISupports
44
{
45
public:
46
  NS_DECLARE_STATIC_IID_ACCESSOR(DOM_CALLBACKOBJECT_IID)
47
48
  NS_DECL_CYCLE_COLLECTING_ISUPPORTS
49
  NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS(CallbackObject)
50
51
  // The caller may pass a global object which will act as an override for the
52
  // incumbent script settings object when the callback is invoked (overriding
53
  // the entry point computed from aCallback). If no override is required, the
54
  // caller should pass null.  |aCx| is used to capture the current
55
  // stack, which is later used as an async parent when the callback
56
  // is invoked.  aCx can be nullptr, in which case no stack is
57
  // captured.
58
  explicit CallbackObject(JSContext* aCx, JS::Handle<JSObject*> aCallback,
59
                          JS::Handle<JSObject*> aCallbackGlobal,
60
                          nsIGlobalObject* aIncumbentGlobal)
61
0
  {
62
0
    if (aCx && JS::ContextOptionsRef(aCx).asyncStack()) {
63
0
      JS::RootedObject stack(aCx);
64
0
      if (!JS::CaptureCurrentStack(aCx, &stack)) {
65
0
        JS_ClearPendingException(aCx);
66
0
      }
67
0
      Init(aCallback, aCallbackGlobal, stack, aIncumbentGlobal);
68
0
    } else {
69
0
      Init(aCallback, aCallbackGlobal, nullptr, aIncumbentGlobal);
70
0
    }
71
0
  }
72
73
  // Instead of capturing the current stack to use as an async parent when the
74
  // callback is invoked, the caller can use this overload to pass in a stack
75
  // for that purpose.
76
  explicit CallbackObject(JSObject* aCallback,
77
                          JSObject* aCallbackGlobal,
78
                          JSObject* aAsyncStack,
79
                          nsIGlobalObject* aIncumbentGlobal)
80
0
  {
81
0
    Init(aCallback, aCallbackGlobal, aAsyncStack, aIncumbentGlobal);
82
0
  }
83
84
  // This is guaranteed to be non-null from the time the CallbackObject is
85
  // created until JavaScript has had a chance to run. It will only return null
86
  // after a JavaScript caller has called nukeSandbox on a Sandbox object, and
87
  // the cycle collector has had a chance to run.
88
  //
89
  // This means that any native callee which receives a CallbackObject as an
90
  // argument can safely rely on the callback being non-null so long as it
91
  // doesn't trigger any scripts before it accesses it.
92
  JS::Handle<JSObject*> CallbackOrNull() const
93
0
  {
94
0
    mCallback.exposeToActiveJS();
95
0
    return CallbackPreserveColor();
96
0
  }
97
98
  JSObject* CallbackGlobalOrNull() const
99
0
  {
100
0
    mCallbackGlobal.exposeToActiveJS();
101
0
    return mCallbackGlobal;
102
0
  }
103
104
  // Like CallbackOrNull(), but will return a new dead proxy object in the
105
  // caller's realm if the callback is null.
106
  JSObject* Callback(JSContext* aCx);
107
108
  JSObject* GetCreationStack() const
109
0
  {
110
0
    return mCreationStack;
111
0
  }
112
113
  void MarkForCC()
114
0
  {
115
0
    mCallback.exposeToActiveJS();
116
0
    mCallbackGlobal.exposeToActiveJS();
117
0
    mCreationStack.exposeToActiveJS();
118
0
  }
119
120
  /*
121
   * This getter does not change the color of the JSObject meaning that the
122
   * object returned is not guaranteed to be kept alive past the next CC.
123
   *
124
   * This should only be called if you are certain that the return value won't
125
   * be passed into a JS API function and that it won't be stored without being
126
   * rooted (or otherwise signaling the stored value to the CC).
127
   */
128
  JS::Handle<JSObject*> CallbackPreserveColor() const
129
0
  {
130
0
    // Calling fromMarkedLocation() is safe because we trace our mCallback, and
131
0
    // because the value of mCallback cannot change after if has been set.
132
0
    return JS::Handle<JSObject*>::fromMarkedLocation(mCallback.address());
133
0
  }
134
135
  /*
136
   * If the callback is known to be non-gray, then this method can be
137
   * used instead of CallbackOrNull() to avoid the overhead of
138
   * ExposeObjectToActiveJS().
139
   */
140
  JS::Handle<JSObject*> CallbackKnownNotGray() const
141
0
  {
142
0
    MOZ_ASSERT(JS::ObjectIsNotGray(mCallback));
143
0
    return CallbackPreserveColor();
144
0
  }
145
146
  nsIGlobalObject* IncumbentGlobalOrNull() const
147
0
  {
148
0
    return mIncumbentGlobal;
149
0
  }
150
151
  enum ExceptionHandling {
152
    // Report any exception and don't throw it to the caller code.
153
    eReportExceptions,
154
    // Throw an exception to the caller code if the thrown exception is a
155
    // binding object for a DOMException from the caller's scope, otherwise
156
    // report it.
157
    eRethrowContentExceptions,
158
    // Throw exceptions to the caller code, unless the caller realm is
159
    // provided, the exception is not a DOMException from the caller
160
    // realm, and the caller realm does not subsume our unwrapped callback.
161
    eRethrowExceptions
162
  };
163
164
  size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const
165
0
  {
166
0
    return aMallocSizeOf(this);
167
0
  }
168
169
protected:
170
  virtual ~CallbackObject()
171
0
  {
172
0
    mozilla::DropJSObjects(this);
173
0
  }
174
175
  explicit CallbackObject(CallbackObject* aCallbackObject)
176
0
  {
177
0
    Init(aCallbackObject->mCallback, aCallbackObject->mCallbackGlobal,
178
0
         aCallbackObject->mCreationStack,
179
0
         aCallbackObject->mIncumbentGlobal);
180
0
  }
181
182
  bool operator==(const CallbackObject& aOther) const
183
0
  {
184
0
    JSObject* wrappedThis = CallbackPreserveColor();
185
0
    JSObject* wrappedOther = aOther.CallbackPreserveColor();
186
0
    if (!wrappedThis || !wrappedOther) {
187
0
      return this == &aOther;
188
0
    }
189
0
190
0
    JSObject* thisObj = js::UncheckedUnwrap(wrappedThis);
191
0
    JSObject* otherObj = js::UncheckedUnwrap(wrappedOther);
192
0
    return thisObj == otherObj;
193
0
  }
194
195
  class JSObjectsDropper final
196
  {
197
  public:
198
    explicit JSObjectsDropper(CallbackObject* aHolder)
199
      : mHolder(aHolder)
200
0
    {}
201
202
    ~JSObjectsDropper()
203
0
    {
204
0
      mHolder->ClearJSObjects();
205
0
    }
206
207
  private:
208
    RefPtr<CallbackObject> mHolder;
209
  };
210
211
private:
212
  inline void InitNoHold(JSObject* aCallback, JSObject* aCallbackGlobal,
213
                         JSObject* aCreationStack,
214
                         nsIGlobalObject* aIncumbentGlobal)
215
0
  {
216
0
    MOZ_ASSERT(aCallback && !mCallback);
217
0
    MOZ_ASSERT(aCallbackGlobal);
218
0
    MOZ_DIAGNOSTIC_ASSERT(js::GetObjectCompartment(aCallback) ==
219
0
                          js::GetObjectCompartment(aCallbackGlobal));
220
0
    MOZ_ASSERT(JS_IsGlobalObject(aCallbackGlobal));
221
0
    mCallback = aCallback;
222
0
    mCallbackGlobal = aCallbackGlobal;
223
0
    mCreationStack = aCreationStack;
224
0
    if (aIncumbentGlobal) {
225
0
      mIncumbentGlobal = aIncumbentGlobal;
226
0
      mIncumbentJSGlobal = aIncumbentGlobal->GetGlobalJSObject();
227
0
    }
228
0
  }
229
230
  inline void Init(JSObject* aCallback, JSObject* aCallbackGlobal,
231
                   JSObject* aCreationStack,
232
                   nsIGlobalObject* aIncumbentGlobal)
233
0
  {
234
0
    // Set script objects before we hold, on the off chance that a GC could
235
0
    // somehow happen in there... (which would be pretty odd, granted).
236
0
    InitNoHold(aCallback, aCallbackGlobal, aCreationStack, aIncumbentGlobal);
237
0
    mozilla::HoldJSObjects(this);
238
0
  }
239
240
  inline void ClearJSReferences()
241
0
  {
242
0
    mCallback = nullptr;
243
0
    mCallbackGlobal = nullptr;
244
0
    mCreationStack = nullptr;
245
0
    mIncumbentJSGlobal = nullptr;
246
0
  }
247
248
  CallbackObject(const CallbackObject&) = delete;
249
  CallbackObject& operator =(const CallbackObject&) = delete;
250
251
protected:
252
  void ClearJSObjects()
253
0
  {
254
0
    MOZ_ASSERT_IF(mIncumbentJSGlobal, mCallback);
255
0
    if (mCallback) {
256
0
      ClearJSReferences();
257
0
    }
258
0
  }
259
260
  // For use from subclasses that want to be usable with Rooted.
261
  void Trace(JSTracer* aTracer);
262
263
  // For use from subclasses that want to be traced for a bit then possibly
264
  // switch to HoldJSObjects and do other slow JS-related init work we might do.
265
  // If we have more than one owner, this will HoldJSObjects and do said slow
266
  // init work; otherwise it will just forget all our JS references.
267
  void FinishSlowJSInitIfMoreThanOneOwner(JSContext* aCx);
268
269
  // Struct used as a way to force a CallbackObject constructor to not call
270
  // HoldJSObjects. We're putting it here so that CallbackObject subclasses will
271
  // have access to it, but outside code will not.
272
  //
273
  // Places that use this need to ensure that the callback is traced (e.g. via a
274
  // Rooted) until the HoldJSObjects call happens.
275
  struct FastCallbackConstructor {
276
  };
277
278
  // Just like the public version without the FastCallbackConstructor argument,
279
  // except for not calling HoldJSObjects and not capturing async stacks (on the
280
  // assumption that we will do that last whenever we decide to actually
281
  // HoldJSObjects; see FinishSlowJSInitIfMoreThanOneOwner).  If you use this,
282
  // you MUST ensure that the object is traced until the HoldJSObjects happens!
283
  CallbackObject(JSObject* aCallback,
284
                 JSObject* aCallbackGlobal,
285
                 const FastCallbackConstructor&)
286
0
  {
287
0
    InitNoHold(aCallback, aCallbackGlobal, nullptr, nullptr);
288
0
  }
289
290
  // mCallback is not unwrapped, so it can be a cross-compartment-wrapper.
291
  // This is done to ensure that, if JS code can't call a callback f(), or get
292
  // its members, directly itself, this code won't call f(), or get its members,
293
  // on the code's behalf.
294
  JS::Heap<JSObject*> mCallback;
295
  // mCallbackGlobal is the global that we were in when we created the
296
  // callback. In particular, it is guaranteed to be same-compartment with
297
  // aCallback. We store it separately, because we have no way to recover the
298
  // global if mCallback is a cross-compartment wrapper.
299
  JS::Heap<JSObject*> mCallbackGlobal;
300
  JS::Heap<JSObject*> mCreationStack;
301
  // Ideally, we'd just hold a reference to the nsIGlobalObject, since that's
302
  // what we need to pass to AutoIncumbentScript. Unfortunately, that doesn't
303
  // hold the actual JS global alive. So we maintain an additional pointer to
304
  // the JS global itself so that we can trace it.
305
  //
306
  // At some point we should consider trying to make native globals hold their
307
  // scripted global alive, at which point we can get rid of the duplication
308
  // here.
309
  nsCOMPtr<nsIGlobalObject> mIncumbentGlobal;
310
  JS::TenuredHeap<JSObject*> mIncumbentJSGlobal;
311
312
  class MOZ_STACK_CLASS CallSetup
313
  {
314
    /**
315
     * A class that performs whatever setup we need to safely make a
316
     * call while this class is on the stack, After the constructor
317
     * returns, the call is safe to make if GetContext() returns
318
     * non-null.
319
     */
320
  public:
321
    // If aExceptionHandling == eRethrowContentExceptions then aRealm
322
    // needs to be set to the realm in which exceptions will be rethrown.
323
    //
324
    // If aExceptionHandling == eRethrowExceptions then aRealm may be set
325
    // to the realm in which exceptions will be rethrown.  In that case
326
    // they will only be rethrown if that realm's principal subsumes the
327
    // principal of our (unwrapped) callback.
328
    CallSetup(CallbackObject* aCallback, ErrorResult& aRv,
329
              const char* aExecutionReason,
330
              ExceptionHandling aExceptionHandling,
331
              JS::Realm* aRealm = nullptr,
332
              bool aIsJSImplementedWebIDL = false);
333
    ~CallSetup();
334
335
    JSContext* GetContext() const
336
0
    {
337
0
      return mCx;
338
0
    }
339
340
  private:
341
    // We better not get copy-constructed
342
    CallSetup(const CallSetup&) = delete;
343
344
    bool ShouldRethrowException(JS::Handle<JS::Value> aException);
345
346
    // Members which can go away whenever
347
    JSContext* mCx;
348
349
    // Caller's realm. This will only have a sensible value if
350
    // mExceptionHandling == eRethrowContentExceptions or eRethrowExceptions.
351
    JS::Realm* mRealm;
352
353
    // And now members whose construction/destruction order we need to control.
354
    Maybe<AutoEntryScript> mAutoEntryScript;
355
    Maybe<AutoIncumbentScript> mAutoIncumbentScript;
356
357
    Maybe<JS::Rooted<JSObject*>> mRootedCallable;
358
    // The global of mRootedCallable.
359
    Maybe<JS::Rooted<JSObject*>> mRootedCallableGlobal;
360
361
    // Members which are used to set the async stack.
362
    Maybe<JS::Rooted<JSObject*>> mAsyncStack;
363
    Maybe<JS::AutoSetAsyncStackForNewCalls> mAsyncStackSetter;
364
365
    // Can't construct a JSAutoRealm without a JSContext either.  Also,
366
    // Put mAr after mAutoEntryScript so that we exit the realm before we
367
    // pop the script settings stack. Though in practice we'll often manually
368
    // order those two things.
369
    Maybe<JSAutoRealm> mAr;
370
371
    // An ErrorResult to possibly re-throw exceptions on and whether
372
    // we should re-throw them.
373
    ErrorResult& mErrorResult;
374
    const ExceptionHandling mExceptionHandling;
375
    const bool mIsMainThread;
376
  };
377
};
378
379
template<class WebIDLCallbackT, class XPCOMCallbackT>
380
class CallbackObjectHolder;
381
382
template<class T, class U>
383
void ImplCycleCollectionUnlink(CallbackObjectHolder<T, U>& aField);
384
385
class CallbackObjectHolderBase
386
{
387
protected:
388
  // Returns null on all failures
389
  already_AddRefed<nsISupports> ToXPCOMCallback(CallbackObject* aCallback,
390
                                                const nsIID& aIID) const;
391
};
392
393
template<class WebIDLCallbackT, class XPCOMCallbackT>
394
class CallbackObjectHolder : CallbackObjectHolderBase
395
{
396
  /**
397
   * A class which stores either a WebIDLCallbackT* or an XPCOMCallbackT*.  Both
398
   * types must inherit from nsISupports.  The pointer that's stored can be
399
   * null.
400
   *
401
   * When storing a WebIDLCallbackT*, mPtrBits is set to the pointer value.
402
   * When storing an XPCOMCallbackT*, mPtrBits is the pointer value with low bit
403
   * set.
404
   */
405
public:
406
  explicit CallbackObjectHolder(WebIDLCallbackT* aCallback)
407
    : mPtrBits(reinterpret_cast<uintptr_t>(aCallback))
408
0
  {
409
0
    NS_IF_ADDREF(aCallback);
410
0
  }
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::MessageListener, nsISupports>::CallbackObjectHolder(mozilla::dom::MessageListener*)
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaSuccessCallback, nsIDOMGetUserMediaSuccessCallback>::CallbackObjectHolder(mozilla::dom::NavigatorUserMediaSuccessCallback*)
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaErrorCallback, nsIDOMGetUserMediaErrorCallback>::CallbackObjectHolder(mozilla::dom::NavigatorUserMediaErrorCallback*)
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::EventListener, nsIDOMEventListener>::CallbackObjectHolder(mozilla::dom::EventListener*)
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionCallback, nsIDOMGeoPositionCallback>::CallbackObjectHolder(mozilla::dom::PositionCallback*)
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionErrorCallback, nsIDOMGeoPositionErrorCallback>::CallbackObjectHolder(mozilla::dom::PositionErrorCallback*)
411
412
  explicit CallbackObjectHolder(XPCOMCallbackT* aCallback)
413
    : mPtrBits(reinterpret_cast<uintptr_t>(aCallback) | XPCOMCallbackFlag)
414
0
  {
415
0
    NS_IF_ADDREF(aCallback);
416
0
  }
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::EventListener, nsIDOMEventListener>::CallbackObjectHolder(nsIDOMEventListener*)
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionCallback, nsIDOMGeoPositionCallback>::CallbackObjectHolder(nsIDOMGeoPositionCallback*)
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionErrorCallback, nsIDOMGeoPositionErrorCallback>::CallbackObjectHolder(nsIDOMGeoPositionErrorCallback*)
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaSuccessCallback, nsIDOMGetUserMediaSuccessCallback>::CallbackObjectHolder(nsIDOMGetUserMediaSuccessCallback*)
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaErrorCallback, nsIDOMGetUserMediaErrorCallback>::CallbackObjectHolder(nsIDOMGetUserMediaErrorCallback*)
417
418
  CallbackObjectHolder(CallbackObjectHolder&& aOther)
419
    : mPtrBits(aOther.mPtrBits)
420
0
  {
421
0
    aOther.mPtrBits = 0;
422
0
    static_assert(sizeof(CallbackObjectHolder) == sizeof(void*),
423
0
                  "This object is expected to be as small as a pointer, and it "
424
0
                  "is currently passed by value in various places. If it is "
425
0
                  "bloating, we may want to pass it by reference then.");
426
0
  }
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::EventListener, nsIDOMEventListener>::CallbackObjectHolder(mozilla::dom::CallbackObjectHolder<mozilla::dom::EventListener, nsIDOMEventListener>&&)
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionCallback, nsIDOMGeoPositionCallback>::CallbackObjectHolder(mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionCallback, nsIDOMGeoPositionCallback>&&)
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionErrorCallback, nsIDOMGeoPositionErrorCallback>::CallbackObjectHolder(mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionErrorCallback, nsIDOMGeoPositionErrorCallback>&&)
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaSuccessCallback, nsIDOMGetUserMediaSuccessCallback>::CallbackObjectHolder(mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaSuccessCallback, nsIDOMGetUserMediaSuccessCallback>&&)
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaErrorCallback, nsIDOMGetUserMediaErrorCallback>::CallbackObjectHolder(mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaErrorCallback, nsIDOMGetUserMediaErrorCallback>&&)
427
428
  CallbackObjectHolder(const CallbackObjectHolder& aOther) = delete;
429
430
  CallbackObjectHolder()
431
    : mPtrBits(0)
432
0
  {}
433
434
  ~CallbackObjectHolder()
435
0
  {
436
0
    UnlinkSelf();
437
0
  }
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::MessageListener, nsISupports>::~CallbackObjectHolder()
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaSuccessCallback, nsIDOMGetUserMediaSuccessCallback>::~CallbackObjectHolder()
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaErrorCallback, nsIDOMGetUserMediaErrorCallback>::~CallbackObjectHolder()
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::EventListener, nsIDOMEventListener>::~CallbackObjectHolder()
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionCallback, nsIDOMGeoPositionCallback>::~CallbackObjectHolder()
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionErrorCallback, nsIDOMGeoPositionErrorCallback>::~CallbackObjectHolder()
438
439
  void operator=(WebIDLCallbackT* aCallback)
440
  {
441
    UnlinkSelf();
442
    mPtrBits = reinterpret_cast<uintptr_t>(aCallback);
443
    NS_IF_ADDREF(aCallback);
444
  }
445
446
  void operator=(XPCOMCallbackT* aCallback)
447
  {
448
    UnlinkSelf();
449
    mPtrBits = reinterpret_cast<uintptr_t>(aCallback) | XPCOMCallbackFlag;
450
    NS_IF_ADDREF(aCallback);
451
  }
452
453
  void operator=(CallbackObjectHolder&& aOther)
454
0
  {
455
0
    UnlinkSelf();
456
0
    mPtrBits = aOther.mPtrBits;
457
0
    aOther.mPtrBits = 0;
458
0
  }
459
460
  void operator=(const CallbackObjectHolder& aOther) = delete;
461
462
  void Reset()
463
0
  {
464
0
    UnlinkSelf();
465
0
  }
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaErrorCallback, nsIDOMGetUserMediaErrorCallback>::Reset()
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaSuccessCallback, nsIDOMGetUserMediaSuccessCallback>::Reset()
466
467
  nsISupports* GetISupports() const
468
0
  {
469
0
    return reinterpret_cast<nsISupports*>(mPtrBits & ~XPCOMCallbackFlag);
470
0
  }
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::EventListener, nsIDOMEventListener>::GetISupports() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::MessageListener, nsISupports>::GetISupports() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaSuccessCallback, nsIDOMGetUserMediaSuccessCallback>::GetISupports() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaErrorCallback, nsIDOMGetUserMediaErrorCallback>::GetISupports() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionCallback, nsIDOMGeoPositionCallback>::GetISupports() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionErrorCallback, nsIDOMGeoPositionErrorCallback>::GetISupports() const
471
472
  already_AddRefed<nsISupports> Forget()
473
0
  {
474
0
    // This can be called from random threads.  Make sure to not refcount things
475
0
    // in here!
476
0
    nsISupports* supp = GetISupports();
477
0
    mPtrBits = 0;
478
0
    return dont_AddRef(supp);
479
0
  }
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaErrorCallback, nsIDOMGetUserMediaErrorCallback>::Forget()
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaSuccessCallback, nsIDOMGetUserMediaSuccessCallback>::Forget()
480
481
  // Boolean conversion operator so people can use this in boolean tests
482
  explicit operator bool() const
483
0
  {
484
0
    return GetISupports();
485
0
  }
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::EventListener, nsIDOMEventListener>::operator bool() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionCallback, nsIDOMGeoPositionCallback>::operator bool() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionErrorCallback, nsIDOMGeoPositionErrorCallback>::operator bool() const
486
487
  CallbackObjectHolder Clone() const
488
0
  {
489
0
    CallbackObjectHolder result;
490
0
    result.mPtrBits = mPtrBits;
491
0
    NS_IF_ADDREF(GetISupports());
492
0
    return result;
493
0
  }
494
495
  // Even if HasWebIDLCallback returns true, GetWebIDLCallback() might still
496
  // return null.
497
  bool HasWebIDLCallback() const
498
0
  {
499
0
    return !(mPtrBits & XPCOMCallbackFlag);
500
0
  }
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::MessageListener, nsISupports>::HasWebIDLCallback() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::EventListener, nsIDOMEventListener>::HasWebIDLCallback() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionErrorCallback, nsIDOMGeoPositionErrorCallback>::HasWebIDLCallback() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionCallback, nsIDOMGeoPositionCallback>::HasWebIDLCallback() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaErrorCallback, nsIDOMGetUserMediaErrorCallback>::HasWebIDLCallback() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaSuccessCallback, nsIDOMGetUserMediaSuccessCallback>::HasWebIDLCallback() const
501
502
  WebIDLCallbackT* GetWebIDLCallback() const
503
0
  {
504
0
    MOZ_ASSERT(HasWebIDLCallback());
505
0
    return reinterpret_cast<WebIDLCallbackT*>(mPtrBits);
506
0
  }
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::MessageListener, nsISupports>::GetWebIDLCallback() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::EventListener, nsIDOMEventListener>::GetWebIDLCallback() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionErrorCallback, nsIDOMGeoPositionErrorCallback>::GetWebIDLCallback() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionCallback, nsIDOMGeoPositionCallback>::GetWebIDLCallback() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaErrorCallback, nsIDOMGetUserMediaErrorCallback>::GetWebIDLCallback() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaSuccessCallback, nsIDOMGetUserMediaSuccessCallback>::GetWebIDLCallback() const
507
508
  XPCOMCallbackT* GetXPCOMCallback() const
509
0
  {
510
0
    MOZ_ASSERT(!HasWebIDLCallback());
511
0
    return reinterpret_cast<XPCOMCallbackT*>(mPtrBits & ~XPCOMCallbackFlag);
512
0
  }
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::EventListener, nsIDOMEventListener>::GetXPCOMCallback() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::MessageListener, nsISupports>::GetXPCOMCallback() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionErrorCallback, nsIDOMGeoPositionErrorCallback>::GetXPCOMCallback() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionCallback, nsIDOMGeoPositionCallback>::GetXPCOMCallback() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaErrorCallback, nsIDOMGetUserMediaErrorCallback>::GetXPCOMCallback() const
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaSuccessCallback, nsIDOMGetUserMediaSuccessCallback>::GetXPCOMCallback() const
513
514
  bool operator==(WebIDLCallbackT* aOtherCallback) const
515
0
  {
516
0
    if (!aOtherCallback) {
517
0
      // If other is null, then we must be null to be equal.
518
0
      return !GetISupports();
519
0
    }
520
0
521
0
    if (!HasWebIDLCallback() || !GetWebIDLCallback()) {
522
0
      // If other is non-null, then we can't be equal if we have a
523
0
      // non-WebIDL callback or a null callback.
524
0
      return false;
525
0
    }
526
0
527
0
    return *GetWebIDLCallback() == *aOtherCallback;
528
0
  }
529
530
  bool operator==(XPCOMCallbackT* aOtherCallback) const
531
0
  {
532
0
    return (!aOtherCallback && !GetISupports()) ||
533
0
      (!HasWebIDLCallback() && GetXPCOMCallback() == aOtherCallback);
534
0
  }
535
536
  bool operator==(const CallbackObjectHolder& aOtherCallback) const
537
0
  {
538
0
    if (aOtherCallback.HasWebIDLCallback()) {
539
0
      return *this == aOtherCallback.GetWebIDLCallback();
540
0
    }
541
0
542
0
    return *this == aOtherCallback.GetXPCOMCallback();
543
0
  }
544
545
  // Try to return an XPCOMCallbackT version of this object.
546
  already_AddRefed<XPCOMCallbackT> ToXPCOMCallback() const
547
0
  {
548
0
    if (!HasWebIDLCallback()) {
549
0
      RefPtr<XPCOMCallbackT> callback = GetXPCOMCallback();
550
0
      return callback.forget();
551
0
    }
552
0
553
0
    nsCOMPtr<nsISupports> supp =
554
0
      CallbackObjectHolderBase::ToXPCOMCallback(GetWebIDLCallback(),
555
0
                                                NS_GET_TEMPLATE_IID(XPCOMCallbackT));
556
0
    if (supp) {
557
0
      // ToXPCOMCallback already did the right QI for us.
558
0
      return supp.forget().downcast<XPCOMCallbackT>();
559
0
    }
560
0
    return nullptr;
561
0
  }
562
563
  // Try to return a WebIDLCallbackT version of this object.
564
  already_AddRefed<WebIDLCallbackT> ToWebIDLCallback() const
565
  {
566
    if (HasWebIDLCallback()) {
567
      RefPtr<WebIDLCallbackT> callback = GetWebIDLCallback();
568
      return callback.forget();
569
    }
570
    return nullptr;
571
  }
572
573
private:
574
  static const uintptr_t XPCOMCallbackFlag = 1u;
575
576
  friend void
577
  ImplCycleCollectionUnlink<WebIDLCallbackT,
578
                            XPCOMCallbackT>(CallbackObjectHolder& aField);
579
580
  void UnlinkSelf()
581
0
  {
582
0
    // NS_IF_RELEASE because we might have been unlinked before
583
0
    nsISupports* ptr = GetISupports();
584
0
    NS_IF_RELEASE(ptr);
585
0
    mPtrBits = 0;
586
0
  }
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::EventListener, nsIDOMEventListener>::UnlinkSelf()
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::MessageListener, nsISupports>::UnlinkSelf()
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaSuccessCallback, nsIDOMGetUserMediaSuccessCallback>::UnlinkSelf()
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::NavigatorUserMediaErrorCallback, nsIDOMGetUserMediaErrorCallback>::UnlinkSelf()
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionCallback, nsIDOMGeoPositionCallback>::UnlinkSelf()
Unexecuted instantiation: mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionErrorCallback, nsIDOMGeoPositionErrorCallback>::UnlinkSelf()
587
588
  uintptr_t mPtrBits;
589
};
590
591
NS_DEFINE_STATIC_IID_ACCESSOR(CallbackObject, DOM_CALLBACKOBJECT_IID)
592
593
template<class T, class U>
594
inline void
595
ImplCycleCollectionTraverse(nsCycleCollectionTraversalCallback& aCallback,
596
                            CallbackObjectHolder<T, U>& aField,
597
                            const char* aName,
598
                            uint32_t aFlags = 0)
599
0
{
600
0
  if (aField) {
601
0
    CycleCollectionNoteChild(aCallback, aField.GetISupports(), aName, aFlags);
602
0
  }
603
0
}
Unexecuted instantiation: void mozilla::dom::ImplCycleCollectionTraverse<mozilla::dom::PositionCallback, nsIDOMGeoPositionCallback>(nsCycleCollectionTraversalCallback&, mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionCallback, nsIDOMGeoPositionCallback>&, char const*, unsigned int)
Unexecuted instantiation: void mozilla::dom::ImplCycleCollectionTraverse<mozilla::dom::PositionErrorCallback, nsIDOMGeoPositionErrorCallback>(nsCycleCollectionTraversalCallback&, mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionErrorCallback, nsIDOMGeoPositionErrorCallback>&, char const*, unsigned int)
604
605
template<class T, class U>
606
void
607
ImplCycleCollectionUnlink(CallbackObjectHolder<T, U>& aField)
608
0
{
609
0
  aField.UnlinkSelf();
610
0
}
Unexecuted instantiation: void mozilla::dom::ImplCycleCollectionUnlink<mozilla::dom::PositionCallback, nsIDOMGeoPositionCallback>(mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionCallback, nsIDOMGeoPositionCallback>&)
Unexecuted instantiation: void mozilla::dom::ImplCycleCollectionUnlink<mozilla::dom::PositionErrorCallback, nsIDOMGeoPositionErrorCallback>(mozilla::dom::CallbackObjectHolder<mozilla::dom::PositionErrorCallback, nsIDOMGeoPositionErrorCallback>&)
611
612
// T is expected to be a RefPtr or OwningNonNull around a CallbackObject
613
// subclass.  This class is used in bindings to safely handle Fast* callbacks;
614
// it ensures that the callback is traced, and that if something is holding onto
615
// the callback when we're done with it HoldJSObjects is called.
616
template<typename T>
617
class MOZ_RAII RootedCallback : public JS::Rooted<T>
618
{
619
public:
620
  explicit RootedCallback(JSContext* cx)
621
    : JS::Rooted<T>(cx)
622
    , mCx(cx)
623
0
  {}
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastEventHandlerNonNull> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastVoidFunction> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastEventListener> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMessageListener> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMozDocumentCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMutationCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastNavigatorUserMediaSuccessCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastNavigatorUserMediaErrorCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMozIdleObserver> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMozGetUserMediaDevicesSuccessCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastL10nCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPerformanceObserverCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPlacesEventCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastUncaughtRejectionObserver> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastmozPacketCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastRTCSessionDescriptionCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastRTCPeerConnectionErrorCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastRTCStatsCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPeerConnectionLifecycleCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastIdleRequestCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastU2FRegisterCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastU2FSignCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFrameRequestCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastWebGPULogCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastWebrtcGlobalStatisticsCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastWebrtcGlobalLoggingCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPromiseDocumentFlushedCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFunction> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastOnErrorEventHandlerNonNull> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastOnBeforeUnloadEventHandlerNonNull> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastAnyCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastXPathNSResolver> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastCustomElementCreationCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastFunctionStringCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastNodeFilter> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFileSystemEntriesCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFileCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFontFaceSetForEachCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPositionCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastPositionErrorCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastPrintCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastBlobCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastBrowserElementNextPaintEventCallback> >::RootedCallback(JSContext*)
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastIntersectionCallback> >::RootedCallback(JSContext*)
624
625
  // We need a way to make assignment from pointers (how we're normally used)
626
  // work.
627
  template<typename S>
628
  void operator=(S* arg)
629
0
  {
630
0
    this->get().operator=(arg);
631
0
  }
Unexecuted instantiation: void mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastEventHandlerNonNull> >::operator=<mozilla::dom::binding_detail::FastEventHandlerNonNull>(mozilla::dom::binding_detail::FastEventHandlerNonNull*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastVoidFunction> >::operator=<mozilla::dom::binding_detail::FastVoidFunction>(mozilla::dom::binding_detail::FastVoidFunction*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastEventListener> >::operator=<mozilla::dom::binding_detail::FastEventListener>(mozilla::dom::binding_detail::FastEventListener*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMessageListener> >::operator=<mozilla::dom::binding_detail::FastMessageListener>(mozilla::dom::binding_detail::FastMessageListener*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMozDocumentCallback> >::operator=<mozilla::dom::binding_detail::FastMozDocumentCallback>(mozilla::dom::binding_detail::FastMozDocumentCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMutationCallback> >::operator=<mozilla::dom::binding_detail::FastMutationCallback>(mozilla::dom::binding_detail::FastMutationCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastNavigatorUserMediaSuccessCallback> >::operator=<mozilla::dom::binding_detail::FastNavigatorUserMediaSuccessCallback>(mozilla::dom::binding_detail::FastNavigatorUserMediaSuccessCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastNavigatorUserMediaErrorCallback> >::operator=<mozilla::dom::binding_detail::FastNavigatorUserMediaErrorCallback>(mozilla::dom::binding_detail::FastNavigatorUserMediaErrorCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMozIdleObserver> >::operator=<mozilla::dom::binding_detail::FastMozIdleObserver>(mozilla::dom::binding_detail::FastMozIdleObserver*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMozGetUserMediaDevicesSuccessCallback> >::operator=<mozilla::dom::binding_detail::FastMozGetUserMediaDevicesSuccessCallback>(mozilla::dom::binding_detail::FastMozGetUserMediaDevicesSuccessCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastL10nCallback> >::operator=<mozilla::dom::binding_detail::FastL10nCallback>(mozilla::dom::binding_detail::FastL10nCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPerformanceObserverCallback> >::operator=<mozilla::dom::binding_detail::FastPerformanceObserverCallback>(mozilla::dom::binding_detail::FastPerformanceObserverCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPlacesEventCallback> >::operator=<mozilla::dom::binding_detail::FastPlacesEventCallback>(mozilla::dom::binding_detail::FastPlacesEventCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastUncaughtRejectionObserver> >::operator=<mozilla::dom::binding_detail::FastUncaughtRejectionObserver>(mozilla::dom::binding_detail::FastUncaughtRejectionObserver*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastmozPacketCallback> >::operator=<mozilla::dom::binding_detail::FastmozPacketCallback>(mozilla::dom::binding_detail::FastmozPacketCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastRTCSessionDescriptionCallback> >::operator=<mozilla::dom::binding_detail::FastRTCSessionDescriptionCallback>(mozilla::dom::binding_detail::FastRTCSessionDescriptionCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastRTCPeerConnectionErrorCallback> >::operator=<mozilla::dom::binding_detail::FastRTCPeerConnectionErrorCallback>(mozilla::dom::binding_detail::FastRTCPeerConnectionErrorCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastRTCStatsCallback> >::operator=<mozilla::dom::binding_detail::FastRTCStatsCallback>(mozilla::dom::binding_detail::FastRTCStatsCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPeerConnectionLifecycleCallback> >::operator=<mozilla::dom::binding_detail::FastPeerConnectionLifecycleCallback>(mozilla::dom::binding_detail::FastPeerConnectionLifecycleCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastIdleRequestCallback> >::operator=<mozilla::dom::binding_detail::FastIdleRequestCallback>(mozilla::dom::binding_detail::FastIdleRequestCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastU2FRegisterCallback> >::operator=<mozilla::dom::binding_detail::FastU2FRegisterCallback>(mozilla::dom::binding_detail::FastU2FRegisterCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastU2FSignCallback> >::operator=<mozilla::dom::binding_detail::FastU2FSignCallback>(mozilla::dom::binding_detail::FastU2FSignCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFrameRequestCallback> >::operator=<mozilla::dom::binding_detail::FastFrameRequestCallback>(mozilla::dom::binding_detail::FastFrameRequestCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastWebGPULogCallback> >::operator=<mozilla::dom::binding_detail::FastWebGPULogCallback>(mozilla::dom::binding_detail::FastWebGPULogCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastWebrtcGlobalStatisticsCallback> >::operator=<mozilla::dom::binding_detail::FastWebrtcGlobalStatisticsCallback>(mozilla::dom::binding_detail::FastWebrtcGlobalStatisticsCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastWebrtcGlobalLoggingCallback> >::operator=<mozilla::dom::binding_detail::FastWebrtcGlobalLoggingCallback>(mozilla::dom::binding_detail::FastWebrtcGlobalLoggingCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPromiseDocumentFlushedCallback> >::operator=<mozilla::dom::binding_detail::FastPromiseDocumentFlushedCallback>(mozilla::dom::binding_detail::FastPromiseDocumentFlushedCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFunction> >::operator=<mozilla::dom::binding_detail::FastFunction>(mozilla::dom::binding_detail::FastFunction*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastOnErrorEventHandlerNonNull> >::operator=<mozilla::dom::binding_detail::FastOnErrorEventHandlerNonNull>(mozilla::dom::binding_detail::FastOnErrorEventHandlerNonNull*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastOnBeforeUnloadEventHandlerNonNull> >::operator=<mozilla::dom::binding_detail::FastOnBeforeUnloadEventHandlerNonNull>(mozilla::dom::binding_detail::FastOnBeforeUnloadEventHandlerNonNull*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastAnyCallback> >::operator=<mozilla::dom::binding_detail::FastAnyCallback>(mozilla::dom::binding_detail::FastAnyCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastXPathNSResolver> >::operator=<mozilla::dom::binding_detail::FastXPathNSResolver>(mozilla::dom::binding_detail::FastXPathNSResolver*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastCustomElementCreationCallback> >::operator=<mozilla::dom::binding_detail::FastCustomElementCreationCallback>(mozilla::dom::binding_detail::FastCustomElementCreationCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastFunctionStringCallback> >::operator=<mozilla::dom::binding_detail::FastFunctionStringCallback>(mozilla::dom::binding_detail::FastFunctionStringCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastNodeFilter> >::operator=<mozilla::dom::binding_detail::FastNodeFilter>(mozilla::dom::binding_detail::FastNodeFilter*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFileSystemEntriesCallback> >::operator=<mozilla::dom::binding_detail::FastFileSystemEntriesCallback>(mozilla::dom::binding_detail::FastFileSystemEntriesCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFileCallback> >::operator=<mozilla::dom::binding_detail::FastFileCallback>(mozilla::dom::binding_detail::FastFileCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFontFaceSetForEachCallback> >::operator=<mozilla::dom::binding_detail::FastFontFaceSetForEachCallback>(mozilla::dom::binding_detail::FastFontFaceSetForEachCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPositionCallback> >::operator=<mozilla::dom::binding_detail::FastPositionCallback>(mozilla::dom::binding_detail::FastPositionCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastPositionErrorCallback> >::operator=<mozilla::dom::binding_detail::FastPositionErrorCallback>(mozilla::dom::binding_detail::FastPositionErrorCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastPrintCallback> >::operator=<mozilla::dom::binding_detail::FastPrintCallback>(mozilla::dom::binding_detail::FastPrintCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastBlobCallback> >::operator=<mozilla::dom::binding_detail::FastBlobCallback>(mozilla::dom::binding_detail::FastBlobCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastBrowserElementNextPaintEventCallback> >::operator=<mozilla::dom::binding_detail::FastBrowserElementNextPaintEventCallback>(mozilla::dom::binding_detail::FastBrowserElementNextPaintEventCallback*)
Unexecuted instantiation: void mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastIntersectionCallback> >::operator=<mozilla::dom::binding_detail::FastIntersectionCallback>(mozilla::dom::binding_detail::FastIntersectionCallback*)
632
633
  // But nullptr can't use the above template, because it doesn't know which S
634
  // to select.  So we need a special overload for nullptr.
635
  void operator=(decltype(nullptr) arg)
636
0
  {
637
0
    this->get().operator=(arg);
638
0
  }
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastEventHandlerNonNull> >::operator=(decltype(nullptr))
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastEventListener> >::operator=(decltype(nullptr))
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastOnErrorEventHandlerNonNull> >::operator=(decltype(nullptr))
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastOnBeforeUnloadEventHandlerNonNull> >::operator=(decltype(nullptr))
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastAnyCallback> >::operator=(decltype(nullptr))
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastXPathNSResolver> >::operator=(decltype(nullptr))
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastFunctionStringCallback> >::operator=(decltype(nullptr))
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastNodeFilter> >::operator=(decltype(nullptr))
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastPositionErrorCallback> >::operator=(decltype(nullptr))
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastPrintCallback> >::operator=(decltype(nullptr))
639
640
  // Codegen relies on being able to do CallbackOrNull() and Callback() on us.
641
  JS::Handle<JSObject*> CallbackOrNull() const
642
  {
643
    return this->get()->CallbackOrNull();
644
  }
645
646
  JSObject* Callback(JSContext* aCx) const
647
  {
648
    return this->get()->Callback(aCx);
649
  }
650
651
  ~RootedCallback()
652
0
  {
653
0
    // Ensure that our callback starts holding on to its own JS objects as
654
0
    // needed.  We really do need to check that things are initialized even when
655
0
    // T is OwningNonNull, because we might be running before the OwningNonNull
656
0
    // ever got assigned to!
657
0
    if (IsInitialized(this->get())) {
658
0
      this->get()->FinishSlowJSInitIfMoreThanOneOwner(mCx);
659
0
    }
660
0
  }
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastEventHandlerNonNull> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastVoidFunction> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastEventListener> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMessageListener> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMozDocumentCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMutationCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastNavigatorUserMediaErrorCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastNavigatorUserMediaSuccessCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMozIdleObserver> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMozGetUserMediaDevicesSuccessCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastL10nCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPerformanceObserverCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPlacesEventCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastUncaughtRejectionObserver> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastmozPacketCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastRTCPeerConnectionErrorCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastRTCSessionDescriptionCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastRTCStatsCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPeerConnectionLifecycleCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastIdleRequestCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastU2FRegisterCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastU2FSignCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFrameRequestCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastWebGPULogCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastWebrtcGlobalStatisticsCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastWebrtcGlobalLoggingCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPromiseDocumentFlushedCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFunction> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastOnErrorEventHandlerNonNull> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastOnBeforeUnloadEventHandlerNonNull> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastAnyCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastXPathNSResolver> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastCustomElementCreationCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastFunctionStringCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastNodeFilter> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFileSystemEntriesCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFileCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFontFaceSetForEachCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastPositionErrorCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPositionCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastPrintCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastBlobCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastBrowserElementNextPaintEventCallback> >::~RootedCallback()
Unexecuted instantiation: mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastIntersectionCallback> >::~RootedCallback()
661
662
private:
663
  template<typename U>
664
  static bool IsInitialized(U& aArg); // Not implemented
665
666
  template<typename U>
667
  static bool IsInitialized(RefPtr<U>& aRefPtr)
668
0
  {
669
0
    return aRefPtr;
670
0
  }
Unexecuted instantiation: bool mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastEventHandlerNonNull> >::IsInitialized<mozilla::dom::binding_detail::FastEventHandlerNonNull>(RefPtr<mozilla::dom::binding_detail::FastEventHandlerNonNull>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastEventListener> >::IsInitialized<mozilla::dom::binding_detail::FastEventListener>(RefPtr<mozilla::dom::binding_detail::FastEventListener>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastOnErrorEventHandlerNonNull> >::IsInitialized<mozilla::dom::binding_detail::FastOnErrorEventHandlerNonNull>(RefPtr<mozilla::dom::binding_detail::FastOnErrorEventHandlerNonNull>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastOnBeforeUnloadEventHandlerNonNull> >::IsInitialized<mozilla::dom::binding_detail::FastOnBeforeUnloadEventHandlerNonNull>(RefPtr<mozilla::dom::binding_detail::FastOnBeforeUnloadEventHandlerNonNull>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastAnyCallback> >::IsInitialized<mozilla::dom::binding_detail::FastAnyCallback>(RefPtr<mozilla::dom::binding_detail::FastAnyCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastXPathNSResolver> >::IsInitialized<mozilla::dom::binding_detail::FastXPathNSResolver>(RefPtr<mozilla::dom::binding_detail::FastXPathNSResolver>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastFunctionStringCallback> >::IsInitialized<mozilla::dom::binding_detail::FastFunctionStringCallback>(RefPtr<mozilla::dom::binding_detail::FastFunctionStringCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastNodeFilter> >::IsInitialized<mozilla::dom::binding_detail::FastNodeFilter>(RefPtr<mozilla::dom::binding_detail::FastNodeFilter>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastPositionErrorCallback> >::IsInitialized<mozilla::dom::binding_detail::FastPositionErrorCallback>(RefPtr<mozilla::dom::binding_detail::FastPositionErrorCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<RefPtr<mozilla::dom::binding_detail::FastPrintCallback> >::IsInitialized<mozilla::dom::binding_detail::FastPrintCallback>(RefPtr<mozilla::dom::binding_detail::FastPrintCallback>&)
671
672
  template<typename U>
673
  static bool IsInitialized(OwningNonNull<U>& aOwningNonNull)
674
0
  {
675
0
    return aOwningNonNull.isInitialized();
676
0
  }
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastVoidFunction> >::IsInitialized<mozilla::dom::binding_detail::FastVoidFunction>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastVoidFunction>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMessageListener> >::IsInitialized<mozilla::dom::binding_detail::FastMessageListener>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMessageListener>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMozDocumentCallback> >::IsInitialized<mozilla::dom::binding_detail::FastMozDocumentCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMozDocumentCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMutationCallback> >::IsInitialized<mozilla::dom::binding_detail::FastMutationCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMutationCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastNavigatorUserMediaErrorCallback> >::IsInitialized<mozilla::dom::binding_detail::FastNavigatorUserMediaErrorCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastNavigatorUserMediaErrorCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastNavigatorUserMediaSuccessCallback> >::IsInitialized<mozilla::dom::binding_detail::FastNavigatorUserMediaSuccessCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastNavigatorUserMediaSuccessCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMozIdleObserver> >::IsInitialized<mozilla::dom::binding_detail::FastMozIdleObserver>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMozIdleObserver>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMozGetUserMediaDevicesSuccessCallback> >::IsInitialized<mozilla::dom::binding_detail::FastMozGetUserMediaDevicesSuccessCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastMozGetUserMediaDevicesSuccessCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastL10nCallback> >::IsInitialized<mozilla::dom::binding_detail::FastL10nCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastL10nCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPerformanceObserverCallback> >::IsInitialized<mozilla::dom::binding_detail::FastPerformanceObserverCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPerformanceObserverCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPlacesEventCallback> >::IsInitialized<mozilla::dom::binding_detail::FastPlacesEventCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPlacesEventCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastUncaughtRejectionObserver> >::IsInitialized<mozilla::dom::binding_detail::FastUncaughtRejectionObserver>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastUncaughtRejectionObserver>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastmozPacketCallback> >::IsInitialized<mozilla::dom::binding_detail::FastmozPacketCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastmozPacketCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastRTCPeerConnectionErrorCallback> >::IsInitialized<mozilla::dom::binding_detail::FastRTCPeerConnectionErrorCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastRTCPeerConnectionErrorCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastRTCSessionDescriptionCallback> >::IsInitialized<mozilla::dom::binding_detail::FastRTCSessionDescriptionCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastRTCSessionDescriptionCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastRTCStatsCallback> >::IsInitialized<mozilla::dom::binding_detail::FastRTCStatsCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastRTCStatsCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPeerConnectionLifecycleCallback> >::IsInitialized<mozilla::dom::binding_detail::FastPeerConnectionLifecycleCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPeerConnectionLifecycleCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastIdleRequestCallback> >::IsInitialized<mozilla::dom::binding_detail::FastIdleRequestCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastIdleRequestCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastU2FRegisterCallback> >::IsInitialized<mozilla::dom::binding_detail::FastU2FRegisterCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastU2FRegisterCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastU2FSignCallback> >::IsInitialized<mozilla::dom::binding_detail::FastU2FSignCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastU2FSignCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFrameRequestCallback> >::IsInitialized<mozilla::dom::binding_detail::FastFrameRequestCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFrameRequestCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastWebGPULogCallback> >::IsInitialized<mozilla::dom::binding_detail::FastWebGPULogCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastWebGPULogCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastWebrtcGlobalStatisticsCallback> >::IsInitialized<mozilla::dom::binding_detail::FastWebrtcGlobalStatisticsCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastWebrtcGlobalStatisticsCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastWebrtcGlobalLoggingCallback> >::IsInitialized<mozilla::dom::binding_detail::FastWebrtcGlobalLoggingCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastWebrtcGlobalLoggingCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPromiseDocumentFlushedCallback> >::IsInitialized<mozilla::dom::binding_detail::FastPromiseDocumentFlushedCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPromiseDocumentFlushedCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFunction> >::IsInitialized<mozilla::dom::binding_detail::FastFunction>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFunction>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastCustomElementCreationCallback> >::IsInitialized<mozilla::dom::binding_detail::FastCustomElementCreationCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastCustomElementCreationCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFileSystemEntriesCallback> >::IsInitialized<mozilla::dom::binding_detail::FastFileSystemEntriesCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFileSystemEntriesCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFileCallback> >::IsInitialized<mozilla::dom::binding_detail::FastFileCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFileCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFontFaceSetForEachCallback> >::IsInitialized<mozilla::dom::binding_detail::FastFontFaceSetForEachCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastFontFaceSetForEachCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPositionCallback> >::IsInitialized<mozilla::dom::binding_detail::FastPositionCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastPositionCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastBlobCallback> >::IsInitialized<mozilla::dom::binding_detail::FastBlobCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastBlobCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastBrowserElementNextPaintEventCallback> >::IsInitialized<mozilla::dom::binding_detail::FastBrowserElementNextPaintEventCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastBrowserElementNextPaintEventCallback>&)
Unexecuted instantiation: bool mozilla::dom::RootedCallback<mozilla::OwningNonNull<mozilla::dom::binding_detail::FastIntersectionCallback> >::IsInitialized<mozilla::dom::binding_detail::FastIntersectionCallback>(mozilla::OwningNonNull<mozilla::dom::binding_detail::FastIntersectionCallback>&)
677
678
  JSContext* mCx;
679
};
680
681
} // namespace dom
682
} // namespace mozilla
683
684
#endif // mozilla_dom_CallbackObject_h