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 LIBRARIES_NACL_IO_HTML5FS_HTML5_FS_H_ 6 #define LIBRARIES_NACL_IO_HTML5FS_HTML5_FS_H_ 7 8 #include <pthread.h> 9 10 #include "nacl_io/filesystem.h" 11 #include "nacl_io/pepper_interface.h" 12 #include "nacl_io/typed_fs_factory.h" 13 #include "sdk_util/simple_lock.h" 14 15 namespace nacl_io { 16 17 class Node; 18 19 class Html5Fs : public Filesystem { 20 public: 21 virtual Error Access(const Path& path, int a_mode); 22 virtual Error Open(const Path& path, int mode, ScopedNode* out_node); 23 virtual Error Unlink(const Path& path); 24 virtual Error Mkdir(const Path& path, int permissions); 25 virtual Error Rmdir(const Path& path); 26 virtual Error Remove(const Path& path); 27 virtual Error Rename(const Path& path, const Path& newpath); 28 29 PP_Resource filesystem_resource() { return filesystem_resource_; } 30 31 protected: 32 static const int REMOVE_DIR = 1; 33 static const int REMOVE_FILE = 2; 34 static const int REMOVE_ALL = REMOVE_DIR | REMOVE_FILE; 35 36 Html5Fs(); 37 38 virtual Error Init(const FsInitArgs& args); 39 virtual void Destroy(); 40 41 virtual Error RemoveInternal(const Path& path, int remove_type); 42 Error BlockUntilFilesystemOpen(); 43 44 private: 45 static void FilesystemOpenCallbackThunk(void* user_data, int32_t result); 46 void FilesystemOpenCallback(int32_t result); 47 Path GetFullPath(const Path& path); 48 49 PP_Resource filesystem_resource_; 50 bool filesystem_open_has_result_; // protected by lock_. 51 Error filesystem_open_error_; // protected by lock_. 52 53 pthread_cond_t filesystem_open_cond_; 54 sdk_util::SimpleLock filesysem_open_lock_; 55 std::string prefix_; 56 57 friend class TypedFsFactory<Html5Fs>; 58 }; 59 60 } // namespace nacl_io 61 62 #endif // LIBRARIES_NACL_IO_HTML5FS_HTML5_FS_H_ 63