1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_LOGIN_MANAGER_TEST_H_ 6#define CHROME_BROWSER_CHROMEOS_LOGIN_LOGIN_MANAGER_TEST_H_ 7 8#include <string> 9 10#include "chrome/browser/chromeos/login/mixin_based_browser_test.h" 11#include "chrome/browser/chromeos/login/mock_login_utils.h" 12#include "chrome/browser/chromeos/login/test/js_checker.h" 13 14namespace content { 15class WebContents; 16} // namespace content 17 18namespace chromeos { 19 20class UserContext; 21 22// Base class for Chrome OS out-of-box/login WebUI tests. 23// If no special configuration is done launches out-of-box WebUI. 24// To launch login UI use PRE_* test that will register user(s) and mark 25// out-of-box as completed. 26// Guarantees that WebUI has been initialized by waiting for 27// NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE notification. 28class LoginManagerTest : public MixinBasedBrowserTest { 29 public: 30 explicit LoginManagerTest(bool should_launch_browser); 31 32 // Overriden from InProcessBrowserTest. 33 virtual void TearDownOnMainThread() OVERRIDE; 34 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE; 35 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE; 36 virtual void SetUpOnMainThread() OVERRIDE; 37 38 // Registers the user with the given |user_id| on the device. 39 // This method should be called in PRE_* test. 40 // TODO(dzhioev): Add the ability to register users without a PRE_* test. 41 void RegisterUser(const std::string& user_id); 42 43 // Set expected credentials for next login attempt. 44 void SetExpectedCredentials(const UserContext& user_context); 45 46 // Tries to login with the credentials in |user_context|. The return value 47 // indicates whether the login attempt succeeded. 48 bool TryToLogin(const UserContext& user_context); 49 50 // Tries to add the user identified and authenticated by |user_context| to the 51 // session. The return value indicates whether the attempt succeeded. This 52 // method does the same as TryToLogin() but doesn't verify that the new user 53 // has become the active user. 54 bool AddUserToSession(const UserContext& user_context); 55 56 // Log in user with |user_id|. User should be registered using RegisterUser(). 57 void LoginUser(const std::string& user_id); 58 59 // Add user with |user_id| to session. 60 void AddUser(const std::string& user_id); 61 62 // Executes given JS |expression| in |web_contents_| and checks 63 // that it is true. 64 void JSExpect(const std::string& expression); 65 66 MockLoginUtils& login_utils() { return *mock_login_utils_; } 67 68 content::WebContents* web_contents() { return web_contents_; } 69 70 test::JSChecker& js_checker() { return js_checker_; } 71 72 private: 73 void InitializeWebContents(); 74 75 void set_web_contents(content::WebContents* web_contents) { 76 web_contents_ = web_contents; 77 } 78 79 MockLoginUtils* mock_login_utils_; 80 bool should_launch_browser_; 81 content::WebContents* web_contents_; 82 test::JSChecker js_checker_; 83 84 DISALLOW_COPY_AND_ASSIGN(LoginManagerTest); 85}; 86 87} // namespace chromeos 88 89#endif // CHROME_BROWSER_CHROMEOS_LOGIN_LOGIN_MANAGER_TEST_H_ 90