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_APP_LAUNCH_SIGNIN_SCREEN_H_
6#define CHROME_BROWSER_CHROMEOS_LOGIN_APP_LAUNCH_SIGNIN_SCREEN_H_
7
8#include <string>
9
10#include "base/memory/ref_counted.h"
11#include "chrome/browser/chromeos/login/auth/authenticator.h"
12#include "chrome/browser/chromeos/login/auth/login_status_consumer.h"
13#include "chrome/browser/chromeos/login/users/user.h"
14#include "chrome/browser/chromeos/login/users/user_manager.h"
15#include "chrome/browser/signin/screenlock_bridge.h"
16#include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
17
18namespace chromeos {
19
20class OobeUI;
21
22// The app launch signin screen shows the user pod of the device owner
23// and requires the user to login in order to access the network dialog.
24// This screen is quite similar to the standard lock screen, but we do not
25// create a new view to superimpose over the desktop.
26//
27// TODO(tengs): This class doesn't quite follow the idiom of the other
28// screen classes, as SigninScreenHandler is very tightly coupled with
29// the login screen. We should do some refactoring in this area.
30class AppLaunchSigninScreen
31    : public SigninScreenHandlerDelegate,
32      public LoginStatusConsumer {
33 public:
34  class Delegate {
35   public:
36    virtual void OnOwnerSigninSuccess() = 0;
37
38   protected:
39    virtual ~Delegate() {}
40  };
41
42  AppLaunchSigninScreen(OobeUI* oobe_display, Delegate *delegate);
43  virtual ~AppLaunchSigninScreen();
44
45  void Show();
46
47  static void SetUserManagerForTesting(UserManager* user_manager);
48
49 private:
50  void InitOwnerUserList();
51  UserManager* GetUserManager();
52
53  // SigninScreenHandlerDelegate implementation:
54  virtual void CancelPasswordChangedFlow() OVERRIDE;
55  virtual void CancelUserAdding() OVERRIDE;
56  virtual void CreateAccount() OVERRIDE;
57  virtual void CompleteLogin(const UserContext& user_context) OVERRIDE;
58  virtual void Login(const UserContext& user_context) OVERRIDE;
59  virtual void LoginAsRetailModeUser() OVERRIDE;
60  virtual void LoginAsGuest() OVERRIDE;
61  virtual void MigrateUserData(const std::string& old_password) OVERRIDE;
62  virtual void LoginAsPublicAccount(const std::string& username) OVERRIDE;
63  virtual void LoadWallpaper(const std::string& username) OVERRIDE;
64  virtual void LoadSigninWallpaper() OVERRIDE;
65  virtual void OnSigninScreenReady() OVERRIDE;
66  virtual void RemoveUser(const std::string& username) OVERRIDE;
67  virtual void ResyncUserData() OVERRIDE;
68  virtual void ShowEnterpriseEnrollmentScreen() OVERRIDE;
69  virtual void ShowKioskEnableScreen() OVERRIDE;
70  virtual void ShowKioskAutolaunchScreen() OVERRIDE;
71  virtual void ShowWrongHWIDScreen() OVERRIDE;
72  virtual void SetWebUIHandler(
73      LoginDisplayWebUIHandler* webui_handler) OVERRIDE;
74  virtual void ShowSigninScreenForCreds(const std::string& username,
75                                        const std::string& password);
76  virtual const UserList& GetUsers() const OVERRIDE;
77  virtual bool IsShowGuest() const OVERRIDE;
78  virtual bool IsShowUsers() const OVERRIDE;
79  virtual bool IsSigninInProgress() const OVERRIDE;
80  virtual bool IsUserSigninCompleted() const OVERRIDE;
81  virtual void SetDisplayEmail(const std::string& email) OVERRIDE;
82  virtual void Signout() OVERRIDE;
83  virtual void LoginAsKioskApp(const std::string& app_id,
84                               bool diagnostic_mode) OVERRIDE;
85  virtual void HandleGetUsers() OVERRIDE;
86  virtual void SetAuthType(
87      const std::string& username,
88      ScreenlockBridge::LockHandler::AuthType auth_type) OVERRIDE;
89  virtual ScreenlockBridge::LockHandler::AuthType GetAuthType(
90      const std::string& username) const OVERRIDE;
91
92  // LoginStatusConsumer implementation:
93  virtual void OnLoginFailure(const LoginFailure& error) OVERRIDE;
94  virtual void OnLoginSuccess(const UserContext& user_context) OVERRIDE;
95
96  OobeUI* oobe_ui_;
97  Delegate* delegate_;
98  LoginDisplayWebUIHandler* webui_handler_;
99  scoped_refptr<Authenticator> authenticator_;
100
101  // This list should have at most one user, and that user should be the owner.
102  UserList owner_user_list_;
103
104  static UserManager* test_user_manager_;
105
106  DISALLOW_COPY_AND_ASSIGN(AppLaunchSigninScreen);
107};
108
109}  // namespace chromeos
110
111#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_APP_LAUNCH_SIGNIN_SCREEN_H_
112