Chromium Code Reviews| 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..3ca7bf0c9a92ca0550538b1a3bd56c84c96c441b 100644 |
| --- a/ppapi/proxy/file_io_resource.h |
| +++ b/ppapi/proxy/file_io_resource.h |
| @@ -67,6 +67,25 @@ class PPAPI_PROXY_EXPORT FileIOResource |
| scoped_refptr<TrackedCallback> callback) OVERRIDE; |
| private: |
| + // Class to share file read state between threads. |
| + class ReadData : public base::RefCountedThreadSafe<ReadData> { |
| + public: |
| + explicit ReadData(int32_t bytes_to_read); |
| + |
| + char* buffer() const { return buffer_.get(); } |
| + int32_t bytes_read() const { return bytes_read_; } |
| + void set_bytes_read(int32_t bytes_read) { bytes_read_ = bytes_read; } |
| + |
| + private: |
| + friend class base::RefCountedThreadSafe<ReadData>; |
| + virtual ~ReadData(); |
| + |
| + // We can't read directly into the plugin's buffer, since we can't be sure |
| + // that the call hasn't already aborted. Read into this buffer instead. |
| + scoped_ptr<char[]> buffer_; |
| + int32_t bytes_read_; |
| + }; |
| + |
| int32_t ReadValidated(int64_t offset, |
| int32_t bytes_to_read, |
| const PP_ArrayOutput& array_output, |
| @@ -74,19 +93,25 @@ class PPAPI_PROXY_EXPORT FileIOResource |
| void CloseFileHandle(); |
| + // File tasks. These are called on the file thread (for non-blocking calls) |
| + // and on the plugin's thread (for blocking calls). |
|
dmichael (off chromium)
2013/08/09 17:37:42
maybe note that they run without the ProxyLock?
bbudge
2013/08/09 21:43:24
I removed these and put them on the ops classes.
|
| + void DoQuery(); |
| + void DoRead(int64_t offset, |
| + int32_t bytes_to_read, |
| + scoped_refptr<ReadData> read_data); |
| + |
| + void OnFileTaskComplete(scoped_refptr<TrackedCallback> callback); |
| + |
| + // Completion tasks for file operations that are done in the plugin. |
| + int32_t OnQueryComplete(PP_FileInfo* info, int32_t result); |
| + int32_t OnReadComplete(scoped_refptr<ReadData> read_data, |
| + 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, |
| @@ -96,6 +121,12 @@ class PPAPI_PROXY_EXPORT FileIOResource |
| PP_FileSystemType file_system_type_; |
| FileIOStateManager state_manager_; |
| + // Temporary state for Query. These are written by the file thread (for |
| + // non-blocking calls) or the plugin's thread (for blocking calls), and read |
| + // only on the plugin's thread. |
| + base::PlatformFileInfo file_info_; |
| + int32_t query_result_; |
|
dmichael (off chromium)
2013/08/09 17:37:42
These aren't *that* big. What about making them pa
bbudge
2013/08/09 21:43:24
Added a QueryOp ref counted class to remove these
|
| + |
| DISALLOW_COPY_AND_ASSIGN(FileIOResource); |
| }; |