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() {} ...@@ -10,6 +10,14 @@ SimpleDownloadManager::SimpleDownloadManager() {}
SimpleDownloadManager::~SimpleDownloadManager() = default; 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() { void SimpleDownloadManager::OnInitialized() {
initialized_ = true; initialized_ = true;
for (auto& callback : std::move(on_initialized_callbacks_)) for (auto& callback : std::move(on_initialized_callbacks_))
......
...@@ -17,13 +17,19 @@ SimpleDownloadManagerCoordinator::SimpleDownloadManagerCoordinator() ...@@ -17,13 +17,19 @@ SimpleDownloadManagerCoordinator::SimpleDownloadManagerCoordinator()
initialized_(false), initialized_(false),
weak_factory_(this) {} weak_factory_(this) {}
SimpleDownloadManagerCoordinator::~SimpleDownloadManagerCoordinator() = default; SimpleDownloadManagerCoordinator::~SimpleDownloadManagerCoordinator() {
for (auto& observer : observers_)
observer.OnManagerGoingDown();
}
void SimpleDownloadManagerCoordinator::SetSimpleDownloadManager( void SimpleDownloadManagerCoordinator::SetSimpleDownloadManager(
SimpleDownloadManager* simple_download_manager, SimpleDownloadManager* simple_download_manager,
bool manages_all_history_downloads) { bool manages_all_history_downloads) {
DCHECK(simple_download_manager_); DCHECK(simple_download_manager_);
if (simple_download_manager_)
simple_download_manager_->RemoveObserver(this);
simple_download_manager_ = simple_download_manager; simple_download_manager_ = simple_download_manager;
simple_download_manager_->AddObserver(this);
simple_download_manager_->NotifyWhenInitialized(base::BindOnce( simple_download_manager_->NotifyWhenInitialized(base::BindOnce(
&SimpleDownloadManagerCoordinator::OnManagerInitialized, &SimpleDownloadManagerCoordinator::OnManagerInitialized,
weak_factory_.GetWeakPtr(), manages_all_history_downloads)); weak_factory_.GetWeakPtr(), manages_all_history_downloads));
...@@ -63,4 +69,13 @@ void SimpleDownloadManagerCoordinator::OnManagerInitialized( ...@@ -63,4 +69,13 @@ void SimpleDownloadManagerCoordinator::OnManagerInitialized(
observer.OnDownloadsInitialized(!has_all_history_downloads); 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 } // namespace download
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "base/observer_list.h"
#include "components/download/public/common/download_export.h" #include "components/download/public/common/download_export.h"
#include "components/download/public/common/download_url_parameters.h" #include "components/download/public/common/download_url_parameters.h"
...@@ -25,12 +26,8 @@ class COMPONENTS_DOWNLOAD_EXPORT SimpleDownloadManager { ...@@ -25,12 +26,8 @@ class COMPONENTS_DOWNLOAD_EXPORT SimpleDownloadManager {
Observer() = default; Observer() = default;
virtual ~Observer() = default; virtual ~Observer() = default;
virtual void OnDownloadsInitialized(bool active_downloads_only) {}
virtual void OnManagerGoingDown() {} virtual void OnManagerGoingDown() {}
virtual void OnDownloadCreated(DownloadItem* item) {} virtual void OnDownloadCreated(DownloadItem* item) {}
virtual void OnDownloadUpdated(DownloadItem* item) {}
virtual void OnDownloadOpened(DownloadItem* item) {}
virtual void OnDownloadRemoved(DownloadItem* item) {}
private: private:
DISALLOW_COPY_AND_ASSIGN(Observer); DISALLOW_COPY_AND_ASSIGN(Observer);
...@@ -39,6 +36,9 @@ class COMPONENTS_DOWNLOAD_EXPORT SimpleDownloadManager { ...@@ -39,6 +36,9 @@ class COMPONENTS_DOWNLOAD_EXPORT SimpleDownloadManager {
SimpleDownloadManager(); SimpleDownloadManager();
virtual ~SimpleDownloadManager(); virtual ~SimpleDownloadManager();
void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer);
// Calls the callback if this object becomes initialized. // Calls the callback if this object becomes initialized.
void NotifyWhenInitialized(base::OnceClosure callback); void NotifyWhenInitialized(base::OnceClosure callback);
...@@ -62,6 +62,9 @@ class COMPONENTS_DOWNLOAD_EXPORT SimpleDownloadManager { ...@@ -62,6 +62,9 @@ class COMPONENTS_DOWNLOAD_EXPORT SimpleDownloadManager {
// Whether this object is initialized. // Whether this object is initialized.
bool initialized_ = false; 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: private:
// Callbacks to call once this object is initialized. // Callbacks to call once this object is initialized.
std::vector<base::OnceClosure> on_initialized_callbacks_; std::vector<base::OnceClosure> on_initialized_callbacks_;
......
...@@ -13,29 +13,32 @@ ...@@ -13,29 +13,32 @@
#include "base/observer_list.h" #include "base/observer_list.h"
#include "components/download/public/common/download_export.h" #include "components/download/public/common/download_export.h"
#include "components/download/public/common/download_url_parameters.h" #include "components/download/public/common/download_url_parameters.h"
#include "components/download/public/common/simple_download_manager.h"
namespace download { namespace download {
class DownloadItem; class DownloadItem;
class SimpleDownloadManager;
// This object allows swapping between different SimppleDownloadManager // This object allows swapping between different SimppleDownloadManager
// instances so that callers don't need to know about the swap. // 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: public:
class Observer { class Observer {
public: public:
Observer() = default; Observer() = default;
virtual ~Observer() = default; virtual ~Observer() = default;
virtual void OnManagerGoingDown() {}
virtual void OnDownloadsInitialized(bool active_downloads_only) {} virtual void OnDownloadsInitialized(bool active_downloads_only) {}
virtual void OnDownloadCreated(DownloadItem* item) {}
private: private:
DISALLOW_COPY_AND_ASSIGN(Observer); DISALLOW_COPY_AND_ASSIGN(Observer);
}; };
SimpleDownloadManagerCoordinator(); SimpleDownloadManagerCoordinator();
~SimpleDownloadManagerCoordinator(); ~SimpleDownloadManagerCoordinator() override;
void AddObserver(Observer* observer); void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer); void RemoveObserver(Observer* observer);
...@@ -58,6 +61,10 @@ class COMPONENTS_DOWNLOAD_EXPORT SimpleDownloadManagerCoordinator { ...@@ -58,6 +61,10 @@ class COMPONENTS_DOWNLOAD_EXPORT SimpleDownloadManagerCoordinator {
bool has_all_history_downloads() const { return has_all_history_downloads_; } bool has_all_history_downloads() const { return has_all_history_downloads_; }
private: private:
// SimpleDownloadManager::Observer implementation.
void OnManagerGoingDown() override;
void OnDownloadCreated(DownloadItem* item) override;
// Called when |simple_download_manager_| is initialized. // Called when |simple_download_manager_| is initialized.
void OnManagerInitialized(bool has_all_history_downloads); 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