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