| 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 "storage/browser/fileapi/copy_or_move_operation_delegate.h" | 5 #include "storage/browser/fileapi/copy_or_move_operation_delegate.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <utility> |
| 8 | 9 |
| 9 #include "base/bind.h" | 10 #include "base/bind.h" |
| 10 #include "base/files/file_path.h" | 11 #include "base/files/file_path.h" |
| 11 #include "base/macros.h" | 12 #include "base/macros.h" |
| 12 #include "net/base/io_buffer.h" | 13 #include "net/base/io_buffer.h" |
| 13 #include "net/base/net_errors.h" | 14 #include "net/base/net_errors.h" |
| 14 #include "storage/browser/blob/shareable_file_reference.h" | 15 #include "storage/browser/blob/shareable_file_reference.h" |
| 15 #include "storage/browser/fileapi/copy_or_move_file_validator.h" | 16 #include "storage/browser/fileapi/copy_or_move_file_validator.h" |
| 16 #include "storage/browser/fileapi/file_observers.h" | 17 #include "storage/browser/fileapi/file_observers.h" |
| 17 #include "storage/browser/fileapi/file_stream_reader.h" | 18 #include "storage/browser/fileapi/file_stream_reader.h" |
| (...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 375 scoped_ptr<storage::FileStreamReader> reader, | 376 scoped_ptr<storage::FileStreamReader> reader, |
| 376 scoped_ptr<FileStreamWriter> writer, | 377 scoped_ptr<FileStreamWriter> writer, |
| 377 const FileSystemOperation::CopyFileProgressCallback& | 378 const FileSystemOperation::CopyFileProgressCallback& |
| 378 file_progress_callback) | 379 file_progress_callback) |
| 379 : operation_runner_(operation_runner), | 380 : operation_runner_(operation_runner), |
| 380 file_system_context_(file_system_context), | 381 file_system_context_(file_system_context), |
| 381 operation_type_(operation_type), | 382 operation_type_(operation_type), |
| 382 src_url_(src_url), | 383 src_url_(src_url), |
| 383 dest_url_(dest_url), | 384 dest_url_(dest_url), |
| 384 option_(option), | 385 option_(option), |
| 385 reader_(reader.Pass()), | 386 reader_(std::move(reader)), |
| 386 writer_(writer.Pass()), | 387 writer_(std::move(writer)), |
| 387 file_progress_callback_(file_progress_callback), | 388 file_progress_callback_(file_progress_callback), |
| 388 cancel_requested_(false), | 389 cancel_requested_(false), |
| 389 weak_factory_(this) {} | 390 weak_factory_(this) {} |
| 390 | 391 |
| 391 void Run( | 392 void Run( |
| 392 const CopyOrMoveOperationDelegate::StatusCallback& callback) override { | 393 const CopyOrMoveOperationDelegate::StatusCallback& callback) override { |
| 393 // Reader can be created even if the entry does not exist or the entry is | 394 // Reader can be created even if the entry does not exist or the entry is |
| 394 // a directory. To check errors before destination file creation, | 395 // a directory. To check errors before destination file creation, |
| 395 // check metadata first. | 396 // check metadata first. |
| 396 operation_runner_->GetMetadata( | 397 operation_runner_->GetMetadata( |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 495 error = base::File::FILE_ERROR_ABORT; | 496 error = base::File::FILE_ERROR_ABORT; |
| 496 | 497 |
| 497 if (error != base::File::FILE_OK) { | 498 if (error != base::File::FILE_OK) { |
| 498 callback.Run(error); | 499 callback.Run(error); |
| 499 return; | 500 return; |
| 500 } | 501 } |
| 501 | 502 |
| 502 NotifyOnStartUpdate(dest_url_); | 503 NotifyOnStartUpdate(dest_url_); |
| 503 DCHECK(!copy_helper_); | 504 DCHECK(!copy_helper_); |
| 504 copy_helper_.reset(new CopyOrMoveOperationDelegate::StreamCopyHelper( | 505 copy_helper_.reset(new CopyOrMoveOperationDelegate::StreamCopyHelper( |
| 505 reader_.Pass(), writer_.Pass(), dest_url_.mount_option().flush_policy(), | 506 std::move(reader_), std::move(writer_), |
| 506 kReadBufferSize, file_progress_callback_, | 507 dest_url_.mount_option().flush_policy(), kReadBufferSize, |
| 508 file_progress_callback_, |
| 507 base::TimeDelta::FromMilliseconds( | 509 base::TimeDelta::FromMilliseconds( |
| 508 kMinProgressCallbackInvocationSpanInMilliseconds))); | 510 kMinProgressCallbackInvocationSpanInMilliseconds))); |
| 509 copy_helper_->Run( | 511 copy_helper_->Run( |
| 510 base::Bind(&StreamCopyOrMoveImpl::RunAfterStreamCopy, | 512 base::Bind(&StreamCopyOrMoveImpl::RunAfterStreamCopy, |
| 511 weak_factory_.GetWeakPtr(), callback, last_modified)); | 513 weak_factory_.GetWeakPtr(), callback, last_modified)); |
| 512 } | 514 } |
| 513 | 515 |
| 514 void RunAfterStreamCopy( | 516 void RunAfterStreamCopy( |
| 515 const CopyOrMoveOperationDelegate::StatusCallback& callback, | 517 const CopyOrMoveOperationDelegate::StatusCallback& callback, |
| 516 const base::Time& last_modified, | 518 const base::Time& last_modified, |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 586 | 588 |
| 587 } // namespace | 589 } // namespace |
| 588 | 590 |
| 589 CopyOrMoveOperationDelegate::StreamCopyHelper::StreamCopyHelper( | 591 CopyOrMoveOperationDelegate::StreamCopyHelper::StreamCopyHelper( |
| 590 scoped_ptr<storage::FileStreamReader> reader, | 592 scoped_ptr<storage::FileStreamReader> reader, |
| 591 scoped_ptr<FileStreamWriter> writer, | 593 scoped_ptr<FileStreamWriter> writer, |
| 592 storage::FlushPolicy flush_policy, | 594 storage::FlushPolicy flush_policy, |
| 593 int buffer_size, | 595 int buffer_size, |
| 594 const FileSystemOperation::CopyFileProgressCallback& file_progress_callback, | 596 const FileSystemOperation::CopyFileProgressCallback& file_progress_callback, |
| 595 const base::TimeDelta& min_progress_callback_invocation_span) | 597 const base::TimeDelta& min_progress_callback_invocation_span) |
| 596 : reader_(reader.Pass()), | 598 : reader_(std::move(reader)), |
| 597 writer_(writer.Pass()), | 599 writer_(std::move(writer)), |
| 598 flush_policy_(flush_policy), | 600 flush_policy_(flush_policy), |
| 599 file_progress_callback_(file_progress_callback), | 601 file_progress_callback_(file_progress_callback), |
| 600 io_buffer_(new net::IOBufferWithSize(buffer_size)), | 602 io_buffer_(new net::IOBufferWithSize(buffer_size)), |
| 601 num_copied_bytes_(0), | 603 num_copied_bytes_(0), |
| 602 previous_flush_offset_(0), | 604 previous_flush_offset_(0), |
| 603 min_progress_callback_invocation_span_( | 605 min_progress_callback_invocation_span_( |
| 604 min_progress_callback_invocation_span), | 606 min_progress_callback_invocation_span), |
| 605 cancel_requested_(false), | 607 cancel_requested_(false), |
| 606 weak_factory_(this) { | 608 weak_factory_(this) {} |
| 607 } | |
| 608 | 609 |
| 609 CopyOrMoveOperationDelegate::StreamCopyHelper::~StreamCopyHelper() { | 610 CopyOrMoveOperationDelegate::StreamCopyHelper::~StreamCopyHelper() { |
| 610 } | 611 } |
| 611 | 612 |
| 612 void CopyOrMoveOperationDelegate::StreamCopyHelper::Run( | 613 void CopyOrMoveOperationDelegate::StreamCopyHelper::Run( |
| 613 const StatusCallback& callback) { | 614 const StatusCallback& callback) { |
| 614 file_progress_callback_.Run(0); | 615 file_progress_callback_.Run(0); |
| 615 last_progress_callback_invocation_time_ = base::Time::Now(); | 616 last_progress_callback_invocation_time_ = base::Time::Now(); |
| 616 Read(callback); | 617 Read(callback); |
| 617 } | 618 } |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 817 } | 818 } |
| 818 | 819 |
| 819 if (!validator_factory) { | 820 if (!validator_factory) { |
| 820 scoped_ptr<storage::FileStreamReader> reader = | 821 scoped_ptr<storage::FileStreamReader> reader = |
| 821 file_system_context()->CreateFileStreamReader( | 822 file_system_context()->CreateFileStreamReader( |
| 822 src_url, 0 /* offset */, storage::kMaximumLength, base::Time()); | 823 src_url, 0 /* offset */, storage::kMaximumLength, base::Time()); |
| 823 scoped_ptr<FileStreamWriter> writer = | 824 scoped_ptr<FileStreamWriter> writer = |
| 824 file_system_context()->CreateFileStreamWriter(dest_url, 0); | 825 file_system_context()->CreateFileStreamWriter(dest_url, 0); |
| 825 if (reader && writer) { | 826 if (reader && writer) { |
| 826 impl = new StreamCopyOrMoveImpl( | 827 impl = new StreamCopyOrMoveImpl( |
| 827 operation_runner(), | 828 operation_runner(), file_system_context(), operation_type_, src_url, |
| 828 file_system_context(), | 829 dest_url, option_, std::move(reader), std::move(writer), |
| 829 operation_type_, | |
| 830 src_url, | |
| 831 dest_url, | |
| 832 option_, | |
| 833 reader.Pass(), | |
| 834 writer.Pass(), | |
| 835 base::Bind(&CopyOrMoveOperationDelegate::OnCopyFileProgress, | 830 base::Bind(&CopyOrMoveOperationDelegate::OnCopyFileProgress, |
| 836 weak_factory_.GetWeakPtr(), | 831 weak_factory_.GetWeakPtr(), src_url)); |
| 837 src_url)); | |
| 838 } | 832 } |
| 839 } | 833 } |
| 840 | 834 |
| 841 if (!impl) { | 835 if (!impl) { |
| 842 impl = new SnapshotCopyOrMoveImpl( | 836 impl = new SnapshotCopyOrMoveImpl( |
| 843 operation_runner(), operation_type_, src_url, dest_url, option_, | 837 operation_runner(), operation_type_, src_url, dest_url, option_, |
| 844 validator_factory, | 838 validator_factory, |
| 845 base::Bind(&CopyOrMoveOperationDelegate::OnCopyFileProgress, | 839 base::Bind(&CopyOrMoveOperationDelegate::OnCopyFileProgress, |
| 846 weak_factory_.GetWeakPtr(), src_url)); | 840 weak_factory_.GetWeakPtr(), src_url)); |
| 847 } | 841 } |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1032 base::FilePath relative = dest_root_.virtual_path(); | 1026 base::FilePath relative = dest_root_.virtual_path(); |
| 1033 src_root_.virtual_path().AppendRelativePath(src_url.virtual_path(), | 1027 src_root_.virtual_path().AppendRelativePath(src_url.virtual_path(), |
| 1034 &relative); | 1028 &relative); |
| 1035 return file_system_context()->CreateCrackedFileSystemURL( | 1029 return file_system_context()->CreateCrackedFileSystemURL( |
| 1036 dest_root_.origin(), | 1030 dest_root_.origin(), |
| 1037 dest_root_.mount_type(), | 1031 dest_root_.mount_type(), |
| 1038 relative); | 1032 relative); |
| 1039 } | 1033 } |
| 1040 | 1034 |
| 1041 } // namespace storage | 1035 } // namespace storage |
| OLD | NEW |