// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef NET_TEST_EVENT_WAITER_H_ #define NET_TEST_EVENT_WAITER_H_ #include "base/run_loop.h" namespace net { // Helper class to run a RunLoop until an expected event is reported. template class EventWaiter { public: // Runs a RunLoop until NotifyEvent() is called with |event|. void WaitForEvent(Event event) { expected_event_ = event; base::RunLoop run_loop; quit_closure_ = run_loop.QuitClosure(); run_loop.Run(); } // Unblocks a WaitForEvent() call if it was called with |event|. Otherwise, // has no effect. void NotifyEvent(Event event) { if (!quit_closure_.is_null() && event == expected_event_) { quit_closure_.Run(); quit_closure_.Reset(); } } private: Event expected_event_; base::Closure quit_closure_; }; } // namespace net #endif // NET_TEST_EVENT_WAITER_H_