diff options
Diffstat (limited to 'chromium/mojo/environment/default_async_waiter_impl.cc')
-rw-r--r-- | chromium/mojo/environment/default_async_waiter_impl.cc | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/chromium/mojo/environment/default_async_waiter_impl.cc b/chromium/mojo/environment/default_async_waiter_impl.cc new file mode 100644 index 00000000000..ff7a524752e --- /dev/null +++ b/chromium/mojo/environment/default_async_waiter_impl.cc @@ -0,0 +1,50 @@ +// Copyright 2014 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. + +#include "mojo/environment/default_async_waiter_impl.h" + +#include "base/bind.h" +#include "mojo/common/handle_watcher.h" + +namespace mojo { +namespace internal { +namespace { + +void OnHandleReady(common::HandleWatcher* watcher, + MojoAsyncWaitCallback callback, + void* closure, + MojoResult result) { + delete watcher; + callback(closure, result); +} + +MojoAsyncWaitID AsyncWait(MojoHandle handle, + MojoHandleSignals signals, + MojoDeadline deadline, + MojoAsyncWaitCallback callback, + void* closure) { + // This instance will be deleted when done or cancelled. + common::HandleWatcher* watcher = new common::HandleWatcher(); + watcher->Start(Handle(handle), signals, deadline, + base::Bind(&OnHandleReady, watcher, callback, closure)); + return reinterpret_cast<MojoAsyncWaitID>(watcher); +} + +void CancelWait(MojoAsyncWaitID wait_id) { + delete reinterpret_cast<common::HandleWatcher*>(wait_id); +} + +const MojoAsyncWaiter kDefaultAsyncWaiter = { + AsyncWait, + CancelWait +}; + +} // namespace + +const MojoAsyncWaiter* GetDefaultAsyncWaiterImpl() { + return &kDefaultAsyncWaiter; +} + +} // namespace internal +} // namespace mojo |