Index: ppapi/proxy/file_io_resource.h |
diff --git a/ppapi/proxy/file_io_resource.h b/ppapi/proxy/file_io_resource.h |
index dffa940b046e904828a6b7ba32e66f1a45bad30a..1a888d199d610b7ad2d1390a5fb6df75e681b15c 100644 |
--- a/ppapi/proxy/file_io_resource.h |
+++ b/ppapi/proxy/file_io_resource.h |
@@ -67,6 +67,46 @@ class PPAPI_PROXY_EXPORT FileIOResource |
scoped_refptr<TrackedCallback> callback) OVERRIDE; |
private: |
+ // Class to perform file query operations across multiple threads. |
+ class QueryOp : public base::RefCountedThreadSafe<QueryOp> { |
+ public: |
+ explicit QueryOp(PP_FileHandle file_handle); |
+ |
+ // Queries the file. Called on the file thread (non-blocking) or the plugin |
+ // thread (blocking). This should not be called when we hold the proxy lock. |
+ int32_t DoWork(); |
+ |
+ const base::PlatformFileInfo& file_info() const { return file_info_; } |
+ |
+ private: |
+ friend class base::RefCountedThreadSafe<QueryOp>; |
+ ~QueryOp(); |
+ |
+ PP_FileHandle file_handle_; |
+ base::PlatformFileInfo file_info_; |
+ }; |
+ |
+ // Class to perform file read operations across multiple threads. |
+ class ReadOp : public base::RefCountedThreadSafe<ReadOp> { |
+ public: |
+ ReadOp(PP_FileHandle file_handle, int64_t offset, int32_t bytes_to_read); |
+ |
+ // Reads the file. Called on the file thread (non-blocking) or the plugin |
+ // thread (blocking). This should not be called when we hold the proxy lock. |
+ int32_t DoWork(); |
+ |
+ char* buffer() const { return buffer_.get(); } |
+ |
+ private: |
+ friend class base::RefCountedThreadSafe<ReadOp>; |
+ ~ReadOp(); |
+ |
+ PP_FileHandle file_handle_; |
+ int64_t offset_; |
+ int32_t bytes_to_read_; |
+ scoped_ptr<char[]> buffer_; |
+ }; |
+ |
int32_t ReadValidated(int64_t offset, |
int32_t bytes_to_read, |
const PP_ArrayOutput& array_output, |
@@ -74,19 +114,20 @@ class PPAPI_PROXY_EXPORT FileIOResource |
void CloseFileHandle(); |
+ |
+ // Completion tasks for file operations that are done in the plugin. |
+ int32_t OnQueryComplete(scoped_refptr<QueryOp> query_op, |
+ PP_FileInfo* info, |
+ int32_t result); |
+ int32_t OnReadComplete(scoped_refptr<ReadOp> read_op, |
+ PP_ArrayOutput array_output, |
+ int32_t result); |
+ |
// Reply message handlers for operations that are done in the host. |
void OnPluginMsgGeneralComplete(scoped_refptr<TrackedCallback> callback, |
const ResourceMessageReplyParams& params); |
void OnPluginMsgOpenFileComplete(scoped_refptr<TrackedCallback> callback, |
const ResourceMessageReplyParams& params); |
- void OnPluginMsgQueryComplete(scoped_refptr<TrackedCallback> callback, |
- PP_FileInfo* output_info_, |
- const ResourceMessageReplyParams& params, |
- const PP_FileInfo& info); |
- void OnPluginMsgReadComplete(scoped_refptr<TrackedCallback> callback, |
- PP_ArrayOutput array_output, |
- const ResourceMessageReplyParams& params, |
- const std::string& data); |
void OnPluginMsgRequestOSFileHandleComplete( |
scoped_refptr<TrackedCallback> callback, |
PP_FileHandle* output_handle, |