Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(195)

Unified Diff: chrome/browser/chromeos/login/existing_user_controller_unittest.cc

Issue 12218078: Implement a policy to autologin a public account. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: shorten timer delay in test; add two more stop/start timer cases Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/login/existing_user_controller_unittest.cc
diff --git a/chrome/browser/chromeos/login/existing_user_controller_unittest.cc b/chrome/browser/chromeos/login/existing_user_controller_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..146a92733f00c957e66f0a1c9ebc2f8bb1cb0c8d
--- /dev/null
+++ b/chrome/browser/chromeos/login/existing_user_controller_unittest.cc
@@ -0,0 +1,243 @@
+// Copyright 2013 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/memory/scoped_ptr.h"
+#include "base/message_loop.h"
+#include "chrome/browser/chromeos/login/existing_user_controller.h"
+#include "chrome/browser/chromeos/login/login_display.h"
+#include "chrome/browser/chromeos/login/login_display_host.h"
+#include "chrome/browser/chromeos/login/login_utils.h"
+#include "chrome/browser/chromeos/login/mock_login_display.h"
+#include "chrome/browser/chromeos/login/mock_login_display_host.h"
+#include "chrome/browser/chromeos/login/mock_login_utils.h"
+#include "chrome/browser/chromeos/settings/cros_settings.h"
+#include "chrome/browser/chromeos/settings/device_settings_test_helper.h"
+#include "chrome/test/base/scoped_testing_local_state.h"
+#include "chrome/test/base/testing_browser_process.h"
+#include "content/public/test/test_browser_thread.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using testing::AnyNumber;
+using testing::AtLeast;
+using testing::Mock;
+using testing::Return;
+using testing::ReturnNull;
+using testing::SaveArg;
+using testing::_;
+
+namespace chromeos {
+
+namespace {
+
+const char kAutoLoginUsername[] = "public_session_user@localhost";
+const int kAutoLoginNoDelay = 0;
+const int kAutoLoginShortDelay = 100;
Nikita (slow) 2013/03/06 17:07:16 Could this be set to 0? Or at 1?
dconnelly 2013/03/07 08:38:00 Done.
+const int kAutoLoginLongDelay = 10000;
+
+} // namespace
+
+class ExistingUserControllerAutoLoginTest : public ::testing::Test {
Nikita (slow) 2013/03/06 17:07:16 nit: Class name should be consistent with filename
dconnelly 2013/03/07 08:38:00 Done.
+ protected:
+ ExistingUserControllerAutoLoginTest()
+ : message_loop_(MessageLoop::TYPE_UI),
+ ui_thread_(content::BrowserThread::UI, &message_loop_),
+ local_state_(TestingBrowserProcess::GetGlobal()) {
+ }
+
+ virtual void SetUp() {
+ mock_login_display_host_.reset(new MockLoginDisplayHost);
+ mock_login_display_ = new MockLoginDisplay();
+ mock_login_utils_ = new MockLoginUtils();
+ LoginUtils::Set(mock_login_utils_);
+
+ EXPECT_CALL(*mock_login_display_host_.get(), CreateLoginDisplay(_))
+ .Times(1)
+ .WillOnce(Return(mock_login_display_));
+
+ existing_user_controller_.reset(
+ new ExistingUserController(mock_login_display_host_.get()));
+
+ CrosSettings::Get()->RemoveSettingsObserver(
+ kAccountsPrefDeviceLocalAccountAutoLoginId,
+ existing_user_controller());
+ CrosSettings::Get()->RemoveSettingsObserver(
+ kAccountsPrefDeviceLocalAccountAutoLoginDelay,
+ existing_user_controller());
+ }
+
+ ExistingUserController* existing_user_controller() {
+ return ExistingUserController::current_controller();
+ }
+
+ void SetAutoLoginSettings(const std::string& username, int delay) {
+ CrosSettings::Get()->SetString(
+ kAccountsPrefDeviceLocalAccountAutoLoginId,
+ username);
+ CrosSettings::Get()->SetInteger(
+ kAccountsPrefDeviceLocalAccountAutoLoginDelay,
+ delay);
+ }
+
+ // ExistingUserController private member accessors.
+ base::OneShotTimer<ExistingUserController>* auto_login_timer() {
+ return existing_user_controller()->auto_login_timer_.get();
+ }
+
+ std::string auto_login_username() {
+ return existing_user_controller()->public_session_auto_login_username_;
+ }
+ void set_auto_login_username(const std::string& username) {
+ existing_user_controller()->public_session_auto_login_username_ = username;
+ }
+
+ int auto_login_delay() {
+ return existing_user_controller()->public_session_auto_login_delay_;
+ }
+ void set_auto_login_delay(int delay) {
+ existing_user_controller()->public_session_auto_login_delay_ = delay;
+ }
+
+ bool is_login_in_progress() {
+ return existing_user_controller()->is_login_in_progress_;
+ }
+ void set_is_login_in_progress(bool is_login_in_progress) {
+ existing_user_controller()->is_login_in_progress_ = is_login_in_progress;
+ }
+
+ void ConfigureAutoLogin() {
+ existing_user_controller()->ConfigurePublicSessionAutoLogin();
+ }
+
+ private:
+ MockLoginUtils* mock_login_utils_;
Nikita (slow) 2013/03/06 17:07:16 nit: // Owned by LoginUtilsWrapper.
dconnelly 2013/03/07 08:38:00 Done.
+ MockLoginDisplay* mock_login_display_;
Nikita (slow) 2013/03/06 17:07:16 nit: Missing comment: // |mock_login_display_| is
dconnelly 2013/03/07 08:38:00 Done.
+ scoped_ptr<MockLoginDisplayHost> mock_login_display_host_;
+ scoped_ptr<ExistingUserController> existing_user_controller_;
+ MessageLoop message_loop_;
+ content::TestBrowserThread ui_thread_;
+ ScopedTestingLocalState local_state_;
+ ScopedDeviceSettingsTestHelper device_settings_test_helper_;
+};
+
+TEST_F(ExistingUserControllerAutoLoginTest, StartAutoLoginTimer) {
+ // Timer shouldn't start until signin screen is ready.
+ set_auto_login_username(kAutoLoginUsername);
+ set_auto_login_delay(kAutoLoginLongDelay);
+ existing_user_controller()->StartPublicSessionAutoLoginTimer();
+ EXPECT_FALSE(auto_login_timer());
+
+ // Timer shouldn't start if the policy isn't set.
+ set_auto_login_username("");
+ existing_user_controller()->OnSigninScreenReady();
+ existing_user_controller()->StartPublicSessionAutoLoginTimer();
+ EXPECT_FALSE(auto_login_timer());
+
+ // Timer shouldn't fire in the middle of a login attempt.
+ set_auto_login_username(kAutoLoginUsername);
+ set_is_login_in_progress(true);
+ existing_user_controller()->StartPublicSessionAutoLoginTimer();
+ EXPECT_FALSE(auto_login_timer());
+
+ // Otherwise start.
+ set_is_login_in_progress(false);
+ existing_user_controller()->StartPublicSessionAutoLoginTimer();
+ ASSERT_TRUE(auto_login_timer());
+ EXPECT_TRUE(auto_login_timer()->IsRunning());
+ EXPECT_EQ(auto_login_timer()->GetCurrentDelay().InMilliseconds(),
+ kAutoLoginLongDelay);
+}
+
+TEST_F(ExistingUserControllerAutoLoginTest, StopAutoLoginTimer) {
+ existing_user_controller()->OnSigninScreenReady();
+ set_auto_login_username(kAutoLoginUsername);
+ set_auto_login_delay(kAutoLoginLongDelay);
+
+ existing_user_controller()->StartPublicSessionAutoLoginTimer();
+ ASSERT_TRUE(auto_login_timer());
+ EXPECT_TRUE(auto_login_timer()->IsRunning());
+
+ existing_user_controller()->StopPublicSessionAutoLoginTimer();
+ ASSERT_TRUE(auto_login_timer());
+ EXPECT_FALSE(auto_login_timer()->IsRunning());
+}
+
+TEST_F(ExistingUserControllerAutoLoginTest, ResetAutoLoginTimer) {
+ existing_user_controller()->OnSigninScreenReady();
+ set_auto_login_username(kAutoLoginUsername);
+
+ // Timer starts off not running.
+ EXPECT_FALSE(auto_login_timer());
+
+ // When the timer isn't running, nothing should happen.
+ existing_user_controller()->ResetPublicSessionAutoLoginTimer();
+ EXPECT_FALSE(auto_login_timer());
+
+ // Start the timer.
+ set_auto_login_delay(kAutoLoginLongDelay);
+ existing_user_controller()->StartPublicSessionAutoLoginTimer();
+ ASSERT_TRUE(auto_login_timer());
+ EXPECT_TRUE(auto_login_timer()->IsRunning());
+ EXPECT_EQ(auto_login_timer()->GetCurrentDelay().InMilliseconds(),
+ kAutoLoginLongDelay);
+
+ // User activity should restart the timer, so check to see that the
+ // timer delay was modified.
+ set_auto_login_delay(kAutoLoginShortDelay);
+ existing_user_controller()->ResetPublicSessionAutoLoginTimer();
+ ASSERT_TRUE(auto_login_timer());
+ EXPECT_TRUE(auto_login_timer()->IsRunning());
+ EXPECT_EQ(auto_login_timer()->GetCurrentDelay().InMilliseconds(),
+ kAutoLoginShortDelay);
+}
+
+TEST_F(ExistingUserControllerAutoLoginTest, ConfigureAutoLogin) {
+ existing_user_controller()->OnSigninScreenReady();
+
+ // Timer shouldn't start when the policy is disabled.
+ SetAutoLoginSettings("", 0);
+ ConfigureAutoLogin();
+ EXPECT_FALSE(auto_login_timer());
+ EXPECT_EQ(auto_login_delay(), 0);
+ EXPECT_EQ(auto_login_username(), "");
+
+ // Timer shouldn't start when the delay alone is set.
+ SetAutoLoginSettings("", kAutoLoginShortDelay);
+ ConfigureAutoLogin();
+ EXPECT_FALSE(auto_login_timer());
+ EXPECT_EQ(auto_login_delay(), kAutoLoginShortDelay);
+ EXPECT_EQ(auto_login_username(), "");
+
+ // Timer should start when the username is set.
+ SetAutoLoginSettings(kAutoLoginUsername, kAutoLoginShortDelay);
+ ConfigureAutoLogin();
+ ASSERT_TRUE(auto_login_timer());
+ EXPECT_TRUE(auto_login_timer()->IsRunning());
+ EXPECT_EQ(auto_login_timer()->GetCurrentDelay().InMilliseconds(),
+ kAutoLoginShortDelay);
+ EXPECT_EQ(auto_login_delay(), kAutoLoginShortDelay);
+ EXPECT_EQ(auto_login_username(), kAutoLoginUsername);
+
+ // Timer should restart when the delay is changed.
+ SetAutoLoginSettings(kAutoLoginUsername, kAutoLoginLongDelay);
+ ConfigureAutoLogin();
+ ASSERT_TRUE(auto_login_timer());
+ EXPECT_TRUE(auto_login_timer()->IsRunning());
+ EXPECT_EQ(auto_login_timer()->GetCurrentDelay().InMilliseconds(),
+ kAutoLoginLongDelay);
+ EXPECT_EQ(auto_login_delay(), kAutoLoginLongDelay);
+ EXPECT_EQ(auto_login_username(), kAutoLoginUsername);
+
+ // Timer should stop when the username is unset.
+ SetAutoLoginSettings("", kAutoLoginLongDelay);
+ ConfigureAutoLogin();
+ ASSERT_TRUE(auto_login_timer());
+ EXPECT_FALSE(auto_login_timer()->IsRunning());
+ EXPECT_EQ(auto_login_timer()->GetCurrentDelay().InMilliseconds(),
+ kAutoLoginLongDelay);
+ EXPECT_EQ(auto_login_username(), "");
+ EXPECT_EQ(auto_login_delay(), kAutoLoginLongDelay);
+}
+
+} // namespace chromeos
« no previous file with comments | « chrome/browser/chromeos/login/existing_user_controller_browsertest.cc ('k') | chrome/browser/chromeos/login/login_display.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698