Commit 2a7abddb authored by Bailey Berro's avatar Bailey Berro Committed by Commit Bot

Add SmbTaskQueue to SmbFileSystem

This change switches SmbFileSystem to routing all calls to
SmbProviderClient through an SmbTaskQueue.

Test: verified manually on eve
Bug: chromium:757625
Change-Id: Id3466a5cbd0858070bf7170f1358d88bd8d32334
Reviewed-on: https://chromium-review.googlesource.com/957477
Commit-Queue: Bailey Berro <baileyberro@chromium.org>
Reviewed-by: default avatarZentaro Kavanagh <zentaro@chromium.org>
Cr-Commit-Position: refs/heads/master@{#543842}
parent a3c8efc9
...@@ -73,6 +73,8 @@ storage::DirectoryEntry::DirectoryEntryType MapEntryType(bool is_directory) { ...@@ -73,6 +73,8 @@ storage::DirectoryEntry::DirectoryEntryType MapEntryType(bool is_directory) {
: storage::DirectoryEntry::FILE; : storage::DirectoryEntry::FILE;
} }
constexpr size_t kTaskQueueCapacity = 2;
} // namespace } // namespace
using file_system_provider::AbortCallback; using file_system_provider::AbortCallback;
...@@ -81,7 +83,8 @@ SmbFileSystem::SmbFileSystem( ...@@ -81,7 +83,8 @@ SmbFileSystem::SmbFileSystem(
const file_system_provider::ProvidedFileSystemInfo& file_system_info, const file_system_provider::ProvidedFileSystemInfo& file_system_info,
UnmountCallback unmount_callback) UnmountCallback unmount_callback)
: file_system_info_(file_system_info), : file_system_info_(file_system_info),
unmount_callback_(std::move(unmount_callback)) {} unmount_callback_(std::move(unmount_callback)),
task_queue_(kTaskQueueCapacity) {}
SmbFileSystem::~SmbFileSystem() {} SmbFileSystem::~SmbFileSystem() {}
...@@ -153,29 +156,48 @@ base::WeakPtr<SmbProviderClient> SmbFileSystem::GetWeakSmbProviderClient() ...@@ -153,29 +156,48 @@ base::WeakPtr<SmbProviderClient> SmbFileSystem::GetWeakSmbProviderClient()
return GetSmbProviderClient()->AsWeakPtr(); return GetSmbProviderClient()->AsWeakPtr();
} }
void SmbFileSystem::Abort() { void SmbFileSystem::EnqueueTask(SmbTask task, OperationId operation_id) {
// TODO(zentaro): To implement Abort() fully will require storing a task_queue_.AddTask(std::move(task), operation_id);
// request id unique to each method call and also passing it to the daemon. }
// However none of current operations on the daemon are cancelable, so
// until there are operations that can actually be cancelled this will OperationId SmbFileSystem::EnqueueTaskAndGetOperationId(SmbTask task) {
// be a no-op. OperationId operation_id = task_queue_.GetNextOperationId();
EnqueueTask(std::move(task), operation_id);
return operation_id;
}
AbortCallback SmbFileSystem::EnqueueTaskAndGetCallback(SmbTask task) {
OperationId operation_id = EnqueueTaskAndGetOperationId(std::move(task));
return CreateAbortCallback(operation_id);
}
void SmbFileSystem::Abort(OperationId operation_id) {
task_queue_.AbortOperation(operation_id);
}
AbortCallback SmbFileSystem::CreateAbortCallback(OperationId operation_id) {
return base::BindRepeating(&SmbFileSystem::Abort, AsWeakPtr(), operation_id);
} }
AbortCallback SmbFileSystem::CreateAbortCallback() { AbortCallback SmbFileSystem::CreateAbortCallback() {
return base::BindRepeating(&SmbFileSystem::Abort, AsWeakPtr()); return base::DoNothing();
} }
AbortCallback SmbFileSystem::RequestUnmount( AbortCallback SmbFileSystem::RequestUnmount(
const storage::AsyncFileUtil::StatusCallback& callback) { const storage::AsyncFileUtil::StatusCallback& callback) {
GetSmbProviderClient()->Unmount( auto reply = base::BindOnce(&SmbFileSystem::HandleRequestUnmountCallback,
GetMountId(), base::BindOnce(&SmbFileSystem::HandleRequestUnmountCallback, AsWeakPtr(), callback);
AsWeakPtr(), callback)); SmbTask task =
return CreateAbortCallback(); base::BindOnce(&SmbProviderClient::Unmount, GetWeakSmbProviderClient(),
GetMountId(), std::move(reply));
return EnqueueTaskAndGetCallback(std::move(task));
} }
void SmbFileSystem::HandleRequestUnmountCallback( void SmbFileSystem::HandleRequestUnmountCallback(
const storage::AsyncFileUtil::StatusCallback& callback, const storage::AsyncFileUtil::StatusCallback& callback,
smbprovider::ErrorType error) { smbprovider::ErrorType error) {
task_queue_.TaskFinished();
base::File::Error result = TranslateError(error); base::File::Error result = TranslateError(error);
if (result == base::File::FILE_OK) { if (result == base::File::FILE_OK) {
result = RunUnmountCallback( result = RunUnmountCallback(
...@@ -189,11 +211,14 @@ AbortCallback SmbFileSystem::GetMetadata( ...@@ -189,11 +211,14 @@ AbortCallback SmbFileSystem::GetMetadata(
const base::FilePath& entry_path, const base::FilePath& entry_path,
ProvidedFileSystemInterface::MetadataFieldMask fields, ProvidedFileSystemInterface::MetadataFieldMask fields,
const ProvidedFileSystemInterface::GetMetadataCallback& callback) { const ProvidedFileSystemInterface::GetMetadataCallback& callback) {
GetSmbProviderClient()->GetMetadataEntry( auto reply =
GetMountId(), entry_path,
base::BindOnce(&SmbFileSystem::HandleRequestGetMetadataEntryCallback, base::BindOnce(&SmbFileSystem::HandleRequestGetMetadataEntryCallback,
AsWeakPtr(), fields, callback)); AsWeakPtr(), fields, callback);
return CreateAbortCallback(); SmbTask task = base::BindOnce(&SmbProviderClient::GetMetadataEntry,
GetWeakSmbProviderClient(), GetMountId(),
entry_path, std::move(reply));
return EnqueueTaskAndGetCallback(std::move(task));
} }
AbortCallback SmbFileSystem::GetActions( AbortCallback SmbFileSystem::GetActions(
...@@ -216,11 +241,14 @@ AbortCallback SmbFileSystem::ExecuteAction( ...@@ -216,11 +241,14 @@ AbortCallback SmbFileSystem::ExecuteAction(
AbortCallback SmbFileSystem::ReadDirectory( AbortCallback SmbFileSystem::ReadDirectory(
const base::FilePath& directory_path, const base::FilePath& directory_path,
const storage::AsyncFileUtil::ReadDirectoryCallback& callback) { const storage::AsyncFileUtil::ReadDirectoryCallback& callback) {
GetSmbProviderClient()->ReadDirectory( auto reply =
GetMountId(), directory_path,
base::BindOnce(&SmbFileSystem::HandleRequestReadDirectoryCallback, base::BindOnce(&SmbFileSystem::HandleRequestReadDirectoryCallback,
AsWeakPtr(), callback)); AsWeakPtr(), callback);
return CreateAbortCallback(); SmbTask task = base::BindOnce(&SmbProviderClient::ReadDirectory,
GetWeakSmbProviderClient(), GetMountId(),
directory_path, std::move(reply));
return EnqueueTaskAndGetCallback(std::move(task));
} }
AbortCallback SmbFileSystem::OpenFile(const base::FilePath& file_path, AbortCallback SmbFileSystem::OpenFile(const base::FilePath& file_path,
...@@ -228,28 +256,34 @@ AbortCallback SmbFileSystem::OpenFile(const base::FilePath& file_path, ...@@ -228,28 +256,34 @@ AbortCallback SmbFileSystem::OpenFile(const base::FilePath& file_path,
const OpenFileCallback& callback) { const OpenFileCallback& callback) {
bool writeable = bool writeable =
mode == file_system_provider::OPEN_FILE_MODE_WRITE ? true : false; mode == file_system_provider::OPEN_FILE_MODE_WRITE ? true : false;
GetSmbProviderClient()->OpenFile(
GetMountId(), file_path, writeable, auto reply = base::BindOnce(&SmbFileSystem::HandleRequestOpenFileCallback,
base::BindOnce(&SmbFileSystem::HandleRequestOpenFileCallback, AsWeakPtr(), AsWeakPtr(), callback);
callback)); SmbTask task =
return CreateAbortCallback(); base::BindOnce(&SmbProviderClient::OpenFile, GetWeakSmbProviderClient(),
GetMountId(), file_path, writeable, std::move(reply));
return EnqueueTaskAndGetCallback(std::move(task));
} }
void SmbFileSystem::HandleRequestOpenFileCallback( void SmbFileSystem::HandleRequestOpenFileCallback(
const OpenFileCallback& callback, const OpenFileCallback& callback,
smbprovider::ErrorType error, smbprovider::ErrorType error,
int32_t file_id) const { int32_t file_id) const {
task_queue_.TaskFinished();
callback.Run(file_id, TranslateError(error)); callback.Run(file_id, TranslateError(error));
} }
AbortCallback SmbFileSystem::CloseFile( AbortCallback SmbFileSystem::CloseFile(
int file_handle, int file_handle,
const storage::AsyncFileUtil::StatusCallback& callback) { const storage::AsyncFileUtil::StatusCallback& callback) {
GetSmbProviderClient()->CloseFile( auto reply = base::BindOnce(&SmbFileSystem::HandleStatusCallback, AsWeakPtr(),
GetMountId(), file_handle, callback);
base::BindOnce(&SmbFileSystem::HandleStatusCallback, AsWeakPtr(), SmbTask task =
callback)); base::BindOnce(&SmbProviderClient::CloseFile, GetWeakSmbProviderClient(),
return CreateAbortCallback(); GetMountId(), file_handle, std::move(reply));
return EnqueueTaskAndGetCallback(std::move(task));
} }
AbortCallback SmbFileSystem::ReadFile( AbortCallback SmbFileSystem::ReadFile(
...@@ -258,76 +292,96 @@ AbortCallback SmbFileSystem::ReadFile( ...@@ -258,76 +292,96 @@ AbortCallback SmbFileSystem::ReadFile(
int64_t offset, int64_t offset,
int length, int length,
const ReadChunkReceivedCallback& callback) { const ReadChunkReceivedCallback& callback) {
GetSmbProviderClient()->ReadFile( auto reply =
GetMountId(), file_handle, offset, length,
base::BindOnce(&SmbFileSystem::HandleRequestReadFileCallback, AsWeakPtr(), base::BindOnce(&SmbFileSystem::HandleRequestReadFileCallback, AsWeakPtr(),
length, scoped_refptr<net::IOBuffer>(buffer), callback)); length, scoped_refptr<net::IOBuffer>(buffer), callback);
return CreateAbortCallback();
SmbTask task = base::BindOnce(&SmbProviderClient::ReadFile,
GetWeakSmbProviderClient(), GetMountId(),
file_handle, offset, length, std::move(reply));
return EnqueueTaskAndGetCallback(std::move(task));
} }
AbortCallback SmbFileSystem::CreateDirectory( AbortCallback SmbFileSystem::CreateDirectory(
const base::FilePath& directory_path, const base::FilePath& directory_path,
bool recursive, bool recursive,
const storage::AsyncFileUtil::StatusCallback& callback) { const storage::AsyncFileUtil::StatusCallback& callback) {
GetSmbProviderClient()->CreateDirectory( auto reply = base::BindOnce(&SmbFileSystem::HandleStatusCallback, AsWeakPtr(),
GetMountId(), directory_path, recursive, callback);
base::BindOnce(&SmbFileSystem::HandleStatusCallback, AsWeakPtr(),
callback)); SmbTask task = base::BindOnce(&SmbProviderClient::CreateDirectory,
return CreateAbortCallback(); GetWeakSmbProviderClient(), GetMountId(),
directory_path, recursive, std::move(reply));
return EnqueueTaskAndGetCallback(std::move(task));
} }
AbortCallback SmbFileSystem::CreateFile( AbortCallback SmbFileSystem::CreateFile(
const base::FilePath& file_path, const base::FilePath& file_path,
const storage::AsyncFileUtil::StatusCallback& callback) { const storage::AsyncFileUtil::StatusCallback& callback) {
GetSmbProviderClient()->CreateFile( auto reply = base::BindOnce(&SmbFileSystem::HandleStatusCallback, AsWeakPtr(),
GetMountId(), file_path, callback);
base::BindOnce(&SmbFileSystem::HandleStatusCallback, AsWeakPtr(), SmbTask task =
callback)); base::BindOnce(&SmbProviderClient::CreateFile, GetWeakSmbProviderClient(),
return CreateAbortCallback(); GetMountId(), file_path, std::move(reply));
return EnqueueTaskAndGetCallback(std::move(task));
} }
AbortCallback SmbFileSystem::DeleteEntry( AbortCallback SmbFileSystem::DeleteEntry(
const base::FilePath& entry_path, const base::FilePath& entry_path,
bool recursive, bool recursive,
const storage::AsyncFileUtil::StatusCallback& callback) { const storage::AsyncFileUtil::StatusCallback& callback) {
GetSmbProviderClient()->GetDeleteList( OperationId operation_id = task_queue_.GetNextOperationId();
GetMountId(), entry_path,
base::BindOnce(&SmbFileSystem::HandleGetDeleteListCallback, AsWeakPtr(), auto reply = base::BindOnce(&SmbFileSystem::HandleGetDeleteListCallback,
callback)); AsWeakPtr(), callback, operation_id);
return CreateAbortCallback(); SmbTask task = base::BindOnce(&SmbProviderClient::GetDeleteList,
GetWeakSmbProviderClient(), GetMountId(),
entry_path, std::move(reply));
EnqueueTask(std::move(task), operation_id);
return CreateAbortCallback(operation_id);
} }
AbortCallback SmbFileSystem::CopyEntry( AbortCallback SmbFileSystem::CopyEntry(
const base::FilePath& source_path, const base::FilePath& source_path,
const base::FilePath& target_path, const base::FilePath& target_path,
const storage::AsyncFileUtil::StatusCallback& callback) { const storage::AsyncFileUtil::StatusCallback& callback) {
GetSmbProviderClient()->CopyEntry( auto reply = base::BindOnce(&SmbFileSystem::HandleStatusCallback, AsWeakPtr(),
GetMountId(), source_path, target_path, callback);
base::BindOnce(&SmbFileSystem::HandleStatusCallback, AsWeakPtr(), SmbTask task =
callback)); base::BindOnce(&SmbProviderClient::CopyEntry, GetWeakSmbProviderClient(),
return CreateAbortCallback(); GetMountId(), source_path, target_path, std::move(reply));
return EnqueueTaskAndGetCallback(std::move(task));
} }
AbortCallback SmbFileSystem::MoveEntry( AbortCallback SmbFileSystem::MoveEntry(
const base::FilePath& source_path, const base::FilePath& source_path,
const base::FilePath& target_path, const base::FilePath& target_path,
const storage::AsyncFileUtil::StatusCallback& callback) { const storage::AsyncFileUtil::StatusCallback& callback) {
GetSmbProviderClient()->MoveEntry( auto reply = base::BindOnce(&SmbFileSystem::HandleStatusCallback, AsWeakPtr(),
GetMountId(), source_path, target_path, callback);
base::BindOnce(&SmbFileSystem::HandleStatusCallback, AsWeakPtr(), SmbTask task =
callback)); base::BindOnce(&SmbProviderClient::MoveEntry, GetWeakSmbProviderClient(),
return CreateAbortCallback(); GetMountId(), source_path, target_path, std::move(reply));
return EnqueueTaskAndGetCallback(std::move(task));
} }
AbortCallback SmbFileSystem::Truncate( AbortCallback SmbFileSystem::Truncate(
const base::FilePath& file_path, const base::FilePath& file_path,
int64_t length, int64_t length,
const storage::AsyncFileUtil::StatusCallback& callback) { const storage::AsyncFileUtil::StatusCallback& callback) {
GetSmbProviderClient()->Truncate( auto reply = base::BindOnce(&SmbFileSystem::HandleStatusCallback, AsWeakPtr(),
GetMountId(), file_path, length, callback);
base::BindOnce(&SmbFileSystem::HandleStatusCallback, AsWeakPtr(), SmbTask task =
callback)); base::BindOnce(&SmbProviderClient::Truncate, GetWeakSmbProviderClient(),
return CreateAbortCallback(); GetMountId(), file_path, length, std::move(reply));
return EnqueueTaskAndGetCallback(std::move(task));
} }
AbortCallback SmbFileSystem::WriteFile( AbortCallback SmbFileSystem::WriteFile(
...@@ -339,11 +393,13 @@ AbortCallback SmbFileSystem::WriteFile( ...@@ -339,11 +393,13 @@ AbortCallback SmbFileSystem::WriteFile(
const std::vector<uint8_t> data(buffer->data(), buffer->data() + length); const std::vector<uint8_t> data(buffer->data(), buffer->data() + length);
base::ScopedFD temp_fd = temp_file_manager_.CreateTempFile(data); base::ScopedFD temp_fd = temp_file_manager_.CreateTempFile(data);
GetSmbProviderClient()->WriteFile( auto reply = base::BindOnce(&SmbFileSystem::HandleStatusCallback, AsWeakPtr(),
GetMountId(), file_handle, offset, length, std::move(temp_fd), callback);
base::BindOnce(&SmbFileSystem::HandleStatusCallback, AsWeakPtr(), SmbTask task = base::BindOnce(
callback)); &SmbProviderClient::WriteFile, GetWeakSmbProviderClient(), GetMountId(),
return CreateAbortCallback(); file_handle, offset, length, std::move(temp_fd), std::move(reply));
return EnqueueTaskAndGetCallback(std::move(task));
} }
AbortCallback SmbFileSystem::AddWatcher( AbortCallback SmbFileSystem::AddWatcher(
...@@ -424,6 +480,7 @@ void SmbFileSystem::HandleRequestReadDirectoryCallback( ...@@ -424,6 +480,7 @@ void SmbFileSystem::HandleRequestReadDirectoryCallback(
const storage::AsyncFileUtil::ReadDirectoryCallback& callback, const storage::AsyncFileUtil::ReadDirectoryCallback& callback,
smbprovider::ErrorType error, smbprovider::ErrorType error,
const smbprovider::DirectoryEntryListProto& entries) const { const smbprovider::DirectoryEntryListProto& entries) const {
task_queue_.TaskFinished();
uint32_t batch_size = kReadDirectoryInitialBatchSize; uint32_t batch_size = kReadDirectoryInitialBatchSize;
storage::AsyncFileUtil::EntryList entry_list; storage::AsyncFileUtil::EntryList entry_list;
...@@ -445,8 +502,10 @@ void SmbFileSystem::HandleRequestReadDirectoryCallback( ...@@ -445,8 +502,10 @@ void SmbFileSystem::HandleRequestReadDirectoryCallback(
void SmbFileSystem::HandleGetDeleteListCallback( void SmbFileSystem::HandleGetDeleteListCallback(
storage::AsyncFileUtil::StatusCallback callback, storage::AsyncFileUtil::StatusCallback callback,
OperationId operation_id,
smbprovider::ErrorType list_error, smbprovider::ErrorType list_error,
const smbprovider::DeleteListProto& delete_list) { const smbprovider::DeleteListProto& delete_list) {
task_queue_.TaskFinished();
if (delete_list.entries_size() == 0) { if (delete_list.entries_size() == 0) {
// There are no entries to delete. // There are no entries to delete.
DCHECK_NE(smbprovider::ERROR_OK, list_error); DCHECK_NE(smbprovider::ERROR_OK, list_error);
...@@ -458,10 +517,14 @@ void SmbFileSystem::HandleGetDeleteListCallback( ...@@ -458,10 +517,14 @@ void SmbFileSystem::HandleGetDeleteListCallback(
const base::FilePath entry_path(delete_list.entries(i)); const base::FilePath entry_path(delete_list.entries(i));
bool is_last_entry = (i == delete_list.entries_size() - 1); bool is_last_entry = (i == delete_list.entries_size() - 1);
GetSmbProviderClient()->DeleteEntry( auto reply =
GetMountId(), entry_path, false /* recursive */,
base::BindOnce(&SmbFileSystem::HandleDeleteEntryCallback, AsWeakPtr(), base::BindOnce(&SmbFileSystem::HandleDeleteEntryCallback, AsWeakPtr(),
callback, list_error, is_last_entry)); callback, list_error, is_last_entry);
SmbTask task = base::BindOnce(
&SmbProviderClient::DeleteEntry, GetWeakSmbProviderClient(),
GetMountId(), entry_path, false /* recursive */, std::move(reply));
EnqueueTask(std::move(task), operation_id);
} }
} }
...@@ -470,6 +533,7 @@ void SmbFileSystem::HandleDeleteEntryCallback( ...@@ -470,6 +533,7 @@ void SmbFileSystem::HandleDeleteEntryCallback(
smbprovider::ErrorType list_error, smbprovider::ErrorType list_error,
bool is_last_entry, bool is_last_entry,
smbprovider::ErrorType delete_error) const { smbprovider::ErrorType delete_error) const {
task_queue_.TaskFinished();
if (is_last_entry) { if (is_last_entry) {
// Only run the callback once. // Only run the callback once.
if (list_error != smbprovider::ERROR_OK) { if (list_error != smbprovider::ERROR_OK) {
...@@ -484,6 +548,7 @@ void SmbFileSystem::HandleRequestGetMetadataEntryCallback( ...@@ -484,6 +548,7 @@ void SmbFileSystem::HandleRequestGetMetadataEntryCallback(
const ProvidedFileSystemInterface::GetMetadataCallback& callback, const ProvidedFileSystemInterface::GetMetadataCallback& callback,
smbprovider::ErrorType error, smbprovider::ErrorType error,
const smbprovider::DirectoryEntryProto& entry) const { const smbprovider::DirectoryEntryProto& entry) const {
task_queue_.TaskFinished();
if (error != smbprovider::ERROR_OK) { if (error != smbprovider::ERROR_OK) {
callback.Run(std::unique_ptr<file_system_provider::EntryMetadata>(), callback.Run(std::unique_ptr<file_system_provider::EntryMetadata>(),
TranslateError(error)); TranslateError(error));
...@@ -526,6 +591,8 @@ void SmbFileSystem::HandleRequestReadFileCallback( ...@@ -526,6 +591,8 @@ void SmbFileSystem::HandleRequestReadFileCallback(
const ReadChunkReceivedCallback& callback, const ReadChunkReceivedCallback& callback,
smbprovider::ErrorType error, smbprovider::ErrorType error,
const base::ScopedFD& fd) const { const base::ScopedFD& fd) const {
task_queue_.TaskFinished();
if (error != smbprovider::ERROR_OK) { if (error != smbprovider::ERROR_OK) {
callback.Run(0 /* chunk_length */, false /* has_more */, callback.Run(0 /* chunk_length */, false /* has_more */,
TranslateError(error)); TranslateError(error));
...@@ -555,6 +622,8 @@ void SmbFileSystem::HandleRequestReadFileCallback( ...@@ -555,6 +622,8 @@ void SmbFileSystem::HandleRequestReadFileCallback(
void SmbFileSystem::HandleStatusCallback( void SmbFileSystem::HandleStatusCallback(
const storage::AsyncFileUtil::StatusCallback& callback, const storage::AsyncFileUtil::StatusCallback& callback,
smbprovider::ErrorType error) const { smbprovider::ErrorType error) const {
task_queue_.TaskFinished();
callback.Run(TranslateError(error)); callback.Run(TranslateError(error));
} }
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include "chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h" #include "chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h"
#include "chrome/browser/chromeos/file_system_provider/watcher.h" #include "chrome/browser/chromeos/file_system_provider/watcher.h"
#include "chrome/browser/chromeos/smb_client/smb_service.h" #include "chrome/browser/chromeos/smb_client/smb_service.h"
#include "chrome/browser/chromeos/smb_client/smb_task_queue.h"
#include "chrome/browser/chromeos/smb_client/temp_file_manager.h" #include "chrome/browser/chromeos/smb_client/temp_file_manager.h"
#include "chromeos/dbus/smb_provider_client.h" #include "chromeos/dbus/smb_provider_client.h"
#include "storage/browser/fileapi/async_file_util.h" #include "storage/browser/fileapi/async_file_util.h"
...@@ -176,7 +177,10 @@ class SmbFileSystem : public file_system_provider::ProvidedFileSystemInterface, ...@@ -176,7 +177,10 @@ class SmbFileSystem : public file_system_provider::ProvidedFileSystemInterface,
base::WeakPtr<ProvidedFileSystemInterface> GetWeakPtr() override; base::WeakPtr<ProvidedFileSystemInterface> GetWeakPtr() override;
private: private:
void Abort(); void Abort(OperationId operation_id);
file_system_provider::AbortCallback CreateAbortCallback(
OperationId operation_id);
file_system_provider::AbortCallback CreateAbortCallback(); file_system_provider::AbortCallback CreateAbortCallback();
...@@ -216,6 +220,7 @@ class SmbFileSystem : public file_system_provider::ProvidedFileSystemInterface, ...@@ -216,6 +220,7 @@ class SmbFileSystem : public file_system_provider::ProvidedFileSystemInterface,
void HandleGetDeleteListCallback( void HandleGetDeleteListCallback(
storage::AsyncFileUtil::StatusCallback callback, storage::AsyncFileUtil::StatusCallback callback,
OperationId operation_id,
smbprovider::ErrorType list_error, smbprovider::ErrorType list_error,
const smbprovider::DeleteListProto& delete_list); const smbprovider::DeleteListProto& delete_list);
...@@ -230,6 +235,17 @@ class SmbFileSystem : public file_system_provider::ProvidedFileSystemInterface, ...@@ -230,6 +235,17 @@ class SmbFileSystem : public file_system_provider::ProvidedFileSystemInterface,
SmbProviderClient* GetSmbProviderClient() const; SmbProviderClient* GetSmbProviderClient() const;
base::WeakPtr<SmbProviderClient> GetWeakSmbProviderClient() const; base::WeakPtr<SmbProviderClient> GetWeakSmbProviderClient() const;
// Gets a new OperationId and adds |task| to the task_queue_ with it. Returns
// an AbortCallback to abort the newly created operation.
file_system_provider::AbortCallback EnqueueTaskAndGetCallback(SmbTask task);
// Adds |task| to the task_queue_ for |operation_id|.
void EnqueueTask(SmbTask task, OperationId operation_id);
// Gets a new OperationId and adds |task| to the task_queue_ with it. Returns
// the OperationId for the newly created Operation.
OperationId EnqueueTaskAndGetOperationId(SmbTask task);
file_system_provider::ProvidedFileSystemInfo file_system_info_; file_system_provider::ProvidedFileSystemInfo file_system_info_;
file_system_provider::OpenedFiles opened_files_; file_system_provider::OpenedFiles opened_files_;
storage::AsyncFileUtil::EntryList entry_list_; storage::AsyncFileUtil::EntryList entry_list_;
...@@ -237,6 +253,7 @@ class SmbFileSystem : public file_system_provider::ProvidedFileSystemInterface, ...@@ -237,6 +253,7 @@ class SmbFileSystem : public file_system_provider::ProvidedFileSystemInterface,
UnmountCallback unmount_callback_; UnmountCallback unmount_callback_;
TempFileManager temp_file_manager_; TempFileManager temp_file_manager_;
mutable SmbTaskQueue task_queue_;
DISALLOW_COPY_AND_ASSIGN(SmbFileSystem); DISALLOW_COPY_AND_ASSIGN(SmbFileSystem);
}; };
......
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