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#include "mojo/environment/default_async_waiter_impl.h"
6
7#include "base/bind.h"
8#include "mojo/common/handle_watcher.h"
9
10namespace mojo {
11namespace internal {
12namespace {
13
14void OnHandleReady(common::HandleWatcher* watcher,
15                   MojoAsyncWaitCallback callback,
16                   void* closure,
17                   MojoResult result) {
18  delete watcher;
19  callback(closure, result);
20}
21
22MojoAsyncWaitID AsyncWait(MojoHandle handle,
23                          MojoHandleSignals signals,
24                          MojoDeadline deadline,
25                          MojoAsyncWaitCallback callback,
26                          void* closure) {
27  // This instance will be deleted when done or cancelled.
28  common::HandleWatcher* watcher = new common::HandleWatcher();
29  watcher->Start(Handle(handle), signals, deadline,
30                 base::Bind(&OnHandleReady, watcher, callback, closure));
31  return reinterpret_cast<MojoAsyncWaitID>(watcher);
32}
33
34void CancelWait(MojoAsyncWaitID wait_id) {
35  delete reinterpret_cast<common::HandleWatcher*>(wait_id);
36}
37
38const MojoAsyncWaiter kDefaultAsyncWaiter = {
39  AsyncWait,
40  CancelWait
41};
42
43}  // namespace
44
45const MojoAsyncWaiter* GetDefaultAsyncWaiterImpl() {
46  return &kDefaultAsyncWaiter;
47}
48
49}  // namespace internal
50}  // namespace mojo
51