| Index: ppapi/proxy/file_io_resource.h
|
| diff --git a/ppapi/proxy/file_io_resource.h b/ppapi/proxy/file_io_resource.h
|
| index 557847f81d1d619da191a3718ea86f5a1c559d5f..c9e15df01dbaa7a2b375982ad0a75203a5496b7c 100644
|
| --- a/ppapi/proxy/file_io_resource.h
|
| +++ b/ppapi/proxy/file_io_resource.h
|
| @@ -69,8 +69,8 @@ class PPAPI_PROXY_EXPORT FileIOResource
|
| PP_FileHandle* handle,
|
| scoped_refptr<TrackedCallback> callback) OVERRIDE;
|
|
|
| - // FileHandleHolder is used to guarantee that file operations will have a
|
| - // valid FD to operate on, even if they're in a different thread.
|
| + // FileHolder is used to guarantee that file operations will have a valid FD
|
| + // to operate on, even if they're in a different thread.
|
| // If instead we just passed the raw FD, the FD could be closed before the
|
| // file operation has a chance to run. It could interact with an invalid FD,
|
| // or worse, the FD value could be reused if another file is opened quickly
|
| @@ -80,36 +80,37 @@ class PPAPI_PROXY_EXPORT FileIOResource
|
| //
|
| // Operations that run on a background thread should hold one of these to
|
| // ensure they have a valid file descriptor. The file handle is only closed
|
| - // when the last reference to the FileHandleHolder is removed, so we are
|
| - // guaranteed to operate on the correct file descriptor. It *is* still
|
| - // possible that the FileIOResource will be destroyed and "Abort" callbacks
|
| - // just before the operation does its task (e.g., Reading). In that case, we
|
| - // might for example Read from a file even though the FileIO has been
|
| - // destroyed and the plugin's callback got a PP_ERROR_ABORTED result. In the
|
| - // case of a write, we could write some data to the file despite the plugin
|
| - // receiving a PP_ERROR_ABORTED instead of a successful result.
|
| - class FileHandleHolder : public base::RefCountedThreadSafe<FileHandleHolder> {
|
| + // when the last reference to the FileHolder is removed, so we are guaranteed
|
| + // to operate on the correct file descriptor. It *is* still possible that the
|
| + // FileIOResource will be destroyed and "Abort" callbacks just before the
|
| + // operation does its task (e.g., Reading). In that case, we might for example
|
| + // Read from a file even though the FileIO has been destroyed and the plugin's
|
| + // callback got a PP_ERROR_ABORTED result. In the case of a write, we could
|
| + // write some data to the file despite the plugin receiving a
|
| + // PP_ERROR_ABORTED instead of a successful result.
|
| + class FileHolder : public base::RefCountedThreadSafe<FileHolder> {
|
| public:
|
| - explicit FileHandleHolder(PP_FileHandle file_handle_);
|
| - PP_FileHandle raw_handle() {
|
| - return raw_handle_;
|
| + explicit FileHolder(PP_FileHandle file_handle);
|
| + base::File* file() {
|
| + return &file_;
|
| }
|
| static bool IsValid(
|
| - const scoped_refptr<FileIOResource::FileHandleHolder>& handle);
|
| + const scoped_refptr<FileIOResource::FileHolder>& handle);
|
| private:
|
| - friend class base::RefCountedThreadSafe<FileHandleHolder>;
|
| - ~FileHandleHolder();
|
| - PP_FileHandle raw_handle_;
|
| + friend class base::RefCountedThreadSafe<FileHolder>;
|
| + ~FileHolder();
|
| + base::File file_;
|
| };
|
| - scoped_refptr<FileHandleHolder> file_handle() {
|
| - return file_handle_;
|
| +
|
| + scoped_refptr<FileHolder> file_holder() {
|
| + return file_holder_;
|
| }
|
|
|
| private:
|
| // Class to perform file query operations across multiple threads.
|
| class QueryOp : public base::RefCountedThreadSafe<QueryOp> {
|
| public:
|
| - explicit QueryOp(scoped_refptr<FileHandleHolder> file_handle);
|
| + explicit QueryOp(scoped_refptr<FileHolder> file_holder);
|
|
|
| // 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.
|
| @@ -121,14 +122,14 @@ class PPAPI_PROXY_EXPORT FileIOResource
|
| friend class base::RefCountedThreadSafe<QueryOp>;
|
| ~QueryOp();
|
|
|
| - scoped_refptr<FileHandleHolder> file_handle_;
|
| + scoped_refptr<FileHolder> file_holder_;
|
| base::File::Info file_info_;
|
| };
|
|
|
| // Class to perform file read operations across multiple threads.
|
| class ReadOp : public base::RefCountedThreadSafe<ReadOp> {
|
| public:
|
| - ReadOp(scoped_refptr<FileHandleHolder> file_handle,
|
| + ReadOp(scoped_refptr<FileHolder> file_holder,
|
| int64_t offset,
|
| int32_t bytes_to_read);
|
|
|
| @@ -142,7 +143,7 @@ class PPAPI_PROXY_EXPORT FileIOResource
|
| friend class base::RefCountedThreadSafe<ReadOp>;
|
| ~ReadOp();
|
|
|
| - scoped_refptr<FileHandleHolder> file_handle_;
|
| + scoped_refptr<FileHolder> file_holder_;
|
| int64_t offset_;
|
| int32_t bytes_to_read_;
|
| scoped_ptr<char[]> buffer_;
|
| @@ -151,7 +152,7 @@ class PPAPI_PROXY_EXPORT FileIOResource
|
| // Class to perform file write operations across multiple threads.
|
| class WriteOp : public base::RefCountedThreadSafe<WriteOp> {
|
| public:
|
| - WriteOp(scoped_refptr<FileHandleHolder> file_handle,
|
| + WriteOp(scoped_refptr<FileHolder> file_holder,
|
| int64_t offset,
|
| scoped_ptr<char[]> buffer,
|
| int32_t bytes_to_write,
|
| @@ -165,7 +166,7 @@ class PPAPI_PROXY_EXPORT FileIOResource
|
| friend class base::RefCountedThreadSafe<WriteOp>;
|
| ~WriteOp();
|
|
|
| - scoped_refptr<FileHandleHolder> file_handle_;
|
| + scoped_refptr<FileHolder> file_holder_;
|
| int64_t offset_;
|
| scoped_ptr<char[]> buffer_;
|
| int32_t bytes_to_write_;
|
| @@ -213,7 +214,7 @@ class PPAPI_PROXY_EXPORT FileIOResource
|
| PP_FileHandle* output_handle,
|
| const ResourceMessageReplyParams& params);
|
|
|
| - scoped_refptr<FileHandleHolder> file_handle_;
|
| + scoped_refptr<FileHolder> file_holder_;
|
| PP_FileSystemType file_system_type_;
|
| scoped_refptr<Resource> file_system_resource_;
|
| FileIOStateManager state_manager_;
|
|
|