// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_WEB_PUBLIC_DOWNLOAD_DOWNLOAD_CONTROLLER_DELEGATE_H_
#define IOS_WEB_PUBLIC_DOWNLOAD_DOWNLOAD_CONTROLLER_DELEGATE_H_
#include <memory>
#include "ios/web/public/download/download_task.h"
namespace web {
class DownloadController;
class WebState;
// DownloadController delegate. All methods are called on UI thread.
class DownloadControllerDelegate {
public:
// Called when renderer-initiated download was created or when client is
// resuming after the application relaunch by calling
// `DownloadController::CreateNativeDownloadTask` or
// `DownloadController::CreateWebStateDownloadTask`.
//
// Downloads do not start automatically. If the client wants to start the
// download it should call `DownloadTask::Start`.
// Clients may call `DownloadTask::GetSuggestedFilename` to get the filename
// for the download and `DownloadTask::GetTotalBytes` to get the estimated
// size.
virtual void OnDownloadCreated(DownloadController* download_controller,
WebState* web_state,
std::unique_ptr<DownloadTask> task) {}
// Called when DownloadController is about to be destroyed. Delegate should
// be set to null inside this method. All started DownloadTasks will stop the
// download. Clients should not call DownloadTask::Start() on the remaining
// alive tasks.
virtual void OnDownloadControllerDestroyed(
DownloadController* download_controller) {}
DownloadControllerDelegate() = default;
DownloadControllerDelegate(const DownloadControllerDelegate&) = delete;
DownloadControllerDelegate& operator=(const DownloadControllerDelegate&) =
delete;
virtual ~DownloadControllerDelegate() = default;
};
} // namespace web
#endif // IOS_WEB_PUBLIC_DOWNLOAD_DOWNLOAD_CONTROLLER_DELEGATE_H_