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_HTTPFS_HTTP_FS_H_ 6 #define LIBRARIES_NACL_IO_HTTPFS_HTTP_FS_H_ 7 8 #include <string> 9 #include "nacl_io/filesystem.h" 10 #include "nacl_io/pepper_interface.h" 11 #include "nacl_io/typed_fs_factory.h" 12 13 namespace nacl_io { 14 15 std::string NormalizeHeaderKey(const std::string& s); 16 17 class HttpFs : public Filesystem { 18 public: 19 typedef std::map<std::string, ScopedNode> NodeMap_t; 20 21 virtual Error OpenWithMode(const Path& path, int open_flags, mode_t mode, 22 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 MakeUrlRequestInfo(const std::string& url, 30 const char* method, 31 StringMap_t* additional_headers); 32 33 protected: 34 HttpFs(); 35 36 virtual Error Init(const FsInitArgs& args); 37 virtual void Destroy(); 38 ScopedNode FindExistingNode(const Path& path); 39 Error FindOrCreateDir(const Path& path, ScopedNode* out_node); 40 Error LoadManifest(const std::string& path, char** out_manifest); 41 Error ParseManifest(const char* text); 42 43 NodeMap_t* GetNodeCacheForTesting() { return &node_cache_; } 44 45 private: 46 47 // Gets the URL to fetch for |path|. 48 // |path| is relative to the mount point for the HTTP filesystem. 49 std::string MakeUrl(const Path& path); 50 51 std::string url_root_; 52 StringMap_t headers_; 53 NodeMap_t node_cache_; 54 bool allow_cors_; 55 bool allow_credentials_; 56 bool cache_stat_; 57 bool cache_content_; 58 bool is_blob_url_; 59 60 friend class TypedFsFactory<HttpFs>; 61 friend class HttpFsNode; 62 }; 63 64 } // namespace nacl_io 65 66 #endif // LIBRARIES_NACL_IO_HTTPFS_HTTP_FS_H_ 67