Commit d7e01237 authored by Min Qin's avatar Min Qin Committed by Commit Bot

Let SimpleDownloadManagerCoordinator inform observers when a download is created

This CL adds a new observer method for that.
We don't really need the OnManagerGoingDown() method since the coordinator
can live longer

BUG=942770

Change-Id: Ieaf3e13facc52022f2ec35c8cdf0f3a7c0170fd5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1546259
Commit-Queue: Min Qin <qinmin@chromium.org>
Reviewed-by: default avatarShakti Sahu <shaktisahu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#646565}
parent 2c1171a2
......@@ -10,6 +10,14 @@ SimpleDownloadManager::SimpleDownloadManager() {}
SimpleDownloadManager::~SimpleDownloadManager() = default;
void SimpleDownloadManager::AddObserver(Observer* observer) {
simple_download_manager_observers_.AddObserver(observer);
}
void SimpleDownloadManager::RemoveObserver(Observer* observer) {
simple_download_manager_observers_.RemoveObserver(observer);
}
void SimpleDownloadManager::OnInitialized() {
initialized_ = true;
for (auto& callback : std::move(on_initialized_callbacks_))
......
......@@ -17,13 +17,19 @@ SimpleDownloadManagerCoordinator::SimpleDownloadManagerCoordinator()
initialized_(false),
weak_factory_(this) {}
SimpleDownloadManagerCoordinator::~SimpleDownloadManagerCoordinator() = default;
SimpleDownloadManagerCoordinator::~SimpleDownloadManagerCoordinator() {
for (auto& observer : observers_)
observer.OnManagerGoingDown();
}
void SimpleDownloadManagerCoordinator::SetSimpleDownloadManager(
SimpleDownloadManager* simple_download_manager,
bool manages_all_history_downloads) {
DCHECK(simple_download_manager_);
if (simple_download_manager_)
simple_download_manager_->RemoveObserver(this);
simple_download_manager_ = simple_download_manager;
simple_download_manager_->AddObserver(this);
simple_download_manager_->NotifyWhenInitialized(base::BindOnce(
&SimpleDownloadManagerCoordinator::OnManagerInitialized,
weak_factory_.GetWeakPtr(), manages_all_history_downloads));
......@@ -63,4 +69,13 @@ void SimpleDownloadManagerCoordinator::OnManagerInitialized(
observer.OnDownloadsInitialized(!has_all_history_downloads);
}
void SimpleDownloadManagerCoordinator::OnManagerGoingDown() {
simple_download_manager_ = nullptr;
}
void SimpleDownloadManagerCoordinator::OnDownloadCreated(DownloadItem* item) {
for (auto& observer : observers_)
observer.OnDownloadCreated(item);
}
} // namespace download
......@@ -9,6 +9,7 @@
#include <string>
#include <vector>
#include "base/observer_list.h"
#include "components/download/public/common/download_export.h"
#include "components/download/public/common/download_url_parameters.h"
......@@ -25,12 +26,8 @@ class COMPONENTS_DOWNLOAD_EXPORT SimpleDownloadManager {
Observer() = default;
virtual ~Observer() = default;
virtual void OnDownloadsInitialized(bool active_downloads_only) {}
virtual void OnManagerGoingDown() {}
virtual void OnDownloadCreated(DownloadItem* item) {}
virtual void OnDownloadUpdated(DownloadItem* item) {}
virtual void OnDownloadOpened(DownloadItem* item) {}
virtual void OnDownloadRemoved(DownloadItem* item) {}
private:
DISALLOW_COPY_AND_ASSIGN(Observer);
......@@ -39,6 +36,9 @@ class COMPONENTS_DOWNLOAD_EXPORT SimpleDownloadManager {
SimpleDownloadManager();
virtual ~SimpleDownloadManager();
void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer);
// Calls the callback if this object becomes initialized.
void NotifyWhenInitialized(base::OnceClosure callback);
......@@ -62,6 +62,9 @@ class COMPONENTS_DOWNLOAD_EXPORT SimpleDownloadManager {
// Whether this object is initialized.
bool initialized_ = false;
// Observers that want to be notified of changes to the set of downloads.
base::ObserverList<Observer>::Unchecked simple_download_manager_observers_;
private:
// Callbacks to call once this object is initialized.
std::vector<base::OnceClosure> on_initialized_callbacks_;
......
......@@ -13,29 +13,32 @@
#include "base/observer_list.h"
#include "components/download/public/common/download_export.h"
#include "components/download/public/common/download_url_parameters.h"
#include "components/download/public/common/simple_download_manager.h"
namespace download {
class DownloadItem;
class SimpleDownloadManager;
// This object allows swapping between different SimppleDownloadManager
// instances so that callers don't need to know about the swap.
class COMPONENTS_DOWNLOAD_EXPORT SimpleDownloadManagerCoordinator {
class COMPONENTS_DOWNLOAD_EXPORT SimpleDownloadManagerCoordinator
: SimpleDownloadManager::Observer {
public:
class Observer {
public:
Observer() = default;
virtual ~Observer() = default;
virtual void OnManagerGoingDown() {}
virtual void OnDownloadsInitialized(bool active_downloads_only) {}
virtual void OnDownloadCreated(DownloadItem* item) {}
private:
DISALLOW_COPY_AND_ASSIGN(Observer);
};
SimpleDownloadManagerCoordinator();
~SimpleDownloadManagerCoordinator();
~SimpleDownloadManagerCoordinator() override;
void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer);
......@@ -58,6 +61,10 @@ class COMPONENTS_DOWNLOAD_EXPORT SimpleDownloadManagerCoordinator {
bool has_all_history_downloads() const { return has_all_history_downloads_; }
private:
// SimpleDownloadManager::Observer implementation.
void OnManagerGoingDown() override;
void OnDownloadCreated(DownloadItem* item) override;
// Called when |simple_download_manager_| is initialized.
void OnManagerInitialized(bool has_all_history_downloads);
......
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