| Index: ppapi/proxy/file_io_resource.cc
|
| diff --git a/ppapi/proxy/file_io_resource.cc b/ppapi/proxy/file_io_resource.cc
|
| index 0564fdfbb69364e39454b973ab70058bcc5aa132..61b1a2037ec46518710024c3ea523af8fef1d0cd 100644
|
| --- a/ppapi/proxy/file_io_resource.cc
|
| +++ b/ppapi/proxy/file_io_resource.cc
|
| @@ -39,8 +39,7 @@ void* DummyGetDataBuffer(void* user_data, uint32_t count, uint32_t size) {
|
| }
|
|
|
| // File thread task to close the file handle.
|
| -void DoClose(base::PlatformFile file) {
|
| - base::ClosePlatformFile(file);
|
| +void DoClose(base::File auto_close_file) {
|
| }
|
|
|
| } // namespace
|
| @@ -48,29 +47,25 @@ void DoClose(base::PlatformFile file) {
|
| namespace ppapi {
|
| namespace proxy {
|
|
|
| -FileIOResource::QueryOp::QueryOp(scoped_refptr<FileHandleHolder> file_handle)
|
| - : file_handle_(file_handle) {
|
| - DCHECK(file_handle_);
|
| +FileIOResource::QueryOp::QueryOp(scoped_refptr<FileHolder> file_holder)
|
| + : file_holder_(file_holder) {
|
| + DCHECK(file_holder_);
|
| }
|
|
|
| FileIOResource::QueryOp::~QueryOp() {
|
| }
|
|
|
| int32_t FileIOResource::QueryOp::DoWork() {
|
| - // TODO(rvargas): Convert this code to use base::File.
|
| - base::File file(file_handle_->raw_handle());
|
| - bool success = file.GetInfo(&file_info_);
|
| - file.TakePlatformFile();
|
| - return success ? PP_OK : PP_ERROR_FAILED;
|
| + return file_holder_->file()->GetInfo(&file_info_) ? PP_OK : PP_ERROR_FAILED;
|
| }
|
|
|
| -FileIOResource::ReadOp::ReadOp(scoped_refptr<FileHandleHolder> file_handle,
|
| +FileIOResource::ReadOp::ReadOp(scoped_refptr<FileHolder> file_holder,
|
| int64_t offset,
|
| int32_t bytes_to_read)
|
| - : file_handle_(file_handle),
|
| + : file_holder_(file_holder),
|
| offset_(offset),
|
| bytes_to_read_(bytes_to_read) {
|
| - DCHECK(file_handle_);
|
| + DCHECK(file_holder_);
|
| }
|
|
|
| FileIOResource::ReadOp::~ReadOp() {
|
| @@ -79,16 +74,15 @@ FileIOResource::ReadOp::~ReadOp() {
|
| int32_t FileIOResource::ReadOp::DoWork() {
|
| DCHECK(!buffer_.get());
|
| buffer_.reset(new char[bytes_to_read_]);
|
| - return base::ReadPlatformFile(
|
| - file_handle_->raw_handle(), offset_, buffer_.get(), bytes_to_read_);
|
| + return file_holder_->file()->Read(offset_, buffer_.get(), bytes_to_read_);
|
| }
|
|
|
| -FileIOResource::WriteOp::WriteOp(scoped_refptr<FileHandleHolder> file_handle,
|
| +FileIOResource::WriteOp::WriteOp(scoped_refptr<FileHolder> file_holder,
|
| int64_t offset,
|
| scoped_ptr<char[]> buffer,
|
| int32_t bytes_to_write,
|
| bool append)
|
| - : file_handle_(file_handle),
|
| + : file_holder_(file_holder),
|
| offset_(offset),
|
| buffer_(buffer.Pass()),
|
| bytes_to_write_(bytes_to_write),
|
| @@ -102,11 +96,10 @@ int32_t FileIOResource::WriteOp::DoWork() {
|
| // In append mode, we can't call WritePlatformFile, since NaCl doesn't
|
| // implement fcntl, causing the function to call pwrite, which is incorrect.
|
| if (append_) {
|
| - return base::WritePlatformFileAtCurrentPos(
|
| - file_handle_->raw_handle(), buffer_.get(), bytes_to_write_);
|
| + return file_holder_->file()->WriteAtCurrentPos(buffer_.get(),
|
| + bytes_to_write_);
|
| } else {
|
| - return base::WritePlatformFile(
|
| - file_handle_->raw_handle(), offset_, buffer_.get(), bytes_to_write_);
|
| + return file_holder_->file()->Write(offset_, buffer_.get(), bytes_to_write_);
|
| }
|
| }
|
|
|
| @@ -183,7 +176,7 @@ int32_t FileIOResource::Query(PP_FileInfo* info,
|
| return rv;
|
| if (!info)
|
| return PP_ERROR_BADARGUMENT;
|
| - if (!FileHandleHolder::IsValid(file_handle_))
|
| + if (!FileHolder::IsValid(file_holder_))
|
| return PP_ERROR_FAILED;
|
|
|
| state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
|
| @@ -198,11 +191,7 @@ int32_t FileIOResource::Query(PP_FileInfo* info,
|
| {
|
| // Release the proxy lock while making a potentially slow file call.
|
| ProxyAutoUnlock unlock;
|
| - // TODO(rvargas): Convert this code to base::File.
|
| - base::File file(file_handle_->raw_handle());
|
| - bool success = file.GetInfo(&file_info);
|
| - file.TakePlatformFile();
|
| - if (success)
|
| + if (file_holder_->file()->GetInfo(&file_info))
|
| result = PP_OK;
|
| }
|
| if (result == PP_OK) {
|
| @@ -217,7 +206,7 @@ int32_t FileIOResource::Query(PP_FileInfo* info,
|
|
|
| // For the non-blocking case, post a task to the file thread and add a
|
| // completion task to write the result.
|
| - scoped_refptr<QueryOp> query_op(new QueryOp(file_handle_));
|
| + scoped_refptr<QueryOp> query_op(new QueryOp(file_holder_));
|
| base::PostTaskAndReplyWithResult(
|
| PpapiGlobals::Get()->GetFileTaskRunner(),
|
| FROM_HERE,
|
| @@ -282,7 +271,7 @@ int32_t FileIOResource::Write(int64_t offset,
|
| return PP_ERROR_FAILED;
|
| if (offset < 0 || bytes_to_write < 0)
|
| return PP_ERROR_FAILED;
|
| - if (!FileHandleHolder::IsValid(file_handle_))
|
| + if (!FileHolder::IsValid(file_holder_))
|
| return PP_ERROR_FAILED;
|
|
|
| int32_t rv = state_manager_.CheckOperationState(
|
| @@ -408,8 +397,8 @@ void FileIOResource::Close() {
|
| pp_resource());
|
| }
|
|
|
| - if (file_handle_)
|
| - file_handle_ = NULL;
|
| + if (file_holder_)
|
| + file_holder_ = NULL;
|
|
|
| Post(BROWSER, PpapiHostMsg_FileIO_Close(
|
| FileGrowth(max_written_offset_, append_mode_write_amount_)));
|
| @@ -432,22 +421,22 @@ int32_t FileIOResource::RequestOSFileHandle(
|
| return PP_OK_COMPLETIONPENDING;
|
| }
|
|
|
| -FileIOResource::FileHandleHolder::FileHandleHolder(PP_FileHandle file_handle)
|
| - : raw_handle_(file_handle) {
|
| +FileIOResource::FileHolder::FileHolder(PP_FileHandle file_handle)
|
| + : file_(file_handle) {
|
| }
|
|
|
| // static
|
| -bool FileIOResource::FileHandleHolder::IsValid(
|
| - const scoped_refptr<FileIOResource::FileHandleHolder>& handle) {
|
| - return handle && (handle->raw_handle() != base::kInvalidPlatformFileValue);
|
| +bool FileIOResource::FileHolder::IsValid(
|
| + const scoped_refptr<FileIOResource::FileHolder>& handle) {
|
| + return handle && handle->file_.IsValid();
|
| }
|
|
|
| -FileIOResource::FileHandleHolder::~FileHandleHolder() {
|
| - if (raw_handle_ != base::kInvalidPlatformFileValue) {
|
| +FileIOResource::FileHolder::~FileHolder() {
|
| + if (file_.IsValid()) {
|
| base::TaskRunner* file_task_runner =
|
| PpapiGlobals::Get()->GetFileTaskRunner();
|
| file_task_runner->PostTask(FROM_HERE,
|
| - base::Bind(&DoClose, raw_handle_));
|
| + base::Bind(&DoClose, Passed(&file_)));
|
| }
|
| }
|
|
|
| @@ -457,7 +446,7 @@ int32_t FileIOResource::ReadValidated(int64_t offset,
|
| scoped_refptr<TrackedCallback> callback) {
|
| if (bytes_to_read < 0)
|
| return PP_ERROR_FAILED;
|
| - if (!FileHandleHolder::IsValid(file_handle_))
|
| + if (!FileHolder::IsValid(file_holder_))
|
| return PP_ERROR_FAILED;
|
|
|
| state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_READ);
|
| @@ -473,8 +462,7 @@ int32_t FileIOResource::ReadValidated(int64_t offset,
|
| if (buffer) {
|
| // Release the proxy lock while making a potentially slow file call.
|
| ProxyAutoUnlock unlock;
|
| - result = base::ReadPlatformFile(
|
| - file_handle_->raw_handle(), offset, buffer, bytes_to_read);
|
| + result = file_holder_->file()->Read(offset, buffer, bytes_to_read);
|
| if (result < 0)
|
| result = PP_ERROR_FAILED;
|
| }
|
| @@ -484,7 +472,7 @@ int32_t FileIOResource::ReadValidated(int64_t offset,
|
|
|
| // For the non-blocking case, post a task to the file thread.
|
| scoped_refptr<ReadOp> read_op(
|
| - new ReadOp(file_handle_, offset, bytes_to_read));
|
| + new ReadOp(file_holder_, offset, bytes_to_read));
|
| base::PostTaskAndReplyWithResult(
|
| PpapiGlobals::Get()->GetFileTaskRunner(),
|
| FROM_HERE,
|
| @@ -508,11 +496,10 @@ int32_t FileIOResource::WriteValidated(
|
| // Release the proxy lock while making a potentially slow file call.
|
| ProxyAutoUnlock unlock;
|
| if (append) {
|
| - result = base::WritePlatformFileAtCurrentPos(
|
| - file_handle_->raw_handle(), buffer, bytes_to_write);
|
| + result = file_holder_->file()->WriteAtCurrentPos(buffer,
|
| + bytes_to_write);
|
| } else {
|
| - result = base::WritePlatformFile(
|
| - file_handle_->raw_handle(), offset, buffer, bytes_to_write);
|
| + result = file_holder_->file()->Write(offset, buffer, bytes_to_write);
|
| }
|
| }
|
| if (result < 0)
|
| @@ -527,7 +514,7 @@ int32_t FileIOResource::WriteValidated(
|
| scoped_ptr<char[]> copy(new char[bytes_to_write]);
|
| memcpy(copy.get(), buffer, bytes_to_write);
|
| scoped_refptr<WriteOp> write_op(
|
| - new WriteOp(file_handle_, offset, copy.Pass(), bytes_to_write, append));
|
| + new WriteOp(file_holder_, offset, copy.Pass(), bytes_to_write, append));
|
| base::PostTaskAndReplyWithResult(
|
| PpapiGlobals::Get()->GetFileTaskRunner(),
|
| FROM_HERE,
|
| @@ -619,7 +606,7 @@ void FileIOResource::OnRequestWriteQuotaComplete(
|
| } else {
|
| bool append = (open_flags_ & PP_FILEOPENFLAG_APPEND) != 0;
|
| scoped_refptr<WriteOp> write_op(new WriteOp(
|
| - file_handle_, offset, buffer.Pass(), bytes_to_write, append));
|
| + file_holder_, offset, buffer.Pass(), bytes_to_write, append));
|
| base::PostTaskAndReplyWithResult(
|
| PpapiGlobals::Get()->GetFileTaskRunner(),
|
| FROM_HERE,
|
| @@ -693,7 +680,7 @@ void FileIOResource::OnPluginMsgOpenFileComplete(
|
|
|
| IPC::PlatformFileForTransit transit_file;
|
| if (params.TakeFileHandleAtIndex(0, &transit_file)) {
|
| - file_handle_ = new FileHandleHolder(
|
| + file_holder_ = new FileHolder(
|
| IPC::PlatformFileForTransitToPlatformFile(transit_file));
|
| }
|
| }
|
|
|