blob: 7ab4e100351205b6f77f155e744a1c5832403983 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/drive/model/test_drive_file_downloader.h"
#import "base/task/single_thread_task_runner.h"
#import "base/time/time.h"
namespace {
// Time constant used to post delayed tasks and simulate Drive file downloads.
constexpr base::TimeDelta kTestDriveFileDownloaderTimeConstant =
base::Milliseconds(100);
} // namespace
TestDriveFileDownloader::TestDriveFileDownloader(id<SystemIdentity> identity)
: identity_(identity) {}
TestDriveFileDownloader::~TestDriveFileDownloader() = default;
void TestDriveFileDownloader::SetDownloadFileCompletionQuitClosure(
base::RepeatingClosure quit_closure) {
download_file_quit_closure_ = std::move(quit_closure);
}
#pragma mark - DriveFileDownloader
id<SystemIdentity> TestDriveFileDownloader::GetIdentity() const {
return identity_;
}
bool TestDriveFileDownloader::IsExecutingDownload(
DriveFileDownloadID download_id) const {
return callbacks_weak_ptr_factory_.HasWeakPtrs();
}
void TestDriveFileDownloader::CancelDownload(DriveFileDownloadID download_id) {
callbacks_weak_ptr_factory_.InvalidateWeakPtrs();
}
DriveFileDownloadID TestDriveFileDownloader::DownloadFile(
const DriveItem& item_to_download,
NSURL* file_url,
DriveFileDownloadProgressCallback progress_callback,
DriveFileDownloadCompletionCallback completion_callback) {
// TODO(crbug.com/344812969): Report progress.
// Then report result.
const auto completion_quit_closure = base::BindRepeating(
&TestDriveFileDownloader::RunDownloadFileCompletionQuitClosure,
callbacks_weak_ptr_factory_.GetWeakPtr());
DriveFileDownloadID download_id = [[NSUUID UUID] UUIDString];
base::SingleThreadTaskRunner::GetCurrentDefault()->PostDelayedTask(
FROM_HERE,
base::BindOnce(&TestDriveFileDownloader::ReportDownloadFileResult,
callbacks_weak_ptr_factory_.GetWeakPtr(),
std::move(completion_callback), download_id, true, nil)
.Then(completion_quit_closure),
kTestDriveFileDownloaderTimeConstant);
return download_id;
}
#pragma mark - Private
void TestDriveFileDownloader::ReportDownloadFileResult(
DriveFileDownloadCompletionCallback completion_callback,
DriveFileDownloadID download_id,
BOOL successful,
NSError* error) {
std::move(completion_callback).Run(download_id, successful, error);
}
void TestDriveFileDownloader::RunDownloadFileCompletionQuitClosure() {
download_file_quit_closure_.Run();
}