| OLD | NEW |
| 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 "webkit/plugins/ppapi/ppb_file_io_impl.h" | 5 #include "webkit/plugins/ppapi/ppb_file_io_impl.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/file_util.h" | 10 #include "base/file_util.h" |
| 10 #include "base/file_util_proxy.h" | 11 #include "base/file_util_proxy.h" |
| 11 #include "base/message_loop_proxy.h" | 12 #include "base/message_loop_proxy.h" |
| 12 #include "base/platform_file.h" | 13 #include "base/platform_file.h" |
| 13 #include "base/logging.h" | 14 #include "base/logging.h" |
| 14 #include "base/time.h" | 15 #include "base/time.h" |
| 15 #include "ppapi/c/ppb_file_io.h" | 16 #include "ppapi/c/ppb_file_io.h" |
| 16 #include "ppapi/c/trusted/ppb_file_io_trusted.h" | 17 #include "ppapi/c/trusted/ppb_file_io_trusted.h" |
| 17 #include "ppapi/c/pp_completion_callback.h" | 18 #include "ppapi/c/pp_completion_callback.h" |
| 18 #include "ppapi/c/pp_errors.h" | 19 #include "ppapi/c/pp_errors.h" |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 57 return PP_ERROR_BADARGUMENT; | 58 return PP_ERROR_BADARGUMENT; |
| 58 | 59 |
| 59 PluginDelegate* plugin_delegate = GetPluginDelegate(); | 60 PluginDelegate* plugin_delegate = GetPluginDelegate(); |
| 60 if (!plugin_delegate) | 61 if (!plugin_delegate) |
| 61 return PP_ERROR_BADARGUMENT; | 62 return PP_ERROR_BADARGUMENT; |
| 62 | 63 |
| 63 if (file_ref->HasValidFileSystem()) { | 64 if (file_ref->HasValidFileSystem()) { |
| 64 file_system_url_ = file_ref->GetFileSystemURL(); | 65 file_system_url_ = file_ref->GetFileSystemURL(); |
| 65 if (!plugin_delegate->AsyncOpenFileSystemURL( | 66 if (!plugin_delegate->AsyncOpenFileSystemURL( |
| 66 file_system_url_, flags, | 67 file_system_url_, flags, |
| 67 base::Bind(&PPB_FileIO_Impl::ExecutePlatformOpenFileCallback, | 68 base::Bind( |
| 68 weak_factory_.GetWeakPtr()))) | 69 &PPB_FileIO_Impl::ExecutePlatformOpenFileSystemURLCallback, |
| 70 weak_factory_.GetWeakPtr()))) |
| 69 return PP_ERROR_FAILED; | 71 return PP_ERROR_FAILED; |
| 70 } else { | 72 } else { |
| 71 if (file_system_type_ != PP_FILESYSTEMTYPE_EXTERNAL) | 73 if (file_system_type_ != PP_FILESYSTEMTYPE_EXTERNAL) |
| 72 return PP_ERROR_FAILED; | 74 return PP_ERROR_FAILED; |
| 73 if (!plugin_delegate->AsyncOpenFile( | 75 if (!plugin_delegate->AsyncOpenFile( |
| 74 file_ref->GetSystemPath(), flags, | 76 file_ref->GetSystemPath(), flags, |
| 75 base::Bind(&PPB_FileIO_Impl::ExecutePlatformOpenFileCallback, | 77 base::Bind(&PPB_FileIO_Impl::ExecutePlatformOpenFileCallback, |
| 76 weak_factory_.GetWeakPtr()))) | 78 weak_factory_.GetWeakPtr()))) |
| 77 return PP_ERROR_FAILED; | 79 return PP_ERROR_FAILED; |
| 78 } | 80 } |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 return PP_ERROR_FAILED; | 206 return PP_ERROR_FAILED; |
| 205 | 207 |
| 206 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL); | 208 RegisterCallback(OPERATION_EXCLUSIVE, callback, NULL, NULL); |
| 207 return PP_OK_COMPLETIONPENDING; | 209 return PP_OK_COMPLETIONPENDING; |
| 208 } | 210 } |
| 209 | 211 |
| 210 void PPB_FileIO_Impl::Close() { | 212 void PPB_FileIO_Impl::Close() { |
| 211 PluginDelegate* plugin_delegate = GetPluginDelegate(); | 213 PluginDelegate* plugin_delegate = GetPluginDelegate(); |
| 212 if (file_ != base::kInvalidPlatformFileValue && plugin_delegate) { | 214 if (file_ != base::kInvalidPlatformFileValue && plugin_delegate) { |
| 213 base::FileUtilProxy::Close( | 215 base::FileUtilProxy::Close( |
| 214 plugin_delegate->GetFileThreadMessageLoopProxy(), file_, | 216 plugin_delegate->GetFileThreadMessageLoopProxy(), |
| 215 base::FileUtilProxy::StatusCallback()); | 217 file_, |
| 218 base::ResetAndReturn(¬ify_close_file_callback_)); |
| 216 file_ = base::kInvalidPlatformFileValue; | 219 file_ = base::kInvalidPlatformFileValue; |
| 217 quota_file_io_.reset(); | 220 quota_file_io_.reset(); |
| 218 } | 221 } |
| 219 } | 222 } |
| 220 | 223 |
| 221 int32_t PPB_FileIO_Impl::GetOSFileDescriptor() { | 224 int32_t PPB_FileIO_Impl::GetOSFileDescriptor() { |
| 222 #if defined(OS_POSIX) | 225 #if defined(OS_POSIX) |
| 223 return file_; | 226 return file_; |
| 224 #elif defined(OS_WIN) | 227 #elif defined(OS_WIN) |
| 225 return reinterpret_cast<uintptr_t>(file_); | 228 return reinterpret_cast<uintptr_t>(file_); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 287 if (file_ != base::kInvalidPlatformFileValue && | 290 if (file_ != base::kInvalidPlatformFileValue && |
| 288 (file_system_type_ == PP_FILESYSTEMTYPE_LOCALTEMPORARY || | 291 (file_system_type_ == PP_FILESYSTEMTYPE_LOCALTEMPORARY || |
| 289 file_system_type_ == PP_FILESYSTEMTYPE_LOCALPERSISTENT)) { | 292 file_system_type_ == PP_FILESYSTEMTYPE_LOCALPERSISTENT)) { |
| 290 quota_file_io_.reset(new QuotaFileIO( | 293 quota_file_io_.reset(new QuotaFileIO( |
| 291 pp_instance(), file_, file_system_url_, file_system_type_)); | 294 pp_instance(), file_, file_system_url_, file_system_type_)); |
| 292 } | 295 } |
| 293 | 296 |
| 294 ExecuteOpenFileCallback(::ppapi::PlatformFileErrorToPepperError(error_code)); | 297 ExecuteOpenFileCallback(::ppapi::PlatformFileErrorToPepperError(error_code)); |
| 295 } | 298 } |
| 296 | 299 |
| 300 void PPB_FileIO_Impl::ExecutePlatformOpenFileSystemURLCallback( |
| 301 base::PlatformFileError error_code, |
| 302 base::PassPlatformFile file, |
| 303 const PluginDelegate::NotifyCloseFileCallback& callback) { |
| 304 if (error_code == base::PLATFORM_FILE_OK) |
| 305 notify_close_file_callback_ = callback; |
| 306 ExecutePlatformOpenFileCallback(error_code, file); |
| 307 } |
| 308 |
| 297 void PPB_FileIO_Impl::ExecutePlatformQueryCallback( | 309 void PPB_FileIO_Impl::ExecutePlatformQueryCallback( |
| 298 base::PlatformFileError error_code, | 310 base::PlatformFileError error_code, |
| 299 const base::PlatformFileInfo& file_info) { | 311 const base::PlatformFileInfo& file_info) { |
| 300 PP_FileInfo pp_info; | 312 PP_FileInfo pp_info; |
| 301 pp_info.size = file_info.size; | 313 pp_info.size = file_info.size; |
| 302 pp_info.creation_time = TimeToPPTime(file_info.creation_time); | 314 pp_info.creation_time = TimeToPPTime(file_info.creation_time); |
| 303 pp_info.last_access_time = TimeToPPTime(file_info.last_accessed); | 315 pp_info.last_access_time = TimeToPPTime(file_info.last_accessed); |
| 304 pp_info.last_modified_time = TimeToPPTime(file_info.last_modified); | 316 pp_info.last_modified_time = TimeToPPTime(file_info.last_modified); |
| 305 pp_info.system_type = file_system_type_; | 317 pp_info.system_type = file_system_type_; |
| 306 if (file_info.is_directory) | 318 if (file_info.is_directory) |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 if (error_code != base::PLATFORM_FILE_OK) { | 351 if (error_code != base::PLATFORM_FILE_OK) { |
| 340 RunAndRemoveFirstPendingCallback( | 352 RunAndRemoveFirstPendingCallback( |
| 341 ::ppapi::PlatformFileErrorToPepperError(error_code)); | 353 ::ppapi::PlatformFileErrorToPepperError(error_code)); |
| 342 } else { | 354 } else { |
| 343 RunAndRemoveFirstPendingCallback(bytes_written); | 355 RunAndRemoveFirstPendingCallback(bytes_written); |
| 344 } | 356 } |
| 345 } | 357 } |
| 346 | 358 |
| 347 } // namespace ppapi | 359 } // namespace ppapi |
| 348 } // namespace webkit | 360 } // namespace webkit |
| OLD | NEW |