Disjoints update screen controller part (UpdateScreen) from it's views part...

Disjoints update screen controller part (UpdateScreen) from it's views part (UpdateView) via UpdateScreenActor interface.

BUG=chromium-os:11632
TEST=browser_tests

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@86270 0039d316-1c4b-4281-b951-d872f2087c98
parent dde0624f
...@@ -9,10 +9,13 @@ ...@@ -9,10 +9,13 @@
#include "base/threading/thread_restrictions.h" #include "base/threading/thread_restrictions.h"
#include "chrome/browser/chromeos/cros/cros_library.h" #include "chrome/browser/chromeos/cros/cros_library.h"
#include "chrome/browser/chromeos/login/screen_observer.h" #include "chrome/browser/chromeos/login/screen_observer.h"
#include "chrome/browser/chromeos/login/update_view.h" #include "chrome/browser/chromeos/login/update_screen_actor.h"
#include "chrome/browser/chromeos/login/views_update_screen_actor.h"
#include "chrome/browser/chromeos/login/wizard_controller.h" #include "chrome/browser/chromeos/login/wizard_controller.h"
#include "content/browser/browser_thread.h" #include "content/browser/browser_thread.h"
namespace chromeos {
namespace { namespace {
// Progress bar stages. Each represents progress bar value // Progress bar stages. Each represents progress bar value
...@@ -34,10 +37,19 @@ const int kUpdateScreenHeight = 305; ...@@ -34,10 +37,19 @@ const int kUpdateScreenHeight = 305;
const char kUpdateDeadlineFile[] = "/tmp/update-check-response-deadline"; const char kUpdateDeadlineFile[] = "/tmp/update-check-response-deadline";
} // anonymous namespace // Invoked from call to RequestUpdateCheck upon completion of the DBus call.
void StartUpdateCallback(void* user_data,
namespace chromeos { UpdateResult result,
const char* msg) {
if (result != chromeos::UPDATE_RESULT_SUCCESS) {
DCHECK(user_data);
UpdateScreen* screen = static_cast<UpdateScreen*>(user_data);
if (UpdateScreen::HasInstance(screen))
screen->ExitUpdate(UpdateScreen::REASON_UPDATE_INIT_FAILED);
}
}
} // anonymous namespace
// static // static
UpdateScreen::InstanceSet& UpdateScreen::GetInstanceSet() { UpdateScreen::InstanceSet& UpdateScreen::GetInstanceSet() {
...@@ -53,29 +65,29 @@ bool UpdateScreen::HasInstance(UpdateScreen* inst) { ...@@ -53,29 +65,29 @@ bool UpdateScreen::HasInstance(UpdateScreen* inst) {
return (found != instance_set.end()); return (found != instance_set.end());
} }
UpdateScreen::UpdateScreen(WizardScreenDelegate* delegate) UpdateScreen::UpdateScreen(WizardScreenDelegate* delegate)
: DefaultViewScreen<chromeos::UpdateView>(delegate, : WizardScreen(delegate),
kUpdateScreenWidth,
kUpdateScreenHeight),
checking_for_update_(true),
reboot_check_delay_(0), reboot_check_delay_(0),
is_checking_for_update_(true),
is_downloading_update_(false), is_downloading_update_(false),
is_all_updates_critical_(true) { // See http://crosbug.com/10068 is_ignore_update_deadlines_(true), // See http://crosbug.com/10068
is_shown_(false),
actor_(new ViewsUpdateScreenActor(delegate,
kUpdateScreenWidth,
kUpdateScreenHeight)) {
GetInstanceSet().insert(this); GetInstanceSet().insert(this);
} }
UpdateScreen::~UpdateScreen() { UpdateScreen::~UpdateScreen() {
// Remove pointer to this object from view.
if (view())
view()->set_controller(NULL);
CrosLibrary::Get()->GetUpdateLibrary()->RemoveObserver(this); CrosLibrary::Get()->GetUpdateLibrary()->RemoveObserver(this);
GetInstanceSet().erase(this); GetInstanceSet().erase(this);
} }
void UpdateScreen::UpdateStatusChanged(UpdateLibrary* library) { void UpdateScreen::UpdateStatusChanged(UpdateLibrary* library) {
UpdateStatusOperation status = library->status().status; UpdateStatusOperation status = library->status().status;
if (checking_for_update_ && status > UPDATE_STATUS_CHECKING_FOR_UPDATE) { if (is_checking_for_update_ && status > UPDATE_STATUS_CHECKING_FOR_UPDATE) {
checking_for_update_ = false; is_checking_for_update_ = false;
} }
switch (status) { switch (status) {
...@@ -85,7 +97,7 @@ void UpdateScreen::UpdateStatusChanged(UpdateLibrary* library) { ...@@ -85,7 +97,7 @@ void UpdateScreen::UpdateStatusChanged(UpdateLibrary* library) {
break; break;
case UPDATE_STATUS_UPDATE_AVAILABLE: case UPDATE_STATUS_UPDATE_AVAILABLE:
MakeSureScreenIsShown(); MakeSureScreenIsShown();
view()->SetProgress(kBeforeDownloadProgress); actor_->SetProgress(kBeforeDownloadProgress);
if (!HasCriticalUpdate()) { if (!HasCriticalUpdate()) {
LOG(INFO) << "Noncritical update available: " LOG(INFO) << "Noncritical update available: "
<< library->status().new_version; << library->status().new_version;
...@@ -111,27 +123,27 @@ void UpdateScreen::UpdateStatusChanged(UpdateLibrary* library) { ...@@ -111,27 +123,27 @@ void UpdateScreen::UpdateStatusChanged(UpdateLibrary* library) {
<< library->status().new_version; << library->status().new_version;
} }
} }
view()->ShowCurtain(false); actor_->ShowCurtain(false);
int download_progress = static_cast<int>( int download_progress = static_cast<int>(
library->status().download_progress * kDownloadProgressIncrement); library->status().download_progress * kDownloadProgressIncrement);
view()->SetProgress(kBeforeDownloadProgress + download_progress); actor_->SetProgress(kBeforeDownloadProgress + download_progress);
} }
break; break;
case UPDATE_STATUS_VERIFYING: case UPDATE_STATUS_VERIFYING:
MakeSureScreenIsShown(); MakeSureScreenIsShown();
view()->SetProgress(kBeforeVerifyingProgress); actor_->SetProgress(kBeforeVerifyingProgress);
break; break;
case UPDATE_STATUS_FINALIZING: case UPDATE_STATUS_FINALIZING:
MakeSureScreenIsShown(); MakeSureScreenIsShown();
view()->SetProgress(kBeforeFinalizingProgress); actor_->SetProgress(kBeforeFinalizingProgress);
break; break;
case UPDATE_STATUS_UPDATED_NEED_REBOOT: case UPDATE_STATUS_UPDATED_NEED_REBOOT:
MakeSureScreenIsShown(); MakeSureScreenIsShown();
// Make sure that first OOBE stage won't be shown after reboot. // Make sure that first OOBE stage won't be shown after reboot.
WizardController::MarkOobeCompleted(); WizardController::MarkOobeCompleted();
view()->SetProgress(kProgressComplete); actor_->SetProgress(kProgressComplete);
if (HasCriticalUpdate()) { if (HasCriticalUpdate()) {
view()->ShowCurtain(false); actor_->ShowCurtain(false);
VLOG(1) << "Initiate reboot after update"; VLOG(1) << "Initiate reboot after update";
CrosLibrary::Get()->GetUpdateLibrary()->RebootAfterUpdate(); CrosLibrary::Get()->GetUpdateLibrary()->RebootAfterUpdate();
reboot_timer_.Start(base::TimeDelta::FromSeconds(reboot_check_delay_), reboot_timer_.Start(base::TimeDelta::FromSeconds(reboot_check_delay_),
...@@ -152,29 +164,7 @@ void UpdateScreen::UpdateStatusChanged(UpdateLibrary* library) { ...@@ -152,29 +164,7 @@ void UpdateScreen::UpdateStatusChanged(UpdateLibrary* library) {
} }
} }
namespace {
// Invoked from call to RequestUpdateCheck upon completion of the DBus call.
void StartUpdateCallback(void* user_data,
UpdateResult result,
const char* msg) {
if (result != UPDATE_RESULT_SUCCESS) {
DCHECK(user_data);
UpdateScreen* screen = static_cast<UpdateScreen*>(user_data);
if (UpdateScreen::HasInstance(screen))
screen->ExitUpdate(UpdateScreen::REASON_UPDATE_INIT_FAILED);
}
}
} // namespace
void UpdateScreen::StartUpdate() { void UpdateScreen::StartUpdate() {
// Reset view if view was created.
if (view()) {
view()->Reset();
view()->set_controller(this);
is_downloading_update_ = false;
view()->SetProgress(kBeforeUpdateCheckProgress);
}
if (!CrosLibrary::Get()->EnsureLoaded()) { if (!CrosLibrary::Get()->EnsureLoaded()) {
LOG(ERROR) << "Error loading CrosLibrary"; LOG(ERROR) << "Error loading CrosLibrary";
ExitUpdate(REASON_UPDATE_INIT_FAILED); ExitUpdate(REASON_UPDATE_INIT_FAILED);
...@@ -187,17 +177,22 @@ void UpdateScreen::StartUpdate() { ...@@ -187,17 +177,22 @@ void UpdateScreen::StartUpdate() {
} }
void UpdateScreen::CancelUpdate() { void UpdateScreen::CancelUpdate() {
// Screen has longer lifetime than it's view. ExitUpdate(REASON_UPDATE_CANCELED);
// View is deleted after wizard proceeds to the next screen.
if (view())
ExitUpdate(REASON_UPDATE_CANCELED);
} }
void UpdateScreen::Show() { void UpdateScreen::Show() {
DefaultViewScreen<UpdateView>::Show(); is_shown_ = true;
view()->set_controller(this); actor_->Show();
is_downloading_update_ = false; actor_->SetProgress(kBeforeUpdateCheckProgress);
view()->SetProgress(kBeforeUpdateCheckProgress); }
void UpdateScreen::Hide() {
actor_->Hide();
is_shown_ = false;
}
gfx::Size UpdateScreen::GetScreenSize() const {
return gfx::Size(kUpdateScreenWidth, kUpdateScreenHeight);
} }
void UpdateScreen::ExitUpdate(UpdateScreen::ExitReason reason) { void UpdateScreen::ExitUpdate(UpdateScreen::ExitReason reason) {
...@@ -205,7 +200,7 @@ void UpdateScreen::ExitUpdate(UpdateScreen::ExitReason reason) { ...@@ -205,7 +200,7 @@ void UpdateScreen::ExitUpdate(UpdateScreen::ExitReason reason) {
if (CrosLibrary::Get()->EnsureLoaded()) if (CrosLibrary::Get()->EnsureLoaded())
CrosLibrary::Get()->GetUpdateLibrary()->RemoveObserver(this); CrosLibrary::Get()->GetUpdateLibrary()->RemoveObserver(this);
switch(reason) { switch (reason) {
case REASON_UPDATE_CANCELED: case REASON_UPDATE_CANCELED:
observer->OnExit(ScreenObserver::UPDATE_NOUPDATE); observer->OnExit(ScreenObserver::UPDATE_NOUPDATE);
break; break;
...@@ -230,7 +225,7 @@ void UpdateScreen::ExitUpdate(UpdateScreen::ExitReason reason) { ...@@ -230,7 +225,7 @@ void UpdateScreen::ExitUpdate(UpdateScreen::ExitReason reason) {
break; break;
case UPDATE_STATUS_ERROR: case UPDATE_STATUS_ERROR:
case UPDATE_STATUS_REPORTING_ERROR_EVENT: case UPDATE_STATUS_REPORTING_ERROR_EVENT:
observer->OnExit(checking_for_update_ ? observer->OnExit(is_checking_for_update_ ?
ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE : ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE :
ScreenObserver::UPDATE_ERROR_UPDATING); ScreenObserver::UPDATE_ERROR_UPDATING);
break; break;
...@@ -247,13 +242,12 @@ void UpdateScreen::ExitUpdate(UpdateScreen::ExitReason reason) { ...@@ -247,13 +242,12 @@ void UpdateScreen::ExitUpdate(UpdateScreen::ExitReason reason) {
void UpdateScreen::OnWaitForRebootTimeElapsed() { void UpdateScreen::OnWaitForRebootTimeElapsed() {
LOG(ERROR) << "Unable to reboot - asking user for a manual reboot."; LOG(ERROR) << "Unable to reboot - asking user for a manual reboot.";
MakeSureScreenIsShown(); MakeSureScreenIsShown();
view()->ShowManualRebootInfo(); actor_->ShowManualRebootInfo();
} }
void UpdateScreen::MakeSureScreenIsShown() { void UpdateScreen::MakeSureScreenIsShown() {
if (!view()) { if (!is_shown_)
delegate()->ShowCurrentScreen(); delegate()->ShowCurrentScreen();
}
} }
void UpdateScreen::SetRebootCheckDelay(int seconds) { void UpdateScreen::SetRebootCheckDelay(int seconds) {
...@@ -264,7 +258,7 @@ void UpdateScreen::SetRebootCheckDelay(int seconds) { ...@@ -264,7 +258,7 @@ void UpdateScreen::SetRebootCheckDelay(int seconds) {
} }
bool UpdateScreen::HasCriticalUpdate() { bool UpdateScreen::HasCriticalUpdate() {
if (is_all_updates_critical_) if (is_ignore_update_deadlines_)
return true; return true;
std::string deadline; std::string deadline;
...@@ -282,8 +276,4 @@ bool UpdateScreen::HasCriticalUpdate() { ...@@ -282,8 +276,4 @@ bool UpdateScreen::HasCriticalUpdate() {
return true; return true;
} }
void UpdateScreen::SetAllUpdatesCritical(bool is_critical) {
is_all_updates_critical_ = is_critical;
}
} // namespace chromeos } // namespace chromeos
// 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.
...@@ -6,37 +6,46 @@ ...@@ -6,37 +6,46 @@
#define CHROME_BROWSER_CHROMEOS_LOGIN_UPDATE_SCREEN_H_ #define CHROME_BROWSER_CHROMEOS_LOGIN_UPDATE_SCREEN_H_
#pragma once #pragma once
#include <set>
#include "base/gtest_prod_util.h"
#include "base/memory/scoped_ptr.h"
#include "base/timer.h" #include "base/timer.h"
#include "chrome/browser/chromeos/cros/update_library.h" #include "chrome/browser/chromeos/cros/update_library.h"
#include "chrome/browser/chromeos/login/update_view.h" #include "chrome/browser/chromeos/login/wizard_screen.h"
#include "chrome/browser/chromeos/login/view_screen.h"
namespace chromeos { namespace chromeos {
class UpdateController { // Forward declaration.
public: class UpdateScreenActor;
// Starts update.
virtual void StartUpdate() = 0;
// Cancels pending update without error.
virtual void CancelUpdate() = 0;
};
class UpdateScreen: public DefaultViewScreen<chromeos::UpdateView>, // Controller for the update screen. It does not depend on the specific
public UpdateLibrary::Observer, // implementation of the screen showing (Views of WebUI based), the dependency
public UpdateController { // is moved to the UpdateScreenActor instead.
class UpdateScreen: public UpdateLibrary::Observer,
public WizardScreen {
public: public:
explicit UpdateScreen(WizardScreenDelegate* delegate); explicit UpdateScreen(WizardScreenDelegate* delegate);
virtual ~UpdateScreen(); virtual ~UpdateScreen();
// UpdateLibrary::Observer implementation: // Overridden from WizardScreen.
virtual void UpdateStatusChanged(UpdateLibrary* library); virtual void Show();
virtual void Hide();
virtual gfx::Size GetScreenSize() const;
// Overridden from UpdateController: // Checks for updates and performs an update if needed. Made virtual to
// simplify mocking.
virtual void StartUpdate(); virtual void StartUpdate();
// Force cancel update. Made virtual to simplify mocking.
virtual void CancelUpdate(); virtual void CancelUpdate();
// Overridden from ViewScreen. // Reboot check delay get/set, in seconds.
virtual void Show(); int reboot_check_delay() const { return reboot_check_delay_; }
void SetRebootCheckDelay(int seconds);
// Returns true if this instance is still active (i.e. has not been deleted).
static bool HasInstance(UpdateScreen* inst);
enum ExitReason { enum ExitReason {
REASON_UPDATE_CANCELED, REASON_UPDATE_CANCELED,
...@@ -44,26 +53,20 @@ class UpdateScreen: public DefaultViewScreen<chromeos::UpdateView>, ...@@ -44,26 +53,20 @@ class UpdateScreen: public DefaultViewScreen<chromeos::UpdateView>,
REASON_UPDATE_NON_CRITICAL, REASON_UPDATE_NON_CRITICAL,
REASON_UPDATE_ENDED REASON_UPDATE_ENDED
}; };
// Reports update results to the ScreenObserver. // Reports update results to the ScreenObserver.
virtual void ExitUpdate(ExitReason reason); virtual void ExitUpdate(ExitReason reason);
// Reboot check delay get/set, in seconds. // UpdateLibrary::Observer implementation:
int reboot_check_delay() const { return reboot_check_delay_; } virtual void UpdateStatusChanged(UpdateLibrary* library);
void SetRebootCheckDelay(int seconds);
private:
FRIEND_TEST_ALL_PREFIXES(UpdateScreenTest, TestBasic);
FRIEND_TEST_ALL_PREFIXES(UpdateScreenTest, TestUpdateAvailable);
// Returns true if there is critical system update that requires installation // Returns true if there is critical system update that requires installation
// and immediate reboot. // and immediate reboot.
bool HasCriticalUpdate(); bool HasCriticalUpdate();
// Set flag to treat all updates as critical (for test purpose mainly).
// Default value is false.
void SetAllUpdatesCritical(bool is_critical);
// Returns true if this instance is still active (i.e. has not been deleted).
static bool HasInstance(UpdateScreen* inst);
private:
// Timer notification handlers. // Timer notification handlers.
void OnWaitForRebootTimeElapsed(); void OnWaitForRebootTimeElapsed();
...@@ -78,19 +81,23 @@ class UpdateScreen: public DefaultViewScreen<chromeos::UpdateView>, ...@@ -78,19 +81,23 @@ class UpdateScreen: public DefaultViewScreen<chromeos::UpdateView>,
typedef std::set<UpdateScreen*> InstanceSet; typedef std::set<UpdateScreen*> InstanceSet;
static InstanceSet& GetInstanceSet(); static InstanceSet& GetInstanceSet();
// True if in the process of checking for update.
bool checking_for_update_;
// Time in seconds after which we decide that the device has not rebooted // Time in seconds after which we decide that the device has not rebooted
// automatically. If reboot didn't happen during this interval, ask user to // automatically. If reboot didn't happen during this interval, ask user to
// reboot device manually. // reboot device manually.
int reboot_check_delay_; int reboot_check_delay_;
// True if in the process of checking for update.
bool is_checking_for_update_;
// Flag that is used to detect when update download has just started. // Flag that is used to detect when update download has just started.
bool is_downloading_update_; bool is_downloading_update_;
// If true, update deadlines are ignored.
// Is all updates critical? If true, update deadlines are ignored. // Note, this is true by default. See "http://crosbug.com/10068".
bool is_all_updates_critical_; bool is_ignore_update_deadlines_;
// Whether the update screen is shown.
bool is_shown_;
// Keeps actor which is delegated with all showing operations.
scoped_ptr<UpdateScreenActor> actor_;
DISALLOW_COPY_AND_ASSIGN(UpdateScreen); DISALLOW_COPY_AND_ASSIGN(UpdateScreen);
}; };
......
// 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.
#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_UPDATE_SCREEN_ACTOR_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_UPDATE_SCREEN_ACTOR_H_
#pragma once
namespace chromeos {
class UpdateScreenActor {
public:
virtual ~UpdateScreenActor() {}
// Shows the screen.
virtual void Show() = 0;
// Hides the screen.
virtual void Hide() = 0;
// Shows manual reboot info message.
virtual void ShowManualRebootInfo() = 0;
// Sets current progress in percents.
virtual void SetProgress(int progress) = 0;
// Shows screen curtains.
virtual void ShowCurtain(bool enable) = 0;
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_UPDATE_SCREEN_ACTOR_H_
...@@ -70,7 +70,17 @@ class UpdateScreenTest : public WizardInProcessBrowserTest { ...@@ -70,7 +70,17 @@ class UpdateScreenTest : public WizardInProcessBrowserTest {
.Times(AnyNumber()); .Times(AnyNumber());
} }
virtual void SetUpOnMainThread() {
mock_screen_observer_.reset(new MockScreenObserver());
ASSERT_TRUE(controller() != NULL);
controller()->set_observer(mock_screen_observer_.get());
update_screen_ = controller()->GetUpdateScreen();
ASSERT_TRUE(update_screen_ != NULL);
ASSERT_EQ(controller()->current_screen(), update_screen_);
}
virtual void TearDownInProcessBrowserTestFixture() { virtual void TearDownInProcessBrowserTestFixture() {
controller()->set_observer(NULL);
cros_mock_->test_api()->SetUpdateLibrary(NULL, true); cros_mock_->test_api()->SetUpdateLibrary(NULL, true);
WizardInProcessBrowserTest::TearDownInProcessBrowserTestFixture(); WizardInProcessBrowserTest::TearDownInProcessBrowserTestFixture();
} }
...@@ -79,90 +89,69 @@ class UpdateScreenTest : public WizardInProcessBrowserTest { ...@@ -79,90 +89,69 @@ class UpdateScreenTest : public WizardInProcessBrowserTest {
MockUpdateLibrary* mock_update_library_; MockUpdateLibrary* mock_update_library_;
MockNetworkLibrary* mock_network_library_; MockNetworkLibrary* mock_network_library_;
scoped_ptr<MockScreenObserver> mock_screen_observer_;
UpdateScreen* update_screen_;
private: private:
DISALLOW_COPY_AND_ASSIGN(UpdateScreenTest); DISALLOW_COPY_AND_ASSIGN(UpdateScreenTest);
}; };
IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestBasic) { IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestBasic) {
ASSERT_TRUE(controller() != NULL); ASSERT_TRUE(update_screen_->actor_.get() != NULL);
scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver());
controller()->set_observer(mock_screen_observer.get());
UpdateScreen* update_screen = controller()->GetUpdateScreen();
ASSERT_TRUE(update_screen != NULL);
ASSERT_EQ(controller()->current_screen(), update_screen);
UpdateView* update_view = update_screen->view();
ASSERT_TRUE(update_view != NULL);
controller()->set_observer(NULL);
} }
IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestNoUpdate) { IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestNoUpdate) {
ASSERT_TRUE(controller() != NULL);
scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver());
controller()->set_observer(mock_screen_observer.get());
UpdateScreen* update_screen = controller()->GetUpdateScreen();
ASSERT_TRUE(update_screen != NULL);
ASSERT_EQ(controller()->current_screen(), update_screen);
UpdateLibrary::Status status; UpdateLibrary::Status status;
status.status = UPDATE_STATUS_IDLE; status.status = UPDATE_STATUS_IDLE;
EXPECT_CALL(*mock_update_library_, status()) EXPECT_CALL(*mock_update_library_, status())
.Times(AtLeast(1)) .Times(AtLeast(1))
.WillRepeatedly(ReturnRef(status)); .WillRepeatedly(ReturnRef(status));
EXPECT_CALL(*mock_screen_observer, OnExit(ScreenObserver::UPDATE_NOUPDATE)) EXPECT_CALL(*mock_screen_observer_, OnExit(ScreenObserver::UPDATE_NOUPDATE))
.Times(1); .Times(1);
update_screen->UpdateStatusChanged(mock_update_library_); update_screen_->UpdateStatusChanged(mock_update_library_);
controller()->set_observer(NULL);
} }
IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestUpdateAvailable) { IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestUpdateAvailable) {
ASSERT_TRUE(controller() != NULL); update_screen_->is_ignore_update_deadlines_ = true;
scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver());
controller()->set_observer(mock_screen_observer.get());
UpdateScreen* update_screen = controller()->GetUpdateScreen();
ASSERT_TRUE(update_screen != NULL);
ASSERT_EQ(controller()->current_screen(), update_screen);
update_screen->SetAllUpdatesCritical(true);
UpdateLibrary::Status status; UpdateLibrary::Status status;
status.status = UPDATE_STATUS_UPDATE_AVAILABLE; status.status = UPDATE_STATUS_UPDATE_AVAILABLE;
status.new_version = "latest and greatest"; status.new_version = "latest and greatest";
EXPECT_CALL(*mock_update_library_, status()) EXPECT_CALL(*mock_update_library_, status())
.Times(AtLeast(1)) .Times(AtLeast(1))
.WillRepeatedly(ReturnRef(status)); .WillRepeatedly(ReturnRef(status));
update_screen->UpdateStatusChanged(mock_update_library_); update_screen_->UpdateStatusChanged(mock_update_library_);
status.status = UPDATE_STATUS_DOWNLOADING; status.status = UPDATE_STATUS_DOWNLOADING;
status.download_progress = 0.0; status.download_progress = 0.0;
EXPECT_CALL(*mock_update_library_, status()) EXPECT_CALL(*mock_update_library_, status())
.Times(AtLeast(1)) .Times(AtLeast(1))
.WillRepeatedly(ReturnRef(status)); .WillRepeatedly(ReturnRef(status));
update_screen->UpdateStatusChanged(mock_update_library_); update_screen_->UpdateStatusChanged(mock_update_library_);
status.download_progress = 0.5; status.download_progress = 0.5;
EXPECT_CALL(*mock_update_library_, status()) EXPECT_CALL(*mock_update_library_, status())
.Times(AtLeast(1)) .Times(AtLeast(1))
.WillRepeatedly(ReturnRef(status)); .WillRepeatedly(ReturnRef(status));
update_screen->UpdateStatusChanged(mock_update_library_); update_screen_->UpdateStatusChanged(mock_update_library_);
status.download_progress = 1.0; status.download_progress = 1.0;
EXPECT_CALL(*mock_update_library_, status()) EXPECT_CALL(*mock_update_library_, status())
.Times(AtLeast(1)) .Times(AtLeast(1))
.WillRepeatedly(ReturnRef(status)); .WillRepeatedly(ReturnRef(status));
update_screen->UpdateStatusChanged(mock_update_library_); update_screen_->UpdateStatusChanged(mock_update_library_);
status.status = UPDATE_STATUS_VERIFYING; status.status = UPDATE_STATUS_VERIFYING;
EXPECT_CALL(*mock_update_library_, status()) EXPECT_CALL(*mock_update_library_, status())
.Times(AtLeast(1)) .Times(AtLeast(1))
.WillRepeatedly(ReturnRef(status)); .WillRepeatedly(ReturnRef(status));
update_screen->UpdateStatusChanged(mock_update_library_); update_screen_->UpdateStatusChanged(mock_update_library_);
status.status = UPDATE_STATUS_FINALIZING; status.status = UPDATE_STATUS_FINALIZING;
EXPECT_CALL(*mock_update_library_, status()) EXPECT_CALL(*mock_update_library_, status())
.Times(AtLeast(1)) .Times(AtLeast(1))
.WillRepeatedly(ReturnRef(status)); .WillRepeatedly(ReturnRef(status));
update_screen->UpdateStatusChanged(mock_update_library_); update_screen_->UpdateStatusChanged(mock_update_library_);
status.status = UPDATE_STATUS_UPDATED_NEED_REBOOT; status.status = UPDATE_STATUS_UPDATED_NEED_REBOOT;
EXPECT_CALL(*mock_update_library_, status()) EXPECT_CALL(*mock_update_library_, status())
...@@ -170,9 +159,7 @@ IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestUpdateAvailable) { ...@@ -170,9 +159,7 @@ IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestUpdateAvailable) {
.WillRepeatedly(ReturnRef(status)); .WillRepeatedly(ReturnRef(status));
EXPECT_CALL(*mock_update_library_, RebootAfterUpdate()) EXPECT_CALL(*mock_update_library_, RebootAfterUpdate())
.Times(1); .Times(1);
update_screen->UpdateStatusChanged(mock_update_library_); update_screen_->UpdateStatusChanged(mock_update_library_);
controller()->set_observer(NULL);
} }
static void RequestUpdateCheckFail(UpdateCallback callback, void* userdata) { static void RequestUpdateCheckFail(UpdateCallback callback, void* userdata) {
...@@ -180,18 +167,11 @@ static void RequestUpdateCheckFail(UpdateCallback callback, void* userdata) { ...@@ -180,18 +167,11 @@ static void RequestUpdateCheckFail(UpdateCallback callback, void* userdata) {
} }
IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorIssuingUpdateCheck) { IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorIssuingUpdateCheck) {
ASSERT_TRUE(controller() != NULL);
scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver());
controller()->set_observer(mock_screen_observer.get());
UpdateScreen* update_screen = controller()->GetUpdateScreen();
ASSERT_TRUE(update_screen != NULL);
ASSERT_EQ(controller()->current_screen(), update_screen);
// First, cancel the update that is already in progress. // First, cancel the update that is already in progress.
EXPECT_CALL(*mock_screen_observer, EXPECT_CALL(*mock_screen_observer_,
OnExit(ScreenObserver::UPDATE_NOUPDATE)) OnExit(ScreenObserver::UPDATE_NOUPDATE))
.Times(1); .Times(1);
update_screen->CancelUpdate(); update_screen_->CancelUpdate();
// Run UpdateScreen::StartUpdate() again, but CheckForUpdate() will fail // Run UpdateScreen::StartUpdate() again, but CheckForUpdate() will fail
// issuing the update check this time. // issuing the update check this time.
...@@ -202,62 +182,41 @@ IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorIssuingUpdateCheck) { ...@@ -202,62 +182,41 @@ IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorIssuingUpdateCheck) {
EXPECT_CALL(*mock_update_library_, RequestUpdateCheck(_,_)) EXPECT_CALL(*mock_update_library_, RequestUpdateCheck(_,_))
.Times(1) .Times(1)
.WillOnce(Invoke(RequestUpdateCheckFail)); .WillOnce(Invoke(RequestUpdateCheckFail));
EXPECT_CALL(*mock_screen_observer, EXPECT_CALL(*mock_screen_observer_,
OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE)) OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE))
.Times(1); .Times(1);
update_screen->StartUpdate(); update_screen_->StartUpdate();
controller()->set_observer(NULL);
} }
IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorCheckingForUpdate) { IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorCheckingForUpdate) {
ASSERT_TRUE(controller() != NULL);
scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver());
controller()->set_observer(mock_screen_observer.get());
UpdateScreen* update_screen = controller()->GetUpdateScreen();
ASSERT_TRUE(update_screen != NULL);
ASSERT_EQ(controller()->current_screen(), update_screen);
UpdateLibrary::Status status; UpdateLibrary::Status status;
status.status = UPDATE_STATUS_ERROR; status.status = UPDATE_STATUS_ERROR;
EXPECT_CALL(*mock_update_library_, status()) EXPECT_CALL(*mock_update_library_, status())
.Times(AtLeast(1)) .Times(AtLeast(1))
.WillRepeatedly(ReturnRef(status)); .WillRepeatedly(ReturnRef(status));
EXPECT_CALL(*mock_screen_observer, EXPECT_CALL(*mock_screen_observer_,
OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE)) OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE))
.Times(1); .Times(1);
update_screen->UpdateStatusChanged(mock_update_library_); update_screen_->UpdateStatusChanged(mock_update_library_);
controller()->set_observer(NULL);
} }
IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorUpdating) { IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorUpdating) {
ASSERT_TRUE(controller() != NULL);
scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver());
controller()->set_observer(mock_screen_observer.get());
UpdateScreen* update_screen = controller()->GetUpdateScreen();
ASSERT_TRUE(update_screen != NULL);
ASSERT_EQ(controller()->current_screen(), update_screen);
UpdateLibrary::Status status; UpdateLibrary::Status status;
status.status = UPDATE_STATUS_UPDATE_AVAILABLE; status.status = UPDATE_STATUS_UPDATE_AVAILABLE;
status.new_version = "latest and greatest"; status.new_version = "latest and greatest";
EXPECT_CALL(*mock_update_library_, status()) EXPECT_CALL(*mock_update_library_, status())
.Times(AtLeast(1)) .Times(AtLeast(1))
.WillRepeatedly(ReturnRef(status)); .WillRepeatedly(ReturnRef(status));
update_screen->UpdateStatusChanged(mock_update_library_); update_screen_->UpdateStatusChanged(mock_update_library_);
status.status = UPDATE_STATUS_ERROR; status.status = UPDATE_STATUS_ERROR;
EXPECT_CALL(*mock_update_library_, status()) EXPECT_CALL(*mock_update_library_, status())
.Times(AtLeast(1)) .Times(AtLeast(1))
.WillRepeatedly(ReturnRef(status)); .WillRepeatedly(ReturnRef(status));
EXPECT_CALL(*mock_screen_observer, EXPECT_CALL(*mock_screen_observer_,
OnExit(ScreenObserver::UPDATE_ERROR_UPDATING)) OnExit(ScreenObserver::UPDATE_ERROR_UPDATING))
.Times(1); .Times(1);
update_screen->UpdateStatusChanged(mock_update_library_); update_screen_->UpdateStatusChanged(mock_update_library_);
controller()->set_observer(NULL);
} }
} // namespace chromeos } // namespace chromeos
// 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.
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
#include "base/utf_string_conversions.h" #include "base/utf_string_conversions.h"
#include "chrome/browser/chromeos/login/helper.h" #include "chrome/browser/chromeos/login/helper.h"
#include "chrome/browser/chromeos/login/rounded_rect_painter.h" #include "chrome/browser/chromeos/login/rounded_rect_painter.h"
#include "chrome/browser/chromeos/login/update_screen.h"
#include "chrome/browser/chromeos/login/wizard_accessibility_helper.h" #include "chrome/browser/chromeos/login/wizard_accessibility_helper.h"
#include "grit/chromium_strings.h" #include "grit/chromium_strings.h"
#include "grit/generated_resources.h" #include "grit/generated_resources.h"
......
...@@ -17,7 +17,6 @@ class Throbber; ...@@ -17,7 +17,6 @@ class Throbber;
namespace chromeos { namespace chromeos {
class ScreenObserver; class ScreenObserver;
class UpdateController;
// View for the network selection/initial welcome screen. // View for the network selection/initial welcome screen.
class UpdateView : public views::View { class UpdateView : public views::View {
...@@ -29,11 +28,6 @@ class UpdateView : public views::View { ...@@ -29,11 +28,6 @@ class UpdateView : public views::View {
void Reset(); void Reset();
void UpdateLocalizedStrings(); void UpdateLocalizedStrings();
// Sets update controller.
void set_controller(UpdateController* controller) {
controller_ = controller;
}
// Advances view's progress bar. Maximum progress is 100. // Advances view's progress bar. Maximum progress is 100.
void AddProgress(int progress); void AddProgress(int progress);
...@@ -80,8 +74,6 @@ class UpdateView : public views::View { ...@@ -80,8 +74,6 @@ class UpdateView : public views::View {
// Notifications receiver. // Notifications receiver.
chromeos::ScreenObserver* observer_; chromeos::ScreenObserver* observer_;
// Update controller.
chromeos::UpdateController* controller_;
DISALLOW_COPY_AND_ASSIGN(UpdateView); DISALLOW_COPY_AND_ASSIGN(UpdateView);
}; };
......
// 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.
#include "chrome/browser/chromeos/login/views_update_screen_actor.h"
namespace chromeos {
ViewsUpdateScreenActor::ViewsUpdateScreenActor(WizardScreenDelegate* delegate,
int width,
int height)
: DefaultViewScreen<chromeos::UpdateView>(delegate, width, height) {
}
void ViewsUpdateScreenActor::Show() {
DefaultViewScreen<chromeos::UpdateView>::Show();
}
void ViewsUpdateScreenActor::Hide() {
DefaultViewScreen<chromeos::UpdateView>::Hide();
}
void ViewsUpdateScreenActor::ShowManualRebootInfo() {
view()->ShowManualRebootInfo();
}
void ViewsUpdateScreenActor::SetProgress(int progress) {
view()->SetProgress(progress);
}
void ViewsUpdateScreenActor::ShowCurtain(bool enable) {
view()->ShowCurtain(enable);
}
} // namespace chromeos
// 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.
#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_VIEWS_UPDATE_SCREEN_ACTOR_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_VIEWS_UPDATE_SCREEN_ACTOR_H_
#pragma once
#include "chrome/browser/chromeos/login/update_screen_actor.h"
#include "chrome/browser/chromeos/login/update_view.h"
#include "chrome/browser/chromeos/login/view_screen.h"
#include "chrome/browser/chromeos/login/wizard_screen.h"
namespace chromeos {
class ViewsUpdateScreenActor : public DefaultViewScreen<chromeos::UpdateView>,
public UpdateScreenActor {
public:
ViewsUpdateScreenActor(WizardScreenDelegate* delegate,
int width,
int height);
virtual ~ViewsUpdateScreenActor() {}
virtual void Show();
virtual void Hide();
virtual void ShowManualRebootInfo();
virtual void SetProgress(int progress);
virtual void ShowCurtain(bool enable);
private:
DISALLOW_COPY_AND_ASSIGN(ViewsUpdateScreenActor);
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_VIEWS_UPDATE_SCREEN_ACTOR_H_
// 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.
...@@ -6,8 +6,6 @@ ...@@ -6,8 +6,6 @@
#define CHROME_BROWSER_CHROMEOS_LOGIN_WIZARD_SCREEN_H_ #define CHROME_BROWSER_CHROMEOS_LOGIN_WIZARD_SCREEN_H_
#pragma once #pragma once
#include "ui/gfx/canvas.h"
class WizardScreen; class WizardScreen;
namespace chromeos { namespace chromeos {
class ScreenObserver; class ScreenObserver;
...@@ -52,9 +50,6 @@ class WizardScreen { ...@@ -52,9 +50,6 @@ class WizardScreen {
WizardScreenDelegate* delegate() { return delegate_; } WizardScreenDelegate* delegate() { return delegate_; }
// Refreshes screen state. Should be called after view is made visible.
virtual void Refresh() = 0;
private: private:
WizardScreenDelegate* delegate_; WizardScreenDelegate* delegate_;
}; };
......
...@@ -580,6 +580,7 @@ ...@@ -580,6 +580,7 @@
'browser/chromeos/login/textfield_with_margin.h', 'browser/chromeos/login/textfield_with_margin.h',
'browser/chromeos/login/update_screen.cc', 'browser/chromeos/login/update_screen.cc',
'browser/chromeos/login/update_screen.h', 'browser/chromeos/login/update_screen.h',
'browser/chromeos/login/update_screen_actor.h',
'browser/chromeos/login/update_view.cc', 'browser/chromeos/login/update_view.cc',
'browser/chromeos/login/update_view.h', 'browser/chromeos/login/update_view.h',
'browser/chromeos/login/user_controller.cc', 'browser/chromeos/login/user_controller.cc',
...@@ -602,6 +603,8 @@ ...@@ -602,6 +603,8 @@
'browser/chromeos/login/views_login_display.h', 'browser/chromeos/login/views_login_display.h',
'browser/chromeos/login/views_login_display_host.cc', 'browser/chromeos/login/views_login_display_host.cc',
'browser/chromeos/login/views_login_display_host.h', 'browser/chromeos/login/views_login_display_host.h',
'browser/chromeos/login/views_update_screen_actor.cc',
'browser/chromeos/login/views_update_screen_actor.h',
'browser/chromeos/login/base_login_display_host.h', 'browser/chromeos/login/base_login_display_host.h',
'browser/chromeos/login/web_page_screen.cc', 'browser/chromeos/login/web_page_screen.cc',
'browser/chromeos/login/web_page_screen.h', 'browser/chromeos/login/web_page_screen.h',
......
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