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

Unified Diff: chrome/browser/chromeos/login/login_manager_test.h

Issue 284623002: LoginManagerTest with exchangable base (prototype). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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
« no previous file with comments | « no previous file | chrome/browser/chromeos/login/login_manager_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/login/login_manager_test.h
diff --git a/chrome/browser/chromeos/login/login_manager_test.h b/chrome/browser/chromeos/login/login_manager_test.h
index b05db4860117f540bd8352dd53724d9c9200b554..b44852569334324b1ce3d0d0b456cca44e104fb7 100644
--- a/chrome/browser/chromeos/login/login_manager_test.h
+++ b/chrome/browser/chromeos/login/login_manager_test.h
@@ -8,6 +8,20 @@
#include "chrome/browser/chromeos/login/mock_login_utils.h"
#include "chrome/browser/chromeos/login/test/js_checker.h"
#include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/browser/chromeos/login/login_display_host_impl.h"
+#include "base/prefs/scoped_user_pref_update.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/chromeos/login/existing_user_controller.h"
+#include "chrome/browser/chromeos/login/user_manager.h"
+#include "chrome/browser/chromeos/login/webui_login_view.h"
+#include "chrome/common/chrome_switches.h"
+#include "chromeos/chromeos_switches.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/test/browser_test_utils.h"
+#include "content/public/test/test_utils.h"
+#include "testing/gtest/include/gtest/gtest.h"
namespace content {
class WebContents;
@@ -21,51 +35,128 @@ namespace chromeos {
// out-of-box as completed.
// Guarantees that WebUI has been initialized by waiting for
// NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE notification.
-class LoginManagerTest : public InProcessBrowserTest {
+template <typename Base>
+class LoginManagerTestProxy : public Base {
public:
- explicit LoginManagerTest(bool should_launch_browser);
+ explicit LoginManagerTestProxy(bool should_launch_browser)
+ : should_launch_browser_(should_launch_browser),
+ web_contents_(NULL) {
+ Base::set_exit_when_last_browser_closes(false);
+ }
// Overriden from InProcessBrowserTest.
- virtual void CleanUpOnMainThread() OVERRIDE;
- virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE;
- virtual void SetUpInProcessBrowserTestFixture() OVERRIDE;
- virtual void SetUpOnMainThread() OVERRIDE;
+ virtual void CleanUpOnMainThread() OVERRIDE {
+ if (LoginDisplayHostImpl::default_host())
+ LoginDisplayHostImpl::default_host()->Finalize();
+ base::MessageLoop::current()->RunUntilIdle();
+ Base::CleanUpOnMainThread();
+ }
+
+ virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE {
+ Base::SetUpCommandLine(command_line);
+ command_line->AppendSwitch(chromeos::switches::kLoginManager);
+ command_line->AppendSwitch(chromeos::switches::kForceLoginManagerInTests);
+ command_line->AppendSwitch(::switches::kMultiProfiles);
+ }
+
+ virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
+ Base::SetUpInProcessBrowserTestFixture();
+ mock_login_utils_ = new testing::NiceMock<MockLoginUtils>();
+ mock_login_utils_->DelegateToFake();
+ mock_login_utils_->GetFakeLoginUtils()->set_should_launch_browser(
+ should_launch_browser_);
+ LoginUtils::Set(mock_login_utils_);
+ }
+
+ virtual void SetUpOnMainThread() OVERRIDE {
+ Base::SetUpOnMainThread();
+ content::WindowedNotificationObserver(
+ chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE,
+ content::NotificationService::AllSources()).Wait();
+ InitializeWebContents();
+ }
// Registers user with given |username| on device.
// Should be called in PRE_* test.
// TODO(dzhioev): add ability to register users without PRE_* test.
- void RegisterUser(const std::string& username);
+ void RegisterUser(const std::string& username) {
+ ListPrefUpdate users_pref(g_browser_process->local_state(), "LoggedInUsers");
+ users_pref->AppendIfNotPresent(new base::StringValue(username));
+ }
// Set expected credentials for next login attempt.
void SetExpectedCredentials(const std::string& username,
- const std::string& password);
+ const std::string& password) {
+ login_utils().GetFakeLoginUtils()->SetExpectedCredentials(username, password);
+ }
// Tries to login with |username| and |password|. Returns false if attempt
// has failed.
- bool TryToLogin(const std::string& username, const std::string& password);
+ bool TryToLogin(const std::string& username, const std::string& password) {
+ if (!AddUserTosession(username, password))
+ return false;
+ if (const User* active_user = UserManager::Get()->GetActiveUser())
+ return active_user->email() == username;
+ return false;
+ }
// Tries to add user to session with |username| and |password|. Returns false
// if attempt has failed. this function does the same as TryToLogin but
// doesn't check that new user become active user.
bool AddUserTosession(const std::string& username,
- const std::string& password);
+ const std::string& password) {
+ ExistingUserController* controller =
+ ExistingUserController::current_controller();
+ if (!controller) {
+ ADD_FAILURE();
+ return false;
+ }
+ controller->Login(UserContext(username, password, std::string()));
+ content::WindowedNotificationObserver(
+ chrome::NOTIFICATION_SESSION_STARTED,
+ content::NotificationService::AllSources()).Wait();
+ const UserList& logged_users = UserManager::Get()->GetLoggedInUsers();
+ for (UserList::const_iterator it = logged_users.begin();
+ it != logged_users.end(); ++it) {
+ if ((*it)->email() == username)
+ return true;
+ }
+ return false;
+ }
// Login user with |username|. User should be registered using RegisterUser().
- void LoginUser(const std::string& username);
+ void LoginUser(const std::string& username) {
+ SetExpectedCredentials(username, "password");
+ EXPECT_TRUE(TryToLogin(username, "password"));
+ }
// Add user with |username| to session.
- void AddUser(const std::string& username);
+ void AddUser(const std::string& username) {
+ SetExpectedCredentials(username, "password");
+ EXPECT_TRUE(AddUserTosession(username, "password"));
+ }
// Executes given JS |expression| in |web_contents_| and checks
// that it is true.
- void JSExpect(const std::string& expression);
+ void JSExpect(const std::string& expression) {
+ js_checker_.ExpectTrue(expression);
+ }
MockLoginUtils& login_utils() { return *mock_login_utils_; }
content::WebContents* web_contents() { return web_contents_; }
private:
- void InitializeWebContents();
+ void InitializeWebContents() {
+ LoginDisplayHost* host = LoginDisplayHostImpl::default_host();
+ EXPECT_TRUE(host != NULL);
+
+ content::WebContents* web_contents =
+ host->GetWebUILoginView()->GetWebContents();
+ EXPECT_TRUE(web_contents != NULL);
+ set_web_contents(web_contents);
+ js_checker_.set_web_contents(web_contents);
+ }
void set_web_contents(content::WebContents* web_contents) {
web_contents_ = web_contents;
@@ -76,9 +167,12 @@ class LoginManagerTest : public InProcessBrowserTest {
content::WebContents* web_contents_;
test::JSChecker js_checker_;
- DISALLOW_COPY_AND_ASSIGN(LoginManagerTest);
+ DISALLOW_COPY_AND_ASSIGN(LoginManagerTestProxy);
};
+typedef LoginManagerTestProxy<InProcessBrowserTest> LoginManagerTest;
+typedef LoginManagerTestProxy<WebUIBrowserTest> LoginManagerWebUITest;
+
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_LOGIN_MANAGER_TEST_H_
« no previous file with comments | « no previous file | chrome/browser/chromeos/login/login_manager_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698