// 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