commit 38e71b4151a309933042a3e3d4dfae41782b5199
parent 4fd7ef4e78ac8500530b1a7c594f55079a7853f8
Author: Andreas Pehrson <apehrson@mozilla.com>
Date: Tue, 11 Nov 2025 08:21:03 +0000
Bug 1931328 - Add a WaitFor specialization for MediaEventSource<void>. r=padenot
Differential Revision: https://phabricator.services.mozilla.com/D238748
Diffstat:
1 file changed, 24 insertions(+), 0 deletions(-)
diff --git a/testing/gtest/mozilla/WaitFor.h b/testing/gtest/mozilla/WaitFor.h
@@ -192,6 +192,30 @@ inline auto TakeN(MediaEventSourceImpl<Lp, Args...>& aEvent, size_t aN)
return holder->Ensure(__func__);
}
+using TakeNVoidPromise = MozPromise<size_t, bool, true>;
+
+template <ListenerPolicy Lp>
+inline auto TakeN(MediaEventSourceImpl<Lp, void>& aEvent, size_t aN)
+ -> RefPtr<TakeNVoidPromise> {
+ using Storage = Maybe<size_t>;
+ using Promise = TakeNVoidPromise;
+ using Holder = media::Refcountable<MozPromiseHolder<Promise>>;
+ using Values = media::Refcountable<Storage>;
+ using Listener = media::Refcountable<MediaEventListener>;
+ auto values = MakeRefPtr<Values>();
+ *values = Some(0);
+ auto listener = MakeRefPtr<Listener>();
+ auto holder = MakeRefPtr<Holder>();
+ *listener = aEvent.Connect(
+ AbstractThread::GetCurrent(), [values, listener, aN, holder]() {
+ if (++(values->ref()) == aN) {
+ listener->Disconnect();
+ holder->Resolve(**values, "TakeN (void) listener callback");
+ }
+ });
+ return holder->Ensure(__func__);
+}
+
/**
* Helper that, given that canonicals have just been updated on the current
* thread, will block its execution until mirrors and their watchers have