blob: df0ab3cfb4ba54930063a3a3cd1ba4199f2e71e3 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/offline_pages/core/prefetch/test_download_service.h"
#include "base/bind.h"
#include "base/files/file.h"
#include "base/files/file_util.h"
#include "base/strings/strcat.h"
#include "base/strings/string_number_conversions.h"
#include "base/test/bind_test_util.h"
#include "base/threading/thread_task_runner_handle.h"
#include "components/download/public/background_service/download_metadata.h"
#include "components/download/public/background_service/service_config.h"
#include "components/offline_pages/core/prefetch/test_download_client.h"
namespace offline_pages {
namespace {
// Implementation of ServiceConfig used for testing. This is never actually
// constructed.
class TestServiceConfig : public download::ServiceConfig {
public:
TestServiceConfig() = default;
~TestServiceConfig() override = default;
// ServiceConfig implementation.
uint32_t GetMaxScheduledDownloadsPerClient() const override { return 0; }
uint32_t GetMaxConcurrentDownloads() const override { return 0; }
const base::TimeDelta& GetFileKeepAliveTime() const override {
return time_delta_;
}
private:
base::TimeDelta time_delta_;
DISALLOW_COPY_AND_ASSIGN(TestServiceConfig);
};
} // namespace
TestDownloadService::TestDownloadService() = default;
TestDownloadService::~TestDownloadService() = default;
const download::ServiceConfig& TestDownloadService::GetConfig() {
NOTIMPLEMENTED();
static TestServiceConfig config;
return config;
}
void TestDownloadService::StartDownload(
const download::DownloadParams& download_params) {
if (!download_dir_.IsValid())
CHECK(download_dir_.CreateUniqueTempDir());
base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE,
base::BindRepeating(download_params.callback, download_params.guid,
download::DownloadParams::ACCEPTED));
base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(&TestDownloadService::FinishDownload,
base::Unretained(this), download_params.guid));
}
void TestDownloadService::FinishDownload(const std::string& guid) {
base::FilePath path = download_dir_.GetPath().AppendASCII(
base::StrCat({"dl_", base::NumberToString(next_file_id_++)}));
const int file_size = static_cast<int>(test_file_data_.size());
CHECK_EQ(file_size, base::WriteFile(path, test_file_data_.data(), file_size));
client_->OnDownloadSucceeded(
guid, download::CompletionInfo(path, test_file_data_.size()));
}
void TestDownloadService::SetTestFileData(const std::string& data) {
test_file_data_ = data;
}
void TestDownloadService::OnStartScheduledTask(
download::DownloadTaskType task_type,
download::TaskFinishedCallback callback) {
NOTIMPLEMENTED();
}
bool TestDownloadService::OnStopScheduledTask(
download::DownloadTaskType task_type) {
NOTIMPLEMENTED();
return false;
}
download::DownloadService::ServiceStatus TestDownloadService::GetStatus() {
NOTIMPLEMENTED();
return DownloadService::ServiceStatus();
}
void TestDownloadService::PauseDownload(const std::string& guid) {
NOTIMPLEMENTED();
}
void TestDownloadService::ResumeDownload(const std::string& guid) {
NOTIMPLEMENTED();
}
void TestDownloadService::CancelDownload(const std::string& guid) {
NOTIMPLEMENTED();
}
void TestDownloadService::ChangeDownloadCriteria(
const std::string& guid,
const download::SchedulingParams& params) {
NOTIMPLEMENTED();
}
download::Logger* TestDownloadService::GetLogger() {
NOTIMPLEMENTED();
return nullptr;
}
} // namespace offline_pages