Commit f74d3787 authored by avayvod@chromium.org's avatar avayvod@chromium.org

ExistingUserController is used for login under automation tests.

BUG=chromiumos:7214
TEST=Run desktopui_ChromeFirstRender autotest and verify that it passes.

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@72478 0039d316-1c4b-4281-b951-d872f2087c98
parent b04a472c
...@@ -5,23 +5,18 @@ ...@@ -5,23 +5,18 @@
#include "chrome/browser/automation/automation_provider.h" #include "chrome/browser/automation/automation_provider.h"
#include "chrome/browser/automation/automation_provider_observers.h" #include "chrome/browser/automation/automation_provider_observers.h"
#include "chrome/browser/chromeos/login/login_screen.h" #include "chrome/browser/chromeos/login/existing_user_controller.h"
#include "chrome/browser/chromeos/login/user_manager.h"
#include "chrome/browser/chromeos/login/wizard_controller.h" using chromeos::ExistingUserController;
#include "views/window/window_gtk.h"
void AutomationProvider::LoginWithUserAndPass(const std::string& username, void AutomationProvider::LoginWithUserAndPass(const std::string& username,
const std::string& password, const std::string& password,
IPC::Message* reply_message) { IPC::Message* reply_message) {
WizardController* controller = WizardController::default_controller(); ExistingUserController* controller =
chromeos::NewUserView* new_user_view = ExistingUserController::current_controller();
controller->GetLoginScreen()->view();
new_user_view->SetUsername(username);
new_user_view->SetPassword(password);
// Set up an observer (it will delete itself). // Set up an observer (it will delete itself).
new LoginManagerObserver(this, reply_message); new LoginManagerObserver(this, reply_message);
new_user_view->Login(); controller->LoginNewUser(username, password);
} }
...@@ -543,9 +543,13 @@ void ExistingUserController::OnLoginSuccess( ...@@ -543,9 +543,13 @@ void ExistingUserController::OnLoginSuccess(
LoginPerformer* performer = login_performer_.release(); LoginPerformer* performer = login_performer_.release();
performer = NULL; performer = NULL;
bool known_user = UserManager::Get()->IsKnownUser(username); bool known_user = UserManager::Get()->IsKnownUser(username);
bool login_only =
CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
switches::kLoginScreen) == WizardController::kLoginScreenName;
AppendStartUrlToCmdline(); AppendStartUrlToCmdline();
controllers_[selected_view_index_]->StopThrobber(); controllers_[selected_view_index_]->StopThrobber();
if (selected_view_index_ + 1 == controllers_.size() && !known_user) { if (selected_view_index_ + 1 == controllers_.size() &&
!known_user && !login_only) {
#if defined(OFFICIAL_BUILD) #if defined(OFFICIAL_BUILD)
CommandLine::ForCurrentProcess()->AppendSwitchPath( CommandLine::ForCurrentProcess()->AppendSwitchPath(
switches::kLoadExtension, switches::kLoadExtension,
......
// Copyright (c) 2010 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/login_screen.h"
#include "base/callback.h"
#include "base/command_line.h"
#include "base/logging.h"
#include "base/process_util.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/browser_thread.h"
#include "chrome/browser/chromeos/boot_times_loader.h"
#include "chrome/browser/chromeos/cros/cros_library.h"
#include "chrome/browser/chromeos/cros/network_library.h"
#include "chrome/browser/chromeos/login/authentication_notification_details.h"
#include "chrome/browser/chromeos/login/helper.h"
#include "chrome/browser/chromeos/login/login_utils.h"
#include "chrome/browser/chromeos/login/message_bubble.h"
#include "chrome/browser/chromeos/login/screen_observer.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
namespace chromeos {
LoginScreen::LoginScreen(WizardScreenDelegate* delegate)
: ViewScreen<NewUserView>(delegate,
kNewUserPodFullWidth, kNewUserPodFullHeight),
bubble_(NULL),
authenticator_(NULL) {
if (CrosLibrary::Get()->EnsureLoaded()) {
authenticator_ = LoginUtils::Get()->CreateAuthenticator(this);
}
}
LoginScreen::~LoginScreen() {
ClearErrors();
}
NewUserView* LoginScreen::AllocateView() {
return new NewUserView(this, true, true);
}
void LoginScreen::OnLogin(const std::string& username,
const std::string& password) {
BootTimesLoader::Get()->RecordLoginAttempted();
Profile* profile = g_browser_process->profile_manager()->GetDefaultProfile();
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
NewRunnableMethod(authenticator_.get(),
&Authenticator::AuthenticateToLogin,
profile, username, password,
std::string(), std::string()));
}
void LoginScreen::OnLoginOffTheRecord() {
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
NewRunnableMethod(authenticator_.get(),
&Authenticator::LoginOffTheRecord));
}
void LoginScreen::OnCreateAccount() {
delegate()->GetObserver(this)->OnExit(ScreenObserver::LOGIN_CREATE_ACCOUNT);
}
void LoginScreen::ClearErrors() {
// bubble_ will be set to NULL in InfoBubbleClosing callback.
if (bubble_)
bubble_->Close();
}
void LoginScreen::OnLoginFailure(const LoginFailure& failure) {
const std::string error = failure.GetErrorString();
VLOG(1) << "LoginManagerView: OnLoginFailure() " << error;
NetworkLibrary* network = CrosLibrary::Get()->GetNetworkLibrary();
// Check networking after trying to login in case user is
// cached locally or the local admin account.
if (!network || !CrosLibrary::Get()->EnsureLoaded()) {
ShowError(IDS_LOGIN_ERROR_NO_NETWORK_LIBRARY, error);
} else if (!network->Connected()) {
ShowError(IDS_LOGIN_ERROR_OFFLINE_FAILED_NETWORK_NOT_CONNECTED, error);
} else {
ShowError(IDS_LOGIN_ERROR_AUTHENTICATING_NEW, error);
}
view()->ClearAndFocusPassword();
view()->EnableInputControls(true);
}
void LoginScreen::OnLoginSuccess(
const std::string& username,
const std::string& password,
const GaiaAuthConsumer::ClientLoginResult& credentials,
bool pending_requests) {
delegate()->GetObserver(this)->OnExit(ScreenObserver::LOGIN_SIGN_IN_SELECTED);
AppendStartUrlToCmdline();
LoginUtils::Get()->CompleteLogin(username,
password,
credentials,
pending_requests);
}
void LoginScreen::OnOffTheRecordLoginSuccess() {
LoginUtils::Get()->CompleteOffTheRecordLogin(start_url_);
}
void LoginScreen::OnHelpLinkActivated() {
AddStartUrl(GetAccountRecoveryHelpUrl());
OnLoginOffTheRecord();
}
void LoginScreen::AppendStartUrlToCmdline() {
if (start_url_.is_valid())
CommandLine::ForCurrentProcess()->AppendArg(start_url_.spec());
}
void LoginScreen::ShowError(int error_id, const std::string& details) {
ClearErrors();
std::wstring error_text = UTF16ToWide(l10n_util::GetStringUTF16(error_id));
// TODO(dpolukhin): show detailed error info. |details| string contains
// low level error info that is not localized and even is not user friendly.
// For now just ignore it because error_text contains all required information
// for end users, developers can see details string in Chrome logs.
bubble_ = MessageBubble::Show(
view()->GetWidget(),
view()->GetPasswordBounds(),
BubbleBorder::LEFT_TOP,
ResourceBundle::GetSharedInstance().GetBitmapNamed(IDR_WARNING),
error_text,
UTF16ToWide(l10n_util::GetStringUTF16(IDS_CANT_ACCESS_ACCOUNT_BUTTON)),
this);
}
} // namespace chromeos
// Copyright (c) 2010 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_LOGIN_SCREEN_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_LOGIN_SCREEN_H_
#pragma once
#include <string>
#include "base/ref_counted.h"
#include "chrome/browser/chromeos/login/authenticator.h"
#include "chrome/browser/chromeos/login/login_status_consumer.h"
#include "chrome/browser/chromeos/login/message_bubble.h"
#include "chrome/browser/chromeos/login/new_user_view.h"
#include "chrome/browser/chromeos/login/view_screen.h"
namespace chromeos {
class MessageBubble;
// This screen is obsolete, used only on test images. http://crosbug.com/7214
// TODO(nkostylev): Use ExistingUserController sign in screen for test images.
class LoginScreen : public ViewScreen<NewUserView>,
public NewUserView::Delegate,
public LoginStatusConsumer,
public MessageBubbleDelegate {
public:
explicit LoginScreen(WizardScreenDelegate* delegate);
virtual ~LoginScreen();
bool IsErrorShown() {
return bubble_ != NULL;
}
// NewUserView::Delegate:
virtual void OnLogin(const std::string& username,
const std::string& password);
virtual void OnLoginOffTheRecord();
virtual void OnCreateAccount();
virtual void AddStartUrl(const GURL& start_url) { start_url_ = start_url; }
virtual void ClearErrors();
virtual void NavigateAway() {}
virtual void SetStatusAreaEnabled(bool enable) {}
// Overridden from LoginStatusConsumer.
virtual void OnLoginFailure(const LoginFailure& error);
virtual void OnLoginSuccess(
const std::string& username,
const std::string& password,
const GaiaAuthConsumer::ClientLoginResult& credentials,
bool pending_requests);
virtual void OnOffTheRecordLoginSuccess();
// Overridden from views::InfoBubbleDelegate.
virtual void InfoBubbleClosing(InfoBubble* info_bubble,
bool closed_by_escape) {
bubble_ = NULL;
}
virtual bool CloseOnEscape() { return true; }
virtual bool FadeInOnShow() { return false; }
virtual void OnHelpLinkActivated();
private:
// ViewScreen<NewUserView>:
virtual NewUserView* AllocateView();
// Adds start url to command line.
void AppendStartUrlToCmdline();
// Shows error message with the specified message id.
// If |details| string is not empty, it specify additional error text
// provided by authenticator, it is not localized.
void ShowError(int error_id, const std::string& details);
// Pointer to shown message bubble. We don't need to delete it because
// it will be deleted on bubble closing.
MessageBubble* bubble_;
scoped_refptr<Authenticator> authenticator_;
// URL that will be opened on browser startup.
GURL start_url_;
DISALLOW_COPY_AND_ASSIGN(LoginScreen);
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_LOGIN_SCREEN_H_
// Copyright (c) 2010 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 "base/message_loop.h"
#include "chrome/browser/browser_thread.h"
#include "chrome/browser/chromeos/cros/mock_cryptohome_library.h"
#include "chrome/browser/chromeos/cros/mock_login_library.h"
#include "chrome/browser/chromeos/cros/mock_network_library.h"
#include "chrome/browser/chromeos/login/login_screen.h"
#include "chrome/browser/chromeos/login/mock_authenticator.h"
#include "chrome/browser/chromeos/login/mock_screen_observer.h"
#include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chrome/browser/chromeos/login/wizard_in_process_browser_test.h"
#include "chrome/browser/chromeos/login/wizard_screen.h"
#include "grit/generated_resources.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace chromeos {
using ::testing::AnyNumber;
using ::testing::InvokeWithoutArgs;
using ::testing::Return;
const char kUsername[] = "test_user@gmail.com";
const char kPassword[] = "test_password";
class LoginScreenTest : public WizardInProcessBrowserTest {
public:
LoginScreenTest(): WizardInProcessBrowserTest("login"),
mock_cryptohome_library_(NULL),
mock_login_library_(NULL),
mock_network_library_(NULL) {
}
protected:
MockCryptohomeLibrary *mock_cryptohome_library_;
MockLoginLibrary *mock_login_library_;
MockNetworkLibrary *mock_network_library_;
virtual void SetUpInProcessBrowserTestFixture() {
WizardInProcessBrowserTest::SetUpInProcessBrowserTestFixture();
cros_mock_->InitStatusAreaMocks();
cros_mock_->SetStatusAreaMocksExpectations();
mock_network_library_ = cros_mock_->mock_network_library();
mock_login_library_ = new MockLoginLibrary();
EXPECT_CALL(*mock_login_library_, EmitLoginPromptReady())
.Times(1);
cros_mock_->test_api()->SetLoginLibrary(mock_login_library_, true);
cros_mock_->InitMockCryptohomeLibrary();
mock_cryptohome_library_ = cros_mock_->mock_cryptohome_library();
EXPECT_CALL(*mock_cryptohome_library_, IsMounted())
.Times(AnyNumber())
.WillRepeatedly((Return(true)));
LoginUtils::Set(new MockLoginUtils(kUsername, kPassword));
}
virtual void TearDownInProcessBrowserTestFixture() {
WizardInProcessBrowserTest::TearDownInProcessBrowserTestFixture();
cros_mock_->test_api()->SetLoginLibrary(NULL, false);
}
private:
DISALLOW_COPY_AND_ASSIGN(LoginScreenTest);
};
static void Quit() {
VLOG(1) << "Posting a QuitTask to UI thread";
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
new MessageLoop::QuitTask);
}
IN_PROC_BROWSER_TEST_F(LoginScreenTest, TestBasic) {
ASSERT_TRUE(controller() != NULL);
ASSERT_EQ(controller()->current_screen(), controller()->GetLoginScreen());
scoped_ptr<MockScreenObserver> mock_screen_observer(
new MockScreenObserver());
EXPECT_CALL(*mock_screen_observer,
OnExit(ScreenObserver::LOGIN_SIGN_IN_SELECTED))
.WillOnce(InvokeWithoutArgs(Quit));
controller()->set_observer(mock_screen_observer.get());
NewUserView* login = controller()->GetLoginScreen()->view();
login->SetUsername(kUsername);
login->SetPassword(kPassword);
bool old_state = MessageLoop::current()->NestableTasksAllowed();
MessageLoop::current()->SetNestableTasksAllowed(true);
login->Login();
MessageLoop::current()->Run();
MessageLoop::current()->SetNestableTasksAllowed(old_state);
controller()->set_observer(NULL);
}
IN_PROC_BROWSER_TEST_F(LoginScreenTest, AuthenticationFailed) {
ASSERT_TRUE(controller() != NULL);
ASSERT_EQ(controller()->current_screen(), controller()->GetLoginScreen());
scoped_ptr<MockScreenObserver> mock_screen_observer(
new MockScreenObserver());
controller()->set_observer(mock_screen_observer.get());
EXPECT_CALL(*mock_network_library_, Connected())
.Times(AnyNumber())
.WillRepeatedly((Return(true)));
NewUserView* login = controller()->GetLoginScreen()->view();
login->SetUsername(kUsername);
login->SetPassword("wrong password");
bool old_state = MessageLoop::current()->NestableTasksAllowed();
MessageLoop::current()->SetNestableTasksAllowed(true);
login->Login();
MessageLoop::current()->Run();
MessageLoop::current()->SetNestableTasksAllowed(old_state);
ASSERT_EQ(controller()->current_screen(), controller()->GetLoginScreen());
EXPECT_TRUE(controller()->GetLoginScreen()->IsErrorShown());
controller()->set_observer(NULL);
}
IN_PROC_BROWSER_TEST_F(LoginScreenTest, IncognitoLogin) {
ASSERT_TRUE(controller() != NULL);
ASSERT_EQ(controller()->current_screen(), controller()->GetLoginScreen());
scoped_ptr<MockScreenObserver> mock_screen_observer(
new MockScreenObserver());
controller()->set_observer(mock_screen_observer.get());
NewUserView* login = controller()->GetLoginScreen()->view();
login->LinkActivated(login->guest_link_, 0);
controller()->set_observer(NULL);
Quit();
}
} // namespace chromeos
...@@ -199,9 +199,6 @@ class NewUserView : public ThrobberHostView, ...@@ -199,9 +199,6 @@ class NewUserView : public ThrobberHostView,
int languages_menubutton_order_; int languages_menubutton_order_;
int sign_in_button_order_; int sign_in_button_order_;
FRIEND_TEST_ALL_PREFIXES(LoginScreenTest, IncognitoLogin);
friend class LoginScreenTest;
DISALLOW_COPY_AND_ASSIGN(NewUserView); DISALLOW_COPY_AND_ASSIGN(NewUserView);
}; };
......
...@@ -20,9 +20,6 @@ class ScreenObserver { ...@@ -20,9 +20,6 @@ class ScreenObserver {
// login wizard decides what is the next view to show. There must be an // login wizard decides what is the next view to show. There must be an
// exit code for each way to exit the screen for each screen. // exit code for each way to exit the screen for each screen.
enum ExitCodes { enum ExitCodes {
LOGIN_SIGN_IN_SELECTED,
LOGIN_GUEST_SELECTED,
LOGIN_CREATE_ACCOUNT,
NETWORK_CONNECTED, NETWORK_CONNECTED,
NETWORK_OFFLINE, NETWORK_OFFLINE,
ACCOUNT_CREATE_BACK, ACCOUNT_CREATE_BACK,
......
...@@ -32,7 +32,6 @@ ...@@ -32,7 +32,6 @@
#include "chrome/browser/chromeos/login/helper.h" #include "chrome/browser/chromeos/login/helper.h"
#include "chrome/browser/chromeos/login/html_page_screen.h" #include "chrome/browser/chromeos/login/html_page_screen.h"
#include "chrome/browser/chromeos/login/language_switch_menu.h" #include "chrome/browser/chromeos/login/language_switch_menu.h"
#include "chrome/browser/chromeos/login/login_screen.h"
#include "chrome/browser/chromeos/login/login_utils.h" #include "chrome/browser/chromeos/login/login_utils.h"
#include "chrome/browser/chromeos/login/network_screen.h" #include "chrome/browser/chromeos/login/network_screen.h"
#include "chrome/browser/chromeos/login/registration_screen.h" #include "chrome/browser/chromeos/login/registration_screen.h"
...@@ -263,7 +262,6 @@ WizardController::WizardController() ...@@ -263,7 +262,6 @@ WizardController::WizardController()
is_official_build_(false), is_official_build_(false),
#endif #endif
is_out_of_box_(false), is_out_of_box_(false),
is_test_mode_(false),
observer_(NULL) { observer_(NULL) {
DCHECK(default_controller_ == NULL); DCHECK(default_controller_ == NULL);
default_controller_ = this; default_controller_ = this;
...@@ -351,12 +349,6 @@ chromeos::NetworkScreen* WizardController::GetNetworkScreen() { ...@@ -351,12 +349,6 @@ chromeos::NetworkScreen* WizardController::GetNetworkScreen() {
return network_screen_.get(); return network_screen_.get();
} }
chromeos::LoginScreen* WizardController::GetLoginScreen() {
if (!login_screen_.get())
login_screen_.reset(new chromeos::LoginScreen(this));
return login_screen_.get();
}
chromeos::AccountScreen* WizardController::GetAccountScreen() { chromeos::AccountScreen* WizardController::GetAccountScreen() {
if (!account_screen_.get()) if (!account_screen_.get())
account_screen_.reset(new chromeos::AccountScreen(this)); account_screen_.reset(new chromeos::AccountScreen(this));
...@@ -419,30 +411,23 @@ chromeos::ExistingUserController* WizardController::ShowLoginScreen() { ...@@ -419,30 +411,23 @@ chromeos::ExistingUserController* WizardController::ShowLoginScreen() {
// Initiate services customization. // Initiate services customization.
chromeos::ApplyServicesCustomization::StartIfNeeded(); chromeos::ApplyServicesCustomization::StartIfNeeded();
// When run under automation test show plain login screen. std::vector<chromeos::UserManager::User> users;
if (!is_test_mode_ && if (chromeos::CrosLibrary::Get()->EnsureLoaded())
chromeos::CrosLibrary::Get()->EnsureLoaded() && users = chromeos::UserManager::Get()->GetUsers();
CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableLoginImages)) { // ExistingUserController deletes itself.
std::vector<chromeos::UserManager::User> users = gfx::Rect screen_bounds;
chromeos::UserManager::Get()->GetUsers(); background_widget_->GetBounds(&screen_bounds, true);
// ExistingUserController deletes itself. chromeos::ExistingUserController* controller =
gfx::Rect screen_bounds; new chromeos::ExistingUserController(users, screen_bounds);
background_widget_->GetBounds(&screen_bounds, true); controller->OwnBackground(background_widget_, background_view_);
chromeos::ExistingUserController* controller = controller->Init();
new chromeos::ExistingUserController(users, screen_bounds); background_widget_ = NULL;
controller->OwnBackground(background_widget_, background_view_); background_view_ = NULL;
controller->Init();
background_widget_ = NULL;
background_view_ = NULL;
MessageLoop::current()->DeleteSoon(FROM_HERE, this);
return controller;
}
SetCurrentScreen(GetLoginScreen()); MessageLoop::current()->DeleteSoon(FROM_HERE, this);
return NULL;
return controller;
} }
void WizardController::ShowAccountScreen() { void WizardController::ShowAccountScreen() {
...@@ -544,26 +529,6 @@ void WizardController::RegisterPrefs(PrefService* local_state) { ...@@ -544,26 +529,6 @@ void WizardController::RegisterPrefs(PrefService* local_state) {
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// WizardController, ExitHandlers: // WizardController, ExitHandlers:
void WizardController::OnLoginSignInSelected() {
// Don't show user image screen in case of automated testing.
if (is_test_mode_) {
MessageLoop::current()->DeleteSoon(FROM_HERE, this);
return;
}
// Don't launch browser until we pass image screen.
chromeos::LoginUtils::Get()->EnableBrowserLaunch(false);
ShowUserImageScreen();
}
void WizardController::OnLoginGuestUser() {
// We're on the stack, so don't try and delete us now.
MessageLoop::current()->DeleteSoon(FROM_HERE, this);
}
void WizardController::OnLoginCreateAccount() {
ShowAccountScreen();
}
void WizardController::OnNetworkConnected() { void WizardController::OnNetworkConnected() {
if (is_official_build_) { if (is_official_build_) {
if (!IsEulaAccepted()) { if (!IsEulaAccepted()) {
...@@ -588,16 +553,14 @@ void WizardController::OnNetworkOffline() { ...@@ -588,16 +553,14 @@ void WizardController::OnNetworkOffline() {
void WizardController::OnAccountCreateBack() { void WizardController::OnAccountCreateBack() {
chromeos::ExistingUserController* controller = ShowLoginScreen(); chromeos::ExistingUserController* controller = ShowLoginScreen();
if (controller) DCHECK(controller);
controller->SelectNewUser(); controller->SelectNewUser();
} }
void WizardController::OnAccountCreated() { void WizardController::OnAccountCreated() {
chromeos::ExistingUserController* controller = ShowLoginScreen(); chromeos::ExistingUserController* controller = ShowLoginScreen();
if (controller) DCHECK(controller);
controller->LoginNewUser(username_, password_); controller->LoginNewUser(username_, password_);
else
Login(username_, password_);
// TODO(dpolukhin): clear password memory for real. Now it is not // TODO(dpolukhin): clear password memory for real. Now it is not
// a problem because we can't extract password from the form. // a problem because we can't extract password from the form.
password_.clear(); password_.clear();
...@@ -767,8 +730,6 @@ void WizardController::ShowFirstScreen(const std::string& first_screen_name) { ...@@ -767,8 +730,6 @@ void WizardController::ShowFirstScreen(const std::string& first_screen_name) {
if (first_screen_name == kNetworkScreenName) { if (first_screen_name == kNetworkScreenName) {
ShowNetworkScreen(); ShowNetworkScreen();
} else if (first_screen_name == kLoginScreenName) { } else if (first_screen_name == kLoginScreenName) {
// This flag is passed if we're running under automation test.
is_test_mode_ = true;
ShowLoginScreen(); ShowLoginScreen();
} else if (first_screen_name == kAccountScreenName) { } else if (first_screen_name == kAccountScreenName) {
ShowAccountScreen(); ShowAccountScreen();
...@@ -796,19 +757,6 @@ void WizardController::ShowFirstScreen(const std::string& first_screen_name) { ...@@ -796,19 +757,6 @@ void WizardController::ShowFirstScreen(const std::string& first_screen_name) {
} }
} }
void WizardController::Login(const std::string& username,
const std::string& password) {
chromeos::LoginScreen* login = GetLoginScreen();
if (username.empty())
return;
login->view()->SetUsername(username);
if (password.empty())
return;
login->view()->SetPassword(password);
login->view()->Login();
}
// static // static
bool WizardController::IsEulaAccepted() { bool WizardController::IsEulaAccepted() {
return g_browser_process->local_state()->GetBoolean(kEulaAccepted); return g_browser_process->local_state()->GetBoolean(kEulaAccepted);
...@@ -858,8 +806,9 @@ void WizardController::MarkDeviceRegistered() { ...@@ -858,8 +806,9 @@ void WizardController::MarkDeviceRegistered() {
// Create flag file for boot-time init scripts. // Create flag file for boot-time init scripts.
FilePath oobe_complete_path(kOobeCompleteFlagFilePath); FilePath oobe_complete_path(kOobeCompleteFlagFilePath);
FILE* oobe_flag_file = file_util::OpenFile(oobe_complete_path, "w+b"); FILE* oobe_flag_file = file_util::OpenFile(oobe_complete_path, "w+b");
DCHECK(oobe_flag_file != NULL) << kOobeCompleteFlagFilePath; if (oobe_flag_file == NULL)
if (oobe_flag_file != NULL) DLOG(WARNING) << kOobeCompleteFlagFilePath << " doesn't exist.";
else
file_util::CloseFile(oobe_flag_file); file_util::CloseFile(oobe_flag_file);
} }
...@@ -868,15 +817,6 @@ void WizardController::MarkDeviceRegistered() { ...@@ -868,15 +817,6 @@ void WizardController::MarkDeviceRegistered() {
void WizardController::OnExit(ExitCodes exit_code) { void WizardController::OnExit(ExitCodes exit_code) {
LOG(INFO) << "Wizard screen exit code: " << exit_code; LOG(INFO) << "Wizard screen exit code: " << exit_code;
switch (exit_code) { switch (exit_code) {
case LOGIN_SIGN_IN_SELECTED:
OnLoginSignInSelected();
break;
case LOGIN_GUEST_SELECTED:
OnLoginGuestUser();
break;
case LOGIN_CREATE_ACCOUNT:
OnLoginCreateAccount();
break;
case NETWORK_CONNECTED: case NETWORK_CONNECTED:
OnNetworkConnected(); OnNetworkConnected();
break; break;
...@@ -971,18 +911,17 @@ void ShowLoginWizard(const std::string& first_screen_name, ...@@ -971,18 +911,17 @@ void ShowLoginWizard(const std::string& first_screen_name,
// Check whether we need to execute OOBE process. // Check whether we need to execute OOBE process.
bool oobe_complete = WizardController::IsOobeCompleted(); bool oobe_complete = WizardController::IsOobeCompleted();
bool show_login_screen =
(first_screen_name.empty() && oobe_complete) ||
first_screen_name == WizardController::kLoginScreenName;
if (first_screen_name.empty() && if (show_login_screen && chromeos::CrosLibrary::Get()->EnsureLoaded()) {
oobe_complete &&
chromeos::CrosLibrary::Get()->EnsureLoaded() &&
CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableLoginImages)) {
std::vector<chromeos::UserManager::User> users = std::vector<chromeos::UserManager::User> users =
chromeos::UserManager::Get()->GetUsers(); chromeos::UserManager::Get()->GetUsers();
// Fix for users who updated device and thus never passed register screen. // Fix for users who updated device and thus never passed register screen.
// If we already have user we assume that it is not a second part of OOBE. // If we already have users, we assume that it is not a second part of
// See http://crosbug.com/6289 // OOBE. See http://crosbug.com/6289
if (!WizardController::IsDeviceRegistered() && !users.empty()) { if (!WizardController::IsDeviceRegistered() && !users.empty()) {
VLOG(1) << "Mark device registered because there are remembered users: " VLOG(1) << "Mark device registered because there are remembered users: "
<< users.size(); << users.size();
......
...@@ -29,7 +29,6 @@ class BackgroundView; ...@@ -29,7 +29,6 @@ class BackgroundView;
class EulaScreen; class EulaScreen;
class ExistingUserController; class ExistingUserController;
class HTMLPageScreen; class HTMLPageScreen;
class LoginScreen;
class NetworkScreen; class NetworkScreen;
class RegistrationScreen; class RegistrationScreen;
class StartupCustomizationDocument; class StartupCustomizationDocument;
...@@ -106,7 +105,6 @@ class WizardController : public chromeos::ScreenObserver, ...@@ -106,7 +105,6 @@ class WizardController : public chromeos::ScreenObserver,
// Lazy initializers and getters for screens. // Lazy initializers and getters for screens.
chromeos::NetworkScreen* GetNetworkScreen(); chromeos::NetworkScreen* GetNetworkScreen();
chromeos::LoginScreen* GetLoginScreen();
chromeos::AccountScreen* GetAccountScreen(); chromeos::AccountScreen* GetAccountScreen();
chromeos::UpdateScreen* GetUpdateScreen(); chromeos::UpdateScreen* GetUpdateScreen();
chromeos::UserImageScreen* GetUserImageScreen(); chromeos::UserImageScreen* GetUserImageScreen();
...@@ -122,9 +120,8 @@ class WizardController : public chromeos::ScreenObserver, ...@@ -122,9 +120,8 @@ class WizardController : public chromeos::ScreenObserver,
void ShowEulaScreen(); void ShowEulaScreen();
void ShowRegistrationScreen(); void ShowRegistrationScreen();
void ShowHTMLPageScreen(); void ShowHTMLPageScreen();
// Shows the default login screen and returns NULL or shows images login // Shows images login screen and returns the corresponding controller
// screen and returns the corresponding controller instance for optional // instance for optional tweaking.
// tweaking.
chromeos::ExistingUserController* ShowLoginScreen(); chromeos::ExistingUserController* ShowLoginScreen();
// Returns a pointer to the current screen or NULL if there's no such // Returns a pointer to the current screen or NULL if there's no such
...@@ -169,9 +166,6 @@ class WizardController : public chromeos::ScreenObserver, ...@@ -169,9 +166,6 @@ class WizardController : public chromeos::ScreenObserver,
private: private:
// Exit handlers: // Exit handlers:
void OnLoginSignInSelected();
void OnLoginGuestUser();
void OnLoginCreateAccount();
void OnNetworkConnected(); void OnNetworkConnected();
void OnNetworkOffline(); void OnNetworkOffline();
void OnAccountCreateBack(); void OnAccountCreateBack();
...@@ -190,6 +184,11 @@ class WizardController : public chromeos::ScreenObserver, ...@@ -190,6 +184,11 @@ class WizardController : public chromeos::ScreenObserver,
// Shows update screen and starts update process. // Shows update screen and starts update process.
void InitiateOOBEUpdate(); void InitiateOOBEUpdate();
// Overridden from chromeos::ScreenObserver:
virtual void OnExit(ExitCodes exit_code);
virtual void OnSetUserNamePassword(const std::string& username,
const std::string& password);
// Creates wizard screen window with the specified |bounds|. // Creates wizard screen window with the specified |bounds|.
// If |initial_show| initial animation (window & background) is shown. // If |initial_show| initial animation (window & background) is shown.
// Otherwise only window is animated. // Otherwise only window is animated.
...@@ -206,11 +205,6 @@ class WizardController : public chromeos::ScreenObserver, ...@@ -206,11 +205,6 @@ class WizardController : public chromeos::ScreenObserver,
// Changes status area visibility. // Changes status area visibility.
void SetStatusAreaVisible(bool visible); void SetStatusAreaVisible(bool visible);
// Overridden from chromeos::ScreenObserver:
virtual void OnExit(ExitCodes exit_code);
virtual void OnSetUserNamePassword(const std::string& username,
const std::string& password);
// Overridden from WizardScreenDelegate: // Overridden from WizardScreenDelegate:
virtual views::View* GetWizardView(); virtual views::View* GetWizardView();
virtual chromeos::ScreenObserver* GetObserver(WizardScreen* screen); virtual chromeos::ScreenObserver* GetObserver(WizardScreen* screen);
...@@ -237,7 +231,6 @@ class WizardController : public chromeos::ScreenObserver, ...@@ -237,7 +231,6 @@ class WizardController : public chromeos::ScreenObserver,
// Screens. // Screens.
scoped_ptr<chromeos::NetworkScreen> network_screen_; scoped_ptr<chromeos::NetworkScreen> network_screen_;
scoped_ptr<chromeos::LoginScreen> login_screen_;
scoped_ptr<chromeos::AccountScreen> account_screen_; scoped_ptr<chromeos::AccountScreen> account_screen_;
scoped_ptr<chromeos::UpdateScreen> update_screen_; scoped_ptr<chromeos::UpdateScreen> update_screen_;
scoped_ptr<chromeos::UserImageScreen> user_image_screen_; scoped_ptr<chromeos::UserImageScreen> user_image_screen_;
...@@ -257,10 +250,6 @@ class WizardController : public chromeos::ScreenObserver, ...@@ -257,10 +250,6 @@ class WizardController : public chromeos::ScreenObserver,
// True if full OOBE flow should be shown. // True if full OOBE flow should be shown.
bool is_out_of_box_; bool is_out_of_box_;
// True if this is run under automation test and we need to show only
// login screen.
bool is_test_mode_;
// Value of the screen name that WizardController was started with. // Value of the screen name that WizardController was started with.
std::string first_screen_name_; std::string first_screen_name_;
......
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/login/account_screen.h" #include "chrome/browser/chromeos/login/account_screen.h"
#include "chrome/browser/chromeos/login/eula_view.h" #include "chrome/browser/chromeos/login/eula_view.h"
#include "chrome/browser/chromeos/login/existing_user_controller.h"
#include "chrome/browser/chromeos/login/language_switch_menu.h" #include "chrome/browser/chromeos/login/language_switch_menu.h"
#include "chrome/browser/chromeos/login/login_screen.h"
#include "chrome/browser/chromeos/login/mock_update_screen.h" #include "chrome/browser/chromeos/login/mock_update_screen.h"
#include "chrome/browser/chromeos/login/network_screen.h" #include "chrome/browser/chromeos/login/network_screen.h"
#include "chrome/browser/chromeos/login/network_selection_view.h" #include "chrome/browser/chromeos/login/network_selection_view.h"
...@@ -57,6 +57,8 @@ CreateMockWizardScreenHelper<chromeos::NetworkScreen>::Create( ...@@ -57,6 +57,8 @@ CreateMockWizardScreenHelper<chromeos::NetworkScreen>::Create(
} // namespace } // namespace
using chromeos::ExistingUserController;
class WizardControllerTest : public chromeos::WizardInProcessBrowserTest { class WizardControllerTest : public chromeos::WizardInProcessBrowserTest {
protected: protected:
WizardControllerTest() : chromeos::WizardInProcessBrowserTest( WizardControllerTest() : chromeos::WizardInProcessBrowserTest(
...@@ -114,7 +116,6 @@ class WizardControllerFlowTest : public WizardControllerTest { ...@@ -114,7 +116,6 @@ class WizardControllerFlowTest : public WizardControllerTest {
// Set up the mocks for all screens. // Set up the mocks for all screens.
MOCK(mock_account_screen_, account_screen_, chromeos::AccountScreen); MOCK(mock_account_screen_, account_screen_, chromeos::AccountScreen);
MOCK(mock_login_screen_, login_screen_, chromeos::LoginScreen);
MOCK(mock_network_screen_, network_screen_, chromeos::NetworkScreen); MOCK(mock_network_screen_, network_screen_, chromeos::NetworkScreen);
MOCK(mock_update_screen_, update_screen_, MockUpdateScreen); MOCK(mock_update_screen_, update_screen_, MockUpdateScreen);
MOCK(mock_eula_screen_, eula_screen_, chromeos::EulaScreen); MOCK(mock_eula_screen_, eula_screen_, chromeos::EulaScreen);
...@@ -128,7 +129,6 @@ class WizardControllerFlowTest : public WizardControllerTest { ...@@ -128,7 +129,6 @@ class WizardControllerFlowTest : public WizardControllerTest {
} }
MockOutShowHide<chromeos::AccountScreen>* mock_account_screen_; MockOutShowHide<chromeos::AccountScreen>* mock_account_screen_;
MockOutShowHide<chromeos::LoginScreen>* mock_login_screen_;
MockOutShowHide<chromeos::NetworkScreen>* mock_network_screen_; MockOutShowHide<chromeos::NetworkScreen>* mock_network_screen_;
MockOutShowHide<MockUpdateScreen>* mock_update_screen_; MockOutShowHide<MockUpdateScreen>* mock_update_screen_;
MockOutShowHide<chromeos::EulaScreen>* mock_eula_screen_; MockOutShowHide<chromeos::EulaScreen>* mock_eula_screen_;
...@@ -138,6 +138,7 @@ class WizardControllerFlowTest : public WizardControllerTest { ...@@ -138,6 +138,7 @@ class WizardControllerFlowTest : public WizardControllerTest {
}; };
IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowMain) { IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowMain) {
EXPECT_TRUE(ExistingUserController::current_controller() == NULL);
EXPECT_EQ(controller()->GetNetworkScreen(), controller()->current_screen()); EXPECT_EQ(controller()->GetNetworkScreen(), controller()->current_screen());
EXPECT_CALL(*mock_network_screen_, Hide()).Times(1); EXPECT_CALL(*mock_network_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_eula_screen_, Show()).Times(1); EXPECT_CALL(*mock_eula_screen_, Show()).Times(1);
...@@ -150,23 +151,12 @@ IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowMain) { ...@@ -150,23 +151,12 @@ IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowMain) {
controller()->OnExit(chromeos::ScreenObserver::EULA_ACCEPTED); controller()->OnExit(chromeos::ScreenObserver::EULA_ACCEPTED);
EXPECT_EQ(controller()->GetUpdateScreen(), controller()->current_screen()); EXPECT_EQ(controller()->GetUpdateScreen(), controller()->current_screen());
EXPECT_CALL(*mock_update_screen_, Hide()).Times(1); EXPECT_CALL(*mock_update_screen_, Hide()).Times(0);
EXPECT_CALL(*mock_eula_screen_, Show()).Times(0); EXPECT_CALL(*mock_eula_screen_, Show()).Times(0);
EXPECT_CALL(*mock_login_screen_, Show()).Times(1);
controller()->OnExit(chromeos::ScreenObserver::UPDATE_INSTALLED); controller()->OnExit(chromeos::ScreenObserver::UPDATE_INSTALLED);
EXPECT_EQ(controller()->GetLoginScreen(), controller()->current_screen()); EXPECT_FALSE(ExistingUserController::current_controller() == NULL);
EXPECT_CALL(*mock_login_screen_, Hide()).Times(1); set_controller(NULL);
EXPECT_CALL(*mock_account_screen_, Show()).Times(1);
controller()->OnExit(chromeos::ScreenObserver::LOGIN_CREATE_ACCOUNT);
EXPECT_EQ(controller()->GetAccountScreen(), controller()->current_screen());
EXPECT_CALL(*mock_account_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_login_screen_, Show()).Times(1);
EXPECT_CALL(*mock_login_screen_, Hide()).Times(0); // last transition
controller()->OnExit(chromeos::ScreenObserver::ACCOUNT_CREATED);
EXPECT_EQ(controller()->GetLoginScreen(), controller()->current_screen());
} }
IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowErrorUpdate) { IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowErrorUpdate) {
...@@ -184,14 +174,14 @@ IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowErrorUpdate) { ...@@ -184,14 +174,14 @@ IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowErrorUpdate) {
controller()->OnExit(chromeos::ScreenObserver::EULA_ACCEPTED); controller()->OnExit(chromeos::ScreenObserver::EULA_ACCEPTED);
EXPECT_EQ(controller()->GetUpdateScreen(), controller()->current_screen()); EXPECT_EQ(controller()->GetUpdateScreen(), controller()->current_screen());
EXPECT_CALL(*mock_update_screen_, Hide()).Times(1); EXPECT_CALL(*mock_update_screen_, Hide()).Times(0);
EXPECT_CALL(*mock_eula_screen_, Show()).Times(0); EXPECT_CALL(*mock_eula_screen_, Show()).Times(0);
EXPECT_CALL(*mock_eula_screen_, Hide()).Times(0); // last transition EXPECT_CALL(*mock_eula_screen_, Hide()).Times(0); // last transition
EXPECT_CALL(*mock_login_screen_, Show()).Times(1);
controller()->OnExit( controller()->OnExit(
chromeos::ScreenObserver::UPDATE_ERROR_UPDATING); chromeos::ScreenObserver::UPDATE_ERROR_UPDATING);
EXPECT_EQ(controller()->GetLoginScreen(), controller()->current_screen()); EXPECT_FALSE(ExistingUserController::current_controller() == NULL);
set_controller(NULL);
} }
IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowEulaDeclined) { IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowEulaDeclined) {
...@@ -212,14 +202,14 @@ IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowEulaDeclined) { ...@@ -212,14 +202,14 @@ IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowEulaDeclined) {
IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowErrorNetwork) { IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowErrorNetwork) {
EXPECT_EQ(controller()->GetNetworkScreen(), controller()->current_screen()); EXPECT_EQ(controller()->GetNetworkScreen(), controller()->current_screen());
EXPECT_CALL(*mock_login_screen_, Show()).Times(1);
EXPECT_CALL(*mock_network_screen_, Hide()).Times(1);
controller()->OnExit(chromeos::ScreenObserver::NETWORK_OFFLINE); controller()->OnExit(chromeos::ScreenObserver::NETWORK_OFFLINE);
EXPECT_EQ(controller()->GetLoginScreen(), controller()->current_screen());
EXPECT_FALSE(ExistingUserController::current_controller() == NULL);
set_controller(NULL);
} }
#if defined(OFFICIAL_BUILD) #if defined(OFFICIAL_BUILD)
// This test is supposed to fail on official test. // This test is supposed to fail on official build.
#define MAYBE_Accelerators DISABLED_Accelerators #define MAYBE_Accelerators DISABLED_Accelerators
#else #else
#define MAYBE_Accelerators Accelerators #define MAYBE_Accelerators Accelerators
...@@ -231,7 +221,6 @@ IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, MAYBE_Accelerators) { ...@@ -231,7 +221,6 @@ IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, MAYBE_Accelerators) {
views::FocusManager* focus_manager = views::FocusManager* focus_manager =
controller()->contents()->GetFocusManager(); controller()->contents()->GetFocusManager();
views::Accelerator accel_account_screen(ui::VKEY_A, false, true, true); views::Accelerator accel_account_screen(ui::VKEY_A, false, true, true);
views::Accelerator accel_login_screen(ui::VKEY_L, false, true, true);
views::Accelerator accel_network_screen(ui::VKEY_N, false, true, true); views::Accelerator accel_network_screen(ui::VKEY_N, false, true, true);
views::Accelerator accel_update_screen(ui::VKEY_U, false, true, true); views::Accelerator accel_update_screen(ui::VKEY_U, false, true, true);
views::Accelerator accel_image_screen(ui::VKEY_I, false, true, true); views::Accelerator accel_image_screen(ui::VKEY_I, false, true, true);
...@@ -244,12 +233,6 @@ IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, MAYBE_Accelerators) { ...@@ -244,12 +233,6 @@ IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, MAYBE_Accelerators) {
focus_manager = controller()->contents()->GetFocusManager(); focus_manager = controller()->contents()->GetFocusManager();
EXPECT_CALL(*mock_account_screen_, Hide()).Times(1); EXPECT_CALL(*mock_account_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_login_screen_, Show()).Times(1);
EXPECT_TRUE(focus_manager->ProcessAccelerator(accel_login_screen));
EXPECT_EQ(controller()->GetLoginScreen(), controller()->current_screen());
focus_manager = controller()->contents()->GetFocusManager();
EXPECT_CALL(*mock_login_screen_, Hide()).Times(1);
EXPECT_CALL(*mock_network_screen_, Show()).Times(1); EXPECT_CALL(*mock_network_screen_, Show()).Times(1);
EXPECT_TRUE(focus_manager->ProcessAccelerator(accel_network_screen)); EXPECT_TRUE(focus_manager->ProcessAccelerator(accel_network_screen));
EXPECT_EQ(controller()->GetNetworkScreen(), controller()->current_screen()); EXPECT_EQ(controller()->GetNetworkScreen(), controller()->current_screen());
...@@ -271,5 +254,5 @@ IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, MAYBE_Accelerators) { ...@@ -271,5 +254,5 @@ IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, MAYBE_Accelerators) {
EXPECT_EQ(controller()->GetEulaScreen(), controller()->current_screen()); EXPECT_EQ(controller()->GetEulaScreen(), controller()->current_screen());
} }
COMPILE_ASSERT(chromeos::ScreenObserver::EXIT_CODES_COUNT == 18, COMPILE_ASSERT(chromeos::ScreenObserver::EXIT_CODES_COUNT == 15,
add_tests_for_new_control_flow_you_just_introduced); add_tests_for_new_control_flow_you_just_introduced);
...@@ -593,8 +593,6 @@ ...@@ -593,8 +593,6 @@
'browser/chromeos/login/login_html_dialog.h', 'browser/chromeos/login/login_html_dialog.h',
'browser/chromeos/login/login_performer.cc', 'browser/chromeos/login/login_performer.cc',
'browser/chromeos/login/login_performer.h', 'browser/chromeos/login/login_performer.h',
'browser/chromeos/login/login_screen.cc',
'browser/chromeos/login/login_screen.h',
'browser/chromeos/login/login_status_consumer.h', 'browser/chromeos/login/login_status_consumer.h',
'browser/chromeos/login/login_utils.cc', 'browser/chromeos/login/login_utils.cc',
'browser/chromeos/login/login_utils.h', 'browser/chromeos/login/login_utils.h',
......
...@@ -2012,7 +2012,6 @@ ...@@ -2012,7 +2012,6 @@
'browser/chromeos/login/account_screen_browsertest.cc', 'browser/chromeos/login/account_screen_browsertest.cc',
'browser/chromeos/login/existing_user_controller_browsertest.cc', 'browser/chromeos/login/existing_user_controller_browsertest.cc',
'browser/chromeos/login/login_browsertest.cc', 'browser/chromeos/login/login_browsertest.cc',
'browser/chromeos/login/login_screen_browsertest.cc',
'browser/chromeos/login/mock_authenticator.h', 'browser/chromeos/login/mock_authenticator.h',
'browser/chromeos/login/network_screen_browsertest.cc', 'browser/chromeos/login/network_screen_browsertest.cc',
'browser/chromeos/login/screen_locker_browsertest.cc', 'browser/chromeos/login/screen_locker_browsertest.cc',
......
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