xref: /aosp_15_r20/external/cronet/base/test/test_waitable_event.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2020 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_TEST_TEST_WAITABLE_EVENT_H_
6*6777b538SAndroid Build Coastguard Worker #define BASE_TEST_TEST_WAITABLE_EVENT_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include "base/synchronization/waitable_event.h"
9*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h"
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_WIN)
12*6777b538SAndroid Build Coastguard Worker #include "base/win/scoped_handle.h"
13*6777b538SAndroid Build Coastguard Worker #endif
14*6777b538SAndroid Build Coastguard Worker 
15*6777b538SAndroid Build Coastguard Worker namespace base {
16*6777b538SAndroid Build Coastguard Worker 
17*6777b538SAndroid Build Coastguard Worker // A WaitableEvent for use in tests, it has the same API as WaitableEvent with
18*6777b538SAndroid Build Coastguard Worker // the following two distinctions:
19*6777b538SAndroid Build Coastguard Worker //   1) ScopedAllowBaseSyncPrimitivesForTesting is not required to block on it.
20*6777b538SAndroid Build Coastguard Worker //   2) It doesn't instantiate a ScopedBlockingCallWithBaseSyncPrimitives in
21*6777b538SAndroid Build Coastguard Worker //      Wait() (important in some //base tests that are thrown off when the
22*6777b538SAndroid Build Coastguard Worker //      WaitableEvents used to drive the test add additional ScopedBlockingCalls
23*6777b538SAndroid Build Coastguard Worker //      to the mix of monitored calls).
24*6777b538SAndroid Build Coastguard Worker class TestWaitableEvent : public WaitableEvent {
25*6777b538SAndroid Build Coastguard Worker  public:
26*6777b538SAndroid Build Coastguard Worker   TestWaitableEvent(ResetPolicy reset_policy = ResetPolicy::MANUAL,
27*6777b538SAndroid Build Coastguard Worker                     InitialState initial_state = InitialState::NOT_SIGNALED);
28*6777b538SAndroid Build Coastguard Worker 
29*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_WIN)
30*6777b538SAndroid Build Coastguard Worker   explicit TestWaitableEvent(win::ScopedHandle event_handle);
31*6777b538SAndroid Build Coastguard Worker #endif
32*6777b538SAndroid Build Coastguard Worker };
33*6777b538SAndroid Build Coastguard Worker 
34*6777b538SAndroid Build Coastguard Worker static_assert(sizeof(TestWaitableEvent) == sizeof(WaitableEvent),
35*6777b538SAndroid Build Coastguard Worker               "WaitableEvent is non-virtual, TestWaitableEvent must be usable "
36*6777b538SAndroid Build Coastguard Worker               "interchangeably.");
37*6777b538SAndroid Build Coastguard Worker 
38*6777b538SAndroid Build Coastguard Worker }  // namespace base
39*6777b538SAndroid Build Coastguard Worker 
40*6777b538SAndroid Build Coastguard Worker #endif  // BASE_TEST_TEST_WAITABLE_EVENT_H_
41