1ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// found in the LICENSE file. 4ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 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 MountHttpMock; 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace nacl_io { 17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass MountNode; 19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)std::string NormalizeHeaderKey(const std::string& s); 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MountHttp : public Mount { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef std::map<std::string, ScopedMountNode> NodeMap_t; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual Error Access(const Path& path, int a_mode); 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual Error Open(const Path& path, int mode, ScopedMountNode* out_node); 28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual Error Unlink(const Path& path); 29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual Error Mkdir(const Path& path, int permissions); 30868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual Error Rmdir(const Path& path); 31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual Error Remove(const Path& path); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PP_Resource MakeUrlRequestInfo(const std::string& url, 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* method, 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StringMap_t* additional_headers); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MountHttp(); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual Error Init(int dev, StringMap_t& args, PepperInterface* ppapi); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Destroy(); 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Error FindOrCreateDir(const Path& path, ScopedMountNode* out_node); 43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Error LoadManifest(const std::string& path, char** out_manifest); 44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Error ParseManifest(char *text); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Gets the URL to fetch for |path|. 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // |path| is relative to the mount point for the HTTP filesystem. 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string MakeUrl(const Path& path); 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string url_root_; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StringMap_t headers_; 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NodeMap_t node_cache_; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool allow_cors_; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool allow_credentials_; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool cache_stat_; 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool cache_content_; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch friend class TypedMountFactory<MountHttp>; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class MountNodeHttp; 61ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch friend class ::MountHttpMock; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 64ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} // namespace nacl_io 65ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // LIBRARIES_NACL_IO_MOUNT_HTTP_H_ 67