dom/promise/PromiseCallback.h

branch
TOR_BUG_9701
changeset 14
925c144e1f1f
equal deleted inserted replaced
-1:000000000000 0:9aac907b58b4
1 /* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
2 /* vim: set ts=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_PromiseCallback_h
8 #define mozilla_dom_PromiseCallback_h
9
10 #include "mozilla/dom/Promise.h"
11 #include "nsCycleCollectionParticipant.h"
12
13 namespace mozilla {
14 namespace dom {
15
16 // This is the base class for any PromiseCallback.
17 // It's a logical step in the promise chain of callbacks.
18 class PromiseCallback : public nsISupports
19 {
20 public:
21 NS_DECL_CYCLE_COLLECTING_ISUPPORTS
22 NS_DECL_CYCLE_COLLECTION_CLASS(PromiseCallback)
23
24 PromiseCallback();
25 virtual ~PromiseCallback();
26
27 virtual void Call(JS::Handle<JS::Value> aValue) = 0;
28
29 enum Task {
30 Resolve,
31 Reject
32 };
33
34 // This factory returns a PromiseCallback object with refcount of 0.
35 static PromiseCallback*
36 Factory(Promise* aNextPromise, JS::Handle<JSObject*> aObject,
37 AnyCallback* aCallback, Task aTask);
38 };
39
40 // WrapperPromiseCallback execs a JS Callback with a value, and then the return
41 // value is sent to the aNextPromise->ResolveFunction() or to
42 // aNextPromise->RejectFunction() if the JS Callback throws.
43 class WrapperPromiseCallback MOZ_FINAL : public PromiseCallback
44 {
45 public:
46 NS_DECL_ISUPPORTS_INHERITED
47 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(WrapperPromiseCallback,
48 PromiseCallback)
49
50 void Call(JS::Handle<JS::Value> aValue) MOZ_OVERRIDE;
51
52 WrapperPromiseCallback(Promise* aNextPromise, JS::Handle<JSObject*> aGlobal,
53 AnyCallback* aCallback);
54 ~WrapperPromiseCallback();
55
56 private:
57 nsRefPtr<Promise> mNextPromise;
58 JS::Heap<JSObject*> mGlobal;
59 nsRefPtr<AnyCallback> mCallback;
60 };
61
62 // ResolvePromiseCallback calls aPromise->ResolveFunction() with the value
63 // received by Call().
64 class ResolvePromiseCallback MOZ_FINAL : public PromiseCallback
65 {
66 public:
67 NS_DECL_ISUPPORTS_INHERITED
68 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(ResolvePromiseCallback,
69 PromiseCallback)
70
71 void Call(JS::Handle<JS::Value> aValue) MOZ_OVERRIDE;
72
73 ResolvePromiseCallback(Promise* aPromise, JS::Handle<JSObject*> aGlobal);
74 ~ResolvePromiseCallback();
75
76 private:
77 nsRefPtr<Promise> mPromise;
78 JS::Heap<JSObject*> mGlobal;
79 };
80
81 // RejectPromiseCallback calls aPromise->RejectFunction() with the value
82 // received by Call().
83 class RejectPromiseCallback MOZ_FINAL : public PromiseCallback
84 {
85 public:
86 NS_DECL_ISUPPORTS_INHERITED
87 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(RejectPromiseCallback,
88 PromiseCallback)
89
90 void Call(JS::Handle<JS::Value> aValue) MOZ_OVERRIDE;
91
92 RejectPromiseCallback(Promise* aPromise, JS::Handle<JSObject*> aGlobal);
93 ~RejectPromiseCallback();
94
95 private:
96 nsRefPtr<Promise> mPromise;
97 JS::Heap<JSObject*> mGlobal;
98 };
99
100 // NativePromiseCallback wraps a NativePromiseHandler.
101 class NativePromiseCallback MOZ_FINAL : public PromiseCallback
102 {
103 public:
104 NS_DECL_ISUPPORTS_INHERITED
105 NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(NativePromiseCallback,
106 PromiseCallback)
107
108 void Call(JS::Handle<JS::Value> aValue) MOZ_OVERRIDE;
109
110 NativePromiseCallback(PromiseNativeHandler* aHandler,
111 Promise::PromiseState aState);
112 ~NativePromiseCallback();
113
114 private:
115 nsRefPtr<PromiseNativeHandler> mHandler;
116 Promise::PromiseState mState;
117 };
118
119 } // namespace dom
120 } // namespace mozilla
121
122 #endif // mozilla_dom_PromiseCallback_h

mercurial