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