Bug 1319992: P0. Have CompletionPromise returns a RefPtr<MozPromise>. r?bholley draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Wed, 30 Nov 2016 12:51:53 +1100
changeset 445594 2b736ef1e97543cf173a6d74a852701e1731c41d
parent 445432 a8b3de85707e647525945a02d69ac4fb555beab3
child 445595 c72302b4f054250cc826196184f6b2401c67a7b2
push id37570
push userbmo:jyavenard@mozilla.com
push dateWed, 30 Nov 2016 02:29:12 +0000
reviewersbholley
bugs1319992
milestone53.0a1
Bug 1319992: P0. Have CompletionPromise returns a RefPtr<MozPromise>. r?bholley This allows to easily chain Then with CompletionPromise. It's also more consistent that way. MozReview-Commit-ID: HUING0eOLNJ
xpcom/threads/MozPromise.h
--- a/xpcom/threads/MozPromise.h
+++ b/xpcom/threads/MozPromise.h
@@ -273,17 +273,17 @@ public:
   {
   public:
     virtual void Disconnect() = 0;
 
     // MSVC complains when an inner class (ThenValueBase::{Resolve,Reject}Runnable)
     // tries to access an inherited protected member.
     bool IsDisconnected() const { return mDisconnected; }
 
-    virtual MozPromise* CompletionPromise() = 0;
+    virtual RefPtr<MozPromise> CompletionPromise() = 0;
 
     virtual void AssertIsDead() = 0;
 
   protected:
     Request() : mComplete(false), mDisconnected(false) {}
     virtual ~Request() {}
 
     bool mComplete;
@@ -330,17 +330,17 @@ protected:
     private:
       RefPtr<ThenValueBase> mThenValue;
       RefPtr<MozPromise> mPromise;
     };
 
     explicit ThenValueBase(AbstractThread* aResponseTarget, const char* aCallSite)
       : mResponseTarget(aResponseTarget), mCallSite(aCallSite) {}
 
-    MozPromise* CompletionPromise() override
+    RefPtr<MozPromise> CompletionPromise() override
     {
       MOZ_DIAGNOSTIC_ASSERT(mResponseTarget->IsCurrentThreadIn());
       MOZ_DIAGNOSTIC_ASSERT(!Request::mComplete);
       if (!mCompletionPromise) {
         mCompletionPromise = new MozPromise::Private(
           "<completion promise>", true /* aIsCompletionPromise */);
       }
       return mCompletionPromise;