• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 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 MOJO_PUBLIC_BINDINGS_LIB_BINDINGS_SUPPORT_H_
6 #define MOJO_PUBLIC_BINDINGS_LIB_BINDINGS_SUPPORT_H_
7 
8 #include "mojo/public/system/core_cpp.h"
9 
10 namespace mojo {
11 class Buffer;
12 
13 // An embedder of the bindings library MUST implement BindingsSupport and call
14 // BindingsSupport::Set prior to using the library.
15 class BindingsSupport {
16  public:
17   class AsyncWaitCallback {
18    public:
~AsyncWaitCallback()19     virtual ~AsyncWaitCallback() {}
20     virtual void OnHandleReady(MojoResult result) = 0;
21   };
22 
23   typedef void* AsyncWaitID;
24 
25   static void Set(BindingsSupport* support);
26   static BindingsSupport* Get();
27 
28   // Get/set the current thread's Buffer pointer. SetCurrentBuffer returns the
29   // previously current Buffer.
30   virtual Buffer* GetCurrentBuffer() = 0;
31   virtual Buffer* SetCurrentBuffer(Buffer* buf) = 0;
32 
33   // Asynchronously call MojoWait on a background thread, and pass the result
34   // of MojoWait to the given AsyncWaitCallback on the current thread.  Returns
35   // an AsyncWaitID that can be used with CancelWait to stop waiting. This
36   // identifier becomes invalid once the callback runs.
37   virtual AsyncWaitID AsyncWait(const Handle& handle,
38                                 MojoWaitFlags flags,
39                                 AsyncWaitCallback* callback) = 0;
40 
41   // Cancel an existing call to AsyncWait with the given AsyncWaitID. The
42   // corresponding AsyncWaitCallback's OnHandleReady method will not be called
43   // in this case.
44   virtual void CancelWait(AsyncWaitID id) = 0;
45 
46  protected:
~BindingsSupport()47   virtual ~BindingsSupport() {}
48 };
49 
50 }  // namespace mojo
51 
52 #endif  // MOJO_PUBLIC_BINDINGS_LIB_BINDINGS_SUPPORT_H_
53