17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file. 47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#ifndef CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_FILE_REF_HOST_H_ 67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_FILE_REF_HOST_H_ 77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include <string> 97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/memory/weak_ptr.h" 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/browser/browser_ppapi_host.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ppapi/c/pp_file_info.h" 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ppapi/c/pp_instance.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ppapi/c/pp_resource.h" 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ppapi/c/pp_time.h" 167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ppapi/host/host_message_context.h" 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ppapi/host/resource_host.h" 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/fileapi/file_system_url.h" 197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace content { 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass PepperFileRefHost; 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class PepperFileSystemBrowserHost; 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Internal and external filesystems have very different codepaths for 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// performing FileRef operations. The logic is split into separate classes 267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// to make it easier to read. 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class PepperFileRefBackend { 287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ~PepperFileRefBackend(); 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual int32_t MakeDirectory(ppapi::host::ReplyMessageContext context, 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int32_t make_directory_flags) = 0; 337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual int32_t Touch(ppapi::host::ReplyMessageContext context, 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PP_Time last_accessed_time, 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PP_Time last_modified_time) = 0; 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual int32_t Delete(ppapi::host::ReplyMessageContext context) = 0; 377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual int32_t Rename(ppapi::host::ReplyMessageContext context, 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PepperFileRefHost* new_file_ref) = 0; 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual int32_t Query(ppapi::host::ReplyMessageContext context) = 0; 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual int32_t ReadDirectoryEntries( 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ppapi::host::ReplyMessageContext context) = 0; 42a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual int32_t GetAbsolutePath(ppapi::host::ReplyMessageContext context) = 0; 4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual storage::FileSystemURL GetFileSystemURL() const = 0; 448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual base::FilePath GetExternalFilePath() const = 0; 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Returns an error from the pp_errors.h enum. 47558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch virtual int32_t CanRead() const = 0; 48558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch virtual int32_t CanWrite() const = 0; 49558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch virtual int32_t CanCreate() const = 0; 50558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch virtual int32_t CanReadWrite() const = 0; 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class CONTENT_EXPORT PepperFileRefHost 547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : public ppapi::host::ResourceHost, 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public base::SupportsWeakPtr<PepperFileRefHost> { 567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PepperFileRefHost(BrowserPpapiHost* host, 587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PP_Instance instance, 597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PP_Resource resource, 607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PP_Resource file_system, 617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& internal_path); 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PepperFileRefHost(BrowserPpapiHost* host, 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PP_Instance instance, 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PP_Resource resource, 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const base::FilePath& external_path); 677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ~PepperFileRefHost(); 697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // ResourceHost overrides. 717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual int32_t OnResourceMessageReceived( 727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const IPC::Message& msg, 737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ppapi::host::HostMessageContext* context) OVERRIDE; 74a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual bool IsFileRefHost() OVERRIDE; 757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Required to support Rename(). 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PP_FileSystemType GetFileSystemType() const; 7803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::FileSystemURL GetFileSystemURL() const; 797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Required to support FileIO. 818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::FilePath GetExternalFilePath() const; 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::WeakPtr<PepperFileSystemBrowserHost> GetFileSystemHost() const; 838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 84558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch int32_t CanRead() const; 85558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch int32_t CanWrite() const; 86558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch int32_t CanCreate() const; 87558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch int32_t CanReadWrite() const; 887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) private: 907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int32_t OnMakeDirectory(ppapi::host::HostMessageContext* context, 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int32_t make_directory_flags); 927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int32_t OnTouch(ppapi::host::HostMessageContext* context, 937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PP_Time last_access_time, 947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PP_Time last_modified_time); 957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int32_t OnDelete(ppapi::host::HostMessageContext* context); 967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int32_t OnRename(ppapi::host::HostMessageContext* context, 977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PP_Resource new_file_ref); 987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int32_t OnQuery(ppapi::host::HostMessageContext* context); 997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int32_t OnReadDirectoryEntries(ppapi::host::HostMessageContext* context); 1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int32_t OnGetAbsolutePath(ppapi::host::HostMessageContext* context); 1017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) BrowserPpapiHost* host_; 1037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<PepperFileRefBackend> backend_; 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::WeakPtr<PepperFileSystemBrowserHost> file_system_host_; 1057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PP_FileSystemType fs_type_; 1067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PepperFileRefHost); 1087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 1097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace content 1117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif // CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_FILE_REF_HOST_H_ 113