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