// 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/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, uintptr_t user_data, MojoResult result) { delete watcher; callback(user_data, result); } MojoAsyncWaitID AsyncWait(MojoAsyncWaiter* waiter, MojoHandle handle, MojoWaitFlags flags, MojoDeadline deadline, MojoAsyncWaitCallback callback, uintptr_t user_data) { // This instance will be deleted when done or cancelled. common::HandleWatcher* watcher = new common::HandleWatcher(); watcher->Start(Handle(handle), flags, deadline, base::Bind(&OnHandleReady, watcher, callback, user_data)); return reinterpret_cast(watcher); } void CancelWait(MojoAsyncWaiter* waiter, MojoAsyncWaitID wait_id) { delete reinterpret_cast(wait_id); } MojoAsyncWaiter s_default_async_waiter = { AsyncWait, CancelWait }; } // namespace MojoAsyncWaiter* GetDefaultAsyncWaiterImpl() { return &s_default_async_waiter; } } // namespace internal } // namespace mojo