Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(549)

Side by Side Diff: ppapi/proxy/file_io_resource.cc

Issue 304513007: Remove PlatformFile from ppapi (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ppapi/proxy/file_io_resource.h ('k') | ppapi/proxy/file_mapping_resource.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ppapi/proxy/file_io_resource.h" 5 #include "ppapi/proxy/file_io_resource.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/task_runner_util.h" 8 #include "base/task_runner_util.h"
9 #include "ipc/ipc_message.h" 9 #include "ipc/ipc_message.h"
10 #include "ppapi/c/pp_errors.h" 10 #include "ppapi/c/pp_errors.h"
(...skipping 21 matching lines...) Expand all
32 // 32MB. This is OK since the API specifies that it may perform a partial read 32 // 32MB. This is OK since the API specifies that it may perform a partial read
33 // or write. 33 // or write.
34 static const int32_t kMaxReadWriteSize = 32 * 1024 * 1024; // 32MB 34 static const int32_t kMaxReadWriteSize = 32 * 1024 * 1024; // 32MB
35 35
36 // An adapter to let Read() share the same implementation with ReadToArray(). 36 // An adapter to let Read() share the same implementation with ReadToArray().
37 void* DummyGetDataBuffer(void* user_data, uint32_t count, uint32_t size) { 37 void* DummyGetDataBuffer(void* user_data, uint32_t count, uint32_t size) {
38 return user_data; 38 return user_data;
39 } 39 }
40 40
41 // File thread task to close the file handle. 41 // File thread task to close the file handle.
42 void DoClose(base::PlatformFile file) { 42 void DoClose(base::File auto_close_file) {
43 base::ClosePlatformFile(file);
44 } 43 }
45 44
46 } // namespace 45 } // namespace
47 46
48 namespace ppapi { 47 namespace ppapi {
49 namespace proxy { 48 namespace proxy {
50 49
51 FileIOResource::QueryOp::QueryOp(scoped_refptr<FileHandleHolder> file_handle) 50 FileIOResource::QueryOp::QueryOp(scoped_refptr<FileHolder> file_holder)
52 : file_handle_(file_handle) { 51 : file_holder_(file_holder) {
53 DCHECK(file_handle_); 52 DCHECK(file_holder_);
54 } 53 }
55 54
56 FileIOResource::QueryOp::~QueryOp() { 55 FileIOResource::QueryOp::~QueryOp() {
57 } 56 }
58 57
59 int32_t FileIOResource::QueryOp::DoWork() { 58 int32_t FileIOResource::QueryOp::DoWork() {
60 // TODO(rvargas): Convert this code to use base::File. 59 return file_holder_->file()->GetInfo(&file_info_) ? PP_OK : PP_ERROR_FAILED;
61 base::File file(file_handle_->raw_handle());
62 bool success = file.GetInfo(&file_info_);
63 file.TakePlatformFile();
64 return success ? PP_OK : PP_ERROR_FAILED;
65 } 60 }
66 61
67 FileIOResource::ReadOp::ReadOp(scoped_refptr<FileHandleHolder> file_handle, 62 FileIOResource::ReadOp::ReadOp(scoped_refptr<FileHolder> file_holder,
68 int64_t offset, 63 int64_t offset,
69 int32_t bytes_to_read) 64 int32_t bytes_to_read)
70 : file_handle_(file_handle), 65 : file_holder_(file_holder),
71 offset_(offset), 66 offset_(offset),
72 bytes_to_read_(bytes_to_read) { 67 bytes_to_read_(bytes_to_read) {
73 DCHECK(file_handle_); 68 DCHECK(file_holder_);
74 } 69 }
75 70
76 FileIOResource::ReadOp::~ReadOp() { 71 FileIOResource::ReadOp::~ReadOp() {
77 } 72 }
78 73
79 int32_t FileIOResource::ReadOp::DoWork() { 74 int32_t FileIOResource::ReadOp::DoWork() {
80 DCHECK(!buffer_.get()); 75 DCHECK(!buffer_.get());
81 buffer_.reset(new char[bytes_to_read_]); 76 buffer_.reset(new char[bytes_to_read_]);
82 return base::ReadPlatformFile( 77 return file_holder_->file()->Read(offset_, buffer_.get(), bytes_to_read_);
83 file_handle_->raw_handle(), offset_, buffer_.get(), bytes_to_read_);
84 } 78 }
85 79
86 FileIOResource::WriteOp::WriteOp(scoped_refptr<FileHandleHolder> file_handle, 80 FileIOResource::WriteOp::WriteOp(scoped_refptr<FileHolder> file_holder,
87 int64_t offset, 81 int64_t offset,
88 scoped_ptr<char[]> buffer, 82 scoped_ptr<char[]> buffer,
89 int32_t bytes_to_write, 83 int32_t bytes_to_write,
90 bool append) 84 bool append)
91 : file_handle_(file_handle), 85 : file_holder_(file_holder),
92 offset_(offset), 86 offset_(offset),
93 buffer_(buffer.Pass()), 87 buffer_(buffer.Pass()),
94 bytes_to_write_(bytes_to_write), 88 bytes_to_write_(bytes_to_write),
95 append_(append) { 89 append_(append) {
96 } 90 }
97 91
98 FileIOResource::WriteOp::~WriteOp() { 92 FileIOResource::WriteOp::~WriteOp() {
99 } 93 }
100 94
101 int32_t FileIOResource::WriteOp::DoWork() { 95 int32_t FileIOResource::WriteOp::DoWork() {
102 // In append mode, we can't call WritePlatformFile, since NaCl doesn't 96 // In append mode, we can't call WritePlatformFile, since NaCl doesn't
103 // implement fcntl, causing the function to call pwrite, which is incorrect. 97 // implement fcntl, causing the function to call pwrite, which is incorrect.
104 if (append_) { 98 if (append_) {
105 return base::WritePlatformFileAtCurrentPos( 99 return file_holder_->file()->WriteAtCurrentPos(buffer_.get(),
106 file_handle_->raw_handle(), buffer_.get(), bytes_to_write_); 100 bytes_to_write_);
107 } else { 101 } else {
108 return base::WritePlatformFile( 102 return file_holder_->file()->Write(offset_, buffer_.get(), bytes_to_write_);
109 file_handle_->raw_handle(), offset_, buffer_.get(), bytes_to_write_);
110 } 103 }
111 } 104 }
112 105
113 FileIOResource::FileIOResource(Connection connection, PP_Instance instance) 106 FileIOResource::FileIOResource(Connection connection, PP_Instance instance)
114 : PluginResource(connection, instance), 107 : PluginResource(connection, instance),
115 file_system_type_(PP_FILESYSTEMTYPE_INVALID), 108 file_system_type_(PP_FILESYSTEMTYPE_INVALID),
116 open_flags_(0), 109 open_flags_(0),
117 max_written_offset_(0), 110 max_written_offset_(0),
118 append_mode_write_amount_(0), 111 append_mode_write_amount_(0),
119 check_quota_(false), 112 check_quota_(false),
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 } 169 }
177 170
178 int32_t FileIOResource::Query(PP_FileInfo* info, 171 int32_t FileIOResource::Query(PP_FileInfo* info,
179 scoped_refptr<TrackedCallback> callback) { 172 scoped_refptr<TrackedCallback> callback) {
180 int32_t rv = state_manager_.CheckOperationState( 173 int32_t rv = state_manager_.CheckOperationState(
181 FileIOStateManager::OPERATION_EXCLUSIVE, true); 174 FileIOStateManager::OPERATION_EXCLUSIVE, true);
182 if (rv != PP_OK) 175 if (rv != PP_OK)
183 return rv; 176 return rv;
184 if (!info) 177 if (!info)
185 return PP_ERROR_BADARGUMENT; 178 return PP_ERROR_BADARGUMENT;
186 if (!FileHandleHolder::IsValid(file_handle_)) 179 if (!FileHolder::IsValid(file_holder_))
187 return PP_ERROR_FAILED; 180 return PP_ERROR_FAILED;
188 181
189 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE); 182 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
190 183
191 // If the callback is blocking, perform the task on the calling thread. 184 // If the callback is blocking, perform the task on the calling thread.
192 if (callback->is_blocking()) { 185 if (callback->is_blocking()) {
193 int32_t result = PP_ERROR_FAILED; 186 int32_t result = PP_ERROR_FAILED;
194 base::File::Info file_info; 187 base::File::Info file_info;
195 // The plugin could release its reference to this instance when we release 188 // The plugin could release its reference to this instance when we release
196 // the proxy lock below. 189 // the proxy lock below.
197 scoped_refptr<FileIOResource> protect(this); 190 scoped_refptr<FileIOResource> protect(this);
198 { 191 {
199 // Release the proxy lock while making a potentially slow file call. 192 // Release the proxy lock while making a potentially slow file call.
200 ProxyAutoUnlock unlock; 193 ProxyAutoUnlock unlock;
201 // TODO(rvargas): Convert this code to base::File. 194 if (file_holder_->file()->GetInfo(&file_info))
202 base::File file(file_handle_->raw_handle());
203 bool success = file.GetInfo(&file_info);
204 file.TakePlatformFile();
205 if (success)
206 result = PP_OK; 195 result = PP_OK;
207 } 196 }
208 if (result == PP_OK) { 197 if (result == PP_OK) {
209 // This writes the file info into the plugin's PP_FileInfo struct. 198 // This writes the file info into the plugin's PP_FileInfo struct.
210 ppapi::FileInfoToPepperFileInfo(file_info, 199 ppapi::FileInfoToPepperFileInfo(file_info,
211 file_system_type_, 200 file_system_type_,
212 info); 201 info);
213 } 202 }
214 state_manager_.SetOperationFinished(); 203 state_manager_.SetOperationFinished();
215 return result; 204 return result;
216 } 205 }
217 206
218 // For the non-blocking case, post a task to the file thread and add a 207 // For the non-blocking case, post a task to the file thread and add a
219 // completion task to write the result. 208 // completion task to write the result.
220 scoped_refptr<QueryOp> query_op(new QueryOp(file_handle_)); 209 scoped_refptr<QueryOp> query_op(new QueryOp(file_holder_));
221 base::PostTaskAndReplyWithResult( 210 base::PostTaskAndReplyWithResult(
222 PpapiGlobals::Get()->GetFileTaskRunner(), 211 PpapiGlobals::Get()->GetFileTaskRunner(),
223 FROM_HERE, 212 FROM_HERE,
224 Bind(&FileIOResource::QueryOp::DoWork, query_op), 213 Bind(&FileIOResource::QueryOp::DoWork, query_op),
225 RunWhileLocked(Bind(&TrackedCallback::Run, callback))); 214 RunWhileLocked(Bind(&TrackedCallback::Run, callback)));
226 callback->set_completion_task( 215 callback->set_completion_task(
227 Bind(&FileIOResource::OnQueryComplete, this, query_op, info)); 216 Bind(&FileIOResource::OnQueryComplete, this, query_op, info));
228 217
229 return PP_OK_COMPLETIONPENDING; 218 return PP_OK_COMPLETIONPENDING;
230 } 219 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 } 264 }
276 265
277 int32_t FileIOResource::Write(int64_t offset, 266 int32_t FileIOResource::Write(int64_t offset,
278 const char* buffer, 267 const char* buffer,
279 int32_t bytes_to_write, 268 int32_t bytes_to_write,
280 scoped_refptr<TrackedCallback> callback) { 269 scoped_refptr<TrackedCallback> callback) {
281 if (!buffer) 270 if (!buffer)
282 return PP_ERROR_FAILED; 271 return PP_ERROR_FAILED;
283 if (offset < 0 || bytes_to_write < 0) 272 if (offset < 0 || bytes_to_write < 0)
284 return PP_ERROR_FAILED; 273 return PP_ERROR_FAILED;
285 if (!FileHandleHolder::IsValid(file_handle_)) 274 if (!FileHolder::IsValid(file_holder_))
286 return PP_ERROR_FAILED; 275 return PP_ERROR_FAILED;
287 276
288 int32_t rv = state_manager_.CheckOperationState( 277 int32_t rv = state_manager_.CheckOperationState(
289 FileIOStateManager::OPERATION_WRITE, true); 278 FileIOStateManager::OPERATION_WRITE, true);
290 if (rv != PP_OK) 279 if (rv != PP_OK)
291 return rv; 280 return rv;
292 281
293 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_WRITE); 282 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_WRITE);
294 283
295 if (check_quota_) { 284 if (check_quota_) {
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 if (called_close_) 390 if (called_close_)
402 return; 391 return;
403 392
404 called_close_ = true; 393 called_close_ = true;
405 if (check_quota_) { 394 if (check_quota_) {
406 check_quota_ = false; 395 check_quota_ = false;
407 file_system_resource_->AsPPB_FileSystem_API()->CloseQuotaFile( 396 file_system_resource_->AsPPB_FileSystem_API()->CloseQuotaFile(
408 pp_resource()); 397 pp_resource());
409 } 398 }
410 399
411 if (file_handle_) 400 if (file_holder_)
412 file_handle_ = NULL; 401 file_holder_ = NULL;
413 402
414 Post(BROWSER, PpapiHostMsg_FileIO_Close( 403 Post(BROWSER, PpapiHostMsg_FileIO_Close(
415 FileGrowth(max_written_offset_, append_mode_write_amount_))); 404 FileGrowth(max_written_offset_, append_mode_write_amount_)));
416 } 405 }
417 406
418 int32_t FileIOResource::RequestOSFileHandle( 407 int32_t FileIOResource::RequestOSFileHandle(
419 PP_FileHandle* handle, 408 PP_FileHandle* handle,
420 scoped_refptr<TrackedCallback> callback) { 409 scoped_refptr<TrackedCallback> callback) {
421 int32_t rv = state_manager_.CheckOperationState( 410 int32_t rv = state_manager_.CheckOperationState(
422 FileIOStateManager::OPERATION_EXCLUSIVE, true); 411 FileIOStateManager::OPERATION_EXCLUSIVE, true);
423 if (rv != PP_OK) 412 if (rv != PP_OK)
424 return rv; 413 return rv;
425 414
426 Call<PpapiPluginMsg_FileIO_RequestOSFileHandleReply>(BROWSER, 415 Call<PpapiPluginMsg_FileIO_RequestOSFileHandleReply>(BROWSER,
427 PpapiHostMsg_FileIO_RequestOSFileHandle(), 416 PpapiHostMsg_FileIO_RequestOSFileHandle(),
428 base::Bind(&FileIOResource::OnPluginMsgRequestOSFileHandleComplete, this, 417 base::Bind(&FileIOResource::OnPluginMsgRequestOSFileHandleComplete, this,
429 callback, handle)); 418 callback, handle));
430 419
431 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE); 420 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
432 return PP_OK_COMPLETIONPENDING; 421 return PP_OK_COMPLETIONPENDING;
433 } 422 }
434 423
435 FileIOResource::FileHandleHolder::FileHandleHolder(PP_FileHandle file_handle) 424 FileIOResource::FileHolder::FileHolder(PP_FileHandle file_handle)
436 : raw_handle_(file_handle) { 425 : file_(file_handle) {
437 } 426 }
438 427
439 // static 428 // static
440 bool FileIOResource::FileHandleHolder::IsValid( 429 bool FileIOResource::FileHolder::IsValid(
441 const scoped_refptr<FileIOResource::FileHandleHolder>& handle) { 430 const scoped_refptr<FileIOResource::FileHolder>& handle) {
442 return handle && (handle->raw_handle() != base::kInvalidPlatformFileValue); 431 return handle && handle->file_.IsValid();
443 } 432 }
444 433
445 FileIOResource::FileHandleHolder::~FileHandleHolder() { 434 FileIOResource::FileHolder::~FileHolder() {
446 if (raw_handle_ != base::kInvalidPlatformFileValue) { 435 if (file_.IsValid()) {
447 base::TaskRunner* file_task_runner = 436 base::TaskRunner* file_task_runner =
448 PpapiGlobals::Get()->GetFileTaskRunner(); 437 PpapiGlobals::Get()->GetFileTaskRunner();
449 file_task_runner->PostTask(FROM_HERE, 438 file_task_runner->PostTask(FROM_HERE,
450 base::Bind(&DoClose, raw_handle_)); 439 base::Bind(&DoClose, Passed(&file_)));
451 } 440 }
452 } 441 }
453 442
454 int32_t FileIOResource::ReadValidated(int64_t offset, 443 int32_t FileIOResource::ReadValidated(int64_t offset,
455 int32_t bytes_to_read, 444 int32_t bytes_to_read,
456 const PP_ArrayOutput& array_output, 445 const PP_ArrayOutput& array_output,
457 scoped_refptr<TrackedCallback> callback) { 446 scoped_refptr<TrackedCallback> callback) {
458 if (bytes_to_read < 0) 447 if (bytes_to_read < 0)
459 return PP_ERROR_FAILED; 448 return PP_ERROR_FAILED;
460 if (!FileHandleHolder::IsValid(file_handle_)) 449 if (!FileHolder::IsValid(file_holder_))
461 return PP_ERROR_FAILED; 450 return PP_ERROR_FAILED;
462 451
463 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_READ); 452 state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_READ);
464 453
465 bytes_to_read = std::min(bytes_to_read, kMaxReadWriteSize); 454 bytes_to_read = std::min(bytes_to_read, kMaxReadWriteSize);
466 if (callback->is_blocking()) { 455 if (callback->is_blocking()) {
467 char* buffer = static_cast<char*>( 456 char* buffer = static_cast<char*>(
468 array_output.GetDataBuffer(array_output.user_data, bytes_to_read, 1)); 457 array_output.GetDataBuffer(array_output.user_data, bytes_to_read, 1));
469 int32_t result = PP_ERROR_FAILED; 458 int32_t result = PP_ERROR_FAILED;
470 // The plugin could release its reference to this instance when we release 459 // The plugin could release its reference to this instance when we release
471 // the proxy lock below. 460 // the proxy lock below.
472 scoped_refptr<FileIOResource> protect(this); 461 scoped_refptr<FileIOResource> protect(this);
473 if (buffer) { 462 if (buffer) {
474 // Release the proxy lock while making a potentially slow file call. 463 // Release the proxy lock while making a potentially slow file call.
475 ProxyAutoUnlock unlock; 464 ProxyAutoUnlock unlock;
476 result = base::ReadPlatformFile( 465 result = file_holder_->file()->Read(offset, buffer, bytes_to_read);
477 file_handle_->raw_handle(), offset, buffer, bytes_to_read);
478 if (result < 0) 466 if (result < 0)
479 result = PP_ERROR_FAILED; 467 result = PP_ERROR_FAILED;
480 } 468 }
481 state_manager_.SetOperationFinished(); 469 state_manager_.SetOperationFinished();
482 return result; 470 return result;
483 } 471 }
484 472
485 // For the non-blocking case, post a task to the file thread. 473 // For the non-blocking case, post a task to the file thread.
486 scoped_refptr<ReadOp> read_op( 474 scoped_refptr<ReadOp> read_op(
487 new ReadOp(file_handle_, offset, bytes_to_read)); 475 new ReadOp(file_holder_, offset, bytes_to_read));
488 base::PostTaskAndReplyWithResult( 476 base::PostTaskAndReplyWithResult(
489 PpapiGlobals::Get()->GetFileTaskRunner(), 477 PpapiGlobals::Get()->GetFileTaskRunner(),
490 FROM_HERE, 478 FROM_HERE,
491 Bind(&FileIOResource::ReadOp::DoWork, read_op), 479 Bind(&FileIOResource::ReadOp::DoWork, read_op),
492 RunWhileLocked(Bind(&TrackedCallback::Run, callback))); 480 RunWhileLocked(Bind(&TrackedCallback::Run, callback)));
493 callback->set_completion_task( 481 callback->set_completion_task(
494 Bind(&FileIOResource::OnReadComplete, this, read_op, array_output)); 482 Bind(&FileIOResource::OnReadComplete, this, read_op, array_output));
495 483
496 return PP_OK_COMPLETIONPENDING; 484 return PP_OK_COMPLETIONPENDING;
497 } 485 }
498 486
499 int32_t FileIOResource::WriteValidated( 487 int32_t FileIOResource::WriteValidated(
500 int64_t offset, 488 int64_t offset,
501 const char* buffer, 489 const char* buffer,
502 int32_t bytes_to_write, 490 int32_t bytes_to_write,
503 scoped_refptr<TrackedCallback> callback) { 491 scoped_refptr<TrackedCallback> callback) {
504 bool append = (open_flags_ & PP_FILEOPENFLAG_APPEND) != 0; 492 bool append = (open_flags_ & PP_FILEOPENFLAG_APPEND) != 0;
505 if (callback->is_blocking()) { 493 if (callback->is_blocking()) {
506 int32_t result; 494 int32_t result;
507 { 495 {
508 // Release the proxy lock while making a potentially slow file call. 496 // Release the proxy lock while making a potentially slow file call.
509 ProxyAutoUnlock unlock; 497 ProxyAutoUnlock unlock;
510 if (append) { 498 if (append) {
511 result = base::WritePlatformFileAtCurrentPos( 499 result = file_holder_->file()->WriteAtCurrentPos(buffer,
512 file_handle_->raw_handle(), buffer, bytes_to_write); 500 bytes_to_write);
513 } else { 501 } else {
514 result = base::WritePlatformFile( 502 result = file_holder_->file()->Write(offset, buffer, bytes_to_write);
515 file_handle_->raw_handle(), offset, buffer, bytes_to_write);
516 } 503 }
517 } 504 }
518 if (result < 0) 505 if (result < 0)
519 result = PP_ERROR_FAILED; 506 result = PP_ERROR_FAILED;
520 507
521 state_manager_.SetOperationFinished(); 508 state_manager_.SetOperationFinished();
522 return result; 509 return result;
523 } 510 }
524 511
525 // For the non-blocking case, post a task to the file thread. We must copy the 512 // For the non-blocking case, post a task to the file thread. We must copy the
526 // plugin's buffer at this point. 513 // plugin's buffer at this point.
527 scoped_ptr<char[]> copy(new char[bytes_to_write]); 514 scoped_ptr<char[]> copy(new char[bytes_to_write]);
528 memcpy(copy.get(), buffer, bytes_to_write); 515 memcpy(copy.get(), buffer, bytes_to_write);
529 scoped_refptr<WriteOp> write_op( 516 scoped_refptr<WriteOp> write_op(
530 new WriteOp(file_handle_, offset, copy.Pass(), bytes_to_write, append)); 517 new WriteOp(file_holder_, offset, copy.Pass(), bytes_to_write, append));
531 base::PostTaskAndReplyWithResult( 518 base::PostTaskAndReplyWithResult(
532 PpapiGlobals::Get()->GetFileTaskRunner(), 519 PpapiGlobals::Get()->GetFileTaskRunner(),
533 FROM_HERE, 520 FROM_HERE,
534 Bind(&FileIOResource::WriteOp::DoWork, write_op), 521 Bind(&FileIOResource::WriteOp::DoWork, write_op),
535 RunWhileLocked(Bind(&TrackedCallback::Run, callback))); 522 RunWhileLocked(Bind(&TrackedCallback::Run, callback)));
536 callback->set_completion_task(Bind(&FileIOResource::OnWriteComplete, this)); 523 callback->set_completion_task(Bind(&FileIOResource::OnWriteComplete, this));
537 524
538 return PP_OK_COMPLETIONPENDING; 525 return PP_OK_COMPLETIONPENDING;
539 } 526 }
540 527
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 } 599 }
613 600
614 if (callback->is_blocking()) { 601 if (callback->is_blocking()) {
615 int32_t result = 602 int32_t result =
616 WriteValidated(offset, buffer.get(), bytes_to_write, callback); 603 WriteValidated(offset, buffer.get(), bytes_to_write, callback);
617 DCHECK(result != PP_OK_COMPLETIONPENDING); 604 DCHECK(result != PP_OK_COMPLETIONPENDING);
618 callback->Run(result); 605 callback->Run(result);
619 } else { 606 } else {
620 bool append = (open_flags_ & PP_FILEOPENFLAG_APPEND) != 0; 607 bool append = (open_flags_ & PP_FILEOPENFLAG_APPEND) != 0;
621 scoped_refptr<WriteOp> write_op(new WriteOp( 608 scoped_refptr<WriteOp> write_op(new WriteOp(
622 file_handle_, offset, buffer.Pass(), bytes_to_write, append)); 609 file_holder_, offset, buffer.Pass(), bytes_to_write, append));
623 base::PostTaskAndReplyWithResult( 610 base::PostTaskAndReplyWithResult(
624 PpapiGlobals::Get()->GetFileTaskRunner(), 611 PpapiGlobals::Get()->GetFileTaskRunner(),
625 FROM_HERE, 612 FROM_HERE,
626 Bind(&FileIOResource::WriteOp::DoWork, write_op), 613 Bind(&FileIOResource::WriteOp::DoWork, write_op),
627 RunWhileLocked(Bind(&TrackedCallback::Run, callback))); 614 RunWhileLocked(Bind(&TrackedCallback::Run, callback)));
628 callback->set_completion_task(Bind(&FileIOResource::OnWriteComplete, this)); 615 callback->set_completion_task(Bind(&FileIOResource::OnWriteComplete, this));
629 } 616 }
630 } 617 }
631 618
632 void FileIOResource::OnRequestSetLengthQuotaComplete( 619 void FileIOResource::OnRequestSetLengthQuotaComplete(
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 if (quota_file_system) { 673 if (quota_file_system) {
687 DCHECK(quota_file_system == file_system_resource_->pp_resource()); 674 DCHECK(quota_file_system == file_system_resource_->pp_resource());
688 check_quota_ = true; 675 check_quota_ = true;
689 max_written_offset_ = max_written_offset; 676 max_written_offset_ = max_written_offset;
690 file_system_resource_->AsPPB_FileSystem_API()->OpenQuotaFile( 677 file_system_resource_->AsPPB_FileSystem_API()->OpenQuotaFile(
691 pp_resource()); 678 pp_resource());
692 } 679 }
693 680
694 IPC::PlatformFileForTransit transit_file; 681 IPC::PlatformFileForTransit transit_file;
695 if (params.TakeFileHandleAtIndex(0, &transit_file)) { 682 if (params.TakeFileHandleAtIndex(0, &transit_file)) {
696 file_handle_ = new FileHandleHolder( 683 file_holder_ = new FileHolder(
697 IPC::PlatformFileForTransitToPlatformFile(transit_file)); 684 IPC::PlatformFileForTransitToPlatformFile(transit_file));
698 } 685 }
699 } 686 }
700 // End this operation now, so the user's callback can execute another FileIO 687 // End this operation now, so the user's callback can execute another FileIO
701 // operation, assuming there are no other pending operations. 688 // operation, assuming there are no other pending operations.
702 state_manager_.SetOperationFinished(); 689 state_manager_.SetOperationFinished();
703 callback->Run(result); 690 callback->Run(result);
704 } 691 }
705 692
706 void FileIOResource::OnPluginMsgRequestOSFileHandleComplete( 693 void FileIOResource::OnPluginMsgRequestOSFileHandleComplete(
(...skipping 15 matching lines...) Expand all
722 *output_handle = IPC::PlatformFileForTransitToPlatformFile(transit_file); 709 *output_handle = IPC::PlatformFileForTransitToPlatformFile(transit_file);
723 710
724 // End this operation now, so the user's callback can execute another FileIO 711 // End this operation now, so the user's callback can execute another FileIO
725 // operation, assuming there are no other pending operations. 712 // operation, assuming there are no other pending operations.
726 state_manager_.SetOperationFinished(); 713 state_manager_.SetOperationFinished();
727 callback->Run(result); 714 callback->Run(result);
728 } 715 }
729 716
730 } // namespace proxy 717 } // namespace proxy
731 } // namespace ppapi 718 } // namespace ppapi
OLDNEW
« no previous file with comments | « ppapi/proxy/file_io_resource.h ('k') | ppapi/proxy/file_mapping_resource.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698