dom/promise/PromiseCallback.h

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     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/. */
     7 #ifndef mozilla_dom_PromiseCallback_h
     8 #define mozilla_dom_PromiseCallback_h
    10 #include "mozilla/dom/Promise.h"
    11 #include "nsCycleCollectionParticipant.h"
    13 namespace mozilla {
    14 namespace dom {
    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)
    24   PromiseCallback();
    25   virtual ~PromiseCallback();
    27   virtual void Call(JS::Handle<JS::Value> aValue) = 0;
    29   enum Task {
    30     Resolve,
    31     Reject
    32   };
    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 };
    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)
    50   void Call(JS::Handle<JS::Value> aValue) MOZ_OVERRIDE;
    52   WrapperPromiseCallback(Promise* aNextPromise, JS::Handle<JSObject*> aGlobal,
    53                          AnyCallback* aCallback);
    54   ~WrapperPromiseCallback();
    56 private:
    57   nsRefPtr<Promise> mNextPromise;
    58   JS::Heap<JSObject*> mGlobal;
    59   nsRefPtr<AnyCallback> mCallback;
    60 };
    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)
    71   void Call(JS::Handle<JS::Value> aValue) MOZ_OVERRIDE;
    73   ResolvePromiseCallback(Promise* aPromise, JS::Handle<JSObject*> aGlobal);
    74   ~ResolvePromiseCallback();
    76 private:
    77   nsRefPtr<Promise> mPromise;
    78   JS::Heap<JSObject*> mGlobal;
    79 };
    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)
    90   void Call(JS::Handle<JS::Value> aValue) MOZ_OVERRIDE;
    92   RejectPromiseCallback(Promise* aPromise, JS::Handle<JSObject*> aGlobal);
    93   ~RejectPromiseCallback();
    95 private:
    96   nsRefPtr<Promise> mPromise;
    97   JS::Heap<JSObject*> mGlobal;
    98 };
   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)
   108   void Call(JS::Handle<JS::Value> aValue) MOZ_OVERRIDE;
   110   NativePromiseCallback(PromiseNativeHandler* aHandler,
   111                         Promise::PromiseState aState);
   112   ~NativePromiseCallback();
   114 private:
   115   nsRefPtr<PromiseNativeHandler> mHandler;
   116   Promise::PromiseState mState;
   117 };
   119 } // namespace dom
   120 } // namespace mozilla
   122 #endif // mozilla_dom_PromiseCallback_h

mercurial