1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
9 #include "nsThreadUtils.h"
10 #include "mozilla/Attributes.h"
12 inline int test_common_init(int *argc
, char ***argv
)
17 //-----------------------------------------------------------------------------
19 static bool gKeepPumpingEvents
= false;
21 class nsQuitPumpingEvent MOZ_FINAL
: public nsIRunnable
{
23 NS_DECL_THREADSAFE_ISUPPORTS
25 gKeepPumpingEvents
= false;
29 NS_IMPL_ISUPPORTS1(nsQuitPumpingEvent
, nsIRunnable
)
31 static inline void PumpEvents()
33 nsCOMPtr
<nsIThread
> thread
= do_GetCurrentThread();
35 gKeepPumpingEvents
= true;
36 while (gKeepPumpingEvents
)
37 NS_ProcessNextEvent(thread
);
39 NS_ProcessPendingEvents(thread
);
42 static inline void QuitPumpingEvents()
44 // Dispatch a task that toggles gKeepPumpingEvents so that we flush all
45 // of the pending tasks before exiting from PumpEvents.
46 nsCOMPtr
<nsIRunnable
> event
= new nsQuitPumpingEvent();
47 NS_DispatchToMainThread(event
);