| Index: native_client_sdk/src/libraries/nacl_io/mount_stream.h | 
| diff --git a/native_client_sdk/src/libraries/nacl_io/mount_stream.h b/native_client_sdk/src/libraries/nacl_io/mount_stream.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..757e1323b25f608e3ed166df17e52038b47612eb | 
| --- /dev/null | 
| +++ b/native_client_sdk/src/libraries/nacl_io/mount_stream.h | 
| @@ -0,0 +1,81 @@ | 
| +// Copyright (c) 2013 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. | 
| + | 
| +#ifndef LIBRARIES_NACL_IO_MOUNT_STREAM_H_ | 
| +#define LIBRARIES_NACL_IO_MOUNT_STREAM_H_ | 
| + | 
| +#include "nacl_io/mount.h" | 
| + | 
| +#include "ppapi/c/pp_completion_callback.h" | 
| +#include "ppapi/c/pp_resource.h" | 
| + | 
| + | 
| +namespace nacl_io { | 
| + | 
| +// MountStreams provides a "mount point" for stream objects which do not | 
| +// provide a path, such as FDs returned by pipe, socket, and sockpair.  It | 
| +// also provides a background thread for dispatching completion callbacks. | 
| + | 
| +class MountStream; | 
| +class MountNodeStream; | 
| + | 
| +class MountStream : public Mount { | 
| + public: | 
| +  class Work { | 
| +   public: | 
| +    explicit Work(MountStream* mount) : mount_(mount) {} | 
| +    virtual ~Work() {} | 
| + | 
| +    // Called by adding work the queue, val should be safe to ignore. | 
| +    virtual bool Start(int32_t val) = 0; | 
| + | 
| +    // Called as a completion of work in Start.  Value of val depend on | 
| +    // the function invoked in Start. | 
| +    virtual void Run(int32_t val) = 0; | 
| +    MountStream* mount() { return mount_; } | 
| + | 
| +  private: | 
| +    MountStream* mount_; | 
| +  }; | 
| + | 
| + protected: | 
| +  MountStream(); | 
| +  virtual ~MountStream(); | 
| + | 
| + public: | 
| +  // Enqueue a work object onto this MountStream's thread | 
| +  void EnqueueWork(Work* work); | 
| + | 
| +  // Returns a completion callback which will execute the StartWork member | 
| +  // of a MountSocketWork object. | 
| +  static PP_CompletionCallback GetStartCompletion(Work* work); | 
| + | 
| +  // Returns a completion callback which will execute the RunCallback member | 
| +  // of a MountSocketWork object. | 
| +  static PP_CompletionCallback GetRunCompletion(Work* work); | 
| + | 
| +  virtual Error Access(const Path& path, int a_mode); | 
| +  virtual Error Open(const Path& path, | 
| +                     int o_flags, | 
| +                     ScopedMountNode* out_node); | 
| +  virtual Error Unlink(const Path& path); | 
| +  virtual Error Mkdir(const Path& path, int permissions); | 
| +  virtual Error Rmdir(const Path& path); | 
| +  virtual Error Remove(const Path& path); | 
| + | 
| +  static void* StreamThreadThunk(void*); | 
| +  void StreamThread(); | 
| + | 
| + private: | 
| +  PP_Resource message_loop_; | 
| +  pthread_cond_t message_cond_; | 
| +  sdk_util::SimpleLock message_lock_; | 
| + | 
| +  friend class KernelProxy; | 
| +  DISALLOW_COPY_AND_ASSIGN(MountStream); | 
| +}; | 
| + | 
| +}  // namespace nacl_io | 
| + | 
| +#endif  // LIBRARIES_NACL_IO_MOUNT_STREAM_H_ | 
|  |