mount_http.h revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef LIBRARIES_NACL_IO_MOUNT_HTTP_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define LIBRARIES_NACL_IO_MOUNT_HTTP_H_ 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "nacl_io/mount.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "nacl_io/pepper_interface.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "nacl_io/typed_mount_factory.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MountNode; 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MountHttpMock; 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)std::string NormalizeHeaderKey(const std::string& s); 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MountHttp : public Mount { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef std::map<std::string, ScopedMountNode> NodeMap_t; 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual Error Access(const Path& path, int a_mode); 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual Error Open(const Path& path, int mode, ScopedMountNode* out_node); 25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual Error Unlink(const Path& path); 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual Error Mkdir(const Path& path, int permissions); 27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual Error Rmdir(const Path& path); 28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual Error Remove(const Path& path); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PP_Resource MakeUrlRequestInfo(const std::string& url, 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* method, 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StringMap_t* additional_headers); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MountHttp(); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual Error Init(int dev, StringMap_t& args, PepperInterface* ppapi); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Destroy(); 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Error FindOrCreateDir(const Path& path, ScopedMountNode* out_node); 40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Error LoadManifest(const std::string& path, char** out_manifest); 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Error ParseManifest(char *text); 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Gets the URL to fetch for |path|. 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // |path| is relative to the mount point for the HTTP filesystem. 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string MakeUrl(const Path& path); 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string url_root_; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StringMap_t headers_; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NodeMap_t node_cache_; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool allow_cors_; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool allow_credentials_; 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool cache_stat_; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool cache_content_; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch friend class TypedMountFactory<MountHttp>; 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class MountNodeHttp; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class MountHttpMock; 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // LIBRARIES_NACL_IO_MOUNT_HTTP_H_ 62