Coverage Report

Created: 2018-09-25 14:53

/work/obj-fuzz/dist/include/mozilla/dom/Promise.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 file,
5
 * You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7
#ifndef mozilla_dom_Promise_h
8
#define mozilla_dom_Promise_h
9
10
#include "mozilla/Attributes.h"
11
#include "mozilla/ErrorResult.h"
12
#include "mozilla/Move.h"
13
#include "mozilla/TimeStamp.h"
14
#include "mozilla/TypeTraits.h"
15
#include "mozilla/dom/BindingDeclarations.h"
16
#include "nsCycleCollectionParticipant.h"
17
#include "mozilla/dom/PromiseBinding.h"
18
#include "mozilla/dom/ToJSValue.h"
19
#include "mozilla/WeakPtr.h"
20
#include "nsWrapperCache.h"
21
#include "nsAutoPtr.h"
22
#include "js/TypeDecls.h"
23
#include "jspubtd.h"
24
25
class nsIGlobalObject;
26
27
namespace mozilla {
28
29
namespace dom {
30
31
class AnyCallback;
32
class MediaStreamError;
33
class PromiseInit;
34
class PromiseNativeHandler;
35
class PromiseDebugging;
36
37
#define NS_PROMISE_IID \
38
  { 0x1b8d6215, 0x3e67, 0x43ba, \
39
    { 0x8a, 0xf9, 0x31, 0x5e, 0x8f, 0xce, 0x75, 0x65 } }
40
41
class Promise : public nsISupports,
42
                public SupportsWeakPtr<Promise>
43
{
44
  friend class PromiseTask;
45
  friend class PromiseWorkerProxy;
46
  friend class PromiseWorkerProxyRunnable;
47
48
public:
49
  NS_DECLARE_STATIC_IID_ACCESSOR(NS_PROMISE_IID)
50
  NS_DECL_CYCLE_COLLECTING_ISUPPORTS_FINAL
51
  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Promise)
52
  MOZ_DECLARE_WEAKREFERENCE_TYPENAME(Promise)
53
54
  // Promise creation tries to create a JS reflector for the Promise, so is
55
  // fallible.  Furthermore, we don't want to do JS-wrapping on a 0-refcount
56
  // object, so we addref before doing that and return the addrefed pointer
57
  // here.
58
  static already_AddRefed<Promise>
59
  Create(nsIGlobalObject* aGlobal, ErrorResult& aRv);
60
61
  // Reports a rejected Promise by sending an error report.
62
  static void ReportRejectedPromise(JSContext* aCx, JS::HandleObject aPromise);
63
64
  typedef void (Promise::*MaybeFunc)(JSContext* aCx,
65
                                     JS::Handle<JS::Value> aValue);
66
67
  void MaybeResolve(JSContext* aCx,
68
                    JS::Handle<JS::Value> aValue);
69
  void MaybeReject(JSContext* aCx,
70
                   JS::Handle<JS::Value> aValue);
71
72
  // Helpers for using Promise from C++.
73
  // Most DOM objects are handled already.  To add a new type T, add a
74
  // ToJSValue overload in ToJSValue.h.
75
  // aArg is a const reference so we can pass rvalues like integer constants
76
  template <typename T>
77
0
  void MaybeResolve(T&& aArg) {
78
0
    MaybeSomething(std::forward<T>(aArg), &Promise::MaybeResolve);
79
0
  }
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<FallibleTArray<mozilla::dom::IOActivityDataDictionary>&>(FallibleTArray<mozilla::dom::IOActivityDataDictionary>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<JS::Handle<JS::Value>&>(JS::Handle<JS::Value>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::PrecompiledScript>&>(RefPtr<mozilla::dom::PrecompiledScript>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<nsTArray<nsTString<char16_t> >&>(nsTArray<nsTString<char16_t> >&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::VRMockDisplay>&>(RefPtr<mozilla::dom::VRMockDisplay>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<mozilla::dom::VRMockController*>(mozilla::dom::VRMockController*&&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<bool>(bool&&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<mozilla::dom::Animation*>(mozilla::dom::Animation*&&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<JS::Rooted<JS::Value>&>(JS::Rooted<JS::Value>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<JS::Handle<JS::Value> const&>(JS::Handle<JS::Value> const&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<JS::Heap<JS::Value>&>(JS::Heap<JS::Value>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::battery::BatteryManager>&>(RefPtr<mozilla::dom::battery::BatteryManager>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<nsTArray<RefPtr<mozilla::dom::VRDisplay> >&>(nsTArray<RefPtr<mozilla::dom::VRDisplay> >&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<JS::Rooted<JSObject*>&>(JS::Rooted<JSObject*>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<nsIDocument*>(nsIDocument*&&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::Promise>&>(RefPtr<mozilla::dom::Promise>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<bool const&>(bool const&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::cache::Cache>&>(RefPtr<mozilla::dom::cache::Cache>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<nsTArray<nsTString<char16_t> > const&>(nsTArray<nsTString<char16_t> > const&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::Response>&>(RefPtr<mozilla::dom::Response>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<AutoTArray<RefPtr<mozilla::dom::Response>, 256ul>&>(AutoTArray<RefPtr<mozilla::dom::Response>, 256ul>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<AutoTArray<RefPtr<mozilla::dom::Request>, 256ul>&>(AutoTArray<RefPtr<mozilla::dom::Request>, 256ul>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::Blob>&>(RefPtr<mozilla::dom::Blob>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::ImageBitmap>&>(RefPtr<mozilla::dom::ImageBitmap>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<nsTArray<mozilla::dom::ChannelPixelLayout>&>(nsTArray<mozilla::dom::ChannelPixelLayout>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::Client>&>(RefPtr<mozilla::dom::Client>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::Client> >(RefPtr<mozilla::dom::Client>&&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<nsTArray<RefPtr<mozilla::dom::Client> >&>(nsTArray<RefPtr<mozilla::dom::Client> >&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<mozilla::dom::TypedArrayCreator<mozilla::dom::TypedArray<unsigned char, &js::UnwrapArrayBuffer, &(JS_GetArrayBufferData(JSObject*, bool*, JS::AutoRequireNoGC const&)), &js::GetArrayBufferLengthAndData, &(JS_NewArrayBuffer(JSContext*, unsigned int))> >&>(mozilla::dom::TypedArrayCreator<mozilla::dom::TypedArray<unsigned char, &js::UnwrapArrayBuffer, &(JS_GetArrayBufferData(JSObject*, bool*, JS::AutoRequireNoGC const&)), &js::GetArrayBufferLengthAndData, &(JS_NewArrayBuffer(JSContext*, unsigned int))> >&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<bool&>(bool&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::CryptoKey>&>(RefPtr<mozilla::dom::CryptoKey>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<mozilla::dom::JsonWebKey&>(mozilla::dom::JsonWebKey&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<mozilla::dom::CryptoKeyPair&>(mozilla::dom::CryptoKeyPair&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::DataTransfer> const&>(RefPtr<mozilla::dom::DataTransfer> const&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<nsTAutoStringN<char16_t, 64ul>&>(nsTAutoStringN<char16_t, 64ul>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<mozilla::dom::Sequence<RefPtr<mozilla::dom::File> >&>(mozilla::dom::Sequence<RefPtr<mozilla::dom::File> >&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::FormData>&>(RefPtr<mozilla::dom::FormData>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<nsTString<char16_t>&>(nsTString<char16_t>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::File>&>(RefPtr<mozilla::dom::File>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<FallibleTArray<mozilla::dom::OwningFileOrDirectory>&>(FallibleTArray<mozilla::dom::OwningFileOrDirectory>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::Directory>&>(RefPtr<mozilla::dom::Directory>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<FallibleTArray<RefPtr<mozilla::dom::File> >&>(FallibleTArray<RefPtr<mozilla::dom::File> >&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<unsigned int const&>(unsigned int const&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<mozilla::dom::Sequence<mozilla::dom::OwningFileOrDirectory>&>(mozilla::dom::Sequence<mozilla::dom::OwningFileOrDirectory>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<nsTSubstringTuple<char16_t> const>(nsTSubstringTuple<char16_t> const&&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<nsTAutoStringN<char16_t, 64ul> const&>(nsTAutoStringN<char16_t, 64ul> const&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<NS_ConvertUTF8toUTF16>(NS_ConvertUTF8toUTF16&&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<int>(int&&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<unsigned int&>(unsigned int&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::DOMMediaStream>&>(RefPtr<mozilla::DOMMediaStream>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<nsTArray<RefPtr<mozilla::dom::MediaDeviceInfo> >&>(nsTArray<RefPtr<mozilla::dom::MediaDeviceInfo> >&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::MediaKeySystemAccess>&>(RefPtr<mozilla::dom::MediaKeySystemAccess>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::MediaKeySession>&>(RefPtr<mozilla::dom::MediaKeySession>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::MediaKeys>&>(RefPtr<mozilla::dom::MediaKeys>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<mozilla::dom::MediaKeyStatus&>(mozilla::dom::MediaKeyStatus&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<mozilla::UniquePtr<mozilla::dom::MediaCapabilitiesInfo, mozilla::DefaultDelete<mozilla::dom::MediaCapabilitiesInfo> > >(mozilla::UniquePtr<mozilla::dom::MediaCapabilitiesInfo, mozilla::DefaultDelete<mozilla::dom::MediaCapabilitiesInfo> >&&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<nsresult const&>(nsresult const&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<mozilla::dom::AudioBuffer*&>(mozilla::dom::AudioBuffer*&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::AudioBuffer>&>(RefPtr<mozilla::dom::AudioBuffer>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::RTCCertificate>&>(RefPtr<mozilla::dom::RTCCertificate>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<mozilla::dom::MIDIAccess*>(mozilla::dom::MIDIAccess*&&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<mozilla::dom::MIDIPort*>(mozilla::dom::MIDIPort*&&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<AutoTArray<RefPtr<mozilla::dom::Notification>, 5ul>&>(AutoTArray<RefPtr<mozilla::dom::Notification>, 5ul>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<mozilla::dom::NotificationPermission&>(mozilla::dom::NotificationPermission&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<mozilla::dom::PushPermissionState&>(mozilla::dom::PushPermissionState&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::PushSubscription>&>(RefPtr<mozilla::dom::PushSubscription>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<mozilla::dom::StorageEstimate&>(mozilla::dom::StorageEstimate&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::PermissionStatus>&>(RefPtr<mozilla::dom::PermissionStatus>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::PublicKeyCredential>&>(RefPtr<mozilla::dom::PublicKeyCredential>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::PaymentResponse>&>(RefPtr<mozilla::dom::PaymentResponse>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::ServiceWorkerRegistration>&>(RefPtr<mozilla::dom::ServiceWorkerRegistration>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<nsTArray<RefPtr<mozilla::dom::ServiceWorkerRegistration> >&>(nsTArray<RefPtr<mozilla::dom::ServiceWorkerRegistration> >&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::ServiceWorkerRegistration> const&>(RefPtr<mozilla::dom::ServiceWorkerRegistration> const&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<mozilla::dom::PresentationAvailability*>(mozilla::dom::PresentationAvailability*&&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::PresentationConnection>&>(RefPtr<mozilla::dom::PresentationConnection>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<mozilla::dom::PresentationConnectionList*>(mozilla::dom::PresentationConnectionList*&&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::dom::PresentationAvailability>&>(RefPtr<mozilla::dom::PresentationAvailability>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<mozilla::dom::FontFace*>(mozilla::dom::FontFace*&&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<mozilla::dom::FontFaceSet*>(mozilla::dom::FontFaceSet*&&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<RefPtr<mozilla::PreloadedStyleSheet>&>(RefPtr<mozilla::PreloadedStyleSheet>&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<nsTArray<unsigned char> const&>(nsTArray<unsigned char> const&)
Unexecuted instantiation: void mozilla::dom::Promise::MaybeResolve<FallibleTArray<mozilla::dom::PerformanceInfoDictionary>&>(FallibleTArray<mozilla::dom::PerformanceInfoDictionary>&)
80
81
  void MaybeResolveWithUndefined();
82
83
0
  inline void MaybeReject(nsresult aArg) {
84
0
    MOZ_ASSERT(NS_FAILED(aArg));
85
0
    MaybeSomething(aArg, &Promise::MaybeReject);
86
0
  }
87
88
0
  inline void MaybeReject(ErrorResult& aArg) {
89
0
    MOZ_ASSERT(aArg.Failed());
90
0
    MaybeSomething(aArg, &Promise::MaybeReject);
91
0
  }
92
93
  void MaybeReject(const RefPtr<MediaStreamError>& aArg);
94
95
  void MaybeRejectWithUndefined();
96
97
  // DO NOT USE MaybeRejectBrokenly with in new code.  Promises should be
98
  // rejected with Error instances.
99
  // Note: MaybeRejectBrokenly is a template so we can use it with DOMException
100
  // without instantiating the DOMException specialization of MaybeSomething in
101
  // every translation unit that includes this header, because that would
102
  // require use to include DOMException.h either here or in all those
103
  // translation units.
104
  template<typename T>
105
  void MaybeRejectBrokenly(const T& aArg); // Not implemented by default; see
106
                                           // specializations in the .cpp for
107
                                           // the T values we support.
108
109
  // WebIDL
110
111
  nsIGlobalObject* GetParentObject() const
112
0
  {
113
0
    return mGlobal;
114
0
  }
115
116
  // Do the equivalent of Promise.resolve in the compartment of aGlobal.  The
117
  // compartment of aCx is ignored.  Errors are reported on the ErrorResult; if
118
  // aRv comes back !Failed(), this function MUST return a non-null value.
119
  static already_AddRefed<Promise>
120
  Resolve(nsIGlobalObject* aGlobal, JSContext* aCx,
121
          JS::Handle<JS::Value> aValue, ErrorResult& aRv);
122
123
  // Do the equivalent of Promise.reject in the compartment of aGlobal.  The
124
  // compartment of aCx is ignored.  Errors are reported on the ErrorResult; if
125
  // aRv comes back !Failed(), this function MUST return a non-null value.
126
  static already_AddRefed<Promise>
127
  Reject(nsIGlobalObject* aGlobal, JSContext* aCx,
128
         JS::Handle<JS::Value> aValue, ErrorResult& aRv);
129
130
  // Do the equivalent of Promise.all in the current compartment of aCx.  Errors
131
  // are reported on the ErrorResult; if aRv comes back !Failed(), this function
132
  // MUST return a non-null value.
133
  static already_AddRefed<Promise>
134
  All(JSContext* aCx, const nsTArray<RefPtr<Promise>>& aPromiseList,
135
      ErrorResult& aRv);
136
137
  void
138
  Then(JSContext* aCx,
139
       // aCalleeGlobal may not be in the compartment of aCx, when called over
140
       // Xrays.
141
       JS::Handle<JSObject*> aCalleeGlobal,
142
       AnyCallback* aResolveCallback, AnyCallback* aRejectCallback,
143
       JS::MutableHandle<JS::Value> aRetval,
144
       ErrorResult& aRv);
145
146
  template <typename Callback, typename... Args>
147
  using IsHandlerCallback =
148
      IsSame<already_AddRefed<Promise>,
149
             decltype(DeclVal<Callback>()(
150
                (JSContext*)(nullptr),
151
                DeclVal<JS::Handle<JS::Value>>(),
152
                DeclVal<Args>()...))>;
153
154
  template <typename Callback, typename... Args>
155
  using ThenResult = typename EnableIf<
156
    IsHandlerCallback<Callback, Args...>::value,
157
    Result<RefPtr<Promise>, nsresult>>::Type;
158
159
  // Similar to the JavaScript Then() function. Accepts a single lambda function
160
  // argument, which it attaches as a native resolution handler, and returns a
161
  // new promise which resolves with that handler's return value, or propagates
162
  // any rejections from this promise.
163
  //
164
  // Any additional arguments passed after the callback function are stored and
165
  // passed as additional arguments to the function when it is called. These
166
  // values will participate in cycle collection for the promise handler, and
167
  // therefore may safely form reference cycles with the promise chain.
168
  //
169
  // Any strong references required by the callback should be passed in this
170
  // manner, rather than using lambda capture, lambda captures do not support
171
  // cycle collection, and can easily lead to leaks.
172
  //
173
  // Does not currently support rejection handlers.
174
  template <typename Callback, typename... Args>
175
  ThenResult<Callback, Args...>
176
  ThenWithCycleCollectedArgs(Callback&& aOnResolve, Args&&... aArgs);
177
178
  Result<RefPtr<Promise>, nsresult>
179
  ThenWithoutCycleCollection(
180
    const std::function<already_AddRefed<Promise>(JSContext*,
181
                                                  JS::HandleValue)>& aCallback);
182
183
  JSObject* PromiseObj() const
184
0
  {
185
0
    return mPromiseObj;
186
0
  }
187
188
  void AppendNativeHandler(PromiseNativeHandler* aRunnable);
189
190
  JSObject* GlobalJSObject() const;
191
192
  JS::Compartment* Compartment() const;
193
194
  // Create a dom::Promise from a given SpiderMonkey Promise object.
195
  // aPromiseObj MUST be in the compartment of aGlobal's global JS object.
196
  static already_AddRefed<Promise>
197
  CreateFromExisting(nsIGlobalObject* aGlobal,
198
                     JS::Handle<JSObject*> aPromiseObj);
199
200
  enum class PromiseState {
201
    Pending,
202
    Resolved,
203
    Rejected
204
  };
205
206
  PromiseState State() const;
207
208
protected:
209
  struct PromiseCapability;
210
211
  // Do NOT call this unless you're Promise::Create or
212
  // Promise::CreateFromExisting.  I wish we could enforce that from inside this
213
  // class too, somehow.
214
  explicit Promise(nsIGlobalObject* aGlobal);
215
216
  virtual ~Promise();
217
218
  // Do JS-wrapping after Promise creation.  Passing null for aDesiredProto will
219
  // use the default prototype for the sort of Promise we have.
220
  void CreateWrapper(JS::Handle<JSObject*> aDesiredProto, ErrorResult& aRv);
221
222
private:
223
  template <typename T>
224
0
  void MaybeSomething(T&& aArgument, MaybeFunc aFunc) {
225
0
    MOZ_ASSERT(PromiseObj()); // It was preserved!
226
0
227
0
    AutoEntryScript aes(mGlobal, "Promise resolution or rejection");
228
0
    JSContext* cx = aes.cx();
229
0
230
0
    JS::Rooted<JS::Value> val(cx);
231
0
    if (!ToJSValue(cx, std::forward<T>(aArgument), &val)) {
232
0
      HandleException(cx);
233
0
      return;
234
0
    }
235
0
236
0
    (this->*aFunc)(cx, val);
237
0
  }
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<nsresult&>(nsresult&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<mozilla::ErrorResult&>(mozilla::ErrorResult&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<FallibleTArray<mozilla::dom::IOActivityDataDictionary>&>(FallibleTArray<mozilla::dom::IOActivityDataDictionary>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<JS::Handle<JS::Value>&>(JS::Handle<JS::Value>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::PrecompiledScript>&>(RefPtr<mozilla::dom::PrecompiledScript>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<nsTArray<nsTString<char16_t> >&>(nsTArray<nsTString<char16_t> >&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::VRMockDisplay>&>(RefPtr<mozilla::dom::VRMockDisplay>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<mozilla::dom::VRMockController*>(mozilla::dom::VRMockController*&&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<bool>(bool&&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<mozilla::dom::Animation*>(mozilla::dom::Animation*&&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<JS::Rooted<JS::Value>&>(JS::Rooted<JS::Value>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<JS::Handle<JS::Value> const&>(JS::Handle<JS::Value> const&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<JS::Heap<JS::Value>&>(JS::Heap<JS::Value>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::battery::BatteryManager>&>(RefPtr<mozilla::dom::battery::BatteryManager>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<nsTArray<RefPtr<mozilla::dom::VRDisplay> >&>(nsTArray<RefPtr<mozilla::dom::VRDisplay> >&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<JS::Rooted<JSObject*>&>(JS::Rooted<JSObject*>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<nsIDocument*>(nsIDocument*&&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::Promise>&>(RefPtr<mozilla::dom::Promise>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<bool const&>(bool const&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::cache::Cache>&>(RefPtr<mozilla::dom::cache::Cache>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<nsTArray<nsTString<char16_t> > const&>(nsTArray<nsTString<char16_t> > const&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::Response>&>(RefPtr<mozilla::dom::Response>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<AutoTArray<RefPtr<mozilla::dom::Response>, 256ul>&>(AutoTArray<RefPtr<mozilla::dom::Response>, 256ul>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<AutoTArray<RefPtr<mozilla::dom::Request>, 256ul>&>(AutoTArray<RefPtr<mozilla::dom::Request>, 256ul>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::Blob>&>(RefPtr<mozilla::dom::Blob>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::ImageBitmap>&>(RefPtr<mozilla::dom::ImageBitmap>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<nsTArray<mozilla::dom::ChannelPixelLayout>&>(nsTArray<mozilla::dom::ChannelPixelLayout>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::Client>&>(RefPtr<mozilla::dom::Client>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::Client> >(RefPtr<mozilla::dom::Client>&&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<nsTArray<RefPtr<mozilla::dom::Client> >&>(nsTArray<RefPtr<mozilla::dom::Client> >&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<mozilla::dom::TypedArrayCreator<mozilla::dom::TypedArray<unsigned char, &js::UnwrapArrayBuffer, &(JS_GetArrayBufferData(JSObject*, bool*, JS::AutoRequireNoGC const&)), &js::GetArrayBufferLengthAndData, &(JS_NewArrayBuffer(JSContext*, unsigned int))> >&>(mozilla::dom::TypedArrayCreator<mozilla::dom::TypedArray<unsigned char, &js::UnwrapArrayBuffer, &(JS_GetArrayBufferData(JSObject*, bool*, JS::AutoRequireNoGC const&)), &js::GetArrayBufferLengthAndData, &(JS_NewArrayBuffer(JSContext*, unsigned int))> >&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<bool&>(bool&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::CryptoKey>&>(RefPtr<mozilla::dom::CryptoKey>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<mozilla::dom::JsonWebKey&>(mozilla::dom::JsonWebKey&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<mozilla::dom::CryptoKeyPair&>(mozilla::dom::CryptoKeyPair&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::DataTransfer> const&>(RefPtr<mozilla::dom::DataTransfer> const&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<nsTAutoStringN<char16_t, 64ul>&>(nsTAutoStringN<char16_t, 64ul>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<mozilla::dom::Sequence<RefPtr<mozilla::dom::File> >&>(mozilla::dom::Sequence<RefPtr<mozilla::dom::File> >&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::FormData>&>(RefPtr<mozilla::dom::FormData>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<nsTString<char16_t>&>(nsTString<char16_t>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::File>&>(RefPtr<mozilla::dom::File>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<FallibleTArray<mozilla::dom::OwningFileOrDirectory>&>(FallibleTArray<mozilla::dom::OwningFileOrDirectory>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::Directory>&>(RefPtr<mozilla::dom::Directory>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<FallibleTArray<RefPtr<mozilla::dom::File> >&>(FallibleTArray<RefPtr<mozilla::dom::File> >&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<unsigned int const&>(unsigned int const&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<mozilla::dom::Sequence<mozilla::dom::OwningFileOrDirectory>&>(mozilla::dom::Sequence<mozilla::dom::OwningFileOrDirectory>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<nsTSubstringTuple<char16_t> const>(nsTSubstringTuple<char16_t> const&&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<nsTAutoStringN<char16_t, 64ul> const&>(nsTAutoStringN<char16_t, 64ul> const&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<NS_ConvertUTF8toUTF16>(NS_ConvertUTF8toUTF16&&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<int>(int&&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<unsigned int&>(unsigned int&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::DOMMediaStream>&>(RefPtr<mozilla::DOMMediaStream>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<nsTArray<RefPtr<mozilla::dom::MediaDeviceInfo> >&>(nsTArray<RefPtr<mozilla::dom::MediaDeviceInfo> >&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::MediaKeySystemAccess>&>(RefPtr<mozilla::dom::MediaKeySystemAccess>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::MediaKeySession>&>(RefPtr<mozilla::dom::MediaKeySession>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::MediaKeys>&>(RefPtr<mozilla::dom::MediaKeys>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<mozilla::dom::MediaKeyStatus&>(mozilla::dom::MediaKeyStatus&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<mozilla::UniquePtr<mozilla::dom::MediaCapabilitiesInfo, mozilla::DefaultDelete<mozilla::dom::MediaCapabilitiesInfo> > >(mozilla::UniquePtr<mozilla::dom::MediaCapabilitiesInfo, mozilla::DefaultDelete<mozilla::dom::MediaCapabilitiesInfo> >&&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<nsresult const&>(nsresult const&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<mozilla::dom::AudioBuffer*&>(mozilla::dom::AudioBuffer*&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::AudioBuffer>&>(RefPtr<mozilla::dom::AudioBuffer>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::RTCCertificate>&>(RefPtr<mozilla::dom::RTCCertificate>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<mozilla::dom::MIDIAccess*>(mozilla::dom::MIDIAccess*&&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<mozilla::dom::MIDIPort*>(mozilla::dom::MIDIPort*&&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<AutoTArray<RefPtr<mozilla::dom::Notification>, 5ul>&>(AutoTArray<RefPtr<mozilla::dom::Notification>, 5ul>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<mozilla::dom::NotificationPermission&>(mozilla::dom::NotificationPermission&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<mozilla::dom::PushPermissionState&>(mozilla::dom::PushPermissionState&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::PushSubscription>&>(RefPtr<mozilla::dom::PushSubscription>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<mozilla::dom::StorageEstimate&>(mozilla::dom::StorageEstimate&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::PermissionStatus>&>(RefPtr<mozilla::dom::PermissionStatus>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::MediaStreamError> const&>(RefPtr<mozilla::dom::MediaStreamError> const&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::DOMException> const&>(RefPtr<mozilla::dom::DOMException> const&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<nsTSubstring<char16_t> const&>(nsTSubstring<char16_t> const&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::PublicKeyCredential>&>(RefPtr<mozilla::dom::PublicKeyCredential>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::PaymentResponse>&>(RefPtr<mozilla::dom::PaymentResponse>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::ServiceWorkerRegistration>&>(RefPtr<mozilla::dom::ServiceWorkerRegistration>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<nsTArray<RefPtr<mozilla::dom::ServiceWorkerRegistration> >&>(nsTArray<RefPtr<mozilla::dom::ServiceWorkerRegistration> >&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::ServiceWorkerRegistration> const&>(RefPtr<mozilla::dom::ServiceWorkerRegistration> const&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<mozilla::dom::PresentationAvailability*>(mozilla::dom::PresentationAvailability*&&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::PresentationConnection>&>(RefPtr<mozilla::dom::PresentationConnection>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<mozilla::dom::PresentationConnectionList*>(mozilla::dom::PresentationConnectionList*&&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::dom::PresentationAvailability>&>(RefPtr<mozilla::dom::PresentationAvailability>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<mozilla::dom::FontFace*>(mozilla::dom::FontFace*&&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<mozilla::dom::FontFaceSet*>(mozilla::dom::FontFaceSet*&&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<RefPtr<mozilla::PreloadedStyleSheet>&>(RefPtr<mozilla::PreloadedStyleSheet>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<nsTArray<unsigned char> const&>(nsTArray<unsigned char> const&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
Unexecuted instantiation: void mozilla::dom::Promise::MaybeSomething<FallibleTArray<mozilla::dom::PerformanceInfoDictionary>&>(FallibleTArray<mozilla::dom::PerformanceInfoDictionary>&, void (mozilla::dom::Promise::*)(JSContext*, JS::Handle<JS::Value>))
238
239
  void HandleException(JSContext* aCx);
240
241
  RefPtr<nsIGlobalObject> mGlobal;
242
243
  JS::Heap<JSObject*> mPromiseObj;
244
};
245
246
NS_DEFINE_STATIC_IID_ACCESSOR(Promise, NS_PROMISE_IID)
247
248
} // namespace dom
249
} // namespace mozilla
250
251
#endif // mozilla_dom_Promise_h