| Index: chrome/browser/chromeos/login/reset_browsertest.cc
|
| diff --git a/chrome/browser/chromeos/login/reset_browsertest.cc b/chrome/browser/chromeos/login/reset_browsertest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..045671cf61ae709a07dc007d037e6239d1026e3e
|
| --- /dev/null
|
| +++ b/chrome/browser/chromeos/login/reset_browsertest.cc
|
| @@ -0,0 +1,227 @@
|
| +// Copyright 2014 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 <string>
|
| +
|
| +#include "base/prefs/pref_service.h"
|
| +#include "chrome/browser/browser_process.h"
|
| +#include "chrome/browser/chromeos/login/login_display_host_impl.h"
|
| +#include "chrome/browser/chromeos/login/login_manager_test.h"
|
| +#include "chrome/browser/chromeos/login/oobe_display.h"
|
| +#include "chrome/browser/chromeos/login/startup_utils.h"
|
| +#include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h"
|
| +#include "chrome/browser/chromeos/login/webui_login_view.h"
|
| +#include "chrome/common/chrome_switches.h"
|
| +#include "chrome/common/pref_names.h"
|
| +#include "chromeos/chromeos_switches.h"
|
| +#include "chromeos/dbus/dbus_thread_manager.h"
|
| +#include "chromeos/dbus/fake_dbus_thread_manager.h"
|
| +#include "chromeos/dbus/fake_power_manager_client.h"
|
| +#include "chromeos/dbus/fake_session_manager_client.h"
|
| +#include "chromeos/dbus/fake_update_engine_client.h"
|
| +#include "content/public/test/browser_test_utils.h"
|
| +
|
| +namespace chromeos {
|
| +
|
| +namespace {
|
| +
|
| +const char kTestUser1[] = "test-user1@gmail.com";
|
| +
|
| +} // namespace
|
| +
|
| +class ResetTest : public LoginManagerTest {
|
| + public:
|
| + ResetTest() : LoginManagerTest(false),
|
| + update_engine_client_(NULL),
|
| + session_manager_client_(NULL),
|
| + power_manager_client_(NULL) {
|
| + }
|
| + virtual ~ResetTest() {}
|
| +
|
| + // LoginManagerTest overrides:
|
| + virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
|
| + FakeDBusThreadManager* dbus_manager = new FakeDBusThreadManager;
|
| + dbus_manager->SetFakeClients();
|
| + session_manager_client_ = new FakeSessionManagerClient;
|
| + dbus_manager->SetSessionManagerClient(
|
| + scoped_ptr<SessionManagerClient>(session_manager_client_));
|
| + power_manager_client_ = new FakePowerManagerClient;
|
| + dbus_manager->SetPowerManagerClient(
|
| + scoped_ptr<PowerManagerClient>(power_manager_client_));
|
| + update_engine_client_ = new FakeUpdateEngineClient;
|
| + dbus_manager->SetUpdateEngineClient(
|
| + scoped_ptr<UpdateEngineClient>(update_engine_client_));
|
| + DBusThreadManager::SetInstanceForTesting(dbus_manager);
|
| +
|
| + LoginManagerTest::SetUpInProcessBrowserTestFixture();
|
| + }
|
| +
|
| + void RegisterSomeUser() {
|
| + RegisterUser(kTestUser1);
|
| + StartupUtils::MarkOobeCompleted();
|
| + }
|
| +
|
| + bool JSExecuted(const std::string& script) {
|
| + return content::ExecuteScript(web_contents(), script);
|
| + }
|
| +
|
| + void InvokeResetScreen() {
|
| + ASSERT_TRUE(JSExecuted("cr.ui.Oobe.handleAccelerator('reset');"));
|
| + OobeScreenWaiter(OobeDisplay::SCREEN_OOBE_RESET).Wait();
|
| + }
|
| +
|
| + void CloseResetScreen() {
|
| + ASSERT_TRUE(JSExecuted("$('reset-cancel-button').click();"));
|
| + }
|
| +
|
| + void ClickResetButton() {
|
| + ASSERT_TRUE(JSExecuted("$('reset-button').click();"));
|
| + }
|
| +
|
| + FakeUpdateEngineClient* update_engine_client_;
|
| + FakeSessionManagerClient* session_manager_client_;
|
| + FakePowerManagerClient* power_manager_client_;
|
| +};
|
| +
|
| +class ResetFirstAfterBootTest : public ResetTest {
|
| + public:
|
| + virtual ~ResetFirstAfterBootTest() {}
|
| +
|
| + virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE {
|
| + LoginManagerTest::SetUpCommandLine(command_line);
|
| + command_line->AppendSwitch(switches::kFirstExecAfterBoot);
|
| + }
|
| +};
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ResetTest, PRE_ShowAndCancel) {
|
| + RegisterSomeUser();
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ResetTest, ShowAndCancel) {
|
| + JSExpect("!!document.querySelector('#reset.hidden')");
|
| + EXPECT_EQ(0, update_engine_client_->can_rollback_call_count());
|
| + InvokeResetScreen();
|
| + JSExpect("!document.querySelector('#reset.hidden')");
|
| + CloseResetScreen();
|
| + JSExpect("!!document.querySelector('#reset.hidden')");
|
| + EXPECT_EQ(1, update_engine_client_->can_rollback_call_count());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ResetTest, PRE_RestartBeforePowerwash) {
|
| + RegisterSomeUser();
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ResetTest, RestartBeforePowerwash) {
|
| + PrefService* prefs = g_browser_process->local_state();
|
| +
|
| + InvokeResetScreen();
|
| + EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
|
| + EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count());
|
| + ClickResetButton();
|
| + ASSERT_EQ(1, power_manager_client_->num_request_restart_calls());
|
| + ASSERT_EQ(0, session_manager_client_->start_device_wipe_call_count());
|
| +
|
| + EXPECT_FALSE(prefs->GetBoolean(prefs::kRollbackRequested));
|
| + EXPECT_TRUE(prefs->GetBoolean(prefs::kFactoryResetRequested));
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ResetTest, PRE_RestartBeforeRollback) {
|
| + RegisterSomeUser();
|
| + update_engine_client_->set_can_rollback_check_result(true);
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ResetTest, RestartBeforeRollback) {
|
| + PrefService* prefs = g_browser_process->local_state();
|
| +
|
| + InvokeResetScreen();
|
| + EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
|
| + EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count());
|
| + ASSERT_TRUE(content::ExecuteScript(
|
| + web_contents(),
|
| + "$('reset-rollback-checkbox').checked = true;"));
|
| + ClickResetButton();
|
| + ASSERT_EQ(1, power_manager_client_->num_request_restart_calls());
|
| + ASSERT_EQ(0, session_manager_client_->start_device_wipe_call_count());
|
| + EXPECT_EQ(0, update_engine_client_->rollback_call_count());
|
| +
|
| + EXPECT_TRUE(prefs->GetBoolean(prefs::kRollbackRequested));
|
| + EXPECT_TRUE(prefs->GetBoolean(prefs::kFactoryResetRequested));
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PRE_ShortcutInvokedCases) {
|
| + RegisterSomeUser();
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, ShortcutInvokedCases) {
|
| + // rollback unavailable
|
| + update_engine_client_->set_can_rollback_check_result(false);
|
| + InvokeResetScreen();
|
| + EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
|
| + EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count());
|
| + EXPECT_EQ(0, update_engine_client_->rollback_call_count());
|
| + ClickResetButton();
|
| + EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
|
| + EXPECT_EQ(1, session_manager_client_->start_device_wipe_call_count());
|
| + EXPECT_EQ(0, update_engine_client_->rollback_call_count());
|
| + CloseResetScreen();
|
| + OobeScreenWaiter(OobeDisplay::SCREEN_ACCOUNT_PICKER).Wait();
|
| +
|
| + update_engine_client_->set_can_rollback_check_result(true);
|
| + // rollback available and unchecked
|
| + InvokeResetScreen();
|
| + ClickResetButton();
|
| + EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
|
| + EXPECT_EQ(2, session_manager_client_->start_device_wipe_call_count());
|
| + EXPECT_EQ(0, update_engine_client_->rollback_call_count());
|
| + CloseResetScreen();
|
| + OobeScreenWaiter(OobeDisplay::SCREEN_ACCOUNT_PICKER).Wait();
|
| +
|
| + // rollback available and checked
|
| + InvokeResetScreen();
|
| + ASSERT_TRUE(content::ExecuteScript(
|
| + web_contents(),
|
| + "$('reset-rollback-checkbox').checked = true;"));
|
| + ClickResetButton();
|
| + EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
|
| + EXPECT_EQ(2, session_manager_client_->start_device_wipe_call_count());
|
| + EXPECT_EQ(1, update_engine_client_->rollback_call_count());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PRE_PowerwashRequested) {
|
| + PrefService* prefs = g_browser_process->local_state();
|
| + prefs->SetBoolean(prefs::kRollbackRequested, false);
|
| + prefs->SetBoolean(prefs::kFactoryResetRequested, true);
|
| + RegisterSomeUser();
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PowerwashRequested) {
|
| + OobeScreenWaiter(OobeDisplay::SCREEN_OOBE_RESET).Wait();
|
| + EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
|
| + EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count());
|
| + EXPECT_EQ(0, update_engine_client_->rollback_call_count());
|
| + ClickResetButton();
|
| + EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
|
| + EXPECT_EQ(1, session_manager_client_->start_device_wipe_call_count());
|
| + EXPECT_EQ(0, update_engine_client_->rollback_call_count());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PRE_RollbackRequested) {
|
| + PrefService* prefs = g_browser_process->local_state();
|
| + prefs->SetBoolean(prefs::kRollbackRequested, true);
|
| + prefs->SetBoolean(prefs::kFactoryResetRequested, true);
|
| + RegisterSomeUser();
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, RollbackRequested) {
|
| + OobeScreenWaiter(OobeDisplay::SCREEN_OOBE_RESET).Wait();
|
| + EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
|
| + EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count());
|
| + EXPECT_EQ(0, update_engine_client_->rollback_call_count());
|
| + ClickResetButton();
|
| + EXPECT_EQ(0, power_manager_client_->num_request_restart_calls());
|
| + EXPECT_EQ(0, session_manager_client_->start_device_wipe_call_count());
|
| + EXPECT_EQ(1, update_engine_client_->rollback_call_count());
|
| +}
|
| +
|
| +} // namespace chromeos
|
|
|