OLD | NEW |
---|---|
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 "webkit/browser/fileapi/copy_or_move_operation_delegate.h" | 5 #include "webkit/browser/fileapi/copy_or_move_operation_delegate.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
9 #include "net/base/io_buffer.h" | 9 #include "net/base/io_buffer.h" |
10 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
416 } | 416 } |
417 | 417 |
418 if (file_info.is_directory) { | 418 if (file_info.is_directory) { |
419 // If not a directory, failed with appropriate error code. | 419 // If not a directory, failed with appropriate error code. |
420 callback.Run(base::File::FILE_ERROR_NOT_A_FILE); | 420 callback.Run(base::File::FILE_ERROR_NOT_A_FILE); |
421 return; | 421 return; |
422 } | 422 } |
423 | 423 |
424 // To use FileStreamWriter, we need to ensure the destination file exists. | 424 // To use FileStreamWriter, we need to ensure the destination file exists. |
425 operation_runner_->CreateFile( | 425 operation_runner_->CreateFile( |
426 dest_url_, false /* exclusive */, | 426 dest_url_, |
427 true /* exclusive */, | |
427 base::Bind(&StreamCopyOrMoveImpl::RunAfterCreateFileForDestination, | 428 base::Bind(&StreamCopyOrMoveImpl::RunAfterCreateFileForDestination, |
428 weak_factory_.GetWeakPtr(), | 429 weak_factory_.GetWeakPtr(), |
429 callback, file_info.last_modified)); | 430 callback, |
431 file_info.last_modified)); | |
430 } | 432 } |
431 | 433 |
432 void RunAfterCreateFileForDestination( | 434 void RunAfterCreateFileForDestination( |
433 const CopyOrMoveOperationDelegate::StatusCallback& callback, | 435 const CopyOrMoveOperationDelegate::StatusCallback& callback, |
434 const base::Time& last_modified, | 436 const base::Time& last_modified, |
435 base::File::Error error) { | 437 base::File::Error error) { |
436 if (cancel_requested_) | 438 if (cancel_requested_) |
437 error = base::File::FILE_ERROR_ABORT; | 439 error = base::File::FILE_ERROR_ABORT; |
438 | 440 |
441 if (error != base::File::FILE_OK && | |
442 error != base::File::FILE_ERROR_EXISTS) { | |
443 callback.Run(error); | |
444 return; | |
445 } | |
446 | |
447 if (error == base::File::FILE_ERROR_EXISTS) { | |
448 operation_runner_->Truncate( | |
449 dest_url_, | |
450 0 /* length */, | |
451 base::Bind(&StreamCopyOrMoveImpl::RunAfterTruncateForDestination, | |
452 weak_factory_.GetWeakPtr(), | |
453 callback, | |
454 last_modified)); | |
455 return; | |
456 } | |
tzik
2014/09/03 02:07:43
error == FILE_OK case handling?
iseki
2014/09/03 03:28:21
Done.
| |
457 } | |
458 | |
459 void RunAfterTruncateForDestination( | |
460 const CopyOrMoveOperationDelegate::StatusCallback& callback, | |
461 const base::Time& last_modified, | |
462 base::File::Error error) { | |
463 if (cancel_requested_) | |
464 error = base::File::FILE_ERROR_ABORT; | |
465 | |
439 if (error != base::File::FILE_OK) { | 466 if (error != base::File::FILE_OK) { |
440 callback.Run(error); | 467 callback.Run(error); |
441 return; | 468 return; |
442 } | 469 } |
443 | 470 |
444 const bool need_flush = dest_url_.mount_option().copy_sync_option() == | 471 const bool need_flush = dest_url_.mount_option().copy_sync_option() == |
445 storage::COPY_SYNC_OPTION_SYNC; | 472 storage::COPY_SYNC_OPTION_SYNC; |
446 | 473 |
447 DCHECK(!copy_helper_); | 474 DCHECK(!copy_helper_); |
448 copy_helper_.reset( | 475 copy_helper_.reset( |
(...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
957 base::FilePath relative = dest_root_.virtual_path(); | 984 base::FilePath relative = dest_root_.virtual_path(); |
958 src_root_.virtual_path().AppendRelativePath(src_url.virtual_path(), | 985 src_root_.virtual_path().AppendRelativePath(src_url.virtual_path(), |
959 &relative); | 986 &relative); |
960 return file_system_context()->CreateCrackedFileSystemURL( | 987 return file_system_context()->CreateCrackedFileSystemURL( |
961 dest_root_.origin(), | 988 dest_root_.origin(), |
962 dest_root_.mount_type(), | 989 dest_root_.mount_type(), |
963 relative); | 990 relative); |
964 } | 991 } |
965 | 992 |
966 } // namespace storage | 993 } // namespace storage |
OLD | NEW |