Commit ec24fa15 authored by tfarina@chromium.org's avatar tfarina@chromium.org

cros: Apply the Init() model to UpdateLibrary API.

BUG=None
TEST=None

R=stevenjb@chromium.org

Review URL: http://codereview.chromium.org/7672002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@97034 0039d316-1c4b-4281-b951-d872f2087c98
parent bb008b47
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Copyright (c) 2011 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.
......@@ -17,6 +17,7 @@ class MockUpdateLibrary : public UpdateLibrary {
MockUpdateLibrary();
virtual ~MockUpdateLibrary();
MOCK_METHOD0(Init, void(void));
MOCK_METHOD1(AddObserver, void(Observer*)); // NOLINT
MOCK_METHOD1(RemoveObserver, void(Observer*)); // NOLINT
MOCK_METHOD1(HasObserver, bool(Observer*));
......
......@@ -5,6 +5,7 @@
#include "chrome/browser/chromeos/cros/update_library.h"
#include "base/basictypes.h"
#include "base/logging.h"
#include "base/message_loop.h"
#include "base/observer_list.h"
#include "chrome/browser/chromeos/cros/cros_library.h"
......@@ -14,10 +15,7 @@ namespace chromeos {
class UpdateLibraryImpl : public UpdateLibrary {
public:
UpdateLibraryImpl() : status_connection_(NULL) {
if (CrosLibrary::Get()->EnsureLoaded())
Init();
}
UpdateLibraryImpl() : status_connection_(NULL) {}
virtual ~UpdateLibraryImpl() {
if (status_connection_) {
......@@ -26,6 +24,16 @@ class UpdateLibraryImpl : public UpdateLibrary {
}
}
void Init() {
if (CrosLibrary::Get()->EnsureLoaded()) {
CHECK(!status_connection_) << "Already initialized";
status_connection_ =
chromeos::MonitorUpdateStatus(&UpdateStatusHandler, this);
// Asynchronously load the initial state.
chromeos::RequestUpdateStatus(&UpdateStatusHandler, this);
}
}
void AddObserver(Observer* observer) {
observers_.AddObserver(observer);
}
......@@ -66,17 +74,11 @@ class UpdateLibraryImpl : public UpdateLibrary {
}
private:
static void ChangedHandler(void* object, const UpdateProgress& status) {
static void UpdateStatusHandler(void* object, const UpdateProgress& status) {
UpdateLibraryImpl* impl = static_cast<UpdateLibraryImpl*>(object);
impl->UpdateStatus(Status(status));
}
void Init() {
status_connection_ = chromeos::MonitorUpdateStatus(&ChangedHandler, this);
// Asynchronously load the initial state.
RequestUpdateStatus(&ChangedHandler, this);
}
void UpdateStatus(const Status& status) {
// Make sure we run on UI thread.
if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
......@@ -106,6 +108,7 @@ class UpdateLibraryStubImpl : public UpdateLibrary {
public:
UpdateLibraryStubImpl() {}
virtual ~UpdateLibraryStubImpl() {}
void Init() {}
void AddObserver(Observer* observer) {}
void RemoveObserver(Observer* observer) {}
bool HasObserver(Observer* observer) { return false; }
......@@ -120,9 +123,7 @@ class UpdateLibraryStubImpl : public UpdateLibrary {
if (callback)
callback(user_data, "beta-channel");
}
const UpdateLibrary::Status& status() const {
return status_;
}
const UpdateLibrary::Status& status() const { return status_; }
private:
Status status_;
......@@ -132,10 +133,13 @@ class UpdateLibraryStubImpl : public UpdateLibrary {
// static
UpdateLibrary* UpdateLibrary::GetImpl(bool stub) {
UpdateLibrary* impl;
if (stub)
return new UpdateLibraryStubImpl();
impl = new UpdateLibraryStubImpl();
else
return new UpdateLibraryImpl();
impl = new UpdateLibraryImpl();
impl->Init();
return impl;
}
} // namespace chromeos
......
......@@ -54,6 +54,8 @@ class UpdateLibrary {
virtual ~UpdateLibrary() {}
virtual void Init() = 0;
virtual void AddObserver(Observer* observer) = 0;
virtual void RemoveObserver(Observer* observer) = 0;
virtual bool HasObserver(Observer* observer) = 0;
......
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