1 // Copyright (c) 2012 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_THUNK_PPB_FILE_REF_API_H_ 6 #define PPAPI_THUNK_PPB_FILE_REF_API_H_ 7 8 #include <vector> 9 10 #include "base/memory/linked_ptr.h" 11 #include "base/memory/ref_counted.h" 12 #include "ppapi/c/ppb_file_ref.h" 13 #include "ppapi/thunk/ppapi_thunk_export.h" 14 15 namespace ppapi { 16 17 struct PPB_FileRef_CreateInfo; 18 class TrackedCallback; 19 20 namespace thunk { 21 22 class PPAPI_THUNK_EXPORT PPB_FileRef_API { 23 public: 24 virtual ~PPB_FileRef_API() {} 25 26 virtual PP_FileSystemType GetFileSystemType() const = 0; 27 virtual PP_Var GetName() const = 0; 28 virtual PP_Var GetPath() const = 0; 29 virtual PP_Resource GetParent() = 0; 30 virtual int32_t MakeDirectory(PP_Bool make_ancestors, 31 scoped_refptr<TrackedCallback> callback) = 0; 32 virtual int32_t Touch(PP_Time last_access_time, 33 PP_Time last_modified_time, 34 scoped_refptr<TrackedCallback> callback) = 0; 35 virtual int32_t Delete(scoped_refptr<TrackedCallback> callback) = 0; 36 virtual int32_t Rename(PP_Resource new_file_ref, 37 scoped_refptr<TrackedCallback> callback) = 0; 38 virtual int32_t Query(PP_FileInfo* info, 39 scoped_refptr<TrackedCallback> callback) = 0; 40 virtual int32_t ReadDirectoryEntries( 41 const PP_ArrayOutput& output, 42 scoped_refptr<TrackedCallback> callback) = 0; 43 // We define variants of Query and ReadDirectoryEntries because 44 // 1. we need to take linked_ptr instead of raw pointers to avoid 45 // use-after-free, and 2. we don't use PP_ArrayOutput for the 46 // communication between renderers and the browser in 47 // ReadDirectoryEntries. The *InHost functions must not be called in 48 // plugins, and Query and ReadDirectoryEntries must not be called in 49 // renderers. 50 // TODO(hamaji): These functions must be removed when we move 51 // FileRef to the new resource design. http://crbug.com/225441 52 virtual int32_t QueryInHost(linked_ptr<PP_FileInfo> info, 53 scoped_refptr<TrackedCallback> callback) = 0; 54 virtual int32_t ReadDirectoryEntriesInHost( 55 linked_ptr<std::vector<ppapi::PPB_FileRef_CreateInfo> > files, 56 linked_ptr<std::vector<PP_FileType> > file_types, 57 scoped_refptr<TrackedCallback> callback) = 0; 58 59 // Internal function for use in proxying. Returns the internal CreateInfo 60 // (the contained resource does not carry a ref on behalf of the caller). 61 virtual const PPB_FileRef_CreateInfo& GetCreateInfo() const = 0; 62 63 // Private API 64 virtual PP_Var GetAbsolutePath() = 0; 65 }; 66 67 } // namespace thunk 68 } // namespace ppapi 69 70 #endif // PPAPI_THUNK_PPB_FILE_REF_API_H_ 71