| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/browser/renderer_host/pepper/pepper_file_io_host.h" | 5 #include "content/browser/renderer_host/pepper/pepper_file_io_host.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/callback.h" | 8 #include "base/callback.h" |
| 9 #include "base/callback_helpers.h" | 9 #include "base/callback_helpers.h" |
| 10 #include "base/files/file_util_proxy.h" | 10 #include "base/files/file_util_proxy.h" |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 file_system_host_->GetFileSystemOperationRunner()->OpenFile( | 230 file_system_host_->GetFileSystemOperationRunner()->OpenFile( |
| 231 file_system_url_, | 231 file_system_url_, |
| 232 platform_file_flags, | 232 platform_file_flags, |
| 233 base::Bind(&PepperFileIOHost::DidOpenInternalFile, | 233 base::Bind(&PepperFileIOHost::DidOpenInternalFile, |
| 234 weak_factory_.GetWeakPtr(), | 234 weak_factory_.GetWeakPtr(), |
| 235 reply_context)); | 235 reply_context)); |
| 236 } | 236 } |
| 237 | 237 |
| 238 void PepperFileIOHost::DidOpenInternalFile( | 238 void PepperFileIOHost::DidOpenInternalFile( |
| 239 ppapi::host::ReplyMessageContext reply_context, | 239 ppapi::host::ReplyMessageContext reply_context, |
| 240 base::File::Error result, | 240 base::File file, |
| 241 base::PlatformFile file, | |
| 242 const base::Closure& on_close_callback) { | 241 const base::Closure& on_close_callback) { |
| 243 if (result == base::File::FILE_OK) { | 242 if (file.IsValid()) { |
| 244 on_close_callback_ = on_close_callback; | 243 on_close_callback_ = on_close_callback; |
| 245 | 244 |
| 246 if (FileOpenForWrite(open_flags_) && file_system_host_->ChecksQuota()) { | 245 if (FileOpenForWrite(open_flags_) && file_system_host_->ChecksQuota()) { |
| 247 check_quota_ = true; | 246 check_quota_ = true; |
| 248 file_system_host_->OpenQuotaFile( | 247 file_system_host_->OpenQuotaFile( |
| 249 this, | 248 this, |
| 250 file_system_url_, | 249 file_system_url_, |
| 251 base::Bind(&PepperFileIOHost::DidOpenQuotaFile, | 250 base::Bind(&PepperFileIOHost::DidOpenQuotaFile, |
| 252 weak_factory_.GetWeakPtr(), | 251 weak_factory_.GetWeakPtr(), |
| 253 reply_context, | 252 reply_context, |
| 254 file)); | 253 base::Passed(&file))); |
| 255 return; | 254 return; |
| 256 } | 255 } |
| 257 } | 256 } |
| 258 | 257 |
| 259 ExecutePlatformOpenFileCallback( | 258 DCHECK(!file_.IsValid()); |
| 260 reply_context, result, base::PassPlatformFile(&file), true); | 259 base::File::Error error = |
| 260 file.IsValid() ? base::File::FILE_OK : file.error_details(); |
| 261 file_.SetFile(file.Pass()); |
| 262 OnOpenProxyCallback(reply_context, error); |
| 261 } | 263 } |
| 262 | 264 |
| 263 void PepperFileIOHost::GotResolvedRenderProcessId( | 265 void PepperFileIOHost::GotResolvedRenderProcessId( |
| 264 ppapi::host::ReplyMessageContext reply_context, | 266 ppapi::host::ReplyMessageContext reply_context, |
| 265 base::FilePath path, | 267 base::FilePath path, |
| 266 int file_flags, | 268 int file_flags, |
| 267 base::ProcessId resolved_render_process_id) { | 269 base::ProcessId resolved_render_process_id) { |
| 268 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 270 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 269 resolved_render_process_id_ = resolved_render_process_id; | 271 resolved_render_process_id_ = resolved_render_process_id; |
| 270 file_.CreateOrOpen( | 272 file_.CreateOrOpen( |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 350 | 352 |
| 351 if (file_.IsValid()) { | 353 if (file_.IsValid()) { |
| 352 file_.Close(base::Bind(&PepperFileIOHost::DidCloseFile, | 354 file_.Close(base::Bind(&PepperFileIOHost::DidCloseFile, |
| 353 weak_factory_.GetWeakPtr())); | 355 weak_factory_.GetWeakPtr())); |
| 354 } | 356 } |
| 355 return PP_OK; | 357 return PP_OK; |
| 356 } | 358 } |
| 357 | 359 |
| 358 void PepperFileIOHost::DidOpenQuotaFile( | 360 void PepperFileIOHost::DidOpenQuotaFile( |
| 359 ppapi::host::ReplyMessageContext reply_context, | 361 ppapi::host::ReplyMessageContext reply_context, |
| 360 base::PlatformFile file, | 362 base::File file, |
| 361 int64_t max_written_offset) { | 363 int64_t max_written_offset) { |
| 364 DCHECK(!file_.IsValid()); |
| 365 DCHECK(file.IsValid()); |
| 362 max_written_offset_ = max_written_offset; | 366 max_written_offset_ = max_written_offset; |
| 367 file_.SetFile(file.Pass()); |
| 363 | 368 |
| 364 ExecutePlatformOpenFileCallback( | 369 OnOpenProxyCallback(reply_context, base::File::FILE_OK); |
| 365 reply_context, base::File::FILE_OK, base::PassPlatformFile(&file), true); | |
| 366 } | 370 } |
| 367 | 371 |
| 368 void PepperFileIOHost::DidCloseFile(base::File::Error /*error*/) { | 372 void PepperFileIOHost::DidCloseFile(base::File::Error /*error*/) { |
| 369 // Silently ignore if we fail to close the file. | 373 // Silently ignore if we fail to close the file. |
| 370 if (!on_close_callback_.is_null()) { | 374 if (!on_close_callback_.is_null()) { |
| 371 on_close_callback_.Run(); | 375 on_close_callback_.Run(); |
| 372 on_close_callback_.Reset(); | 376 on_close_callback_.Reset(); |
| 373 } | 377 } |
| 374 } | 378 } |
| 375 | 379 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 409 } | 413 } |
| 410 | 414 |
| 411 void PepperFileIOHost::ExecutePlatformGeneralCallback( | 415 void PepperFileIOHost::ExecutePlatformGeneralCallback( |
| 412 ppapi::host::ReplyMessageContext reply_context, | 416 ppapi::host::ReplyMessageContext reply_context, |
| 413 base::File::Error error_code) { | 417 base::File::Error error_code) { |
| 414 reply_context.params.set_result(ppapi::FileErrorToPepperError(error_code)); | 418 reply_context.params.set_result(ppapi::FileErrorToPepperError(error_code)); |
| 415 host()->SendReply(reply_context, PpapiPluginMsg_FileIO_GeneralReply()); | 419 host()->SendReply(reply_context, PpapiPluginMsg_FileIO_GeneralReply()); |
| 416 state_manager_.SetOperationFinished(); | 420 state_manager_.SetOperationFinished(); |
| 417 } | 421 } |
| 418 | 422 |
| 419 // TODO(rvargas): this method should go away when FileApi moves to use File. | |
| 420 void PepperFileIOHost::ExecutePlatformOpenFileCallback( | |
| 421 ppapi::host::ReplyMessageContext reply_context, | |
| 422 base::File::Error error_code, | |
| 423 base::PassPlatformFile file, | |
| 424 bool unused_created) { | |
| 425 DCHECK(!file_.IsValid()); | |
| 426 file_.SetFile(base::File(file.ReleaseValue())); | |
| 427 | |
| 428 OnOpenProxyCallback(reply_context, error_code); | |
| 429 } | |
| 430 | |
| 431 void PepperFileIOHost::OnOpenProxyCallback( | 423 void PepperFileIOHost::OnOpenProxyCallback( |
| 432 ppapi::host::ReplyMessageContext reply_context, | 424 ppapi::host::ReplyMessageContext reply_context, |
| 433 base::File::Error error_code) { | 425 base::File::Error error_code) { |
| 434 int32_t pp_error = ppapi::FileErrorToPepperError(error_code); | 426 int32_t pp_error = ppapi::FileErrorToPepperError(error_code); |
| 435 if (file_.IsValid() && !AddFileToReplyContext(open_flags_, &reply_context)) | 427 if (file_.IsValid() && !AddFileToReplyContext(open_flags_, &reply_context)) |
| 436 pp_error = PP_ERROR_FAILED; | 428 pp_error = PP_ERROR_FAILED; |
| 437 | 429 |
| 438 PP_Resource quota_file_system = 0; | 430 PP_Resource quota_file_system = 0; |
| 439 if (pp_error == PP_OK) { | 431 if (pp_error == PP_OK) { |
| 440 state_manager_.SetOpenSucceed(); | 432 state_manager_.SetOpenSucceed(); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 471 | 463 |
| 472 ppapi::proxy::SerializedHandle file_handle; | 464 ppapi::proxy::SerializedHandle file_handle; |
| 473 // A non-zero resource id signals NaClIPCAdapter to create a NaClQuotaDesc. | 465 // A non-zero resource id signals NaClIPCAdapter to create a NaClQuotaDesc. |
| 474 PP_Resource quota_file_io = check_quota_ ? pp_resource() : 0; | 466 PP_Resource quota_file_io = check_quota_ ? pp_resource() : 0; |
| 475 file_handle.set_file_handle(transit_file, open_flags, quota_file_io); | 467 file_handle.set_file_handle(transit_file, open_flags, quota_file_io); |
| 476 reply_context->params.AppendHandle(file_handle); | 468 reply_context->params.AppendHandle(file_handle); |
| 477 return true; | 469 return true; |
| 478 } | 470 } |
| 479 | 471 |
| 480 } // namespace content | 472 } // namespace content |
| OLD | NEW |