Home | History | Annotate | Download | only in lib
      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:
     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:
     47   virtual ~BindingsSupport() {}
     48 };
     49 
     50 }  // namespace mojo
     51 
     52 #endif  // MOJO_PUBLIC_BINDINGS_LIB_BINDINGS_SUPPORT_H_
     53