fake_pepper_interface_html5_fs.h revision cedac228d2dd51db4b79ea1e72c7f249408ee061
1f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o// Copyright 2014 The Chromium Authors. All rights reserved.
2e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o// Use of this source code is governed by a BSD-style license that can be
3efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o// found in the LICENSE file.
4e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o
5e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o#ifndef LIBRARIES_NACL_IO_TEST_FAKE_PEPPER_INTERFACE_HTML5_FS_H_
6e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o#define LIBRARIES_NACL_IO_TEST_FAKE_PEPPER_INTERFACE_HTML5_FS_H_
7f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
8f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o#include <map>
9f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o#include <string>
10f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o#include <vector>
11f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
12f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o#include <ppapi/c/pp_directory_entry.h>
13f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
14f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o#include "fake_ppapi/fake_core_interface.h"
1550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#include "fake_ppapi/fake_var_interface.h"
1650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#include "fake_ppapi/fake_var_manager.h"
1750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#include "nacl_io/pepper_interface_dummy.h"
18f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o#include "sdk_util/macros.h"
19f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
20f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o// This class is a fake implementation of the interfaces necessary to access
21f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o// the HTML5 Filesystem from NaCl.
22f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o//
23f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o// Example:
24b044c2e02af46c54206f0f6e29896ab32681a7dbTheodore Ts'o//   FakePepperInterfaceHtml5Fs ppapi_html5fs;
25b044c2e02af46c54206f0f6e29896ab32681a7dbTheodore Ts'o//   ...
265113a6e32b298671c86ae7da097bcd24540cebc9Eric Sandeen//   PP_Resource ref_resource = ppapi_html5fs.GetFileRefInterface()->Create(
27b044c2e02af46c54206f0f6e29896ab32681a7dbTheodore Ts'o//       ppapi_html5fs.GetInstance(),
28b044c2e02af46c54206f0f6e29896ab32681a7dbTheodore Ts'o//       "/some/path");
29b05d4ab635196f1e45bb7a11914edb2b0877274cTheodore Ts'o//   ...
30b05d4ab635196f1e45bb7a11914edb2b0877274cTheodore Ts'o//
31f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o// NOTE: This pepper interface creates an instance resource that can only be
32f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o// used with FakePepperInterfaceHtml5Fs, not other fake pepper implementations.
33f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
34b044c2e02af46c54206f0f6e29896ab32681a7dbTheodore Ts'oclass FakeHtml5FsNode {
35b05d4ab635196f1e45bb7a11914edb2b0877274cTheodore Ts'o public:
36b05d4ab635196f1e45bb7a11914edb2b0877274cTheodore Ts'o  FakeHtml5FsNode(const PP_FileInfo& info);
37b05d4ab635196f1e45bb7a11914edb2b0877274cTheodore Ts'o  FakeHtml5FsNode(const PP_FileInfo& info,
38f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                  const std::vector<uint8_t>& contents);
39f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  FakeHtml5FsNode(const PP_FileInfo& info, const std::string& contents);
4050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
41f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  int32_t Read(int64_t offset, char* buffer, int32_t bytes_to_read);
4250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o  int32_t Write(int64_t offset, const char* buffer, int32_t bytes_to_write);
43f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  int32_t Append(const char* buffer, int32_t bytes_to_write);
4450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o  int32_t SetLength(int64_t length);
4550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o  void GetInfo(PP_FileInfo* out_info);
46f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  bool IsRegular() const;
47f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  bool IsDirectory() const;
48f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  PP_FileType file_type() const { return info_.type; }
49f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
5050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o  // These times are not modified by the fake implementation.
51e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall  void set_creation_time(PP_Time time) { info_.creation_time = time; }
52b05d4ab635196f1e45bb7a11914edb2b0877274cTheodore Ts'o  void set_last_access_time(PP_Time time) { info_.last_access_time = time; }
53e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall  void set_last_modified_time(PP_Time time) { info_.last_modified_time = time; }
54b05d4ab635196f1e45bb7a11914edb2b0877274cTheodore Ts'o
5550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o  const std::vector<uint8_t>& contents() const { return contents_; }
56f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
57f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o private:
58f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  PP_FileInfo info_;
59f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  std::vector<uint8_t> contents_;
60f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o};
61f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
62e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallclass FakeHtml5FsFilesystem {
63f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o public:
64f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  typedef std::string Path;
65f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
66f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  struct DirectoryEntry {
67e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall    Path path;
68f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o    const FakeHtml5FsNode* node;
69f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  };
70f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  typedef std::vector<DirectoryEntry> DirectoryEntries;
71f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
72f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  FakeHtml5FsFilesystem();
73f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  explicit FakeHtml5FsFilesystem(PP_FileSystemType type);
74f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  FakeHtml5FsFilesystem(const FakeHtml5FsFilesystem& filesystem,
75f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                        PP_FileSystemType type);
76f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
77f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  void Clear();
78f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  bool AddEmptyFile(const Path& path, FakeHtml5FsNode** out_node);
79b044c2e02af46c54206f0f6e29896ab32681a7dbTheodore Ts'o  bool AddFile(const Path& path,
80f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o               const std::string& contents,
81f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o               FakeHtml5FsNode** out_node);
82f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  bool AddFile(const Path& path,
83f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o               const std::vector<uint8_t>& contents,
84e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o               FakeHtml5FsNode** out_node);
85e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o  bool AddDirectory(const Path& path, FakeHtml5FsNode** out_node);
866cab406d2b687f251ae533951c78fbe484cff0dfTheodore Ts'o  bool RemoveNode(const Path& path);
877380ac903316c0fe91ed6706eb4d84249a9b348dTheodore Ts'o
88efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o  FakeHtml5FsNode* GetNode(const Path& path);
89e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall  bool GetDirectoryEntries(const Path& path,
90e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o                           DirectoryEntries* out_dir_entries) const;
91f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  PP_FileSystemType filesystem_type() const { return filesystem_type_; }
926cab406d2b687f251ae533951c78fbe484cff0dfTheodore Ts'o  static Path GetParentPath(const Path& path);
93e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o
94e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o private:
95e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o  typedef std::map<Path, FakeHtml5FsNode> NodeMap;
96e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o  NodeMap node_map_;
97e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o  PP_FileSystemType filesystem_type_;
98e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o};
99f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
100f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'oclass FakeFileIoInterface : public nacl_io::FileIoInterface {
1016cab406d2b687f251ae533951c78fbe484cff0dfTheodore Ts'o public:
102f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  explicit FakeFileIoInterface(FakeCoreInterface* core_interface);
103f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
104f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  virtual PP_Resource Create(PP_Resource instance);
105f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  virtual int32_t Open(PP_Resource file_io,
106f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                       PP_Resource file_ref,
107f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                       int32_t open_flags,
108f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                       PP_CompletionCallback callback);
109f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  virtual int32_t Query(PP_Resource file_io,
110f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                        PP_FileInfo* info,
111fc6d9d519aef67735918bf02c0fa8c9222008f76Theodore Ts'o                        PP_CompletionCallback callback);
112f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  virtual int32_t Read(PP_Resource file_io,
113f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                       int64_t offset,
114f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                       char* buffer,
115f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                       int32_t bytes_to_read,
116f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                       PP_CompletionCallback callback);
117fc6d9d519aef67735918bf02c0fa8c9222008f76Theodore Ts'o  virtual int32_t Write(PP_Resource file_io,
118f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                        int64_t offset,
119f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                        const char* buffer,
120f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                        int32_t bytes_to_write,
121f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                        PP_CompletionCallback callback);
122f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  virtual int32_t SetLength(PP_Resource file_io,
123f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                            int64_t length,
1243e025efc0fb0de0f62be3421aa61c75eedf0d913Theodore Ts'o                            PP_CompletionCallback callback);
1253e025efc0fb0de0f62be3421aa61c75eedf0d913Theodore Ts'o  virtual int32_t Flush(PP_Resource file_io, PP_CompletionCallback callback);
1263e025efc0fb0de0f62be3421aa61c75eedf0d913Theodore Ts'o  virtual void Close(PP_Resource file_io);
127f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
128f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o private:
129f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  FakeCoreInterface* core_interface_;  // Weak reference.
130f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
131f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  DISALLOW_COPY_AND_ASSIGN(FakeFileIoInterface);
132efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o};
133f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
134e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'oclass FakeFileRefInterface : public nacl_io::FileRefInterface {
135544349270e4c74a6feb971123884a8cf5052a7eeTheodore Ts'o public:
136f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  FakeFileRefInterface(FakeCoreInterface* core_interface,
137f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                       FakeVarInterface* var_interface);
138f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
139f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  virtual PP_Resource Create(PP_Resource file_system, const char* path);
140f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  virtual PP_Var GetName(PP_Resource file_ref);
141f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  virtual int32_t MakeDirectory(PP_Resource directory_ref,
142efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o                                PP_Bool make_parents,
143e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall                                PP_CompletionCallback callback);
14443323be95742298b8229be728c3812e95c90629cTheodore Ts'o  virtual int32_t Delete(PP_Resource file_ref, PP_CompletionCallback callback);
145b05d4ab635196f1e45bb7a11914edb2b0877274cTheodore Ts'o  virtual int32_t Query(PP_Resource file_ref,
146f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                        PP_FileInfo* info,
147f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                        PP_CompletionCallback callback);
148b05d4ab635196f1e45bb7a11914edb2b0877274cTheodore Ts'o  virtual int32_t ReadDirectoryEntries(PP_Resource file_ref,
149f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                                       const PP_ArrayOutput& output,
150f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                                       PP_CompletionCallback callback);
151f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  virtual int32_t Rename(PP_Resource file_ref,
152f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                         PP_Resource new_file_ref,
153f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                         PP_CompletionCallback callback);
154f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
155f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o private:
156f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  FakeCoreInterface* core_interface_;  // Weak reference.
157f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  FakeVarInterface* var_interface_;  // Weak reference.
158f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  FakeVarManager* var_manager_;  // Weak reference
159f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
160f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  DISALLOW_COPY_AND_ASSIGN(FakeFileRefInterface);
161f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o};
162f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
163efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'oclass FakeFileSystemInterface : public nacl_io::FileSystemInterface {
164f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o public:
165f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  FakeFileSystemInterface(FakeCoreInterface* core_interface);
1665113a6e32b298671c86ae7da097bcd24540cebc9Eric Sandeen
167e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall  virtual PP_Bool IsFileSystem(PP_Resource resource);
168f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  virtual PP_Resource Create(PP_Instance instance, PP_FileSystemType type);
169f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  virtual int32_t Open(PP_Resource file_system,
170f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                       int64_t expected_size,
171f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o                       PP_CompletionCallback callback);
172f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
173efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o private:
174f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  FakeCoreInterface* core_interface_;  // Weak reference.
1753e025efc0fb0de0f62be3421aa61c75eedf0d913Theodore Ts'o
176ee753091cf6df32010c5f3ab37bf1326eef18d08Theodore Ts'o  DISALLOW_COPY_AND_ASSIGN(FakeFileSystemInterface);
1773e025efc0fb0de0f62be3421aa61c75eedf0d913Theodore Ts'o};
178f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
179f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'oclass FakePepperInterfaceHtml5Fs : public nacl_io::PepperInterfaceDummy {
180f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o public:
181f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  FakePepperInterfaceHtml5Fs();
182f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  explicit FakePepperInterfaceHtml5Fs(const FakeHtml5FsFilesystem& filesystem);
183f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  ~FakePepperInterfaceHtml5Fs();
184f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
1857380ac903316c0fe91ed6706eb4d84249a9b348dTheodore Ts'o  virtual PP_Instance GetInstance() { return instance_; }
186efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o  virtual nacl_io::CoreInterface* GetCoreInterface();
187b05d4ab635196f1e45bb7a11914edb2b0877274cTheodore Ts'o  virtual nacl_io::FileSystemInterface* GetFileSystemInterface();
188efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o  virtual nacl_io::FileRefInterface* GetFileRefInterface();
189f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  virtual nacl_io::FileIoInterface* GetFileIoInterface();
190f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  virtual nacl_io::VarInterface* GetVarInterface();
191efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o
192f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  FakeHtml5FsFilesystem* filesystem_template() { return &filesystem_template_; }
193efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o
194b05d4ab635196f1e45bb7a11914edb2b0877274cTheodore Ts'o private:
195b05d4ab635196f1e45bb7a11914edb2b0877274cTheodore Ts'o  void Init();
196efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o
197b05d4ab635196f1e45bb7a11914edb2b0877274cTheodore Ts'o  FakeResourceManager resource_manager_;
198f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  FakeCoreInterface core_interface_;
1997380ac903316c0fe91ed6706eb4d84249a9b348dTheodore Ts'o  FakeVarInterface var_interface_;
2007380ac903316c0fe91ed6706eb4d84249a9b348dTheodore Ts'o  FakeVarManager var_manager_;
201efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o  FakeHtml5FsFilesystem filesystem_template_;
202f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  FakeFileSystemInterface file_system_interface_;
203f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  FakeFileRefInterface file_ref_interface_;
204f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  FakeFileIoInterface file_io_interface_;
205f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  PP_Instance instance_;
206f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
207f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o  DISALLOW_COPY_AND_ASSIGN(FakePepperInterfaceHtml5Fs);
208f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o};
209f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
210f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o#endif  // LIBRARIES_NACL_IO_TEST_FAKE_PEPPER_INTERFACE_HTML5_FS_H_
211f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o