Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2270)

Unified Diff: chrome/browser/component_updater/component_updater_service.cc

Issue 251403002: Implement an observer for the component updater. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add asserts. Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/component_updater/component_updater_service.cc
diff --git a/chrome/browser/component_updater/component_updater_service.cc b/chrome/browser/component_updater/component_updater_service.cc
index 903674a15409ab26adcd249e7c6f06c886e10402..a9fb3713cd0016a462e7bc3361ba28983251400f 100644
--- a/chrome/browser/component_updater/component_updater_service.cc
+++ b/chrome/browser/component_updater/component_updater_service.cc
@@ -16,6 +16,7 @@
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
+#include "base/observer_list.h"
#include "base/sequenced_task_runner.h"
#include "base/stl_util.h"
#include "base/threading/sequenced_worker_pool.h"
@@ -83,7 +84,6 @@ CrxUpdateItem::~CrxUpdateItem() {
CrxComponent::CrxComponent()
: installer(NULL),
- observer(NULL),
allow_background_download(true) {
}
@@ -163,6 +163,8 @@ class CrxUpdateService : public ComponentUpdateService {
virtual ~CrxUpdateService();
// Overrides for ComponentUpdateService.
+ virtual void AddObserver(Observer* observer) OVERRIDE;
+ virtual void RemoveObserver(Observer* observer) OVERRIDE;
virtual Status Start() OVERRIDE;
virtual Status Stop() OVERRIDE;
virtual Status RegisterComponent(const CrxComponent& component) OVERRIDE;
@@ -241,8 +243,7 @@ class CrxUpdateService : public ComponentUpdateService {
CrxUpdateItem* FindUpdateItemById(const std::string& id);
- void NotifyComponentObservers(ComponentObserver::Events event,
- int extra) const;
+ void NotifyObservers(Observer::Events event, const std::string& id);
bool HasOnDemandItems() const;
@@ -271,6 +272,8 @@ class CrxUpdateService : public ComponentUpdateService {
bool running_;
+ ObserverList<Observer> observer_list_;
+
DISALLOW_COPY_AND_ASSIGN(CrxUpdateService);
};
@@ -296,6 +299,16 @@ CrxUpdateService::~CrxUpdateService() {
STLDeleteElements(&work_items_);
}
+void CrxUpdateService::AddObserver(Observer* observer) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ observer_list_.AddObserver(observer);
+}
+
+void CrxUpdateService::RemoveObserver(Observer* observer) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ observer_list_.RemoveObserver(observer);
+}
+
ComponentUpdateService::Status CrxUpdateService::Start() {
// Note that RegisterComponent will call Start() when the first
// component is registered, so it can be called twice. This way
@@ -304,7 +317,7 @@ ComponentUpdateService::Status CrxUpdateService::Start() {
if (work_items_.empty())
return kOk;
- NotifyComponentObservers(ComponentObserver::COMPONENT_UPDATER_STARTED, 0);
+ NotifyObservers(Observer::COMPONENT_UPDATER_STARTED, "");
timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(config_->InitialDelay()),
this, &CrxUpdateService::ProcessPendingItems);
@@ -369,7 +382,7 @@ void CrxUpdateService::ScheduleNextRun(StepDelayInterval step_delay) {
}
if (step_delay != kStepDelayShort) {
- NotifyComponentObservers(ComponentObserver::COMPONENT_UPDATER_SLEEPING, 0);
+ NotifyObservers(Observer::COMPONENT_UPDATER_SLEEPING, "");
// Zero is only used for unit tests.
if (0 == delay_seconds)
@@ -405,31 +418,28 @@ void CrxUpdateService::ChangeItemState(CrxUpdateItem* item,
item->status = to;
- ComponentObserver* observer = item->component.observer;
- if (observer) {
- switch (to) {
- case CrxUpdateItem::kCanUpdate:
- observer->OnEvent(ComponentObserver::COMPONENT_UPDATE_FOUND, 0);
- break;
- case CrxUpdateItem::kUpdatingDiff:
- case CrxUpdateItem::kUpdating:
- observer->OnEvent(ComponentObserver::COMPONENT_UPDATE_READY, 0);
- break;
- case CrxUpdateItem::kUpdated:
- observer->OnEvent(ComponentObserver::COMPONENT_UPDATED, 0);
- break;
- case CrxUpdateItem::kUpToDate:
- case CrxUpdateItem::kNoUpdate:
- observer->OnEvent(ComponentObserver::COMPONENT_NOT_UPDATED, 0);
- break;
- case CrxUpdateItem::kNew:
- case CrxUpdateItem::kChecking:
- case CrxUpdateItem::kDownloading:
- case CrxUpdateItem::kDownloadingDiff:
- case CrxUpdateItem::kLastStatus:
- // No notification for these states.
- break;
- }
+ switch (to) {
+ case CrxUpdateItem::kCanUpdate:
+ NotifyObservers(Observer::COMPONENT_UPDATE_FOUND, item->id);
+ break;
+ case CrxUpdateItem::kUpdatingDiff:
+ case CrxUpdateItem::kUpdating:
+ NotifyObservers(Observer::COMPONENT_UPDATE_READY, item->id);
+ break;
+ case CrxUpdateItem::kUpdated:
+ NotifyObservers(Observer::COMPONENT_UPDATED, item->id);
+ break;
+ case CrxUpdateItem::kUpToDate:
+ case CrxUpdateItem::kNoUpdate:
+ NotifyObservers(Observer::COMPONENT_NOT_UPDATED, item->id);
+ break;
+ case CrxUpdateItem::kNew:
+ case CrxUpdateItem::kChecking:
+ case CrxUpdateItem::kDownloading:
+ case CrxUpdateItem::kDownloadingDiff:
+ case CrxUpdateItem::kLastStatus:
+ // No notification for these states.
+ break;
}
// Free possible pending network requests.
@@ -932,14 +942,10 @@ void CrxUpdateService::DoneInstalling(const std::string& component_id,
ScheduleNextRun(kStepDelayMedium);
}
-void CrxUpdateService::NotifyComponentObservers(
- ComponentObserver::Events event, int extra) const {
- for (UpdateItems::const_iterator it = work_items_.begin();
- it != work_items_.end(); ++it) {
- ComponentObserver* observer = (*it)->component.observer;
- if (observer)
- observer->OnEvent(event, 0);
- }
+void CrxUpdateService::NotifyObservers(Observer::Events event,
+ const std::string& id) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ FOR_EACH_OBSERVER(Observer, observer_list_, OnEvent(event, id));
}
content::ResourceThrottle* CrxUpdateService::GetOnDemandResourceThrottle(

Powered by Google App Engine
This is Rietveld 408576698