1 // Copyright 2013 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 CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_EXTERNAL_FILE_REF_BACKEND_H_ 6 #define CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_EXTERNAL_FILE_REF_BACKEND_H_ 7 8 #include <string> 9 10 #include "base/files/file_path.h" 11 #include "base/memory/ref_counted.h" 12 #include "base/task_runner.h" 13 #include "content/browser/renderer_host/pepper/pepper_file_ref_host.h" 14 #include "ppapi/c/pp_instance.h" 15 #include "ppapi/c/pp_resource.h" 16 #include "ppapi/c/pp_time.h" 17 #include "ppapi/host/ppapi_host.h" 18 19 namespace content { 20 21 // Implementations of FileRef operations for external filesystems. 22 class PepperExternalFileRefBackend : public PepperFileRefBackend { 23 public: 24 PepperExternalFileRefBackend(ppapi::host::PpapiHost* host, 25 int render_process_id, 26 const base::FilePath& path); 27 virtual ~PepperExternalFileRefBackend(); 28 29 // PepperFileRefBackend overrides. 30 virtual int32_t MakeDirectory(ppapi::host::ReplyMessageContext context, 31 bool make_ancestors) OVERRIDE; 32 virtual int32_t Touch(ppapi::host::ReplyMessageContext context, 33 PP_Time last_accessed_time, 34 PP_Time last_modified_time) OVERRIDE; 35 virtual int32_t Delete(ppapi::host::ReplyMessageContext context) OVERRIDE; 36 virtual int32_t Rename(ppapi::host::ReplyMessageContext context, 37 PepperFileRefHost* new_file_ref) OVERRIDE; 38 virtual int32_t Query(ppapi::host::ReplyMessageContext context) OVERRIDE; 39 virtual int32_t ReadDirectoryEntries( 40 ppapi::host::ReplyMessageContext context) OVERRIDE; 41 virtual int32_t GetAbsolutePath(ppapi::host::ReplyMessageContext context) 42 OVERRIDE; 43 virtual fileapi::FileSystemURL GetFileSystemURL() const OVERRIDE; 44 virtual base::FilePath GetExternalFilePath() const OVERRIDE; 45 46 virtual int32_t CanRead() const OVERRIDE; 47 virtual int32_t CanWrite() const OVERRIDE; 48 virtual int32_t CanCreate() const OVERRIDE; 49 virtual int32_t CanReadWrite() const OVERRIDE; 50 51 private: 52 // Generic reply callback. 53 void DidFinish(ppapi::host::ReplyMessageContext reply_context, 54 const IPC::Message& msg, 55 base::PlatformFileError error); 56 57 // Operation specific callbacks. 58 void GetMetadataComplete( 59 ppapi::host::ReplyMessageContext reply_context, 60 base::PlatformFileError error, 61 const base::PlatformFileInfo& file_info); 62 63 ppapi::host::PpapiHost* host_; 64 base::FilePath path_; 65 int render_process_id_; 66 67 scoped_refptr<base::TaskRunner> task_runner_; 68 69 base::WeakPtrFactory<PepperExternalFileRefBackend> weak_factory_; 70 71 DISALLOW_COPY_AND_ASSIGN(PepperExternalFileRefBackend); 72 }; 73 74 } // namespace content 75 76 #endif // CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_EXTERNAL_FILE_REF_BACKEND_H_ 77