1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef DEVICE_SERIAL_ASYNC_WAITER_H_ 6#define DEVICE_SERIAL_ASYNC_WAITER_H_ 7 8#include "base/callback.h" 9#include "mojo/public/c/environment/async_waiter.h" 10#include "mojo/public/cpp/environment/environment.h" 11#include "mojo/public/cpp/system/handle.h" 12 13namespace device { 14 15// A class that waits until a handle is ready and calls |callback| with the 16// result. If the AsyncWaiter is deleted before the handle is ready, the wait is 17// cancelled and the callback will not be called. 18class AsyncWaiter { 19 public: 20 typedef base::Callback<void(MojoResult)> Callback; 21 22 AsyncWaiter(mojo::Handle handle, 23 MojoHandleSignals signals, 24 const Callback& callback); 25 ~AsyncWaiter(); 26 27 private: 28 static void WaitComplete(void* waiter, MojoResult result); 29 void WaitCompleteInternal(MojoResult result); 30 31 const MojoAsyncWaiter* waiter_; 32 MojoAsyncWaitID id_; 33 const Callback callback_; 34 35 DISALLOW_COPY_AND_ASSIGN(AsyncWaiter); 36}; 37 38} // namespace device 39 40#endif // DEVICE_SERIAL_ASYNC_WAITER_H_ 41