blob: 6041b5d238dc7aba9e92a9d59cf26f24c89d1646 [file] [log] [blame]
// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/component_updater/pnacl/pnacl_updater_observer.h"
#include "chrome/browser/component_updater/pnacl/pnacl_component_installer.h"
#include "content/public/browser/browser_thread.h"
using content::BrowserThread;
PnaclUpdaterObserver::PnaclUpdaterObserver(PnaclComponentInstaller* pci)
: must_observe_(false), pnacl_installer_(pci) {}
PnaclUpdaterObserver::~PnaclUpdaterObserver() {}
void PnaclUpdaterObserver::EnsureObserving() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
must_observe_ = true;
}
void PnaclUpdaterObserver::StopObserving() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
must_observe_ = false;
}
void PnaclUpdaterObserver::OnEvent(Events event, int extra) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
if (must_observe_) {
switch (event) {
default:
break;
case 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. The installer will be the one
// to run the callback w/ success or failure.
must_observe_ = false;
break;
case COMPONENT_UPDATER_SLEEPING:
// If the component updater sleeps before an UPDATE_READY for this
// component, then requests for installs were likely skipped,
// an error occurred, or there was no new update.
must_observe_ = false;
pnacl_installer_->NotifyInstallError();
break;
}
}
}