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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -17,6 +17,7 @@ class MockUpdateLibrary : public UpdateLibrary { ...@@ -17,6 +17,7 @@ class MockUpdateLibrary : public UpdateLibrary {
MockUpdateLibrary(); MockUpdateLibrary();
virtual ~MockUpdateLibrary(); virtual ~MockUpdateLibrary();
MOCK_METHOD0(Init, void(void));
MOCK_METHOD1(AddObserver, void(Observer*)); // NOLINT MOCK_METHOD1(AddObserver, void(Observer*)); // NOLINT
MOCK_METHOD1(RemoveObserver, void(Observer*)); // NOLINT MOCK_METHOD1(RemoveObserver, void(Observer*)); // NOLINT
MOCK_METHOD1(HasObserver, bool(Observer*)); MOCK_METHOD1(HasObserver, bool(Observer*));
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "chrome/browser/chromeos/cros/update_library.h" #include "chrome/browser/chromeos/cros/update_library.h"
#include "base/basictypes.h" #include "base/basictypes.h"
#include "base/logging.h"
#include "base/message_loop.h" #include "base/message_loop.h"
#include "base/observer_list.h" #include "base/observer_list.h"
#include "chrome/browser/chromeos/cros/cros_library.h" #include "chrome/browser/chromeos/cros/cros_library.h"
...@@ -14,10 +15,7 @@ namespace chromeos { ...@@ -14,10 +15,7 @@ namespace chromeos {
class UpdateLibraryImpl : public UpdateLibrary { class UpdateLibraryImpl : public UpdateLibrary {
public: public:
UpdateLibraryImpl() : status_connection_(NULL) { UpdateLibraryImpl() : status_connection_(NULL) {}
if (CrosLibrary::Get()->EnsureLoaded())
Init();
}
virtual ~UpdateLibraryImpl() { virtual ~UpdateLibraryImpl() {
if (status_connection_) { if (status_connection_) {
...@@ -26,6 +24,16 @@ class UpdateLibraryImpl : public UpdateLibrary { ...@@ -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) { void AddObserver(Observer* observer) {
observers_.AddObserver(observer); observers_.AddObserver(observer);
} }
...@@ -66,17 +74,11 @@ class UpdateLibraryImpl : public UpdateLibrary { ...@@ -66,17 +74,11 @@ class UpdateLibraryImpl : public UpdateLibrary {
} }
private: private:
static void ChangedHandler(void* object, const UpdateProgress& status) { static void UpdateStatusHandler(void* object, const UpdateProgress& status) {
UpdateLibraryImpl* impl = static_cast<UpdateLibraryImpl*>(object); UpdateLibraryImpl* impl = static_cast<UpdateLibraryImpl*>(object);
impl->UpdateStatus(Status(status)); 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) { void UpdateStatus(const Status& status) {
// Make sure we run on UI thread. // Make sure we run on UI thread.
if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
...@@ -106,6 +108,7 @@ class UpdateLibraryStubImpl : public UpdateLibrary { ...@@ -106,6 +108,7 @@ class UpdateLibraryStubImpl : public UpdateLibrary {
public: public:
UpdateLibraryStubImpl() {} UpdateLibraryStubImpl() {}
virtual ~UpdateLibraryStubImpl() {} virtual ~UpdateLibraryStubImpl() {}
void Init() {}
void AddObserver(Observer* observer) {} void AddObserver(Observer* observer) {}
void RemoveObserver(Observer* observer) {} void RemoveObserver(Observer* observer) {}
bool HasObserver(Observer* observer) { return false; } bool HasObserver(Observer* observer) { return false; }
...@@ -120,9 +123,7 @@ class UpdateLibraryStubImpl : public UpdateLibrary { ...@@ -120,9 +123,7 @@ class UpdateLibraryStubImpl : public UpdateLibrary {
if (callback) if (callback)
callback(user_data, "beta-channel"); callback(user_data, "beta-channel");
} }
const UpdateLibrary::Status& status() const { const UpdateLibrary::Status& status() const { return status_; }
return status_;
}
private: private:
Status status_; Status status_;
...@@ -132,10 +133,13 @@ class UpdateLibraryStubImpl : public UpdateLibrary { ...@@ -132,10 +133,13 @@ class UpdateLibraryStubImpl : public UpdateLibrary {
// static // static
UpdateLibrary* UpdateLibrary::GetImpl(bool stub) { UpdateLibrary* UpdateLibrary::GetImpl(bool stub) {
UpdateLibrary* impl;
if (stub) if (stub)
return new UpdateLibraryStubImpl(); impl = new UpdateLibraryStubImpl();
else else
return new UpdateLibraryImpl(); impl = new UpdateLibraryImpl();
impl->Init();
return impl;
} }
} // namespace chromeos } // namespace chromeos
......
...@@ -54,6 +54,8 @@ class UpdateLibrary { ...@@ -54,6 +54,8 @@ class UpdateLibrary {
virtual ~UpdateLibrary() {} virtual ~UpdateLibrary() {}
virtual void Init() = 0;
virtual void AddObserver(Observer* observer) = 0; virtual void AddObserver(Observer* observer) = 0;
virtual void RemoveObserver(Observer* observer) = 0; virtual void RemoveObserver(Observer* observer) = 0;
virtual bool HasObserver(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