mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 21:35:39 +00:00
Bug 1328130. Part 1 - add ->Track(). r=gerald
MozReview-Commit-ID: FW7Urv6nyOS --HG-- extra : rebase_source : 256576fa8b1e5bb6587e280512619f5d7e74a0cc extra : intermediate-source : 82d0eea2d53edd8d538bc2d0fd0116046fb489b7 extra : source : 9f4301a98b836ec5fc4ca9e49e6a32f0232b71e5
This commit is contained in:
parent
9e123aa5bd
commit
bc040ae51e
@ -116,6 +116,7 @@ protected:
|
||||
};
|
||||
|
||||
template<typename T> class MozPromiseHolder;
|
||||
template<typename T> class MozPromiseRequestHolder;
|
||||
template<typename ResolveValueT, typename RejectValueT, bool IsExclusive>
|
||||
class MozPromise : public MozPromiseRefcountable
|
||||
{
|
||||
@ -749,10 +750,23 @@ private:
|
||||
return p;
|
||||
}
|
||||
|
||||
// Allow calling ->Then() again for more promise chaining.
|
||||
RefPtr<MozPromise> operator->()
|
||||
template <typename... Ts>
|
||||
auto Then(Ts&&... aArgs)
|
||||
-> decltype(DeclVal<MozPromise>().Then(Forward<Ts>(aArgs)...))
|
||||
{
|
||||
return *this;
|
||||
return static_cast<RefPtr<MozPromise>>(*this)->Then(Forward<Ts>(aArgs)...);
|
||||
}
|
||||
|
||||
void Track(MozPromiseRequestHolder<MozPromise>& aRequestHolder)
|
||||
{
|
||||
aRequestHolder.Track(*this);
|
||||
}
|
||||
|
||||
// Allow calling ->Then() again for more promise chaining or ->Track() to
|
||||
// end chaining and track the request for future disconnection.
|
||||
ThenCommand* operator->()
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
private:
|
||||
@ -1058,6 +1072,12 @@ public:
|
||||
mRequest = aRequest;
|
||||
}
|
||||
|
||||
void Track(RefPtr<typename PromiseType::Request>&& aRequest)
|
||||
{
|
||||
MOZ_DIAGNOSTIC_ASSERT(!Exists());
|
||||
mRequest = Move(aRequest);
|
||||
}
|
||||
|
||||
void Complete()
|
||||
{
|
||||
MOZ_DIAGNOSTIC_ASSERT(Exists());
|
||||
|
Loading…
Reference in New Issue
Block a user