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