blob: 9b7f53f6a47d5f3db12337664c906400b7356f19 [file] [log] [blame]
// Copyright 2017 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.
#ifndef COMPONENTS_DOWNLOAD_INTERNAL_BACKGROUND_SERVICE_CONTROLLER_H_
#define COMPONENTS_DOWNLOAD_INTERNAL_BACKGROUND_SERVICE_CONTROLLER_H_
#include <string>
#include "base/macros.h"
#include "components/download/public/background_service/clients.h"
#include "components/download/public/background_service/download_service.h"
#include "components/download/public/task/download_task_types.h"
namespace download {
struct DownloadParams;
struct SchedulingParams;
// The type of completion when the download entry transits to complete state.
// TODO(xingliu): Implement timeout and unknown failure types.
enum class CompletionType {
// The download is successfully finished.
SUCCEED = 0,
// The download is interrupted and failed.
FAIL = 1,
// The download is aborted by the client.
ABORT = 2,
// The download is timed out and the connection is closed.
TIMEOUT = 3,
// The download is failed for unknown reasons.
UNKNOWN = 4,
// The download is cancelled by the client.
CANCEL = 5,
// The download expended it's number of expensive retries.
OUT_OF_RETRIES = 6,
// The download expended it's number of 'free' retries.
OUT_OF_RESUMPTIONS = 7,
// The upload was timed out due to unresponsive client.
UPLOAD_TIMEOUT = 8,
// The count of entries for the enum.
COUNT = 9,
};
// The core Controller responsible for gluing various DownloadService components
// together to manage the active downloads.
class Controller {
public:
enum class State {
// The Controller has been created but has not been initialized yet. It
// cannot be used.
CREATED = 1,
// The Controller has been created and Initialize() has been called but has
// not yet finished. It cannot be used.
INITIALIZING = 2,
// The Controller has been created and initialized. It can be used.
READY = 3,
// The Controller failed to initialize and is in the process of recovering.
// It cannot be used.
RECOVERING = 4,
// The Controller was unable to recover and is unusable this session.
UNAVAILABLE = 5,
};
Controller() = default;
virtual ~Controller() = default;
// Initializes the controller. Initialization may be asynchronous.
virtual void Initialize(const base::Closure& callback) = 0;
// Returns the status of Controller.
virtual State GetState() = 0;
// Starts a download with |params|. See DownloadParams::StartCallback and
// DownloadParams::StartResponse for information on how a caller can determine
// whether or not the download was successfully accepted and queued.
virtual void StartDownload(const DownloadParams& params) = 0;
// Pauses a download request associated with |guid| if one exists.
virtual void PauseDownload(const std::string& guid) = 0;
// Resumes a download request associated with |guid| if one exists. The
// download request may or may not start downloading at this time, but it will
// no longer be blocked by any prior PauseDownload() actions.
virtual void ResumeDownload(const std::string& guid) = 0;
// Cancels a download request associated with |guid| if one exists.
virtual void CancelDownload(const std::string& guid) = 0;
// Changes the SchedulingParams of a download request associated with |guid|
// to |params|.
virtual void ChangeDownloadCriteria(const std::string& guid,
const SchedulingParams& params) = 0;
// Exposes the owner of the download request for |guid| if one exists.
// Otherwise returns DownloadClient::INVALID for an unowned entry.
virtual DownloadClient GetOwnerOfDownload(const std::string& guid) = 0;
// See DownloadService::OnStartScheduledTask.
virtual void OnStartScheduledTask(DownloadTaskType task_type,
TaskFinishedCallback callback) = 0;
// See DownloadService::OnStopScheduledTask.
virtual bool OnStopScheduledTask(DownloadTaskType task_type) = 0;
private:
DISALLOW_COPY_AND_ASSIGN(Controller);
};
} // namespace download
#endif // COMPONENTS_DOWNLOAD_INTERNAL_BACKGROUND_SERVICE_CONTROLLER_H_