| Index: chrome/browser/component_updater/pnacl/pnacl_updater_observer.cc
|
| diff --git a/chrome/browser/component_updater/pnacl/pnacl_updater_observer.cc b/chrome/browser/component_updater/pnacl/pnacl_updater_observer.cc
|
| index 2a3a6fa891914eb5e626177235f414a1f71fce20..e036e989c4bfbea56f709640f7f229c0bf1a54c0 100644
|
| --- a/chrome/browser/component_updater/pnacl/pnacl_updater_observer.cc
|
| +++ b/chrome/browser/component_updater/pnacl/pnacl_updater_observer.cc
|
| @@ -9,23 +9,48 @@
|
| #include "chrome/common/chrome_notification_types.h"
|
| #include "content/public/browser/notification_service.h"
|
|
|
| -PnaclUpdaterObserver::PnaclUpdaterObserver(
|
| - PnaclComponentInstaller* installer) : pnacl_installer_(installer) {
|
| - registrar_.Add(this,
|
| - chrome::NOTIFICATION_COMPONENT_UPDATER_SLEEPING,
|
| - content::NotificationService::AllSources());
|
| +PnaclUpdaterObserver::PnaclUpdaterObserver(PnaclComponentInstaller* installer)
|
| + : pnacl_installer_(installer) {}
|
| +
|
| +PnaclUpdaterObserver::~PnaclUpdaterObserver() {}
|
| +
|
| +void PnaclUpdaterObserver::EnsureObserving() {
|
| + if (registrar_.IsEmpty()) {
|
| + registrar_.Add(this,
|
| + chrome::NOTIFICATION_COMPONENT_UPDATE_READY,
|
| + content::NotificationService::AllSources());
|
| + registrar_.Add(this,
|
| + chrome::NOTIFICATION_COMPONENT_UPDATER_SLEEPING,
|
| + content::NotificationService::AllSources());
|
| + }
|
| }
|
|
|
| -PnaclUpdaterObserver::~PnaclUpdaterObserver() { }
|
| +void PnaclUpdaterObserver::StopObserving() {
|
| + registrar_.RemoveAll();
|
| +}
|
|
|
| void PnaclUpdaterObserver::Observe(
|
| int type,
|
| const content::NotificationSource& source,
|
| const content::NotificationDetails& details) {
|
| +
|
| + if (type == chrome::NOTIFICATION_COMPONENT_UPDATE_READY) {
|
| + // If the component updater says there is an UPDATE_READY w/ source
|
| + // being the PNaCl ID, then installation is handed off to the PNaCl
|
| + // installer and we can stop observing.
|
| + if (pnacl_installer_->cus()->IsUpdateNotificationForComponent(
|
| + source, pnacl_installer_->GetCrxComponent())) {
|
| + StopObserving();
|
| + }
|
| + return;
|
| + }
|
| +
|
| if (type == chrome::NOTIFICATION_COMPONENT_UPDATER_SLEEPING) {
|
| - // If the component updater sleeps before a NotifyInstallSuccess,
|
| - // then requests for installs were likely skipped, or an error occurred.
|
| + // If the component updater sleeps before an UPDATE_READY for this
|
| + // component, then requests for installs were likely skipped,
|
| + // an error occurred, or the component is already up to date.
|
| pnacl_installer_->NotifyInstallError();
|
| + StopObserving();
|
| return;
|
| }
|
| }
|
|
|