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.h" 11#include "base/files/file_path.h" 12#include "base/memory/ref_counted.h" 13#include "base/task_runner.h" 14#include "content/browser/renderer_host/pepper/pepper_file_ref_host.h" 15#include "ppapi/c/pp_instance.h" 16#include "ppapi/c/pp_resource.h" 17#include "ppapi/c/pp_time.h" 18#include "ppapi/host/ppapi_host.h" 19 20namespace content { 21 22// Implementations of FileRef operations for external filesystems. 23class PepperExternalFileRefBackend : public PepperFileRefBackend { 24 public: 25 PepperExternalFileRefBackend(ppapi::host::PpapiHost* host, 26 int render_process_id, 27 const base::FilePath& path); 28 virtual ~PepperExternalFileRefBackend(); 29 30 // PepperFileRefBackend overrides. 31 virtual int32_t MakeDirectory(ppapi::host::ReplyMessageContext context, 32 int32_t make_directory_flags) OVERRIDE; 33 virtual int32_t Touch(ppapi::host::ReplyMessageContext context, 34 PP_Time last_accessed_time, 35 PP_Time last_modified_time) OVERRIDE; 36 virtual int32_t Delete(ppapi::host::ReplyMessageContext context) OVERRIDE; 37 virtual int32_t Rename(ppapi::host::ReplyMessageContext context, 38 PepperFileRefHost* new_file_ref) OVERRIDE; 39 virtual int32_t Query(ppapi::host::ReplyMessageContext context) OVERRIDE; 40 virtual int32_t ReadDirectoryEntries(ppapi::host::ReplyMessageContext context) 41 OVERRIDE; 42 virtual int32_t GetAbsolutePath(ppapi::host::ReplyMessageContext context) 43 OVERRIDE; 44 virtual storage::FileSystemURL GetFileSystemURL() const OVERRIDE; 45 virtual base::FilePath GetExternalFilePath() const OVERRIDE; 46 47 virtual int32_t CanRead() const OVERRIDE; 48 virtual int32_t CanWrite() const OVERRIDE; 49 virtual int32_t CanCreate() const OVERRIDE; 50 virtual int32_t CanReadWrite() const OVERRIDE; 51 52 private: 53 // Generic reply callback. 54 void DidFinish(ppapi::host::ReplyMessageContext reply_context, 55 const IPC::Message& msg, 56 base::File::Error error); 57 58 // Operation specific callbacks. 59 void GetMetadataComplete(ppapi::host::ReplyMessageContext reply_context, 60 base::File::Error error, 61 const base::File::Info& 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