Commit 28765c8d authored by Evan Stade's avatar Evan Stade Committed by Chromium LUCI CQ

[Code health] Convert ErrorCallback to OnceCallback.

This was recently marked as RepeatingCallback, but should actually be
OnceCallback, as it's fired at most once.

MTPDeviceDelegateImplLinux does at times try to pass this callback off
to more than one owner, however this is an implementation detail that
should not make it into the public API. To circumvent this hurdle, a
wrapper is introduced in MTPDeviceDelegateImplLinux.

Bug: 1152278
Change-Id: Ie00927fad8f8fa95961380fcd391e6b463263a23
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2598010Reviewed-by: default avatarTommy Li <tommycli@chromium.org>
Commit-Queue: Evan Stade <estade@chromium.org>
Cr-Commit-Position: refs/heads/master@{#840231}
parent cbdae5ba
......@@ -87,13 +87,13 @@ class MTPDeviceTaskHelper {
// notify the caller about the file error.
void GetFileInfo(uint32_t file_id,
GetFileInfoSuccessCallback success_callback,
const ErrorCallback& error_callback);
ErrorCallback error_callback);
// Forwards CreateDirectory request to the MediaTransferProtocolManager.
void CreateDirectory(const uint32_t parent_id,
const std::string& directory_name,
const CreateDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback);
ErrorCallback error_callback);
// Dispatches the read directory request to the MediaTransferProtocolManager.
//
......@@ -110,7 +110,7 @@ class MTPDeviceTaskHelper {
// notify the caller about the file error.
void ReadDirectory(const uint32_t directory_id,
const ReadDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback);
ErrorCallback error_callback);
// Dispatches a read directory request to the MediaTransferProtocolManager to
// check if |directory_id| is empty.
......@@ -122,15 +122,14 @@ class MTPDeviceTaskHelper {
// notify the caller about the file error.
void CheckDirectoryEmpty(uint32_t directory_id,
CheckDirectoryEmptySuccessCallback success_callback,
const ErrorCallback& error_callback);
ErrorCallback error_callback);
// Forwards the WriteDataIntoSnapshotFile request to the MTPReadFileWorker
// object.
//
// |request_info| specifies the snapshot file request params.
// |snapshot_file_info| specifies the metadata of the snapshot file.
void WriteDataIntoSnapshotFile(
const SnapshotRequestInfo& request_info,
void WriteDataIntoSnapshotFile(SnapshotRequestInfo request_info,
const base::File::Info& snapshot_file_info);
// Dispatches the read bytes request to the MediaTransferProtocolManager.
......@@ -144,7 +143,7 @@ class MTPDeviceTaskHelper {
void RenameObject(const uint32_t object_id,
const std::string& new_name,
const RenameObjectSuccessCallback& success_callback,
const ErrorCallback& error_callback);
ErrorCallback error_callback);
// Forwards CopyFileFromLocal request to the MediaTransferProtocolManager.
void CopyFileFromLocal(
......@@ -153,12 +152,12 @@ class MTPDeviceTaskHelper {
const uint32_t parent_id,
const std::string& file_name,
const CopyFileFromLocalSuccessCallback& success_callback,
const ErrorCallback& error_callback);
ErrorCallback error_callback);
// Forwards DeleteObject request to the MediaTransferProtocolManager.
void DeleteObject(const uint32_t object_id,
const DeleteObjectSuccessCallback& success_callback,
const ErrorCallback& error_callback);
ErrorCallback error_callback);
// Dispatches the CloseStorage request to the MediaTransferProtocolManager.
void CloseStorage() const;
......@@ -185,13 +184,13 @@ class MTPDeviceTaskHelper {
// error has occurred. In this case, |error_callback| is invoked on the IO
// thread to notify the caller.
void OnGetFileInfo(GetFileInfoSuccessCallback success_callback,
const ErrorCallback& error_callback,
ErrorCallback error_callback,
std::vector<device::mojom::MtpFileEntryPtr> entries,
bool error) const;
// Called when CreateDirectory completes.
void OnCreateDirectory(const CreateDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback,
ErrorCallback error_callback,
const bool error) const;
// Query callback for ReadDirectoryEntryIds().
......@@ -205,7 +204,7 @@ class MTPDeviceTaskHelper {
// invoked on the IO thread to notify the caller.
void OnReadDirectoryEntryIdsToReadDirectory(
const ReadDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback,
ErrorCallback error_callback,
const std::vector<uint32_t>& file_ids,
bool error);
......@@ -220,7 +219,7 @@ class MTPDeviceTaskHelper {
// |error| indicates if the GetFileInfo() call succeeded or failed.
void OnGotDirectoryEntries(
const ReadDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback,
ErrorCallback error_callback,
const std::vector<uint32_t>& expected_file_ids,
const std::vector<uint32_t>& file_ids_to_read,
std::vector<device::mojom::MtpFileEntryPtr> file_entries,
......@@ -236,7 +235,7 @@ class MTPDeviceTaskHelper {
// and |error_callback| is invoked on the IO thread to notify the caller.
void OnCheckedDirectoryEmpty(
CheckDirectoryEmptySuccessCallback success_callback,
const ErrorCallback& error_callback,
ErrorCallback error_callback,
const std::vector<uint32_t>& file_ids,
bool error) const;
......@@ -262,25 +261,25 @@ class MTPDeviceTaskHelper {
// Called when RenameObject completes.
void OnRenameObject(const RenameObjectSuccessCallback& success_callback,
const ErrorCallback& error_callback,
ErrorCallback error_callback,
const bool error) const;
// Called when CopyFileFromLocal completes.
void OnCopyFileFromLocal(
const CopyFileFromLocalSuccessCallback& success_callback,
const ErrorCallback& error_callback,
ErrorCallback error_callback,
const bool error) const;
// Called when DeleteObject completes.
void OnDeleteObject(const DeleteObjectSuccessCallback& success_callback,
const ErrorCallback& error_callback,
ErrorCallback error_callback,
const bool error) const;
// Called when the device is uninitialized.
//
// Runs |error_callback| on the IO thread to notify the caller about the
// device |error|.
void HandleDeviceError(const ErrorCallback& error_callback,
void HandleDeviceError(ErrorCallback error_callback,
base::File::Error error) const;
// Handle to communicate with the MTP device.
......
......@@ -46,11 +46,11 @@ MTPReadFileWorker::~MTPReadFileWorker() {
}
void MTPReadFileWorker::WriteDataIntoSnapshotFile(
const SnapshotRequestInfo& request_info,
SnapshotRequestInfo request_info,
const base::File::Info& snapshot_file_info) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
ReadDataChunkFromDeviceFile(
std::make_unique<SnapshotFileDetails>(request_info, snapshot_file_info));
ReadDataChunkFromDeviceFile(std::make_unique<SnapshotFileDetails>(
std::move(request_info), snapshot_file_info));
}
void MTPReadFileWorker::ReadDataChunkFromDeviceFile(
......
......@@ -30,8 +30,7 @@ class MTPReadFileWorker {
//
// |request_info| specifies the snapshot file request params.
// |snapshot_file_info| specifies the metadata of the snapshot file.
void WriteDataIntoSnapshotFile(
const SnapshotRequestInfo& request_info,
void WriteDataIntoSnapshotFile(SnapshotRequestInfo request_info,
const base::File::Info& snapshot_file_info);
private:
......
......@@ -17,33 +17,28 @@ SnapshotRequestInfo::SnapshotRequestInfo(
const base::FilePath& snapshot_file_path,
const MTPDeviceAsyncDelegate::CreateSnapshotFileSuccessCallback&
success_callback,
const MTPDeviceAsyncDelegate::ErrorCallback& error_callback)
MTPDeviceAsyncDelegate::ErrorCallback error_callback)
: file_id(file_id),
snapshot_file_path(snapshot_file_path),
success_callback(success_callback),
error_callback(error_callback) {}
error_callback(std::move(error_callback)) {}
SnapshotRequestInfo::SnapshotRequestInfo(const SnapshotRequestInfo& other) =
default;
SnapshotRequestInfo::SnapshotRequestInfo(SnapshotRequestInfo&& other) = default;
SnapshotRequestInfo::~SnapshotRequestInfo() {
}
SnapshotRequestInfo::~SnapshotRequestInfo() = default;
////////////////////////////////////////////////////////////////////////////////
// SnapshotFileDetails //
////////////////////////////////////////////////////////////////////////////////
SnapshotFileDetails::SnapshotFileDetails(
const SnapshotRequestInfo& request_info,
SnapshotFileDetails::SnapshotFileDetails(SnapshotRequestInfo request_info,
const base::File::Info& file_info)
: request_info_(request_info),
: request_info_(std::move(request_info)),
file_info_(file_info),
bytes_written_(0),
error_occurred_(false) {
}
error_occurred_(false) {}
SnapshotFileDetails::~SnapshotFileDetails() {
}
SnapshotFileDetails::~SnapshotFileDetails() = default;
void SnapshotFileDetails::set_error_occurred(bool error) {
error_occurred_ = error;
......
......@@ -22,8 +22,10 @@ struct SnapshotRequestInfo {
const base::FilePath& snapshot_file_path,
const MTPDeviceAsyncDelegate::CreateSnapshotFileSuccessCallback&
success_callback,
const MTPDeviceAsyncDelegate::ErrorCallback& error_callback);
SnapshotRequestInfo(const SnapshotRequestInfo& other);
MTPDeviceAsyncDelegate::ErrorCallback error_callback);
SnapshotRequestInfo(SnapshotRequestInfo&& other);
SnapshotRequestInfo(const SnapshotRequestInfo& other) = delete;
SnapshotRequestInfo& operator=(const SnapshotRequestInfo& other) = delete;
~SnapshotRequestInfo();
// MTP device file id.
......@@ -37,7 +39,7 @@ struct SnapshotRequestInfo {
success_callback;
// A callback to be called when CreateSnapshotFile() fails.
const MTPDeviceAsyncDelegate::ErrorCallback error_callback;
MTPDeviceAsyncDelegate::ErrorCallback error_callback;
};
// SnapshotFileDetails tracks the current state of the snapshot file (e.g how
......@@ -45,7 +47,7 @@ struct SnapshotRequestInfo {
// metadata information, etc).
class SnapshotFileDetails {
public:
SnapshotFileDetails(const SnapshotRequestInfo& request_info,
SnapshotFileDetails(SnapshotRequestInfo request_info,
const base::File::Info& file_info);
~SnapshotFileDetails();
......@@ -67,8 +69,8 @@ class SnapshotFileDetails {
return request_info_.success_callback;
}
const MTPDeviceAsyncDelegate::ErrorCallback error_callback() const {
return request_info_.error_callback;
MTPDeviceAsyncDelegate::ErrorCallback error_callback() {
return std::move(request_info_.error_callback);
}
bool error_occurred() const {
......@@ -94,7 +96,7 @@ class SnapshotFileDetails {
private:
// Snapshot file request params.
const SnapshotRequestInfo request_info_;
SnapshotRequestInfo request_info_;
// Metadata of the snapshot file (such as name, size, type, etc).
const base::File::Info file_info_;
......
......@@ -12,13 +12,13 @@ MTPDeviceAsyncDelegate::ReadBytesRequest::ReadBytesRequest(
int64_t offset,
int buf_len,
ReadBytesSuccessCallback success_callback,
const ErrorCallback& error_callback)
ErrorCallback error_callback)
: file_id(file_id),
buf(buf),
offset(offset),
buf_len(buf_len),
success_callback(std::move(success_callback)),
error_callback(error_callback) {}
error_callback(std::move(error_callback)) {}
MTPDeviceAsyncDelegate::ReadBytesRequest::ReadBytesRequest(
ReadBytesRequest&& other)
......@@ -27,6 +27,6 @@ MTPDeviceAsyncDelegate::ReadBytesRequest::ReadBytesRequest(
offset(other.offset),
buf_len(other.buf_len),
success_callback(std::move(other.success_callback)),
error_callback(other.error_callback) {}
error_callback(std::move(other.error_callback)) {}
MTPDeviceAsyncDelegate::ReadBytesRequest::~ReadBytesRequest() {}
MTPDeviceAsyncDelegate::ReadBytesRequest::~ReadBytesRequest() = default;
......@@ -43,7 +43,7 @@ class MTPDeviceAsyncDelegate {
// A callback to be called when GetFileInfo/ReadDirectory/CreateSnapshot
// method call fails.
typedef base::RepeatingCallback<void(base::File::Error error)> ErrorCallback;
using ErrorCallback = base::OnceCallback<void(base::File::Error error)>;
// A callback to be called when CreateSnapshotFile method call succeeds.
// TODO: consider make this a OnceCallback. Right now it is repeating because
......@@ -64,7 +64,7 @@ class MTPDeviceAsyncDelegate {
int64_t offset,
int buf_len,
ReadBytesSuccessCallback success_callback,
const ErrorCallback& error_callback);
ErrorCallback error_callback);
ReadBytesRequest(ReadBytesRequest&& other);
~ReadBytesRequest();
......@@ -103,7 +103,7 @@ class MTPDeviceAsyncDelegate {
// callback asynchronously when complete.
virtual void GetFileInfo(const base::FilePath& file_path,
GetFileInfoSuccessCallback success_callback,
const ErrorCallback& error_callback) = 0;
ErrorCallback error_callback) = 0;
// Creates a directory to |directory_path|. When |exclusive| is true, this
// returns base::File::FILE_ERROR_EXISTS if a directory already exists for
......@@ -114,14 +114,14 @@ class MTPDeviceAsyncDelegate {
const bool exclusive,
const bool recursive,
const CreateDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback) = 0;
ErrorCallback error_callback) = 0;
// Enumerates the |root| directory contents and invokes the appropriate
// callback asynchronously when complete.
virtual void ReadDirectory(
const base::FilePath& root,
const ReadDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback) = 0;
ErrorCallback error_callback) = 0;
// Copy the contents of |device_file_path| to |local_path|. Invokes the
// appropriate callback asynchronously when complete.
......@@ -129,7 +129,7 @@ class MTPDeviceAsyncDelegate {
const base::FilePath& device_file_path,
const base::FilePath& local_path,
const CreateSnapshotFileSuccessCallback& success_callback,
const ErrorCallback& error_callback) = 0;
ErrorCallback error_callback) = 0;
// Platform-specific implementations that are streaming don't create a local
// snapshot file. Blobs are instead FileSystemURL backed and read in a stream.
......@@ -143,7 +143,7 @@ class MTPDeviceAsyncDelegate {
int64_t offset,
int buf_len,
ReadBytesSuccessCallback success_callback,
const ErrorCallback& error_callback) = 0;
ErrorCallback error_callback) = 0;
// Returns true if storage is opened for read only.
virtual bool IsReadOnly() const = 0;
......@@ -156,7 +156,7 @@ class MTPDeviceAsyncDelegate {
const CreateTemporaryFileCallback& create_temporary_file_callback,
const CopyFileProgressCallback& progress_callback,
const CopyFileLocalSuccessCallback& success_callback,
const ErrorCallback& error_callback) = 0;
ErrorCallback error_callback) = 0;
// Moves a file |source_file_path| to |device_file_path|.
// |create_temporary_file_callback| can be used to create a temporary file.
......@@ -165,25 +165,25 @@ class MTPDeviceAsyncDelegate {
const base::FilePath& device_file_path,
const CreateTemporaryFileCallback& create_temporary_file_callback,
const MoveFileLocalSuccessCallback& success_callback,
const ErrorCallback& error_callback) = 0;
ErrorCallback error_callback) = 0;
// Copies a file from |source_file_path| to |device_file_path|.
virtual void CopyFileFromLocal(
const base::FilePath& source_file_path,
const base::FilePath& device_file_path,
const CopyFileFromLocalSuccessCallback& success_callback,
const ErrorCallback& error_callback) = 0;
ErrorCallback error_callback) = 0;
// Deletes a file at |file_path|.
virtual void DeleteFile(const base::FilePath& file_path,
const DeleteFileSuccessCallback& success_callback,
const ErrorCallback& error_callback) = 0;
ErrorCallback error_callback) = 0;
// Deletes a directory at |file_path|. The directory must be empty.
virtual void DeleteDirectory(
const base::FilePath& file_path,
const DeleteDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback) = 0;
ErrorCallback error_callback) = 0;
// Adds watcher to |file_path| as |origin|.
virtual void AddWatcher(
......
......@@ -37,32 +37,32 @@ class MTPDeviceDelegateImplMac : public MTPDeviceAsyncDelegate {
// similarly-named methods on the UI thread.
void GetFileInfo(const base::FilePath& file_path,
GetFileInfoSuccessCallback success_callback,
const ErrorCallback& error_callback) override;
ErrorCallback error_callback) override;
void CreateDirectory(const base::FilePath& directory_path,
const bool exclusive,
const bool recursive,
const CreateDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback) override;
ErrorCallback error_callback) override;
// Note: passed absolute paths, but expects relative paths in reply.
void ReadDirectory(const base::FilePath& root,
const ReadDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback) override;
ErrorCallback error_callback) override;
// Note: passed absolute paths.
void CreateSnapshotFile(
const base::FilePath& device_file_path,
const base::FilePath& local_path,
const CreateSnapshotFileSuccessCallback& success_callback,
const ErrorCallback& error_callback) override;
ErrorCallback error_callback) override;
bool IsStreaming() override;
void ReadBytes(const base::FilePath& device_file_path,
const scoped_refptr<net::IOBuffer>& buf,
int64_t offset,
int buf_len,
ReadBytesSuccessCallback success_callback,
const ErrorCallback& error_callback) override;
ErrorCallback error_callback) override;
bool IsReadOnly() const override;
void CopyFileLocal(
const base::FilePath& source_file_path,
......@@ -70,24 +70,24 @@ class MTPDeviceDelegateImplMac : public MTPDeviceAsyncDelegate {
const CreateTemporaryFileCallback& create_temporary_file_callback,
const CopyFileProgressCallback& progress_callback,
const CopyFileLocalSuccessCallback& success_callback,
const ErrorCallback& error_callback) override;
ErrorCallback error_callback) override;
void MoveFileLocal(
const base::FilePath& source_file_path,
const base::FilePath& device_file_path,
const CreateTemporaryFileCallback& create_temporary_file_callback,
const MoveFileLocalSuccessCallback& success_callback,
const ErrorCallback& error_callback) override;
ErrorCallback error_callback) override;
void CopyFileFromLocal(
const base::FilePath& source_file_path,
const base::FilePath& device_file_path,
const CopyFileFromLocalSuccessCallback& success_callback,
const ErrorCallback& error_callback) override;
ErrorCallback error_callback) override;
void DeleteFile(const base::FilePath& file_path,
const DeleteFileSuccessCallback& success_callback,
const ErrorCallback& error_callback) override;
ErrorCallback error_callback) override;
void DeleteDirectory(const base::FilePath& file_path,
const DeleteDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback) override;
ErrorCallback error_callback) override;
void AddWatcher(const GURL& origin,
const base::FilePath& file_path,
const bool recursive,
......@@ -124,17 +124,15 @@ class MTPDeviceDelegateImplMac : public MTPDeviceAsyncDelegate {
base::File::Error* error);
// Delegate for ReadDirectory, called on the UI thread.
void ReadDirectoryImpl(
const base::FilePath& root,
void ReadDirectoryImpl(const base::FilePath& root,
const ReadDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback);
ErrorCallback error_callback);
// Delegate for CreateSnapshotFile, called on the UI thread.
void DownloadFile(
const base::FilePath& device_file_path,
void DownloadFile(const base::FilePath& device_file_path,
const base::FilePath& local_path,
const CreateSnapshotFileSuccessCallback& success_callback,
const ErrorCallback& error_callback);
ErrorCallback error_callback);
// Public for closures; should not be called except by
// CancelTasksAndDeleteDelegate.
......@@ -168,7 +166,6 @@ class MTPDeviceDelegateImplMac : public MTPDeviceAsyncDelegate {
const base::FilePath& snapshot_filename,
CreateSnapshotFileSuccessCallback success_cb,
ErrorCallback error_cb);
ReadFileRequest(const ReadFileRequest& other);
~ReadFileRequest();
std::string request_file;
......@@ -183,7 +180,6 @@ class MTPDeviceDelegateImplMac : public MTPDeviceAsyncDelegate {
ReadDirectoryRequest(const base::FilePath& dir,
ReadDirectorySuccessCallback success_cb,
ErrorCallback error_cb);
ReadDirectoryRequest(const ReadDirectoryRequest& other);
~ReadDirectoryRequest();
base::FilePath directory;
......
......@@ -152,11 +152,11 @@ namespace {
void ForwardGetFileInfo(base::File::Info* info,
base::File::Error* error,
GetFileInfoSuccessCallback success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
if (*error == base::File::FILE_OK)
std::move(success_callback).Run(*info);
else
error_callback.Run(*error);
std::move(error_callback).Run(*error);
}
} // namespace
......@@ -164,7 +164,7 @@ void ForwardGetFileInfo(base::File::Info* info,
void MTPDeviceDelegateImplMac::GetFileInfo(
const base::FilePath& file_path,
GetFileInfoSuccessCallback success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
base::File::Info* info = new base::File::Info;
base::File::Error* error = new base::File::Error;
// Note: ownership of these objects passed into the reply callback.
......@@ -173,7 +173,7 @@ void MTPDeviceDelegateImplMac::GetFileInfo(
base::Bind(&MTPDeviceDelegateImplMac::GetFileInfoImpl,
base::Unretained(this), file_path, info, error),
base::BindOnce(&ForwardGetFileInfo, base::Owned(info), base::Owned(error),
std::move(success_callback), error_callback));
std::move(success_callback), std::move(error_callback)));
}
void MTPDeviceDelegateImplMac::CreateDirectory(
......@@ -181,29 +181,30 @@ void MTPDeviceDelegateImplMac::CreateDirectory(
const bool exclusive,
const bool recursive,
const CreateDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
NOTREACHED();
}
void MTPDeviceDelegateImplMac::ReadDirectory(
const base::FilePath& root,
const ReadDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
content::GetUIThreadTaskRunner({})->PostTask(
FROM_HERE, base::BindOnce(&MTPDeviceDelegateImplMac::ReadDirectoryImpl,
base::Unretained(this), root, success_callback,
error_callback));
std::move(error_callback)));
}
void MTPDeviceDelegateImplMac::CreateSnapshotFile(
const base::FilePath& device_file_path,
const base::FilePath& local_path,
const CreateSnapshotFileSuccessCallback& success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
content::GetUIThreadTaskRunner({})->PostTask(
FROM_HERE, base::BindOnce(&MTPDeviceDelegateImplMac::DownloadFile,
base::Unretained(this), device_file_path,
local_path, success_callback, error_callback));
FROM_HERE,
base::BindOnce(&MTPDeviceDelegateImplMac::DownloadFile,
base::Unretained(this), device_file_path, local_path,
success_callback, std::move(error_callback)));
}
bool MTPDeviceDelegateImplMac::IsStreaming() {
......@@ -216,7 +217,7 @@ void MTPDeviceDelegateImplMac::ReadBytes(
int64_t offset,
int buf_len,
ReadBytesSuccessCallback success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
NOTREACHED();
}
......@@ -230,7 +231,7 @@ void MTPDeviceDelegateImplMac::CopyFileLocal(
const CreateTemporaryFileCallback& create_temporary_file_callback,
const CopyFileProgressCallback& progress_callback,
const CopyFileLocalSuccessCallback& success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
NOTREACHED();
}
......@@ -239,7 +240,7 @@ void MTPDeviceDelegateImplMac::MoveFileLocal(
const base::FilePath& device_file_path,
const CreateTemporaryFileCallback& create_temporary_file_callback,
const MoveFileLocalSuccessCallback& success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
NOTREACHED();
}
......@@ -247,21 +248,21 @@ void MTPDeviceDelegateImplMac::CopyFileFromLocal(
const base::FilePath& source_file_path,
const base::FilePath& device_file_path,
const CopyFileFromLocalSuccessCallback& success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
NOTREACHED();
}
void MTPDeviceDelegateImplMac::DeleteFile(
const base::FilePath& file_path,
const DeleteFileSuccessCallback& success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
NOTREACHED();
}
void MTPDeviceDelegateImplMac::DeleteDirectory(
const base::FilePath& file_path,
const DeleteDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
NOTREACHED();
}
......@@ -307,11 +308,11 @@ void MTPDeviceDelegateImplMac::GetFileInfoImpl(
void MTPDeviceDelegateImplMac::ReadDirectoryImpl(
const base::FilePath& root,
const ReadDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
read_dir_transactions_.push_back(ReadDirectoryRequest(
root, success_callback, error_callback));
read_dir_transactions_.emplace_back(root, success_callback,
std::move(error_callback));
if (received_all_files_) {
NotifyReadDir();
......@@ -337,7 +338,7 @@ void MTPDeviceDelegateImplMac::ReadDirectoryTimeout(
++iter;
continue;
}
iter->error_callback.Run(base::File::FILE_ERROR_ABORT);
std::move(iter->error_callback).Run(base::File::FILE_ERROR_ABORT);
iter = read_dir_transactions_.erase(iter);
}
}
......@@ -346,7 +347,7 @@ void MTPDeviceDelegateImplMac::DownloadFile(
const base::FilePath& device_file_path,
const base::FilePath& local_path,
const CreateSnapshotFileSuccessCallback& success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
base::File::Error error;
......@@ -354,16 +355,16 @@ void MTPDeviceDelegateImplMac::DownloadFile(
GetFileInfoImpl(device_file_path, &info, &error);
if (error != base::File::FILE_OK) {
content::GetIOThreadTaskRunner({})->PostTask(
FROM_HERE, base::BindOnce(error_callback, error));
FROM_HERE, base::BindOnce(std::move(error_callback), error));
return;
}
base::FilePath relative_path;
root_path_.AppendRelativePath(device_file_path, &relative_path);
read_file_transactions_.push_back(
ReadFileRequest(relative_path.value(), local_path,
success_callback, error_callback));
read_file_transactions_.emplace_back(relative_path.value(), local_path,
success_callback,
std::move(error_callback));
camera_interface_->DownloadFile(relative_path.value(), local_path);
}
......@@ -391,16 +392,16 @@ void MTPDeviceDelegateImplMac::CancelDownloads() {
for (ReadFileTransactionList::iterator iter = read_file_transactions_.begin();
iter != read_file_transactions_.end(); ++iter) {
content::GetIOThreadTaskRunner({})->PostTask(
FROM_HERE,
base::BindOnce(iter->error_callback, base::File::FILE_ERROR_ABORT));
FROM_HERE, base::BindOnce(std::move(iter->error_callback),
base::File::FILE_ERROR_ABORT));
}
read_file_transactions_.clear();
for (ReadDirTransactionList::iterator iter = read_dir_transactions_.begin();
iter != read_dir_transactions_.end(); ++iter) {
content::GetIOThreadTaskRunner({})->PostTask(
FROM_HERE,
base::BindOnce(iter->error_callback, base::File::FILE_ERROR_ABORT));
FROM_HERE, base::BindOnce(std::move(iter->error_callback),
base::File::FILE_ERROR_ABORT));
}
read_dir_transactions_.clear();
}
......@@ -474,7 +475,7 @@ void MTPDeviceDelegateImplMac::NotifyReadDir() {
FROM_HERE, base::BindOnce(iter->success_callback, entry_list, false));
} else {
content::GetIOThreadTaskRunner({})->PostTask(
FROM_HERE, base::BindOnce(iter->error_callback,
FROM_HERE, base::BindOnce(std::move(iter->error_callback),
base::File::FILE_ERROR_NOT_FOUND));
}
}
......@@ -502,7 +503,7 @@ void MTPDeviceDelegateImplMac::DownloadedFile(
if (error != base::File::FILE_OK) {
content::GetIOThreadTaskRunner({})->PostTask(
FROM_HERE, base::BindOnce(iter->error_callback, error));
FROM_HERE, base::BindOnce(std::move(iter->error_callback), error));
read_file_transactions_.erase(iter);
return;
}
......@@ -532,14 +533,10 @@ MTPDeviceDelegateImplMac::ReadFileRequest::ReadFileRequest(
: request_file(file),
snapshot_file(snapshot_filename),
success_callback(success_cb),
error_callback(error_cb) {}
MTPDeviceDelegateImplMac::ReadFileRequest::ReadFileRequest() {}
error_callback(std::move(error_cb)) {}
MTPDeviceDelegateImplMac::ReadFileRequest::ReadFileRequest(
const ReadFileRequest& other) = default;
MTPDeviceDelegateImplMac::ReadFileRequest::~ReadFileRequest() {}
MTPDeviceDelegateImplMac::ReadFileRequest::ReadFileRequest() = default;
MTPDeviceDelegateImplMac::ReadFileRequest::~ReadFileRequest() = default;
MTPDeviceDelegateImplMac::ReadDirectoryRequest::ReadDirectoryRequest(
const base::FilePath& dir,
......@@ -547,10 +544,7 @@ MTPDeviceDelegateImplMac::ReadDirectoryRequest::ReadDirectoryRequest(
ErrorCallback error_cb)
: directory(dir),
success_callback(success_cb),
error_callback(error_cb) {}
MTPDeviceDelegateImplMac::ReadDirectoryRequest::ReadDirectoryRequest(
const ReadDirectoryRequest& other) = default;
error_callback(std::move(error_cb)) {}
MTPDeviceDelegateImplMac::ReadDirectoryRequest::~ReadDirectoryRequest() {}
......
......@@ -273,13 +273,14 @@ base::File::Error GetFileStreamOnBlockingPoolThread(
// Returns the total number of bytes written to the snapshot file for non-empty
// files, or 0 on failure. For empty files, just return 0.
DWORD WriteDataChunkIntoSnapshotFileOnBlockingPoolThread(
const SnapshotFileDetails& file_details) {
if (file_details.file_info().size == 0)
const base::File::Info& file_info,
Microsoft::WRL::ComPtr<IStream> device_file_stream,
const base::FilePath& snapshot_file_path,
DWORD optimal_transfer_size) {
if (file_info.size == 0)
return 0;
return media_transfer_protocol::CopyDataChunkToLocalFile(
file_details.device_file_stream(),
file_details.request_info().snapshot_file_path,
file_details.optimal_transfer_size());
device_file_stream.Get(), snapshot_file_path, optimal_transfer_size);
}
void DeletePortableDeviceOnBlockingPoolThread(
......@@ -376,7 +377,7 @@ MTPDeviceDelegateImplWin::~MTPDeviceDelegateImplWin() {
void MTPDeviceDelegateImplWin::GetFileInfo(
const base::FilePath& file_path,
GetFileInfoSuccessCallback success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
DCHECK(!file_path.empty());
base::File::Info* file_info = new base::File::Info;
......@@ -386,7 +387,7 @@ void MTPDeviceDelegateImplWin::GetFileInfo(
file_path, base::Unretained(file_info)),
base::BindOnce(&MTPDeviceDelegateImplWin::OnGetFileInfo,
weak_ptr_factory_.GetWeakPtr(),
std::move(success_callback), error_callback,
std::move(success_callback), std::move(error_callback),
base::Owned(file_info))));
}
......@@ -395,14 +396,14 @@ void MTPDeviceDelegateImplWin::CreateDirectory(
const bool exclusive,
const bool recursive,
const CreateDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
NOTREACHED();
}
void MTPDeviceDelegateImplWin::ReadDirectory(
const base::FilePath& root,
const ReadDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
DCHECK(!root.empty());
storage::AsyncFileUtil::EntryList* entries =
......@@ -413,20 +414,20 @@ void MTPDeviceDelegateImplWin::ReadDirectory(
root, base::Unretained(entries)),
base::BindOnce(&MTPDeviceDelegateImplWin::OnDidReadDirectory,
weak_ptr_factory_.GetWeakPtr(), success_callback,
error_callback, base::Owned(entries))));
std::move(error_callback), base::Owned(entries))));
}
void MTPDeviceDelegateImplWin::CreateSnapshotFile(
const base::FilePath& device_file_path,
const base::FilePath& snapshot_file_path,
const CreateSnapshotFileSuccessCallback& success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
DCHECK(!device_file_path.empty());
DCHECK(!snapshot_file_path.empty());
std::unique_ptr<SnapshotFileDetails> file_details(new SnapshotFileDetails(
SnapshotRequestInfo(device_file_path, snapshot_file_path,
success_callback, error_callback)));
success_callback, std::move(error_callback))));
// Passing a raw SnapshotFileDetails* to the blocking pool is safe, because
// it is owned by |file_details| in the reply callback.
EnsureInitAndRunTask(PendingTaskInfo(
......@@ -447,7 +448,7 @@ void MTPDeviceDelegateImplWin::ReadBytes(
int64_t offset,
int buf_len,
ReadBytesSuccessCallback success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
NOTREACHED();
}
......@@ -461,7 +462,7 @@ void MTPDeviceDelegateImplWin::CopyFileLocal(
const CreateTemporaryFileCallback& create_temporary_file_callback,
const CopyFileProgressCallback& progress_callback,
const CopyFileLocalSuccessCallback& success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
NOTREACHED();
}
......@@ -470,7 +471,7 @@ void MTPDeviceDelegateImplWin::MoveFileLocal(
const base::FilePath& device_file_path,
const CreateTemporaryFileCallback& create_temporary_file_callback,
const MoveFileLocalSuccessCallback& success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
NOTREACHED();
}
......@@ -478,21 +479,21 @@ void MTPDeviceDelegateImplWin::CopyFileFromLocal(
const base::FilePath& source_file_path,
const base::FilePath& device_file_path,
const CopyFileFromLocalSuccessCallback& success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
NOTREACHED();
}
void MTPDeviceDelegateImplWin::DeleteFile(
const base::FilePath& file_path,
const DeleteFileSuccessCallback& success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
NOTREACHED();
}
void MTPDeviceDelegateImplWin::DeleteDirectory(
const base::FilePath& file_path,
const DeleteDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback) {
ErrorCallback error_callback) {
NOTREACHED();
}
......@@ -557,8 +558,13 @@ void MTPDeviceDelegateImplWin::WriteDataChunkIntoSnapshotFile() {
DCHECK(current_snapshot_details_.get());
base::PostTaskAndReplyWithResult(
media_task_runner_.get(), FROM_HERE,
base::BindOnce(&WriteDataChunkIntoSnapshotFileOnBlockingPoolThread,
*current_snapshot_details_),
base::BindOnce(
&WriteDataChunkIntoSnapshotFileOnBlockingPoolThread,
current_snapshot_details_->file_info(),
Microsoft::WRL::ComPtr<IStream>(
current_snapshot_details_->device_file_stream()),
current_snapshot_details_->request_info().snapshot_file_path,
current_snapshot_details_->optimal_transfer_size()),
base::BindOnce(
&MTPDeviceDelegateImplWin::OnWroteDataChunkIntoSnapshotFile,
weak_ptr_factory_.GetWeakPtr(),
......@@ -586,7 +592,7 @@ void MTPDeviceDelegateImplWin::OnInitCompleted(bool succeeded) {
void MTPDeviceDelegateImplWin::OnGetFileInfo(
GetFileInfoSuccessCallback success_callback,
const ErrorCallback& error_callback,
ErrorCallback error_callback,
base::File::Info* file_info,
base::File::Error error) {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
......@@ -594,14 +600,14 @@ void MTPDeviceDelegateImplWin::OnGetFileInfo(
if (error == base::File::FILE_OK)
std::move(success_callback).Run(*file_info);
else
error_callback.Run(error);
std::move(error_callback).Run(error);
task_in_progress_ = false;
ProcessNextPendingRequest();
}
void MTPDeviceDelegateImplWin::OnDidReadDirectory(
const ReadDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback,
ErrorCallback error_callback,
storage::AsyncFileUtil::EntryList* file_list,
base::File::Error error) {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
......@@ -609,7 +615,7 @@ void MTPDeviceDelegateImplWin::OnDidReadDirectory(
if (error == base::File::FILE_OK)
success_callback.Run(*file_list, false /*no more entries*/);
else
error_callback.Run(error);
std::move(error_callback).Run(error);
task_in_progress_ = false;
ProcessNextPendingRequest();
}
......@@ -623,7 +629,7 @@ void MTPDeviceDelegateImplWin::OnGetFileStream(
DCHECK(!file_details->request_info().snapshot_file_path.empty());
DCHECK(!current_snapshot_details_.get());
if (error != base::File::FILE_OK) {
file_details->request_info().error_callback.Run(error);
std::move(file_details->error_callback()).Run(error);
task_in_progress_ = false;
ProcessNextPendingRequest();
return;
......@@ -670,8 +676,8 @@ void MTPDeviceDelegateImplWin::OnWroteDataChunkIntoSnapshotFile(
current_snapshot_details_->file_info(),
current_snapshot_details_->request_info().snapshot_file_path);
} else {
current_snapshot_details_->request_info().error_callback.Run(
base::File::FILE_ERROR_FAILED);
std::move(current_snapshot_details_->error_callback())
.Run(base::File::FILE_ERROR_FAILED);
}
task_in_progress_ = false;
current_snapshot_details_.reset();
......
......@@ -96,29 +96,27 @@ class MTPDeviceDelegateImplWin : public MTPDeviceAsyncDelegate {
// MTPDeviceAsyncDelegate:
void GetFileInfo(const base::FilePath& file_path,
GetFileInfoSuccessCallback success_callback,
const ErrorCallback& error_callback) override;
void CreateDirectory(
const base::FilePath& directory_path,
ErrorCallback error_callback) override;
void CreateDirectory(const base::FilePath& directory_path,
const bool exclusive,
const bool recursive,
const CreateDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback) override;
void ReadDirectory(
const base::FilePath& root,
ErrorCallback error_callback) override;
void ReadDirectory(const base::FilePath& root,
const ReadDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback) override;
ErrorCallback error_callback) override;
void CreateSnapshotFile(
const base::FilePath& device_file_path,
const base::FilePath& local_path,
const CreateSnapshotFileSuccessCallback& success_callback,
const ErrorCallback& error_callback) override;
ErrorCallback error_callback) override;
bool IsStreaming() override;
void ReadBytes(const base::FilePath& device_file_path,
const scoped_refptr<net::IOBuffer>& buf,
int64_t offset,
int buf_len,
ReadBytesSuccessCallback success_callback,
const ErrorCallback& error_callback) override;
ErrorCallback error_callback) override;
bool IsReadOnly() const override;
void CopyFileLocal(
const base::FilePath& source_file_path,
......@@ -126,24 +124,24 @@ class MTPDeviceDelegateImplWin : public MTPDeviceAsyncDelegate {
const CreateTemporaryFileCallback& create_temporary_file_callback,
const CopyFileProgressCallback& progress_callback,
const CopyFileLocalSuccessCallback& success_callback,
const ErrorCallback& error_callback) override;
ErrorCallback error_callback) override;
void MoveFileLocal(
const base::FilePath& source_file_path,
const base::FilePath& device_file_path,
const CreateTemporaryFileCallback& create_temporary_file_callback,
const MoveFileLocalSuccessCallback& success_callback,
const ErrorCallback& error_callback) override;
ErrorCallback error_callback) override;
void CopyFileFromLocal(
const base::FilePath& source_file_path,
const base::FilePath& device_file_path,
const CopyFileFromLocalSuccessCallback& success_callback,
const ErrorCallback& error_callback) override;
ErrorCallback error_callback) override;
void DeleteFile(const base::FilePath& file_path,
const DeleteFileSuccessCallback& success_callback,
const ErrorCallback& error_callback) override;
ErrorCallback error_callback) override;
void DeleteDirectory(const base::FilePath& file_path,
const DeleteDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback) override;
ErrorCallback error_callback) override;
void AddWatcher(const GURL& origin,
const base::FilePath& file_path,
const bool recursive,
......@@ -190,7 +188,7 @@ class MTPDeviceDelegateImplWin : public MTPDeviceAsyncDelegate {
// If the GetFileInfo() fails, |file_info| is not set and |error_callback| is
// invoked to notify the caller about the platform file |error|.
void OnGetFileInfo(GetFileInfoSuccessCallback success_callback,
const ErrorCallback& error_callback,
ErrorCallback error_callback,
base::File::Info* file_info,
base::File::Error error);
......@@ -203,7 +201,7 @@ class MTPDeviceDelegateImplWin : public MTPDeviceAsyncDelegate {
// If the ReadDirectory() fails, |file_list| is not set and |error_callback|
// is invoked to notify the caller about the platform file |error|.
void OnDidReadDirectory(const ReadDirectorySuccessCallback& success_callback,
const ErrorCallback& error_callback,
ErrorCallback error_callback,
storage::AsyncFileUtil::EntryList* file_list,
base::File::Error error);
......
......@@ -17,32 +17,24 @@ SnapshotRequestInfo::SnapshotRequestInfo(
const base::FilePath& snapshot_file_path,
const MTPDeviceAsyncDelegate::CreateSnapshotFileSuccessCallback&
success_callback,
const MTPDeviceAsyncDelegate::ErrorCallback& error_callback)
MTPDeviceAsyncDelegate::ErrorCallback error_callback)
: device_file_path(device_file_path),
snapshot_file_path(snapshot_file_path),
success_callback(success_callback),
error_callback(error_callback) {
}
error_callback(std::move(error_callback)) {}
SnapshotRequestInfo::SnapshotRequestInfo(const SnapshotRequestInfo& other) =
default;
SnapshotRequestInfo::SnapshotRequestInfo(SnapshotRequestInfo&& other) = default;
SnapshotRequestInfo::~SnapshotRequestInfo() {
}
SnapshotRequestInfo::~SnapshotRequestInfo() = default;
///////////////////////////////////////////////////////////////////////////////
// SnapshotFileDetails //
///////////////////////////////////////////////////////////////////////////////
SnapshotFileDetails::SnapshotFileDetails(
const SnapshotRequestInfo& request_info)
: request_info_(request_info),
SnapshotFileDetails::SnapshotFileDetails(SnapshotRequestInfo request_info)
: request_info_(std::move(request_info)),
optimal_transfer_size_(0),
bytes_written_(0) {
}
SnapshotFileDetails::SnapshotFileDetails(const SnapshotFileDetails& other) =
default;
bytes_written_(0) {}
SnapshotFileDetails::~SnapshotFileDetails() {
file_stream_.Reset();
......
......@@ -18,8 +18,10 @@ struct SnapshotRequestInfo {
const base::FilePath& snapshot_file_path,
const MTPDeviceAsyncDelegate::CreateSnapshotFileSuccessCallback&
success_callback,
const MTPDeviceAsyncDelegate::ErrorCallback& error_callback);
SnapshotRequestInfo(const SnapshotRequestInfo& other);
MTPDeviceAsyncDelegate::ErrorCallback error_callback);
SnapshotRequestInfo(SnapshotRequestInfo&& other);
SnapshotRequestInfo(const SnapshotRequestInfo& other) = delete;
SnapshotRequestInfo& operator=(const SnapshotRequestInfo& other) = delete;
~SnapshotRequestInfo();
// Device file path.
......@@ -39,16 +41,17 @@ struct SnapshotRequestInfo {
// Provides the details for the the creation of snapshot file.
class SnapshotFileDetails {
public:
explicit SnapshotFileDetails(const SnapshotRequestInfo& request_info);
SnapshotFileDetails(const SnapshotFileDetails& other);
explicit SnapshotFileDetails(SnapshotRequestInfo request_info);
~SnapshotFileDetails();
void set_file_info(const base::File::Info& file_info);
void set_device_file_stream(IStream* file_stream);
void set_optimal_transfer_size(DWORD optimal_transfer_size);
SnapshotRequestInfo request_info() const {
return request_info_;
const SnapshotRequestInfo& request_info() const { return request_info_; }
MTPDeviceAsyncDelegate::ErrorCallback error_callback() {
return std::move(request_info_.error_callback);
}
base::File::Info file_info() 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