Commit 8e011de2 authored by Bailey Berro's avatar Bailey Berro Committed by Commit Bot

Implement StartCopy and ContinueCopy on SmbFileSystem

This change implements StartCopy and ContinueCopy on SmbFileSystems.
StartCopy will be called by CopyEntry to begin a copy operation. When
the StartCopy handler callback is run, if there is more work to do the
ContinueCopy method is called.

Bug: chromium:757625
Change-Id: I9a8640e6e6b5cd089d65d3d7b668159676121250
Reviewed-on: https://chromium-review.googlesource.com/1132462Reviewed-by: default avatarZentaro Kavanagh <zentaro@chromium.org>
Commit-Queue: Bailey Berro <baileyberro@chromium.org>
Cr-Commit-Position: refs/heads/master@{#575275}
parent 684cd02c
......@@ -469,6 +469,33 @@ void SmbFileSystem::Configure(storage::AsyncFileUtil::StatusCallback callback) {
NOTREACHED();
}
void SmbFileSystem::StartCopy(const base::FilePath& source_path,
const base::FilePath& target_path,
OperationId operation_id,
storage::AsyncFileUtil::StatusCallback callback) {
auto reply = base::BindOnce(&SmbFileSystem::HandleStartCopyCallback,
AsWeakPtr(), std::move(callback), operation_id);
SmbTask task =
base::BindOnce(&SmbProviderClient::StartCopy, GetWeakSmbProviderClient(),
GetMountId(), source_path, target_path, std::move(reply));
EnqueueTask(std::move(task), operation_id);
}
void SmbFileSystem::ContinueCopy(
OperationId operation_id,
int32_t copy_token,
storage::AsyncFileUtil::StatusCallback callback) {
auto reply =
base::BindOnce(&SmbFileSystem::HandleContinueCopyCallback, AsWeakPtr(),
std::move(callback), operation_id, copy_token);
SmbTask task = base::BindOnce(&SmbProviderClient::ContinueCopy,
GetWeakSmbProviderClient(), GetMountId(),
copy_token, std::move(reply));
EnqueueTask(std::move(task), operation_id);
}
void SmbFileSystem::HandleRequestReadDirectoryCallback(
storage::AsyncFileUtil::ReadDirectoryCallback callback,
const base::ElapsedTimer& metrics_timer,
......@@ -542,6 +569,40 @@ void SmbFileSystem::HandleDeleteEntryCallback(
}
}
void SmbFileSystem::HandleStartCopyCallback(
storage::AsyncFileUtil::StatusCallback callback,
OperationId operation_id,
smbprovider::ErrorType error,
int32_t copy_token) {
task_queue_.TaskFinished();
if (error == smbprovider::ERROR_COPY_PENDING) {
// The copy needs to be continued.
DCHECK_GE(copy_token, 0);
ContinueCopy(operation_id, copy_token, std::move(callback));
return;
}
std::move(callback).Run(TranslateToFileError(error));
}
void SmbFileSystem::HandleContinueCopyCallback(
storage::AsyncFileUtil::StatusCallback callback,
OperationId operation_id,
int32_t copy_token,
smbprovider::ErrorType error) {
task_queue_.TaskFinished();
if (error == smbprovider::ERROR_COPY_PENDING) {
// The copy needs to be continued.
ContinueCopy(operation_id, copy_token, std::move(callback));
return;
}
std::move(callback).Run(TranslateToFileError(error));
}
void SmbFileSystem::HandleRequestGetMetadataEntryCallback(
ProvidedFileSystemInterface::MetadataFieldMask fields,
ProvidedFileSystemInterface::GetMetadataCallback callback,
......
......@@ -193,6 +193,18 @@ class SmbFileSystem : public file_system_provider::ProvidedFileSystemInterface,
file_system_provider::AbortCallback CreateAbortCallback();
// Starts a copy operation to copy |source_path| to |target_path| with the
// OperationId |operation_id|.
void StartCopy(const base::FilePath& source_path,
const base::FilePath& target_path,
OperationId operation_id,
storage::AsyncFileUtil::StatusCallback callback);
// Continues a copy corresponding to |operation_id| and |copy_token|.
void ContinueCopy(OperationId operation_id,
int32_t copy_token,
storage::AsyncFileUtil::StatusCallback callback);
void HandleRequestUnmountCallback(
storage::AsyncFileUtil::StatusCallback callback,
smbprovider::ErrorType error);
......@@ -238,6 +250,17 @@ class SmbFileSystem : public file_system_provider::ProvidedFileSystemInterface,
bool is_last_entry,
smbprovider::ErrorType delete_error) const;
void HandleStartCopyCallback(storage::AsyncFileUtil::StatusCallback callback,
OperationId operation_id,
smbprovider::ErrorType error,
int32_t copy_token);
void HandleContinueCopyCallback(
storage::AsyncFileUtil::StatusCallback callback,
OperationId operation_id,
int32_t copy_token,
smbprovider::ErrorType error);
int32_t GetMountId() const;
SmbProviderClient* GetSmbProviderClient() const;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment