OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef PPAPI_SHARED_IMPL_PPB_FILE_REF_SHARED_H_ | |
6 #define PPAPI_SHARED_IMPL_PPB_FILE_REF_SHARED_H_ | |
7 | |
8 #include <string> | |
9 | |
10 #include "base/compiler_specific.h" | |
11 #include "ppapi/shared_impl/resource.h" | |
12 #include "ppapi/thunk/ppb_file_ref_api.h" | |
13 | |
14 namespace ppapi { | |
15 | |
16 class StringVar; | |
17 | |
18 // FileRefs are created in a number of places and they include a number of | |
19 // return values. This struct encapsulates everything in one place. | |
20 struct PPB_FileRef_CreateInfo { | |
21 PPB_FileRef_CreateInfo() : file_system_type(PP_FILESYSTEMTYPE_EXTERNAL) {} | |
22 | |
23 ppapi::HostResource resource; | |
24 int file_system_type; // One of PP_FileSystemType values. | |
25 std::string path; | |
26 std::string name; | |
27 }; | |
28 | |
29 // This class provides the shared implementation of a FileRef. The functions | |
30 // that actually "do stuff" like Touch and MakeDirectory are implemented | |
31 // differently for the proxied and non-proxied derived classes. | |
32 class PPAPI_SHARED_EXPORT PPB_FileRef_Shared | |
33 : public Resource, | |
34 public thunk::PPB_FileRef_API { | |
35 public: | |
36 struct InitAsImpl {}; | |
37 struct InitAsProxy {}; | |
38 | |
39 PPB_FileRef_Shared(const InitAsImpl&, const PPB_FileRef_CreateInfo& info); | |
40 PPB_FileRef_Shared(const InitAsProxy&, const PPB_FileRef_CreateInfo& info); | |
41 virtual ~PPB_FileRef_Shared(); | |
42 | |
43 // Resource overrides. | |
44 virtual thunk::PPB_FileRef_API* AsPPB_FileRef_API() OVERRIDE; | |
45 | |
46 // PPB_FileRef_API implementation (partial). | |
47 virtual PP_FileSystemType GetFileSystemType() const OVERRIDE; | |
48 virtual PP_Var GetName() const OVERRIDE; | |
49 virtual PP_Var GetPath() const OVERRIDE; | |
50 virtual const PPB_FileRef_CreateInfo& GetCreateInfo() const OVERRIDE; | |
51 virtual PP_Var GetAbsolutePath() = 0; | |
52 | |
53 private: | |
54 PPB_FileRef_CreateInfo create_info_; | |
55 | |
56 // Lazily initialized vars created from the create_info_. This is so we can | |
57 // return the identical string object every time they're requested. | |
58 mutable scoped_refptr<StringVar> name_var_; | |
59 mutable scoped_refptr<StringVar> path_var_; | |
60 | |
61 DISALLOW_IMPLICIT_CONSTRUCTORS(PPB_FileRef_Shared); | |
62 }; | |
63 | |
64 } // namespace ppapi | |
65 | |
66 #endif // PPAPI_SHARED_IMPL_PPB_FILE_REF_SHARED_H_ | |
OLD | NEW |