12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_SIGNIN_SCREEN_HANDLER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_SIGNIN_SCREEN_HANDLER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <set>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback.h"
127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/containers/hash_tables.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/help_app_launcher.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/login/login_display.h"
18a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/error_screen_actor.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/user_manager.h"
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/chromeos/login/wallpaper_manager.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/net/network_portal_detector.h"
2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/system_key_event_listener.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/network_state_informer.h"
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h"
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/notification_registrar.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_ui.h"
31a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "net/base/net_errors.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DictionaryValue;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ListValue;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CaptivePortalWindowProxy;
41a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)class CoreOobeActor;
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LocallyManagedUserCreationScreenHandler;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NativeWindowDelegate;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class User;
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct UserContext;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Helper class to pass initial parameters to the login screen.
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class LoginScreenContext {
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public:
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  LoginScreenContext();
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  explicit LoginScreenContext(const base::ListValue* args);
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void set_email(const std::string& email) { email_ = email; }
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  const std::string& email() const { return email_; }
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void set_oobe_ui(bool oobe_ui) { oobe_ui_ = oobe_ui; }
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  bool oobe_ui() const { return oobe_ui_; }
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private:
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void Init();
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  std::string email_;
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  bool oobe_ui_;
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An interface for WebUILoginDisplay to call SigninScreenHandler.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LoginDisplayWebUIHandler {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ClearAndEnablePassword() = 0;
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ClearUserPodPassword() = 0;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnLoginSuccess(const std::string& username) = 0;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnUserRemoved(const std::string& username) = 0;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnUserImageChanged(const User& user) = 0;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnPreferencesChanged() = 0;
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ResetSigninScreenHandlerDelegate() = 0;
76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void ShowBannerMessage(const std::string& message) = 0;
77d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  virtual void ShowUserPodButton(const std::string& username,
78d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)                                 const std::string& iconURL,
79d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)                                 const base::Closure& click_callback) = 0;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowError(int login_attempts,
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const std::string& error_text,
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const std::string& help_link_text,
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         HelpAppLauncher::HelpTopic help_topic_id) = 0;
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ShowErrorScreen(LoginDisplay::SigninError error_id) = 0;
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowGaiaPasswordChanged(const std::string& username) = 0;
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ShowSigninUI(const std::string& email) = 0;
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ShowPasswordChangedDialog(bool show_password_error) = 0;
88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Show sign-in screen for the given credentials.
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowSigninScreenForCreds(const std::string& username,
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        const std::string& password) = 0;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~LoginDisplayWebUIHandler() {}
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An interface for SigninScreenHandler to call WebUILoginDisplay.
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SigninScreenHandlerDelegate {
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Cancels current password changed flow.
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void CancelPasswordChangedFlow() = 0;
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Cancels user adding.
102868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void CancelUserAdding() = 0;
103868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Create a new Google account.
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void CreateAccount() = 0;
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Confirms sign up by provided credentials in |user_context|.
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Used for new user login via GAIA extension.
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void CompleteLogin(const UserContext& user_context) = 0;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Sign in using username and password specified as a part of |user_context|.
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Used for both known and new users.
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void Login(const UserContext& user_context) = 0;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Sign in into a retail mode session.
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void LoginAsRetailModeUser() = 0;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Sign in into guest session.
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void LoginAsGuest() = 0;
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Sign in into the public account identified by |username|.
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void LoginAsPublicAccount(const std::string& username) = 0;
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Decrypt cryptohome using user provided |old_password|
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // and migrate to new password.
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void MigrateUserData(const std::string& old_password) = 0;
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Load wallpaper for given |username|.
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void LoadWallpaper(const std::string& username) = 0;
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Loads the default sign-in wallpaper.
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void LoadSigninWallpaper() = 0;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Notify the delegate when the sign-in UI is finished loading.
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnSigninScreenReady() = 0;
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Attempts to remove given user.
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RemoveUser(const std::string& username) = 0;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Ignore password change, remove existing cryptohome and
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // force full sync of user data.
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ResyncUserData() = 0;
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows Enterprise Enrollment screen.
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowEnterpriseEnrollmentScreen() = 0;
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Shows Kiosk Enable screen.
1487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void ShowKioskEnableScreen() = 0;
1497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows Reset screen.
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowResetScreen() = 0;
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
153868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Shows Reset screen.
154868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void ShowKioskAutolaunchScreen() = 0;
155868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Show wrong hwid screen.
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ShowWrongHWIDScreen() = 0;
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Let the delegate know about the handler it is supposed to be using.
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetWebUIHandler(LoginDisplayWebUIHandler* webui_handler) = 0;
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns users list to be shown.
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual const UserList& GetUsers() const = 0;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether login as guest is available.
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsShowGuest() const = 0;
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether login as guest is available.
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsShowUsers() const = 0;
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether new user pod is available.
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsShowNewUser() const = 0;
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
174a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  // Returns true if sign in is in progress.
175a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  virtual bool IsSigninInProgress() const = 0;
176a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
177a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  // Whether user sign in has completed.
178a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  virtual bool IsUserSigninCompleted() const = 0;
179a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets the displayed email for the next login attempt. If it succeeds,
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // user's displayed email value will be updated to |email|.
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetDisplayEmail(const std::string& email) = 0;
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Signs out if the screen is currently locked.
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void Signout() = 0;
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Login to kiosk mode for app with |app_id|.
1883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual void LoginAsKioskApp(const std::string& app_id) = 0;
1893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~SigninScreenHandlerDelegate() {}
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A class that handles the WebUI hooks in sign-in screen in OobeDisplay
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and LoginDisplay.
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SigninScreenHandler
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public BaseScreenHandler,
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      public LoginDisplayWebUIHandler,
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      public SystemKeyEventListener::CapsLockObserver,
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      public content::NotificationObserver,
201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      public NetworkStateInformer::NetworkStateInformerObserver,
202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      public WallpaperManager::Observer {
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SigninScreenHandler(
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const scoped_refptr<NetworkStateInformer>& network_state_informer,
206a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      ErrorScreenActor* error_screen_actor,
207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      CoreOobeActor* core_oobe_actor,
208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      GaiaScreenHandler* gaia_screen_handler);
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~SigninScreenHandler();
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Shows the sign in screen.
212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void Show(const LoginScreenContext& context);
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the login spinner UI for retail mode logins.
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowRetailModeLoginSpinner();
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets delegate to be used by the handler. It is guaranteed that valid
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // delegate is set before Show() method will be called.
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetDelegate(SigninScreenHandlerDelegate* delegate);
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetNativeWindowDelegate(NativeWindowDelegate* native_window_delegate);
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // NetworkStateInformer::NetworkStateInformerObserver implementation:
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnNetworkReady() OVERRIDE;
225ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual void UpdateState(ErrorScreenActor::ErrorReason reason) OVERRIDE;
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
227a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  // Required Local State preferences.
228a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  static void RegisterPrefs(PrefRegistrySimple* registry);
229a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
2301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void set_kiosk_enable_flow_aborted_callback_for_test(
2311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      const base::Closure& callback) {
2321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    kiosk_enable_flow_aborted_callback_for_test_ = callback;
2331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  }
2341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // From WallpaperManager::Observer
236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void OnWallpaperAnimationFinished(const std::string& email) OVERRIDE;
237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  enum UIState {
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    UI_STATE_UNKNOWN = 0,
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    UI_STATE_GAIA_SIGNIN,
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    UI_STATE_ACCOUNT_PICKER,
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef base::hash_set<std::string> WebUIObservers;
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class ReportDnsCacheClearedOnUIThread;
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  friend class LocallyManagedUserCreationScreenHandler;
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
250f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void ShowImpl();
251f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Updates current UI of the signin screen according to |ui_state|
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // argument.  Optionally it can pass screen initialization data via
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |params| argument.
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void UpdateUIState(UIState ui_state, DictionaryValue* params);
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
257ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  void UpdateStateInternal(ErrorScreenActor::ErrorReason reason,
2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           bool force_update);
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetupAndShowOfflineMessage(NetworkStateInformer::State state,
260a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)                                  ErrorScreenActor::ErrorReason reason);
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void HideOfflineMessage(NetworkStateInformer::State state,
262a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)                          ErrorScreenActor::ErrorReason reason);
2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ReloadGaiaScreen();
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // BaseScreenHandler implementation:
266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void DeclareLocalizedValues(LocalizedValuesBuilder* builder) OVERRIDE;
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Initialize() OVERRIDE;
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::NativeWindow GetNativeWindow() OVERRIDE;
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebUIMessageHandler implementation:
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RegisterMessages() OVERRIDE;
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
273a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // LoginDisplayWebUIHandler implementation:
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ClearAndEnablePassword() OVERRIDE;
2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ClearUserPodPassword() OVERRIDE;
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnLoginSuccess(const std::string& username) OVERRIDE;
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnUserRemoved(const std::string& username) OVERRIDE;
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnUserImageChanged(const User& user) OVERRIDE;
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnPreferencesChanged() OVERRIDE;
2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ResetSigninScreenHandlerDelegate() OVERRIDE;
281a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void ShowBannerMessage(const std::string& message) OVERRIDE;
282d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  virtual void ShowUserPodButton(const std::string& username,
283d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)                                 const std::string& iconURL,
284d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)                                 const base::Closure& click_callback) OVERRIDE;
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowError(int login_attempts,
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const std::string& error_text,
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const std::string& help_link_text,
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         HelpAppLauncher::HelpTopic help_topic_id) OVERRIDE;
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ShowGaiaPasswordChanged(const std::string& username) OVERRIDE;
2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ShowSigninUI(const std::string& email) OVERRIDE;
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ShowPasswordChangedDialog(bool show_password_error) OVERRIDE;
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ShowErrorScreen(LoginDisplay::SigninError error_id) OVERRIDE;
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowSigninScreenForCreds(const std::string& username,
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        const std::string& password) OVERRIDE;
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // SystemKeyEventListener::CapsLockObserver overrides.
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnCapsLockChange(bool enabled) OVERRIDE;
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // content::NotificationObserver implementation:
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Observe(int type,
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const content::NotificationSource& source,
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const content::NotificationDetails& details) OVERRIDE;
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows signin screen after dns cache and cookie cleanup operations finish.
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowSigninScreenIfReady();
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Tells webui to load authentication extension. |force| is used to force the
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // extension reloading, if it has already been loaded. |silent_load| is true
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // for cases when extension should be loaded in the background and it
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // shouldn't grab the focus. |offline| is true when offline version of the
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // extension should be used.
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void LoadAuthExtension(bool force, bool silent_load, bool offline);
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Updates authentication extension. Called when device settings that affect
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // sign-in (allow BWSI and allow whitelist) are changed.
31668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  void UserSettingsChanged();
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateAddButtonStatus();
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Restore input focus to current user pod.
32090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void RefocusCurrentPod();
32190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebUI message handlers.
323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleCompleteAuthentication(const std::string& email,
324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                    const std::string& password,
325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                    const std::string& auth_code);
326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleCompleteLogin(const std::string& typed_email,
327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                           const std::string& password);
328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleGetUsers();
329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleAuthenticateUser(const std::string& username,
330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              const std::string& password);
331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleLaunchDemoUser();
332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleLaunchIncognito();
333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleLaunchPublicAccount(const std::string& username);
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void HandleOfflineLogin(const base::ListValue* args);
335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleShutdownSystem();
336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleLoadWallpaper(const std::string& email);
337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleRebootSystem();
338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleRemoveUser(const std::string& email);
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void HandleShowAddUser(const base::ListValue* args);
340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleToggleEnrollmentScreen();
3417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void HandleToggleKioskEnableScreen();
342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleToggleResetScreen();
343868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void HandleToggleKioskAutolaunchScreen();
344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleLaunchHelpApp(double help_topic_id);
345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleCreateAccount();
346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleAccountPickerReady();
347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleWallpaperReady();
348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleLoginWebuiReady();
349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleSignOutUser();
350c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleNetworkErrorShown();
351c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleOpenProxySettings();
352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleLoginVisible(const std::string& source);
353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleCancelPasswordChangedFlow();
354868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void HandleCancelUserAdding();
355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleMigrateUserData(const std::string& password);
356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleResyncUserData();
357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleLoginUIStateChanged(const std::string& source, bool new_value);
358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleUnlockOnLoginSuccess();
359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleLoginScreenUpdate();
360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleShowLoadingTimeoutError();
361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleUpdateOfflineLogin(bool offline_login_active);
362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void HandleShowLocallyManagedUserCreationScreen();
3633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void HandleFocusPod(const std::string& user_id);
3643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void HandleLaunchKioskApp(const std::string& app_id);
365d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  void HandleCustomButtonClicked(const std::string& username);
3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Fills |user_dict| with information about |user|.
3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void FillUserDictionary(User* user,
3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 bool is_owner,
3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 DictionaryValue* user_dict);
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sends user list to account picker.
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SendUserList(bool animated);
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Kick off cookie / local storage cleanup.
376b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  void StartClearingCookies(const base::Closure& on_clear_callback);
377b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  void OnCookiesCleared(base::Closure on_clear_callback);
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Kick off DNS cache flushing.
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void StartClearingDnsCache();
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnDnsCleared();
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Decides whether an auth extension should be pre-loaded. If it should,
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // pre-loads it.
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void MaybePreloadAuthExtension();
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true iff
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // (i)   log in is restricted to some user list,
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // (ii)  all users in the restricted list are present.
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool AllWhitelistedUsersPresent();
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Cancels password changed flow - switches back to login screen.
3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Called as a callback after cookies are cleared.
3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void CancelPasswordChangedFlowInternal();
3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns current visible screen.
3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  OobeUI::Screen GetCurrentScreen() const;
3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns true if current visible screen is the Gaia sign-in page.
400a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  bool IsGaiaVisible() const;
401a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
402a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  // Returns true if current visible screen is the error screen over
403a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  // Gaia sign-in page.
404a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  bool IsGaiaHiddenByError() const;
4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns true if current screen is the error screen over signin
4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // screen.
4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool IsSigninScreenHiddenByError() const;
4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns true if guest signin is allowed.
4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool IsGuestSigninAllowed() const;
4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns true if offline login is allowed.
4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool IsOfflineLoginAllowed() const;
4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
416eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Attempts login for test.
417eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void SubmitLoginFormForTest();
418eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
419a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  // Update current input method (namely keyboard layout) to LRU by this user.
420a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  void SetUserInputMethod(const std::string& username);
421a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
4221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Invoked when auto enrollment check is finished to decide whether to
4231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // continue kiosk enable flow. Kiosk enable flow is resumed when
4241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // |should_auto_enroll| is false.
4251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void ContinueKioskEnableFlow(bool should_auto_enroll);
4261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
427f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Shows signin screen for |email|.
428f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void OnShowAddUser(const std::string& email);
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
430f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  GaiaScreenHandler::FrameState FrameState() const;
431f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  net::Error FrameError() const;
432a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
433f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Current UI state of the signin screen.
434f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  UIState ui_state_;
435a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A delegate that glues this handler with backend LoginDisplay.
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SigninScreenHandlerDelegate* delegate_;
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A delegate used to get gfx::NativeWindow.
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NativeWindowDelegate* native_window_delegate_;
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether screen should be shown right after initialization.
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool show_on_init_;
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Keeps whether screen should be shown for OOBE.
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool oobe_ui_;
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Is focus still stolen from Gaia page?
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool focus_stolen_;
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Has Gaia page silent load been started for the current sign-in attempt?
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool gaia_silent_load_;
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The active network at the moment when Gaia page was preloaded.
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string gaia_silent_load_network_;
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Is account picker being shown for the first time.
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_account_picker_showing_first_time_;
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True if dns cache cleanup is done.
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool dns_cleared_;
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True if DNS cache task is already running.
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool dns_clear_task_running_;
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True if cookie jar cleanup is done.
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool cookies_cleared_;
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Help application used for help dialogs.
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<HelpAppLauncher> help_app_;
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Network state informer used to keep signin screen up.
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<NetworkStateInformer> network_state_informer_;
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Email to pre-populate with.
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string email_;
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Emails of the users, whose passwords have recently been changed.
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::set<std::string> password_changed_for_;
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test credentials.
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string test_user_;
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string test_pass_;
483eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool test_expects_complete_login_;
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::WeakPtrFactory<SigninScreenHandler> weak_factory_;
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set to true once |LOGIN_WEBUI_VISIBLE| notification is observed.
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool webui_visible_;
48990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  bool preferences_changed_delayed_;
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ErrorScreenActor* error_screen_actor_;
492a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  CoreOobeActor* core_oobe_actor_;
4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool is_first_update_state_call_;
4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool offline_login_active_;
4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NetworkStateInformer::State last_network_state_;
4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::CancelableClosure update_state_closure_;
4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::CancelableClosure connecting_closure_;
5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::NotificationRegistrar registrar_;
5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Whether there is an auth UI pending. This flag is set on receiving
5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // NOTIFICATION_AUTH_NEEDED and reset on either NOTIFICATION_AUTH_SUPPLIED or
5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // NOTIFICATION_AUTH_CANCELLED.
5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool has_pending_auth_ui_;
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
50868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  scoped_ptr<CrosSettings::ObserverSubscription> allow_new_user_subscription_;
50968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  scoped_ptr<CrosSettings::ObserverSubscription> allow_guest_subscription_;
51068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
5111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  bool wait_for_auto_enrollment_check_;
5121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
5131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  base::Closure kiosk_enable_flow_aborted_callback_for_test_;
5141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
515d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  // Map of callbacks run when the custom button on a user pod is clicked.
516d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  std::map<std::string, base::Closure> user_pod_button_callback_map_;
517d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)
518f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Non-owning ptr.
519f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // TODO (ygorshenin@): remove this dependency.
520f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  GaiaScreenHandler* gaia_screen_handler_;
521f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SigninScreenHandler);
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_SIGNIN_SCREEN_HANDLER_H_
528