Index: chrome/browser/chromeos/login/existing_user_controller_browsertest.cc |
diff --git a/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc b/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc |
index ffdf80a9fc5abfcd0225abae095dc8867dc25b53..418908e2e61413efcf4b173f602fbf346d080ffa 100644 |
--- a/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc |
+++ b/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc |
@@ -2,6 +2,7 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#include "base/bind.h" |
#include "base/compiler_specific.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/message_loop.h" |
@@ -16,9 +17,16 @@ |
#include "chrome/browser/chromeos/login/login_display.h" |
#include "chrome/browser/chromeos/login/login_display_host.h" |
#include "chrome/browser/chromeos/login/login_performer.h" |
+#include "chrome/browser/chromeos/login/login_status_consumer.h" |
#include "chrome/browser/chromeos/login/login_utils.h" |
#include "chrome/browser/chromeos/login/mock_authenticator.h" |
+#include "chrome/browser/chromeos/login/mock_login_utils.h" |
+#include "chrome/browser/chromeos/login/mock_url_fetchers.h" |
+#include "chrome/browser/chromeos/login/mock_user_manager.h" |
#include "chrome/browser/chromeos/login/wizard_controller.h" |
+#include "chrome/common/net/gaia/mock_url_fetcher_factory.h" |
+#include "chrome/test/base/testing_profile.h" |
+#include "chrome/test/base/ui_test_utils.h" |
#include "grit/generated_resources.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -27,11 +35,14 @@ |
namespace chromeos { |
using ::testing::AnyNumber; |
+using ::testing::InvokeWithoutArgs; |
using ::testing::Return; |
using ::testing::ReturnNull; |
+using ::testing::WithArg; |
using ::testing::_; |
const char kUsername[] = "test_user@gmail.com"; |
+const char kNewUsername[] = "test_new_user@gmail.com"; |
const char kPassword[] = "test_password"; |
class MockLoginDisplay : public LoginDisplay { |
@@ -78,31 +89,7 @@ class MockLoginDisplayHost : public LoginDisplayHost { |
MOCK_METHOD0(ResumeSignInScreen, void(void)); |
private: |
- DISALLOW_COPY_AND_ASSIGN(MockLoginDisplayHost); |
-}; |
- |
-class MockLoginPerformerDelegate : public LoginPerformer::Delegate { |
- public: |
- explicit MockLoginPerformerDelegate(ExistingUserController* controller) |
- : controller_(controller) { |
- } |
- |
- virtual void OnLoginSuccess(const std::string& username, |
- const std::string& password, |
- bool pending_requests, |
- bool using_oauth) OVERRIDE { |
- ignore_result(controller_->login_performer_.release()); |
- controller_->ActivateWizard(WizardController::kUserImageScreenName); |
- } |
- |
- MOCK_METHOD1(OnLoginFailure, void(const LoginFailure&)); |
- MOCK_METHOD1(WhiteListCheckFailed, void(const std::string&)); |
- MOCK_METHOD2(OnOnlineChecked, void(const std::string&, bool)); |
- |
- private: |
- ExistingUserController* controller_; |
- |
- DISALLOW_COPY_AND_ASSIGN(MockLoginPerformerDelegate); |
+ DISALLOW_COPY_AND_ASSIGN(MockLoginDisplayHost); |
}; |
class ExistingUserControllerTest : public CrosInProcessBrowserTest { |
@@ -111,14 +98,21 @@ class ExistingUserControllerTest : public CrosInProcessBrowserTest { |
: mock_cryptohome_library_(NULL), |
mock_network_library_(NULL), |
mock_login_display_(NULL), |
- mock_login_display_host_(NULL) { |
+ mock_login_display_host_(NULL), |
+ mock_user_manager_(NULL), |
+ testing_profile_(NULL) { |
} |
ExistingUserController* existing_user_controller() { |
return ExistingUserController::current_controller(); |
} |
- virtual void SetUpInProcessBrowserTestFixture() { |
+ virtual void CleanUpOnMainThread() OVERRIDE { |
+ CrosInProcessBrowserTest::CleanUpOnMainThread(); |
+ testing_profile_.reset(NULL); |
+ } |
+ |
+ virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { |
MockDBusThreadManager* mock_dbus_thread_manager = |
new MockDBusThreadManager; |
DBusThreadManager::InitializeForTesting(mock_dbus_thread_manager); |
@@ -139,11 +133,32 @@ class ExistingUserControllerTest : public CrosInProcessBrowserTest { |
EXPECT_CALL(*mock_cryptohome_library_, IsMounted()) |
.Times(AnyNumber()) |
.WillRepeatedly(Return(true)); |
- LoginUtils::Set(new MockLoginUtils(kUsername, kPassword)); |
+ |
+ mock_login_utils_ = new MockLoginUtils(); |
+ LoginUtils::Set(mock_login_utils_); |
+ EXPECT_CALL(*mock_login_utils_, PrewarmAuthentication()) |
+ .Times(AnyNumber()); |
+ EXPECT_CALL(*mock_login_utils_, StopBackgroundFetchers()) |
+ .Times(AnyNumber()); |
mock_login_display_.reset(new MockLoginDisplay()); |
mock_login_display_host_.reset(new MockLoginDisplayHost()); |
+ mock_user_manager_ = new MockUserManager(); |
+ UserManager::Set(mock_user_manager_); |
+ EXPECT_CALL(*mock_user_manager_, IsKnownUser(kUsername)) |
+ .Times(AnyNumber()) |
+ .WillRepeatedly(Return(true)); |
+ EXPECT_CALL(*mock_user_manager_, IsKnownUser(kNewUsername)) |
+ .Times(AnyNumber()) |
+ .WillRepeatedly(Return(false)); |
+ EXPECT_CALL(*mock_user_manager_, user_is_logged_in()) |
+ .Times(AnyNumber()) |
+ .WillRepeatedly(Return(false)); |
+ EXPECT_CALL(*mock_user_manager_, IsLoggedInAsGuest()) |
+ .Times(AnyNumber()) |
+ .WillRepeatedly(Return(false)); |
+ |
EXPECT_CALL(*mock_login_display_host_.get(), CreateLoginDisplay(_)) |
.Times(1) |
.WillOnce(Return(mock_login_display_.get())); |
@@ -154,16 +169,18 @@ class ExistingUserControllerTest : public CrosInProcessBrowserTest { |
.Times(1); |
} |
- virtual void SetUpOnMainThread() { |
+ virtual void SetUpOnMainThread() OVERRIDE { |
+ testing_profile_.reset(new TestingProfile()); |
ExistingUserController* controller = |
new ExistingUserController(mock_login_display_host_.get()); |
controller->Init(UserList()); |
- MockLoginPerformerDelegate* mock_delegate = |
- new MockLoginPerformerDelegate(controller); |
- existing_user_controller()->set_login_performer_delegate(mock_delegate); |
+ profile_prepared_cb_ = |
+ base::Bind(&ExistingUserController::OnProfilePrepared, |
+ base::Unretained(existing_user_controller()), |
+ testing_profile_.get()); |
} |
- virtual void TearDownInProcessBrowserTestFixture() { |
+ virtual void TearDownInProcessBrowserTestFixture() OVERRIDE { |
CrosInProcessBrowserTest::TearDownInProcessBrowserTestFixture(); |
DBusThreadManager::Shutdown(); |
} |
@@ -175,38 +192,101 @@ class ExistingUserControllerTest : public CrosInProcessBrowserTest { |
scoped_ptr<MockLoginDisplay> mock_login_display_; |
scoped_ptr<MockLoginDisplayHost> mock_login_display_host_; |
+ // Owned by UserManagerImplWrapper. |
+ MockUserManager* mock_user_manager_; |
+ |
+ // Owned by LoginUtilsWrapper. |
+ MockLoginUtils* mock_login_utils_; |
+ |
+ scoped_ptr<TestingProfile> testing_profile_; |
+ |
+ // Mock URLFetcher. |
+ MockURLFetcherFactory<SuccessFetcher> factory_; |
+ |
+ base::Callback<void(void)> profile_prepared_cb_; |
+ |
private: |
DISALLOW_COPY_AND_ASSIGN(ExistingUserControllerTest); |
}; |
-// Test is flaky: crbug.com/25926 |
-IN_PROC_BROWSER_TEST_F(ExistingUserControllerTest, DISABLED_NewUserLogin) { |
+scoped_refptr<Authenticator> CreateAuthenticator( |
+ LoginStatusConsumer* consumer) { |
+ return new MockAuthenticator(consumer, kUsername, kPassword); |
+} |
+ |
+scoped_refptr<Authenticator> CreateAuthenticatorNewUser( |
+ LoginStatusConsumer* consumer) { |
+ return new MockAuthenticator(consumer, kNewUsername, kPassword); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(ExistingUserControllerTest, ExistingUserLogin) { |
EXPECT_CALL(*mock_login_display_host_, SetStatusAreaEnabled(false)) |
.Times(1); |
EXPECT_CALL(*mock_login_display_, SetUIEnabled(false)) |
.Times(1); |
+ EXPECT_CALL(*mock_login_utils_, CreateAuthenticator(_)) |
+ .Times(1) |
+ .WillOnce(WithArg<0>(Invoke(CreateAuthenticator))); |
+ EXPECT_CALL(*mock_login_utils_, |
+ PrepareProfile(kUsername, _, kPassword, false, _, _, _)) |
+ .Times(1) |
+ .WillOnce(InvokeWithoutArgs(&profile_prepared_cb_, |
+ &base::Callback<void(void)>::Run)); |
+ EXPECT_CALL(*mock_login_utils_, |
+ DoBrowserLaunch(testing_profile_.get(), |
+ mock_login_display_host_.get())) |
+ .Times(1); |
+ EXPECT_CALL(*mock_login_display_.get(), OnLoginSuccess(kUsername)) |
+ .Times(1); |
+ EXPECT_CALL(*mock_login_display_.get(), OnFadeOut()) |
+ .Times(1); |
EXPECT_CALL(*mock_login_display_host_, |
StartWizard(WizardController::kUserImageScreenName, NULL)) |
- .Times(1); |
+ .Times(0); |
existing_user_controller()->Login(kUsername, kPassword); |
+ ui_test_utils::RunAllPendingInMessageLoop(); |
} |
IN_PROC_BROWSER_TEST_F(ExistingUserControllerTest, AutoEnrollAfterSignIn) { |
EXPECT_CALL(*mock_login_display_host_, |
StartWizard(WizardController::kEnterpriseEnrollmentScreenName, _)) |
.Times(1); |
+ EXPECT_CALL(*mock_login_display_.get(), OnFadeOut()) |
+ .Times(1); |
+ EXPECT_CALL(*mock_login_display_host_.get(), OnCompleteLogin()) |
+ .Times(1); |
existing_user_controller()->DoAutoEnrollment(); |
existing_user_controller()->CompleteLogin(kUsername, kPassword); |
+ ui_test_utils::RunAllPendingInMessageLoop(); |
} |
-IN_PROC_BROWSER_TEST_F(ExistingUserControllerTest, DontAutoEnrollAfterSignIn) { |
+IN_PROC_BROWSER_TEST_F(ExistingUserControllerTest, |
+ NewUserDontAutoEnrollAfterSignIn) { |
EXPECT_CALL(*mock_login_display_host_, |
StartWizard(WizardController::kEnterpriseEnrollmentScreenName, _)) |
.Times(0); |
+ // That will be sign in of a new user and (legacy) registration screen is |
+ // activated. In a real WizardController instance that is immediately switched |
+ // to image screen but this tests uses MockLoginDisplayHost instead. |
EXPECT_CALL(*mock_login_display_host_, |
- StartWizard(WizardController::kUserImageScreenName, _)) |
+ StartWizard(WizardController::kRegistrationScreenName, _)) |
.Times(1); |
- existing_user_controller()->CompleteLogin(kUsername, kPassword); |
+ EXPECT_CALL(*mock_login_utils_, CreateAuthenticator(_)) |
+ .Times(1) |
+ .WillOnce(WithArg<0>(Invoke(CreateAuthenticatorNewUser))); |
+ EXPECT_CALL(*mock_login_utils_, |
+ PrepareProfile(kNewUsername, _, kPassword, false, _, _, _)) |
+ .Times(1) |
+ .WillOnce(InvokeWithoutArgs(&profile_prepared_cb_, |
+ &base::Callback<void(void)>::Run)); |
+ EXPECT_CALL(*mock_login_display_.get(), OnLoginSuccess(kNewUsername)) |
+ .Times(1); |
+ EXPECT_CALL(*mock_login_display_.get(), OnFadeOut()) |
+ .Times(1); |
+ EXPECT_CALL(*mock_login_display_host_.get(), OnCompleteLogin()) |
+ .Times(1); |
+ existing_user_controller()->CompleteLogin(kNewUsername, kPassword); |
+ ui_test_utils::RunAllPendingInMessageLoop(); |
} |
} // namespace chromeos |