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)#include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <algorithm> 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <vector> 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/bind.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/bind_helpers.h" 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/debug/trace_event.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/location.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/metrics/histogram.h" 16a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "base/prefs/pref_registry_simple.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/prefs/scoped_user_pref_update.h" 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/sys_info.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 25b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "chrome/browser/browser_process_platform_part_chromeos.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_shutdown.h" 277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/chromeos/boot_times_loader.h" 30a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "chrome/browser/chromeos/input_method/input_method_util.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/login/hwid_checker.h" 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/lock/screen_locker.h" 34a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/chromeos/login/screens/core_oobe_actor.h" 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/login_display_host.h" 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/webui_login_display.h" 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/multi_profile_user_controller.h" 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h" 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/login/wizard_controller.h" 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/chromeos/policy/consumer_management_service.h" 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/policy/device_local_account.h" 44b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "chrome/browser/chromeos/profiles/profile_helper.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/io_thread.h" 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/signin/easy_unlock_service.h" 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/authenticated_user_email_retriever.h" 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/error_screen_handler.h" 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/l10n_util.h" 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/native_window_delegate.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/network_state_informer.h" 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/chromium_strings.h" 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h" 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h" 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/power_manager_client.h" 61a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "chromeos/ime/ime_keyboard.h" 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chromeos/ime/input_method_descriptor.h" 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/ime/input_method_manager.h" 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/login/auth/key.h" 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/login/auth/user_context.h" 6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chromeos/network/network_state.h" 6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chromeos/network/network_state_handler.h" 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/network/portal_detector/network_portal_detector.h" 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/user_manager/user.h" 706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/user_manager/user_manager.h" 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/user_manager/user_type.h" 7223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "content/public/browser/render_frame_host.h" 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/gaia_auth_util.h" 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "net/url_request/url_request_context_getter.h" 7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/base/webui/web_ui_util.h" 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell.h" 81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ash/wm/lock_state_controller.h" 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Max number of users to show. 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const size_t kMaxUsers = 18; 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Timeout to delay first notification about offline state for a 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// current network. 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const int kOfflineTimeoutSec = 5; 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Timeout used to prevent infinite connecting to a flaky network. 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const int kConnectingTimeoutSec = 60; 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Type of the login screen UI that is currently presented to user. 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSourceGaiaSignin[] = "gaia-signin"; 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSourceAccountPicker[] = "account-picker"; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 100a3f7b4e666c476898878fa745f637129375cd889Ben Murdochstatic bool Contains(const std::vector<std::string>& container, 101a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch const std::string& value) { 102a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch return std::find(container.begin(), container.end(), value) != 103a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch container.end(); 104a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch} 105a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class CallOnReturn { 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public: 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) explicit CallOnReturn(const base::Closure& callback) 1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : callback_(callback), call_scheduled_(false) {} 1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ~CallOnReturn() { 1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (call_scheduled_ && !callback_.is_null()) 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) callback_.Run(); 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void ScheduleCall() { call_scheduled_ = true; } 1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private: 1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Closure callback_; 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool call_scheduled_; 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(CallOnReturn); 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 131a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)bool IsOnline(NetworkStateInformer::State state, 132a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ErrorScreenActor::ErrorReason reason) { 133a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return state == NetworkStateInformer::ONLINE && 134a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) reason != ErrorScreenActor::ERROR_REASON_PORTAL_DETECTED && 135a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) reason != ErrorScreenActor::ERROR_REASON_LOADING_TIMEOUT; 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool IsBehindCaptivePortal(NetworkStateInformer::State state, 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ErrorScreenActor::ErrorReason reason) { 140a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return state == NetworkStateInformer::CAPTIVE_PORTAL || 141a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) reason == ErrorScreenActor::ERROR_REASON_PORTAL_DETECTED; 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool IsProxyError(NetworkStateInformer::State state, 145ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ErrorScreenActor::ErrorReason reason, 146ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch net::Error frame_error) { 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return state == NetworkStateInformer::PROXY_AUTH_REQUIRED || 148a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) reason == ErrorScreenActor::ERROR_REASON_PROXY_AUTH_CANCELLED || 149ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch reason == ErrorScreenActor::ERROR_REASON_PROXY_CONNECTION_FAILED || 150ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch (reason == ErrorScreenActor::ERROR_REASON_FRAME_ERROR && 151ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch (frame_error == net::ERR_PROXY_CONNECTION_FAILED || 152ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch frame_error == net::ERR_TUNNEL_CONNECTION_FAILED)); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool IsSigninScreen(const OobeUI::Screen screen) { 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return screen == OobeUI::SCREEN_GAIA_SIGNIN || 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) screen == OobeUI::SCREEN_ACCOUNT_PICKER; 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool IsSigninScreenError(ErrorScreen::ErrorState error_state) { 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return error_state == ErrorScreen::ERROR_STATE_PORTAL || 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_state == ErrorScreen::ERROR_STATE_OFFLINE || 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_state == ErrorScreen::ERROR_STATE_PROXY || 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_state == ErrorScreen::ERROR_STATE_AUTH_EXT_TIMEOUT; 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Returns network name by service path. 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string GetNetworkName(const std::string& service_path) { 16990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const NetworkState* network = NetworkHandler::Get()->network_state_handler()-> 17090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetNetworkState(service_path); 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!network) 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return std::string(); 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return network->name(); 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 176a3f7b4e666c476898878fa745f637129375cd889Ben Murdochstatic bool SetUserInputMethodImpl( 177a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch const std::string& username, 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& user_input_method, 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci input_method::InputMethodManager::State* ime_state) { 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!chromeos::input_method::InputMethodManager::Get()->IsLoginKeyboard( 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci user_input_method)) { 182a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch LOG(WARNING) << "SetUserInputMethod('" << username 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci << "'): stored user LRU input method '" << user_input_method 184a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch << "' is no longer Full Latin Keyboard Language" 185a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch << " (entry dropped). Use hardware default instead."; 186a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefService* const local_state = g_browser_process->local_state(); 188a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch DictionaryPrefUpdate updater(local_state, prefs::kUsersLRUInputMethod); 189a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 190a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::DictionaryValue* const users_lru_input_methods = updater.Get(); 191a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch if (users_lru_input_methods != NULL) { 192a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch users_lru_input_methods->SetStringWithoutPathExpansion(username, ""); 193a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch } 194a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch return false; 195a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch } 196a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!Contains(ime_state->GetActiveInputMethodIds(), user_input_method)) { 1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!ime_state->EnableInputMethod(user_input_method)) { 199a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch DLOG(ERROR) << "SigninScreenHandler::SetUserInputMethod('" << username 2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci << "'): user input method '" << user_input_method 201a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch << "' is not enabled and enabling failed (ignored!)."; 202a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch } 203a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch } 2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ime_state->ChangeInputMethod(user_input_method, false /* show_message */); 205a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 206a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch return true; 207a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch} 208a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// LoginScreenContext implementation ------------------------------------------ 212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)LoginScreenContext::LoginScreenContext() { 214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Init(); 215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)LoginScreenContext::LoginScreenContext(const base::ListValue* args) { 218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Init(); 219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!args || args->GetSize() == 0) 221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return; 222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string email; 223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (args->GetString(0, &email)) 224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) email_ = email; 225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void LoginScreenContext::Init() { 228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) oobe_ui_ = false; 229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SigninScreenHandler implementation ------------------------------------------ 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SigninScreenHandler::SigninScreenHandler( 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const scoped_refptr<NetworkStateInformer>& network_state_informer, 235a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ErrorScreenActor* error_screen_actor, 236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CoreOobeActor* core_oobe_actor, 237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GaiaScreenHandler* gaia_screen_handler) 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : ui_state_(UI_STATE_UNKNOWN), 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_(NULL), 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_window_delegate_(NULL), 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_on_init_(false), 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) oobe_ui_(false), 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_account_picker_showing_first_time_(false), 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_state_informer_(network_state_informer), 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webui_visible_(false), 24690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) preferences_changed_delayed_(false), 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) error_screen_actor_(error_screen_actor), 248a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) core_oobe_actor_(core_oobe_actor), 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_first_update_state_call_(true), 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) offline_login_active_(false), 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) last_network_state_(NetworkStateInformer::UNKNOWN), 2521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) has_pending_auth_ui_(false), 253cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) caps_lock_enabled_(chromeos::input_method::InputMethodManager::Get() 254cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ->GetImeKeyboard() 255cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ->CapsLockIsEnabled()), 25646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gaia_screen_handler_(gaia_screen_handler), 2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci oobe_ui_observer_added_(false), 25846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) weak_factory_(this) { 2597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DCHECK(network_state_informer_.get()); 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(error_screen_actor_); 261a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) DCHECK(core_oobe_actor_); 262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(gaia_screen_handler_); 263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gaia_screen_handler_->SetSigninScreenHandler(this); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_state_informer_->AddObserver(this); 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registrar_.Add(this, 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::NOTIFICATION_AUTH_NEEDED, 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::AllSources()); 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registrar_.Add(this, 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::NOTIFICATION_AUTH_SUPPLIED, 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::AllSources()); 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registrar_.Add(this, 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::NOTIFICATION_AUTH_CANCELLED, 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::AllSources()); 275cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 276f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) chromeos::input_method::ImeKeyboard* keyboard = 277f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) chromeos::input_method::InputMethodManager::Get()->GetImeKeyboard(); 278f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (keyboard) 279cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) keyboard->AddObserver(this); 2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if !defined(USE_ATHENA) 2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci max_mode_delegate_.reset(new TouchViewControllerDelegate()); 2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci max_mode_delegate_->AddObserver(this); 2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) policy::ConsumerManagementService* consumer_management = 2876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) g_browser_process->platform_part()->browser_policy_connector_chromeos()-> 2886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetConsumerManagementService(); 2895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) is_enrolling_consumer_management_ = 2906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) consumer_management && 2911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci consumer_management->GetEnrollmentStage() == 2921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci policy::ConsumerManagementService::ENROLLMENT_STAGE_REQUESTED; 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SigninScreenHandler::~SigninScreenHandler() { 2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OobeUI* oobe_ui = GetOobeUI(); 2971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (oobe_ui && oobe_ui_observer_added_) 2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci oobe_ui->RemoveObserver(this); 299f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) chromeos::input_method::ImeKeyboard* keyboard = 300f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) chromeos::input_method::InputMethodManager::Get()->GetImeKeyboard(); 301f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (keyboard) 302cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) keyboard->RemoveObserver(this); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.InvalidateWeakPtrs(); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->SetWebUIHandler(NULL); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_state_informer_->RemoveObserver(this); 3071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (max_mode_delegate_) { 3081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci max_mode_delegate_->RemoveObserver(this); 3091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci max_mode_delegate_.reset(NULL); 3101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 311cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScreenlockBridge::Get()->SetLockHandler(NULL); 3121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ScreenlockBridge::Get()->SetFocusedUser(""); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::DeclareLocalizedValues( 316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LocalizedValuesBuilder* builder) { 317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("passwordHint", IDS_LOGIN_POD_EMPTY_PASSWORD_TEXT); 318e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch builder->Add("signingIn", IDS_LOGIN_POD_SIGNING_IN); 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("podMenuButtonAccessibleName", 320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_POD_MENU_BUTTON_ACCESSIBLE_NAME); 321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("podMenuRemoveItemAccessibleName", 322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_POD_MENU_REMOVE_ITEM_ACCESSIBLE_NAME); 323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("passwordFieldAccessibleName", 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_POD_PASSWORD_FIELD_ACCESSIBLE_NAME); 325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("signedIn", IDS_SCREEN_LOCK_ACTIVE_USER); 326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("signinButton", IDS_LOGIN_BUTTON); 3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) builder->Add("launchAppButton", IDS_LAUNCH_APP_BUTTON); 328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("shutDown", IDS_SHUTDOWN_BUTTON); 329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("addUser", IDS_ADD_USER_BUTTON); 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("browseAsGuest", IDS_GO_INCOGNITO_BUTTON); 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("cancel", IDS_CANCEL); 332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("signOutUser", IDS_SCREEN_LOCK_SIGN_OUT); 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("offlineLogin", IDS_OFFLINE_LOGIN_HTML); 334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("ownerUserPattern", IDS_LOGIN_POD_OWNER_USER); 335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("removeUser", IDS_LOGIN_POD_REMOVE_USER); 336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("errorTpmFailureTitle", IDS_LOGIN_ERROR_TPM_FAILURE_TITLE); 337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("errorTpmFailureReboot", IDS_LOGIN_ERROR_TPM_FAILURE_REBOOT); 338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("errorTpmFailureRebootButton", 339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_ERROR_TPM_FAILURE_REBOOT_BUTTON); 3405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) policy::BrowserPolicyConnectorChromeOS* connector = 3425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) g_browser_process->platform_part()->browser_policy_connector_chromeos(); 3435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) builder->Add("disabledAddUserTooltip", 3445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) connector->IsEnterpriseManaged() 3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ? IDS_DISABLED_ADD_USER_TOOLTIP_ENTERPRISE 3465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : IDS_DISABLED_ADD_USER_TOOLTIP); 3475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) builder->Add("supervisedUserExpiredTokenWarning", 3493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) IDS_SUPERVISED_USER_EXPIRED_TOKEN_WARNING); 350a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) builder->Add("signinBannerText", IDS_LOGIN_USER_ADDING_BANNER); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Multi-profiles related strings. 3535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) builder->Add("multiProfilesRestrictedPolicyTitle", 3545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IDS_MULTI_PROFILES_RESTRICTED_POLICY_TITLE); 3555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) builder->Add("multiProfilesNotAllowedPolicyMsg", 3565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IDS_MULTI_PROFILES_NOT_ALLOWED_POLICY_MSG); 3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) builder->Add("multiProfilesPrimaryOnlyPolicyMsg", 3585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IDS_MULTI_PROFILES_PRIMARY_ONLY_POLICY_MSG); 359f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) builder->Add("multiProfilesOwnerPrimaryOnlyMsg", 360f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IDS_MULTI_PROFILES_OWNER_PRIMARY_ONLY_MSG); 3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Strings used by password changed dialog. 363c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("passwordChangedTitle", IDS_LOGIN_PASSWORD_CHANGED_TITLE); 364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("passwordChangedDesc", IDS_LOGIN_PASSWORD_CHANGED_DESC); 365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->AddF("passwordChangedMoreInfo", 366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_PASSWORD_CHANGED_MORE_INFO, 367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_SHORT_PRODUCT_OS_NAME); 368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("oldPasswordHint", IDS_LOGIN_PASSWORD_CHANGED_OLD_PASSWORD_HINT); 370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("oldPasswordIncorrect", 371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_PASSWORD_CHANGED_INCORRECT_OLD_PASSWORD); 372c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("passwordChangedCantRemember", 373c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_PASSWORD_CHANGED_CANT_REMEMBER); 374c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("passwordChangedBackButton", 375c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_PASSWORD_CHANGED_BACK_BUTTON); 376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("passwordChangedsOkButton", IDS_OK); 377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("passwordChangedProceedAnyway", 378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_PASSWORD_CHANGED_PROCEED_ANYWAY); 379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("proceedAnywayButton", 380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_PASSWORD_CHANGED_PROCEED_ANYWAY_BUTTON); 381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("publicAccountInfoFormat", IDS_LOGIN_PUBLIC_ACCOUNT_INFO_FORMAT); 382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("publicAccountReminder", 383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_PUBLIC_ACCOUNT_SIGNOUT_REMINDER); 3845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) builder->Add("publicSessionLanguageAndInput", 3855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) IDS_LOGIN_PUBLIC_SESSION_LANGUAGE_AND_INPUT); 386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("publicAccountEnter", IDS_LOGIN_PUBLIC_ACCOUNT_ENTER); 387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("publicAccountEnterAccessibleName", 388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_PUBLIC_ACCOUNT_ENTER_ACCESSIBLE_NAME); 3895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) builder->Add("publicSessionSelectLanguage", IDS_LANGUAGE_SELECTION_SELECT); 3905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) builder->Add("publicSessionSelectKeyboard", IDS_KEYBOARD_SELECTION_SELECT); 39146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) builder->Add("removeUserWarningText", 39246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::string16()); 39346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) builder->AddF("removeSupervisedUserWarningText", 39446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) IDS_LOGIN_POD_SUPERVISED_USER_REMOVE_WARNING, 3955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16(chrome::kSupervisedUserManagementDisplayURL)); 396a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) builder->Add("removeUserWarningButtonTitle", 397a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) IDS_LOGIN_POD_USER_REMOVE_WARNING_BUTTON); 398c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) builder->Add("samlNotice", IDS_LOGIN_SAML_NOTICE); 4005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 401d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) builder->Add("confirmPasswordTitle", IDS_LOGIN_CONFIRM_PASSWORD_TITLE); 4025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) builder->Add("confirmPasswordLabel", IDS_LOGIN_CONFIRM_PASSWORD_LABEL); 403d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) builder->Add("confirmPasswordConfirmButton", 404d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) IDS_LOGIN_CONFIRM_PASSWORD_CONFIRM_BUTTON); 4055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) builder->Add("confirmPasswordText", IDS_LOGIN_CONFIRM_PASSWORD_TEXT); 4065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) builder->Add("confirmPasswordErrorText", 4075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IDS_LOGIN_CONFIRM_PASSWORD_ERROR_TEXT); 408d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 409effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch builder->Add("fatalEnrollmentError", 410effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch IDS_ENTERPRISE_ENROLLMENT_AUTH_FATAL_ERROR); 411010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) builder->Add("insecureURLEnrollmentError", 412010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) IDS_ENTERPRISE_ENROLLMENT_AUTH_INSECURE_URL_ERROR); 413effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (chromeos::KioskModeSettings::Get()->IsKioskModeEnabled()) 415868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) builder->Add("demoLoginMessage", IDS_KIOSK_MODE_LOGIN_MESSAGE); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 418f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void SigninScreenHandler::Show(const LoginScreenContext& context) { 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(delegate_); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 421f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Just initialize internal fields from context and call ShowImpl(). 422f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) oobe_ui_ = context.oobe_ui(); 4235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string email; 4255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (is_enrolling_consumer_management_) { 4266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // We don't check if the value of the owner e-mail is trusted because it is 4276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // only used to pre-fill the e-mail field in Gaia sign-in page and a cached 4285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // value is sufficient. 4295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CrosSettings::Get()->GetString(kDeviceOwner, &email); 4305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 4315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) email = context.email(); 4325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 4335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gaia_screen_handler_->PopulateEmail(email); 434f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ShowImpl(); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::ShowRetailModeLoginSpinner() { 438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallJS("showLoginSpinner"); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::SetDelegate(SigninScreenHandlerDelegate* delegate) { 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_ = delegate; 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->SetWebUIHandler(this); 445a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) else 446a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) auto_enrollment_progress_subscription_.reset(); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::SetNativeWindowDelegate( 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeWindowDelegate* native_window_delegate) { 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_window_delegate_ = native_window_delegate; 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::OnNetworkReady() { 455116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch VLOG(1) << "OnNetworkReady() call."; 45646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DCHECK(gaia_screen_handler_); 45746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gaia_screen_handler_->MaybePreloadAuthExtension(); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 460ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid SigninScreenHandler::UpdateState(ErrorScreenActor::ErrorReason reason) { 461ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch UpdateStateInternal(reason, false); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid SigninScreenHandler::SetFocusPODCallbackForTesting( 4651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Closure callback) { 4661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_focus_pod_callback_ = callback; 4671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 4681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SigninScreenHandler, private: ----------------------------------------------- 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 471f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void SigninScreenHandler::ShowImpl() { 472f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!page_is_ready()) { 473f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) show_on_init_ = true; 474f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return; 475f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 476f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 4771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!ime_state_.get()) 4781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ime_state_ = input_method::InputMethodManager::Get()->GetActiveIMEState(); 4791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!oobe_ui_observer_added_) { 4811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci oobe_ui_observer_added_ = true; 4821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetOobeUI()->AddObserver(this); 4831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 4841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (oobe_ui_ || is_enrolling_consumer_management_) { 486f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Shows new user sign-in for OOBE. 48746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) OnShowAddUser(); 488f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else { 489f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Populates account picker. Animation is turned off for now until we 490f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // figure out how to make it fast enough. 49146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) delegate_->HandleGetUsers(); 492f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 493f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Reset Caps Lock state when login screen is shown. 494a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch input_method::InputMethodManager::Get() 495a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ->GetImeKeyboard() 496a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ->SetCapsLockEnabled(false); 497f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 4985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue params; 499f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) params.SetBoolean("disableAddUser", AllWhitelistedUsersPresent()); 500f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UpdateUIState(UI_STATE_ACCOUNT_PICKER, ¶ms); 501f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 502f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 503f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::UpdateUIState(UIState ui_state, 5055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* params) { 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (ui_state) { 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case UI_STATE_GAIA_SIGNIN: 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_state_ = UI_STATE_GAIA_SIGNIN; 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowScreen(OobeUI::kScreenGaiaSignin, params); 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case UI_STATE_ACCOUNT_PICKER: 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_state_ = UI_STATE_ACCOUNT_PICKER; 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowScreen(OobeUI::kScreenAccountPicker, params); 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default: 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// TODO(ygorshenin@): split this method into small parts. 5226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// TODO(ygorshenin@): move this logic to GaiaScreenHandler. 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::UpdateStateInternal( 524a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ErrorScreenActor::ErrorReason reason, 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool force_update) { 526a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Do nothing once user has signed in or sign in is in progress. 527a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // TODO(ygorshenin): We will end up here when processing network state 528a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // notification but no ShowSigninScreen() was called so delegate_ will be 529a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // NULL. Network state processing logic does not belong here. 530a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (delegate_ && 531a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) (delegate_->IsUserSigninCompleted() || delegate_->IsSigninInProgress())) { 532a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return; 533a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 534a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 535ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch NetworkStateInformer::State state = network_state_informer_->state(); 536ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string network_path = network_state_informer_->network_path(); 537ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string network_name = GetNetworkName(network_path); 538a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Skip "update" notification about OFFLINE state from 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // NetworkStateInformer if previous notification already was 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // delayed. 542ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if ((state == NetworkStateInformer::OFFLINE || has_pending_auth_ui_) && 543f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) !force_update && !update_state_closure_.IsCancelled()) { 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) update_state_closure_.Cancel(); 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 549ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if ((state == NetworkStateInformer::OFFLINE && !force_update) || 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) has_pending_auth_ui_) { 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) update_state_closure_.Reset( 552f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&SigninScreenHandler::UpdateStateInternal, 553f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) weak_factory_.GetWeakPtr(), 554f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) reason, 555f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) true)); 55690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->PostDelayedTask( 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FROM_HERE, 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) update_state_closure_.callback(), 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta::FromSeconds(kOfflineTimeoutSec)); 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Don't show or hide error screen if we're in connecting state. 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (state == NetworkStateInformer::CONNECTING && !force_update) { 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (connecting_closure_.IsCancelled()) { 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // First notification about CONNECTING state. 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) connecting_closure_.Reset( 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&SigninScreenHandler::UpdateStateInternal, 569f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) weak_factory_.GetWeakPtr(), 570f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) reason, 571f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) true)); 57290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->PostDelayedTask( 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FROM_HERE, 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) connecting_closure_.callback(), 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta::FromSeconds(kConnectingTimeoutSec)); 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) connecting_closure_.Cancel(); 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 581a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const bool is_online = IsOnline(state, reason); 5825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const bool is_behind_captive_portal = IsBehindCaptivePortal(state, reason); 583a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const bool is_gaia_loading_timeout = 584a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) (reason == ErrorScreenActor::ERROR_REASON_LOADING_TIMEOUT); 585f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const bool is_gaia_error = 586f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FrameError() != net::OK && FrameError() != net::ERR_NETWORK_CHANGED; 587a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const bool is_gaia_signin = IsGaiaVisible() || IsGaiaHiddenByError(); 588a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const bool error_screen_should_overlay = 589a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) !offline_login_active_ && IsGaiaVisible(); 590a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const bool from_not_online_to_online_transition = 591a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) is_online && last_network_state_ != NetworkStateInformer::ONLINE; 592a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) last_network_state_ = state; 593a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 5945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CallOnReturn reload_gaia(base::Bind( 5955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &SigninScreenHandler::ReloadGaia, weak_factory_.GetWeakPtr(), true)); 5965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (is_online || !is_behind_captive_portal) 598a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) error_screen_actor_->HideCaptivePortal(); 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 600a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Hide offline message (if needed) and return if current screen is 601a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // not a Gaia frame. 602a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (!is_gaia_signin) { 603a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (!IsSigninScreenHiddenByError()) 604a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) HideOfflineMessage(state, reason); 605a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return; 606a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 607a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 608a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Reload frame if network state is changed from {!ONLINE} -> ONLINE state. 609a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (reason == ErrorScreenActor::ERROR_REASON_NETWORK_STATE_CHANGED && 610a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) from_not_online_to_online_transition) { 6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Schedules a immediate retry. 6125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LOG(WARNING) << "Retry frame load since network has been changed."; 6135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) reload_gaia.ScheduleCall(); 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 616a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (reason == ErrorScreenActor::ERROR_REASON_PROXY_CONFIG_CHANGED && 617a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) error_screen_should_overlay) { 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Schedules a immediate retry. 6195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LOG(WARNING) << "Retry frameload since proxy settings has been changed."; 6205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) reload_gaia.ScheduleCall(); 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 623ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (reason == ErrorScreenActor::ERROR_REASON_FRAME_ERROR && 624f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) !IsProxyError(state, reason, FrameError())) { 6255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LOG(WARNING) << "Retry frame load due to reason: " 626f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) << ErrorScreenActor::ErrorReasonString(reason); 6275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) reload_gaia.ScheduleCall(); 6285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 6295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (is_gaia_loading_timeout) { 6315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LOG(WARNING) << "Retry frame load due to loading timeout."; 6325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) reload_gaia.ScheduleCall(); 633c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 634c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 635a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if ((!is_online || is_gaia_loading_timeout || is_gaia_error) && 6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !offline_login_active_) { 637a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SetupAndShowOfflineMessage(state, reason); 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 639a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) HideOfflineMessage(state, reason); 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::SetupAndShowOfflineMessage( 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateInformer:: State state, 645a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ErrorScreenActor::ErrorReason reason) { 646ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string network_path = network_state_informer_->network_path(); 6475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const bool is_behind_captive_portal = IsBehindCaptivePortal(state, reason); 648f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const bool is_proxy_error = IsProxyError(state, reason, FrameError()); 649a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const bool is_gaia_loading_timeout = 650a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) (reason == ErrorScreenActor::ERROR_REASON_LOADING_TIMEOUT); 651a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (is_proxy_error) { 653c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_screen_actor_->SetErrorState(ErrorScreen::ERROR_STATE_PROXY, 654c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()); 6555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else if (is_behind_captive_portal) { 6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Do not bother a user with obsessive captive portal showing. This 6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // check makes captive portal being shown only once: either when error 6582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // screen is shown for the first time or when switching from another 6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // error screen (offline, proxy). 660a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (IsGaiaVisible() || 661c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) (error_screen_actor_->error_state() != 662c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ErrorScreen::ERROR_STATE_PORTAL)) { 6632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) error_screen_actor_->FixCaptivePortal(); 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 665ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string network_name = GetNetworkName(network_path); 666c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_screen_actor_->SetErrorState(ErrorScreen::ERROR_STATE_PORTAL, 667c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) network_name); 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (is_gaia_loading_timeout) { 669c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_screen_actor_->SetErrorState( 670c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ErrorScreen::ERROR_STATE_AUTH_EXT_TIMEOUT, std::string()); 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 672c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_screen_actor_->SetErrorState(ErrorScreen::ERROR_STATE_OFFLINE, 673c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()); 6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 676a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const bool guest_signin_allowed = IsGuestSigninAllowed() && 677c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IsSigninScreenError(error_screen_actor_->error_state()); 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) error_screen_actor_->AllowGuestSignin(guest_signin_allowed); 6792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 680a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const bool offline_login_allowed = IsOfflineLoginAllowed() && 681c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IsSigninScreenError(error_screen_actor_->error_state()) && 682c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_screen_actor_->error_state() != 683c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ErrorScreen::ERROR_STATE_AUTH_EXT_TIMEOUT; 6842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) error_screen_actor_->AllowOfflineLogin(offline_login_allowed); 6852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (GetCurrentScreen() != OobeUI::SCREEN_ERROR_MESSAGE) { 6875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue params; 688ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string network_type = network_state_informer_->network_type(); 689ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch params.SetString("lastNetworkType", network_type); 690c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_screen_actor_->SetUIState(ErrorScreen::UI_STATE_SIGNIN); 6912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) error_screen_actor_->Show(OobeUI::SCREEN_GAIA_SIGNIN, ¶ms); 6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 695a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void SigninScreenHandler::HideOfflineMessage( 696a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) NetworkStateInformer::State state, 697a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ErrorScreenActor::ErrorReason reason) { 698c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!IsSigninScreenHiddenByError()) 699c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 700a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 701c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_screen_actor_->Hide(); 702c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 703c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Forces a reload for Gaia screen on hiding error message. 704a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (IsGaiaVisible() || IsGaiaHiddenByError()) 7055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ReloadGaia(false); 7062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SigninScreenHandler::ReloadGaia(bool force_reload) { 7095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gaia_screen_handler_->ReloadGaia(force_reload); 7102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::Initialize() { 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If delegate_ is NULL here (e.g. WebUIScreenLocker has been destroyed), 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // don't do anything, just return. 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!delegate_) 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (show_on_init_) { 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_on_init_ = false; 720f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ShowImpl(); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::NativeWindow SigninScreenHandler::GetNativeWindow() { 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (native_window_delegate_) 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return native_window_delegate_->GetNativeWindow(); 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::RegisterMessages() { 731c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("authenticateUser", &SigninScreenHandler::HandleAuthenticateUser); 732cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AddCallback("attemptUnlock", &SigninScreenHandler::HandleAttemptUnlock); 733c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("getUsers", &SigninScreenHandler::HandleGetUsers); 734c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("launchDemoUser", &SigninScreenHandler::HandleLaunchDemoUser); 735c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("launchIncognito", &SigninScreenHandler::HandleLaunchIncognito); 7365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AddCallback("showSupervisedUserCreationScreen", 7375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &SigninScreenHandler::HandleShowSupervisedUserCreationScreen); 7385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AddCallback("launchPublicSession", 7395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &SigninScreenHandler::HandleLaunchPublicSession); 740c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddRawCallback("offlineLogin", &SigninScreenHandler::HandleOfflineLogin); 741c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("rebootSystem", &SigninScreenHandler::HandleRebootSystem); 742c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddRawCallback("showAddUser", &SigninScreenHandler::HandleShowAddUser); 743c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("shutdownSystem", &SigninScreenHandler::HandleShutdownSystem); 744c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("loadWallpaper", &SigninScreenHandler::HandleLoadWallpaper); 745c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("removeUser", &SigninScreenHandler::HandleRemoveUser); 746c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("toggleEnrollmentScreen", 747c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleToggleEnrollmentScreen); 7487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AddCallback("toggleKioskEnableScreen", 7497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) &SigninScreenHandler::HandleToggleKioskEnableScreen); 750c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("createAccount", &SigninScreenHandler::HandleCreateAccount); 751c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("accountPickerReady", 752c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleAccountPickerReady); 753c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("wallpaperReady", &SigninScreenHandler::HandleWallpaperReady); 754c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("signOutUser", &SigninScreenHandler::HandleSignOutUser); 755c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("openProxySettings", 756c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleOpenProxySettings); 757c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("loginVisible", &SigninScreenHandler::HandleLoginVisible); 758c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("cancelPasswordChangedFlow", 759c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleCancelPasswordChangedFlow); 760868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AddCallback("cancelUserAdding", 761868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) &SigninScreenHandler::HandleCancelUserAdding); 762c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("migrateUserData", &SigninScreenHandler::HandleMigrateUserData); 763c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("resyncUserData", &SigninScreenHandler::HandleResyncUserData); 764c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("loginUIStateChanged", 765c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleLoginUIStateChanged); 766c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("unlockOnLoginSuccess", 767c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleUnlockOnLoginSuccess); 768c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("showLoadingTimeoutError", 769c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleShowLoadingTimeoutError); 770c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("updateOfflineLogin", 771c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleUpdateOfflineLogin); 7723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) AddCallback("focusPod", &SigninScreenHandler::HandleFocusPod); 77303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) AddCallback("hardlockPod", &SigninScreenHandler::HandleHardlockPod); 7745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddCallback("retrieveAuthenticatedUserEmail", 7755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &SigninScreenHandler::HandleRetrieveAuthenticatedUserEmail); 7765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AddCallback("getPublicSessionKeyboardLayouts", 7775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &SigninScreenHandler::HandleGetPublicSessionKeyboardLayouts); 7785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AddCallback("cancelConsumerManagementEnrollment", 7795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &SigninScreenHandler::HandleCancelConsumerManagementEnrollment); 7801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AddCallback("getTouchViewState", 7811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &SigninScreenHandler::HandleGetTouchViewState); 7825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 7843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // This message is sent by the kiosk app menu, but is handled here 7853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // so we can tell the delegate to launch the app. 7863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) AddCallback("launchKioskApp", &SigninScreenHandler::HandleLaunchKioskApp); 787c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 788c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 789a3f7b4e666c476898878fa745f637129375cd889Ben Murdochvoid SigninScreenHandler::RegisterPrefs(PrefRegistrySimple* registry) { 790a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch registry->RegisterDictionaryPref(prefs::kUsersLRUInputMethod); 791a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch} 792a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 7931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid SigninScreenHandler::OnCurrentScreenChanged(OobeUI::Screen current_screen, 7941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OobeUI::Screen new_screen) { 7951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (new_screen == OobeUI::SCREEN_ACCOUNT_PICKER) { 7961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Restore active IME state if returning to user pod row screen. 7971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci input_method::InputMethodManager::Get()->SetState(ime_state_); 7981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 7991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 8001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistd::string SigninScreenHandler::GetUserLRUInputMethod( 8021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& username) const { 8031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefService* const local_state = g_browser_process->local_state(); 8041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::DictionaryValue* users_lru_input_methods = 8051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci local_state->GetDictionary(prefs::kUsersLRUInputMethod); 8061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (users_lru_input_methods == NULL) { 8081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DLOG(WARNING) << "GetUserLRUInputMethod('" << username 8091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci << "'): no kUsersLRUInputMethod"; 8101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return std::string(); 8111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 8121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string input_method; 8141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!users_lru_input_methods->GetStringWithoutPathExpansion(username, 8161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &input_method)) { 8171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DVLOG(0) << "GetUserLRUInputMethod('" << username 8181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci << "'): no input method for this user"; 8191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return std::string(); 8201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 8211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return input_method; 8231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 8241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 825c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleGetUsers() { 82646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (delegate_) 82746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) delegate_->HandleGetUsers(); 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::ClearAndEnablePassword() { 831a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) core_oobe_actor_->ResetSignInUI(false); 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::ClearUserPodPassword() { 835a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) core_oobe_actor_->ClearUserPodPassword(); 8362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 83890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void SigninScreenHandler::RefocusCurrentPod() { 839a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) core_oobe_actor_->RefocusCurrentPod(); 84090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 84190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::OnUserRemoved(const std::string& username) { 843f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CallJS("login.AccountPickerScreen.removeUser", username); 84423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (delegate_->GetUsers().empty()) 84546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) OnShowAddUser(); 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SigninScreenHandler::OnUserImageChanged(const user_manager::User& user) { 849c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (page_is_ready()) 850c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallJS("login.AccountPickerScreen.updateUserImage", user.email()); 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::OnPreferencesChanged() { 85490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Make sure that one of the login UI is fully functional now, otherwise 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // preferences update would be picked up next time it will be shown. 85690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!webui_visible_) { 85790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) LOG(WARNING) << "Login UI is not active - postponed prefs change."; 85890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) preferences_changed_delayed_ = true; 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_ && !delegate_->IsShowUsers()) { 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HandleShowAddUser(NULL); 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 86546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (delegate_) 86646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) delegate_->HandleGetUsers(); 8672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateUIState(UI_STATE_ACCOUNT_PICKER, NULL); 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 86990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) preferences_changed_delayed_ = false; 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::ResetSigninScreenHandlerDelegate() { 8732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetDelegate(NULL); 8742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::ShowError(int login_attempts, 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& error_text, 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& help_link_text, 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HelpAppLauncher::HelpTopic help_topic_id) { 880a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) core_oobe_actor_->ShowSignInError(login_attempts, error_text, help_link_text, 881a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) help_topic_id); 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::ShowErrorScreen(LoginDisplay::SigninError error_id) { 8852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (error_id) { 8862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case LoginDisplay::TPM_ERROR: 887a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) core_oobe_actor_->ShowTpmError(); 8882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 8892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default: 8902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED() << "Unknown sign in error"; 8912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 8922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::ShowSigninUI(const std::string& email) { 896424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) core_oobe_actor_->ShowSignInUI(email); 8972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::ShowGaiaPasswordChanged(const std::string& username) { 90046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gaia_screen_handler_->PasswordChangedFor(username); 90146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gaia_screen_handler_->PopulateEmail(username); 90246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) core_oobe_actor_->ShowSignInUI(username); 903a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CallJS("login.setAuthType", 904a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) username, 905cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static_cast<int>(ONLINE_SIGN_IN), 906a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::StringValue("")); 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::ShowPasswordChangedDialog(bool show_password_error) { 910a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) core_oobe_actor_->ShowPasswordChangedScreen(show_password_error); 9112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::ShowSigninScreenForCreds( 9142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& username, 9152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& password) { 91646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DCHECK(gaia_screen_handler_); 91746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gaia_screen_handler_->ShowSigninScreenForCreds(username, password); 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SigninScreenHandler::SetPublicSessionDisplayName( 9215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& user_id, 9225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& display_name) { 9235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CallJS("login.AccountPickerScreen.setPublicSessionDisplayName", 9245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) user_id, 9255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) display_name); 9265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 9275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SigninScreenHandler::SetPublicSessionLocales( 9295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& user_id, 9305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<base::ListValue> locales, 9315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& default_locale, 9325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool multipleRecommendedLocales) { 9335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CallJS("login.AccountPickerScreen.setPublicSessionLocales", 9345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) user_id, 9355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *locales, 9365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) default_locale, 9375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) multipleRecommendedLocales); 9385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 9395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::Observe(int type, 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) { 9432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (type) { 9442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case chrome::NOTIFICATION_AUTH_NEEDED: { 9452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) has_pending_auth_ui_ = true; 9462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 9472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 9482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case chrome::NOTIFICATION_AUTH_SUPPLIED: 9492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) has_pending_auth_ui_ = false; 950010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Reload auth extension as proxy credentials are supplied. 951010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (!IsSigninScreenHiddenByError() && ui_state_ == UI_STATE_GAIA_SIGNIN) 9525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ReloadGaia(true); 953010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) update_state_closure_.Cancel(); 9542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 9552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case chrome::NOTIFICATION_AUTH_CANCELLED: { 9562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Don't reload auth extension if proxy auth dialog was cancelled. 9572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) has_pending_auth_ui_ = false; 958010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) update_state_closure_.Cancel(); 9592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 9602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 9612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default: 9622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED() << "Unexpected notification " << type; 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void SigninScreenHandler::ShowBannerMessage(const base::string16& message) { 967cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CallJS("login.AccountPickerScreen.showBannerMessage", message); 968cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 969cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 970cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void SigninScreenHandler::ShowUserPodCustomIcon( 971cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string& username, 9726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const ScreenlockBridge::UserPodCustomIconOptions& icon_options) { 9736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_ptr<base::DictionaryValue> icon = icon_options.ToDictionaryValue(); 9746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (!icon || icon->empty()) 9756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return; 9766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) CallJS("login.AccountPickerScreen.showUserPodCustomIcon", username, *icon); 977cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 978cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 979cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void SigninScreenHandler::HideUserPodCustomIcon(const std::string& username) { 980cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CallJS("login.AccountPickerScreen.hideUserPodCustomIcon", username); 981cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 982cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 983cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void SigninScreenHandler::EnableInput() { 984cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Only for lock screen at the moment. 985cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScreenLocker::default_screen_locker()->EnableInput(); 986cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 987cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 988cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void SigninScreenHandler::SetAuthType( 989cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string& username, 990cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScreenlockBridge::LockHandler::AuthType auth_type, 9916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const base::string16& initial_value) { 99203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (delegate_->GetAuthType(username) == 99303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ScreenlockBridge::LockHandler::FORCE_OFFLINE_PASSWORD) 99403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return; 99503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 99646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) delegate_->SetAuthType(username, auth_type); 99746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 998cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CallJS("login.AccountPickerScreen.setAuthType", 999cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) username, 1000cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static_cast<int>(auth_type), 1001cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::StringValue(initial_value)); 1002cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1003cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1004cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)ScreenlockBridge::LockHandler::AuthType SigninScreenHandler::GetAuthType( 1005cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string& username) const { 100646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return delegate_->GetAuthType(username); 1007cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1008cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1009cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void SigninScreenHandler::Unlock(const std::string& user_email) { 1010cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(ScreenLocker::default_screen_locker()); 1011cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScreenLocker::Hide(); 1012cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1013cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 10141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid SigninScreenHandler::AttemptEasySignin(const std::string& user_email, 10151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& secret, 10161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& key_label) { 10171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(!ScreenLocker::default_screen_locker()); 10181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!delegate_) 10191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 10201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserContext user_context(user_email); 10221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci user_context.SetAuthFlow(UserContext::AUTH_FLOW_EASY_UNLOCK); 10231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci user_context.SetKey(Key(secret)); 10241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci user_context.GetKey()->SetLabel(key_label); 10251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(tbarzic): Handle empty secret. The delegate will end up ignoring login 10271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // attempt if the key is not set, and the UI will remain disabled. 10281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(!secret.empty()); 10291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_->Login(user_context, SigninSpecifics()); 10311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 10321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid SigninScreenHandler::OnMaximizeModeStarted() { 10341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CallJS("login.AccountPickerScreen.setTouchViewState", true); 10351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 10361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid SigninScreenHandler::OnMaximizeModeEnded() { 10381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CallJS("login.AccountPickerScreen.setTouchViewState", false); 10391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 10401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 104146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)bool SigninScreenHandler::ShouldLoadGaia() const { 104246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Fetching of the extension is not started before account picker page is 104346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // loaded because it can affect the loading speed. 104446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Do not load the extension for the screen locker, see crosbug.com/25018. 104546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return !ScreenLocker::default_screen_locker() && 104646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) is_account_picker_showing_first_time_; 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1049a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch// Update keyboard layout to least recently used by the user. 10501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid SigninScreenHandler::SetUserInputMethod( 10511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& username, 10521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci input_method::InputMethodManager::State* ime_state) { 10531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool succeed = false; 1054d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 10551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string input_method = GetUserLRUInputMethod(username); 1056a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 10571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!input_method.empty()) 10581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci succeed = SetUserInputMethodImpl(username, input_method, ime_state); 1059a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 1060a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // This is also a case when LRU layout is set only for a few local users, 1061a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // thus others need to be switched to default locale. 1062a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // Otherwise they will end up using another user's locale to log in. 1063a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch if (!succeed) { 1064f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DVLOG(0) << "SetUserInputMethod('" << username 1065424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) << "'): failed to set user layout. Switching to default."; 1066a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 10671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ime_state->SetInputMethodLoginDefault(); 1068a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch } 1069a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch} 1070a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 107268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void SigninScreenHandler::UserSettingsChanged() { 1073f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(gaia_screen_handler_); 1074f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GaiaContext context; 1075f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (delegate_) 107623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) context.has_users = !delegate_->GetUsers().empty(); 1077f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gaia_screen_handler_->UpdateGaia(context); 107868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) UpdateAddButtonStatus(); 107968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 108068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::UpdateAddButtonStatus() { 1082c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallJS("cr.ui.login.DisplayManager.updateAddUserButtonStatus", 1083c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AllWhitelistedUsersPresent()); 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1086c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleAuthenticateUser(const std::string& username, 1087c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& password) { 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!delegate_) 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1090cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) UserContext user_context(username); 1091cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) user_context.SetKey(Key(password)); 1092116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delegate_->Login(user_context, SigninSpecifics()); 1093cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1094cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1095cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void SigninScreenHandler::HandleAttemptUnlock(const std::string& username) { 109634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) EasyUnlockService* service = GetEasyUnlockServiceForUser(username); 109734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) if (!service) 1098cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 109934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) service->AttemptAuth(username); 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleLaunchDemoUser() { 1103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UserContext context(user_manager::USER_TYPE_RETAIL_MODE, std::string()); 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 1105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delegate_->Login(context, SigninSpecifics()); 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleLaunchIncognito() { 1109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UserContext context(user_manager::USER_TYPE_GUEST, std::string()); 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 1111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delegate_->Login(context, SigninSpecifics()); 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SigninScreenHandler::HandleShowSupervisedUserCreationScreen() { 11156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (!user_manager::UserManager::Get()->AreSupervisedUsersAllowed()) { 1116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch LOG(ERROR) << "Managed users not allowed."; 1117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 1118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 11195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::DictionaryValue> params(new base::DictionaryValue()); 1120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoginDisplayHostImpl::default_host()-> 11215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) StartWizard(WizardController::kSupervisedUserCreationScreenName, 1122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) params.Pass()); 11232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SigninScreenHandler::HandleLaunchPublicSession( 11265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& user_id, 11275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& locale, 11285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& input_method) { 11295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!delegate_) 11305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return; 11315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 11325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) UserContext context(user_manager::USER_TYPE_PUBLIC_ACCOUNT, user_id); 11335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) context.SetPublicSessionLocale(locale), 11345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) context.SetPublicSessionInputMethod(input_method); 11355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) delegate_->Login(context, SigninSpecifics()); 11362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::HandleOfflineLogin(const base::ListValue* args) { 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!delegate_ || delegate_->IsShowUsers()) { 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 114346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string email; 114446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) args->GetString(0, &email); 114546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 114646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gaia_screen_handler_->PopulateEmail(email); 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load auth extension. Parameters are: force reload, do not load extension in 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // background, use offline version. 114946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gaia_screen_handler_->LoadAuthExtension(true, false, true); 11502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateUIState(UI_STATE_GAIA_SIGNIN, NULL); 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleShutdownSystem() { 1154868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ash::Shell::GetInstance()->lock_state_controller()->RequestShutdown(); 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleLoadWallpaper(const std::string& email) { 1158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (delegate_) 1159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_->LoadWallpaper(email); 1160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleRebootSystem() { 1163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(); 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleRemoveUser(const std::string& email) { 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!delegate_) 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->RemoveUser(email); 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateAddButtonStatus(); 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::HandleShowAddUser(const base::ListValue* args) { 1174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TRACE_EVENT_ASYNC_STEP_INTO0("ui", 1175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "ShowLoginWebUI", 1176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) LoginDisplayHostImpl::kShowLoginWebUIid, 1177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "ShowAddUser"); 1178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string email; 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |args| can be null if it's OOBE. 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (args) 1181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) args->GetString(0, &email); 118246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gaia_screen_handler_->PopulateEmail(email); 118346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) OnShowAddUser(); 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleToggleEnrollmentScreen() { 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->ShowEnterpriseEnrollmentScreen(); 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void SigninScreenHandler::HandleToggleKioskEnableScreen() { 11925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) policy::BrowserPolicyConnectorChromeOS* connector = 11935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) g_browser_process->platform_part()->browser_policy_connector_chromeos(); 11947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (delegate_ && 1195a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) !auto_enrollment_progress_subscription_ && 119623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) !connector->IsEnterpriseManaged() && 119723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) LoginDisplayHostImpl::default_host()) { 1198effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AutoEnrollmentController* auto_enrollment_controller = 1199effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch LoginDisplayHostImpl::default_host()->GetAutoEnrollmentController(); 1200a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) auto_enrollment_progress_subscription_ = 1201effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch auto_enrollment_controller->RegisterProgressCallback( 1202effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::Bind(&SigninScreenHandler::ContinueKioskEnableFlow, 1203effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch weak_factory_.GetWeakPtr())); 1204effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ContinueKioskEnableFlow(auto_enrollment_controller->state()); 12057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 12067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 12077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1208868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void SigninScreenHandler::HandleToggleKioskAutolaunchScreen() { 12095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) policy::BrowserPolicyConnectorChromeOS* connector = 12105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) g_browser_process->platform_part()->browser_policy_connector_chromeos(); 12115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (delegate_ && !connector->IsEnterpriseManaged()) 1212868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) delegate_->ShowKioskAutolaunchScreen(); 1213868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 1214868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 121546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void SigninScreenHandler::LoadUsers(const base::ListValue& users_list, 121646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bool showGuest) { 121746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) CallJS("login.AccountPickerScreen.loadUsers", 121846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) users_list, 1219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_->IsShowGuest()); 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleAccountPickerReady() { 1223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) VLOG(0) << "Login WebUI >> AccountPickerReady"; 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_ && !ScreenLocker::default_screen_locker() && 12262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !chromeos::IsMachineHWIDCorrect() && 12272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !oobe_ui_) { 12282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->ShowWrongHWIDScreen(); 12292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 12302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs = g_browser_process->local_state(); 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prefs->GetBoolean(prefs::kFactoryResetRequested)) { 1234f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (core_oobe_actor_) { 12350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch core_oobe_actor_->ShowDeviceResetScreen(); 1236f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return; 1237f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_account_picker_showing_first_time_ = true; 124146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gaia_screen_handler_->MaybePreloadAuthExtension(); 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 124329b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch ScreenlockBridge::Get()->SetLockHandler(this); 1244cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (ScreenLocker::default_screen_locker()) { 12453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ScreenLocker::default_screen_locker()->delegate()->OnLockWebUIReady(); 1246cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 12472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 12492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->OnSigninScreenReady(); 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleWallpaperReady() { 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ScreenLocker::default_screen_locker()) { 12543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ScreenLocker::default_screen_locker()->delegate()-> 12553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) OnLockBackgroundDisplayed(); 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleSignOutUser() { 12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->Signout(); 12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleCreateAccount() { 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->CreateAccount(); 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleOpenProxySettings() { 1270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoginDisplayHostImpl::default_host()->OpenProxySettings(); 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleLoginVisible(const std::string& source) { 1274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch VLOG(1) << "Login WebUI >> loginVisible, src: " << source << ", " 1275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch << "webui_visible_: " << webui_visible_; 12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!webui_visible_) { 12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There might be multiple messages from OOBE UI so send notifications after 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the first one only. 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 1280a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE, 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources(), 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 1283ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch TRACE_EVENT_ASYNC_END0( 1284ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "ui", "ShowLoginWebUI", LoginDisplayHostImpl::kShowLoginWebUIid); 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webui_visible_ = true; 128790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (preferences_changed_delayed_) 128890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) OnPreferencesChanged(); 12892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 12902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleCancelPasswordChangedFlow() { 129246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gaia_screen_handler_->StartClearingCookies( 129346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::Bind(&SigninScreenHandler::CancelPasswordChangedFlowInternal, 129446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) weak_factory_.GetWeakPtr())); 12952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 12962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1297868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void SigninScreenHandler::HandleCancelUserAdding() { 1298868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (delegate_) 1299868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) delegate_->CancelUserAdding(); 1300868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 1301868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleMigrateUserData( 1303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& old_password) { 13042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 13052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->MigrateUserData(old_password); 13062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleResyncUserData() { 13092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 13102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->ResyncUserData(); 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleLoginUIStateChanged(const std::string& source, 1314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool new_value) { 1315f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) VLOG(0) << "Login WebUI >> active: " << new_value << ", " 131690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) << "source: " << source; 131790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1318868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!KioskAppManager::Get()->GetAutoLaunchApp().empty() && 1319868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) KioskAppManager::Get()->IsAutoLaunchRequested()) { 1320f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) VLOG(0) << "Showing auto-launch warning"; 13214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // On slow devices, the wallpaper animation is not shown initially, so we 13224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // must explicitly load the wallpaper. This is also the case for the 13234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // account-picker and gaia-signin UI states. 13244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) delegate_->LoadSigninWallpaper(); 1325868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) HandleToggleKioskAutolaunchScreen(); 1326868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return; 1327868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 1328868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 13292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (source == kSourceGaiaSignin) { 13302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_state_ = UI_STATE_GAIA_SIGNIN; 13312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (source == kSourceAccountPicker) { 13322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_state_ = UI_STATE_ACCOUNT_PICKER; 13332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 13342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 13352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 13362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleUnlockOnLoginSuccess() { 13406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK(user_manager::UserManager::Get()->IsUserLoggedIn()); 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ScreenLocker::default_screen_locker()) 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScreenLocker::default_screen_locker()->UnlockOnLoginSuccess(); 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleShowLoadingTimeoutError() { 1346ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch UpdateState(ErrorScreenActor::ERROR_REASON_LOADING_TIMEOUT); 13472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleUpdateOfflineLogin(bool offline_login_active) { 13502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) offline_login_active_ = offline_login_active; 13512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void SigninScreenHandler::HandleFocusPod(const std::string& user_id) { 13541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetUserInputMethod(user_id, ime_state_.get()); 13551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if !defined(USE_ATHENA) 13561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(dpolukhin): crbug.com/408734. 13575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WallpaperManager::Get()->SetUserWallpaperDelayed(user_id); 13581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 13591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ScreenlockBridge::Get()->SetFocusedUser(user_id); 13601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!test_focus_pod_callback_.is_null()) 13611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_focus_pod_callback_.Run(); 13623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 13633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 136403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void SigninScreenHandler::HandleHardlockPod(const std::string& user_id) { 136503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SetAuthType(user_id, 136634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) ScreenlockBridge::LockHandler::OFFLINE_PASSWORD, 136703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::string16()); 136834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) EasyUnlockService* service = GetEasyUnlockServiceForUser(user_id); 136934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) if (!service) 137034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) return; 137134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) service->SetHardlockState(EasyUnlockScreenlockStateHandler::USER_HARDLOCK); 137203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 137303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 13745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void SigninScreenHandler::HandleRetrieveAuthenticatedUserEmail( 13755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) double attempt_token) { 1376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // TODO(antrim) : move GaiaSigninScreen dependency to GaiaSigninScreen. 13775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) email_retriever_.reset(new AuthenticatedUserEmailRetriever( 13785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&SigninScreenHandler::CallJS<double, std::string>, 13795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Unretained(this), 13805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "login.GaiaSigninScreen.setAuthenticatedUserEmail", 13815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) attempt_token), 13825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Profile::FromWebUI(web_ui())->GetRequestContext())); 13835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 13845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 13855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SigninScreenHandler::HandleGetPublicSessionKeyboardLayouts( 13865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& user_id, 13875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& locale) { 13885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GetKeyboardLayoutsForLocale( 13895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Bind(&SigninScreenHandler::SendPublicSessionKeyboardLayouts, 13905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) weak_factory_.GetWeakPtr(), 13915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) user_id, 13925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) locale), 13935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) locale); 13945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 13955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 13965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SigninScreenHandler::SendPublicSessionKeyboardLayouts( 13975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& user_id, 13985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& locale, 13995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<base::ListValue> keyboard_layouts) { 14005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CallJS("login.AccountPickerScreen.setPublicSessionKeyboardLayouts", 14015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) user_id, 14025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) locale, 14035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *keyboard_layouts); 14045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 14055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 14065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void SigninScreenHandler::HandleLaunchKioskApp(const std::string& app_id, 14075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool diagnostic_mode) { 1408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UserContext context(user_manager::USER_TYPE_KIOSK_APP, app_id); 1409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SigninSpecifics specifics; 1410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch specifics.kiosk_diagnostic_mode = diagnostic_mode; 1411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (delegate_) 1412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delegate_->Login(context, specifics); 14133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 14143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 14155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SigninScreenHandler::HandleCancelConsumerManagementEnrollment() { 14166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) policy::ConsumerManagementService* consumer_management = 14176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) g_browser_process->platform_part()->browser_policy_connector_chromeos()-> 14186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetConsumerManagementService(); 14196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) CHECK(consumer_management); 14201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci consumer_management->SetEnrollmentStage( 14211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci policy::ConsumerManagementService::ENROLLMENT_STAGE_CANCELED); 14225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) is_enrolling_consumer_management_ = false; 14235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ShowImpl(); 14245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 14255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 14261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid SigninScreenHandler::HandleGetTouchViewState() { 14271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (max_mode_delegate_) { 14281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CallJS("login.AccountPickerScreen.setTouchViewState", 14291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci max_mode_delegate_->IsMaximizeModeEnabled()); 14301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 14311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 14321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SigninScreenHandler::AllWhitelistedUsersPresent() { 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosSettings* cros_settings = CrosSettings::Get(); 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow_new_user = false; 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cros_settings->GetBoolean(kAccountsPrefAllowNewUser, &allow_new_user); 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (allow_new_user) 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 14396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) user_manager::UserManager* user_manager = user_manager::UserManager::Get(); 14405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const user_manager::UserList& users = user_manager->GetUsers(); 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!delegate_ || users.size() > kMaxUsers) { 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::ListValue* whitelist = NULL; 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!cros_settings->GetList(kAccountsPrefUsers, &whitelist) || !whitelist) 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < whitelist->GetSize(); ++i) { 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string whitelisted_user; 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NB: Wildcards in the whitelist are also detected as not present here. 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!whitelist->GetString(i, &whitelisted_user) || 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !user_manager->IsKnownUser(whitelisted_user)) { 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::CancelPasswordChangedFlowInternal() { 14592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) { 1460f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ShowImpl(); 14612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->CancelPasswordChangedFlow(); 14622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 14632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciOobeUI* SigninScreenHandler::GetOobeUI() const { 14661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return static_cast<OobeUI*>(web_ui()->GetController()); 14671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 14681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 146934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)EasyUnlockService* SigninScreenHandler::GetEasyUnlockServiceForUser( 147034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) const std::string& username) const { 147134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) if (!ScreenLocker::default_screen_locker() && 147234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) GetOobeUI()->display_type() != OobeUI::kLoginDisplay) 147334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) return NULL; 147434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) 147534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) const user_manager::User* unlock_user = NULL; 147634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) const user_manager::UserList& users = delegate_->GetUsers(); 147734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) for (user_manager::UserList::const_iterator it = users.begin(); 147834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) it != users.end(); 147934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) ++it) { 148034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) if ((*it)->email() == username) { 148134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) unlock_user = *it; 148234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 148334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) } 148434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) } 148534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) if (!unlock_user) 148634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) return NULL; 148734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) 148834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) ProfileHelper* profile_helper = ProfileHelper::Get(); 148934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) Profile* profile = profile_helper->GetProfileByUser(unlock_user); 149034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) 149134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) // The user profile should exists if and only if this is lock screen. 149234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) DCHECK_NE(!profile, !ScreenLocker::default_screen_locker()); 149334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) 149434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) if (!profile) 149534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) profile = profile_helper->GetSigninProfile(); 149634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) 149734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) return EasyUnlockService::Get(profile); 149834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)} 149934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) 15002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OobeUI::Screen SigninScreenHandler::GetCurrentScreen() const { 15012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OobeUI::Screen screen = OobeUI::SCREEN_UNKNOWN; 15021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OobeUI* oobe_ui = GetOobeUI(); 15032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (oobe_ui) 15042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) screen = oobe_ui->current_screen(); 15052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return screen; 15062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1508a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)bool SigninScreenHandler::IsGaiaVisible() const { 15092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IsSigninScreen(GetCurrentScreen()) && 15102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_state_ == UI_STATE_GAIA_SIGNIN; 15112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1513a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)bool SigninScreenHandler::IsGaiaHiddenByError() const { 1514a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return IsSigninScreenHiddenByError() && 1515a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ui_state_ == UI_STATE_GAIA_SIGNIN; 1516a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 1517a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 15182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool SigninScreenHandler::IsSigninScreenHiddenByError() const { 15192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return (GetCurrentScreen() == OobeUI::SCREEN_ERROR_MESSAGE) && 15202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (IsSigninScreen(error_screen_actor_->parent_screen())); 15212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool SigninScreenHandler::IsGuestSigninAllowed() const { 15242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CrosSettings* cros_settings = CrosSettings::Get(); 15252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!cros_settings) 15262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 15272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool allow_guest; 15282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cros_settings->GetBoolean(kAccountsPrefAllowGuest, &allow_guest); 15292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return allow_guest; 15302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool SigninScreenHandler::IsOfflineLoginAllowed() const { 15332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CrosSettings* cros_settings = CrosSettings::Get(); 15342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!cros_settings) 15352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 15362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Offline login is allowed only when user pods are hidden. 15382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool show_pods; 15392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cros_settings->GetBoolean(kAccountsPrefShowUserNamesOnSignIn, &show_pods); 15402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return !show_pods; 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1543a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void SigninScreenHandler::ContinueKioskEnableFlow( 1544effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch policy::AutoEnrollmentState state) { 15451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Do not proceed with kiosk enable when auto enroll will be enforced. 15461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // TODO(xiyuan): Add an error UI feedkback so user knows what happens. 1547a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switch (state) { 1548effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch case policy::AUTO_ENROLLMENT_STATE_IDLE: 1549effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch case policy::AUTO_ENROLLMENT_STATE_PENDING: 1550effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch case policy::AUTO_ENROLLMENT_STATE_CONNECTION_ERROR: 1551a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Wait for the next callback. 1552a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return; 1553effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch case policy::AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT: 1554a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Auto-enrollment is on. 1555a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOG(WARNING) << "Kiosk enable flow aborted because auto enrollment is " 1556a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "going to be enforced."; 1557a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!kiosk_enable_flow_aborted_callback_for_test_.is_null()) 1558a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kiosk_enable_flow_aborted_callback_for_test_.Run(); 1559a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 1560effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch case policy::AUTO_ENROLLMENT_STATE_SERVER_ERROR: 1561effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch case policy::AUTO_ENROLLMENT_STATE_NO_ENROLLMENT: 1562a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Auto-enrollment not applicable. 1563a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (delegate_) 1564a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) delegate_->ShowKioskEnableScreen(); 1565a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 15661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1567a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) auto_enrollment_progress_subscription_.reset(); 15681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 15691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 157046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void SigninScreenHandler::OnShowAddUser() { 1571f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) is_account_picker_showing_first_time_ = false; 157246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DCHECK(gaia_screen_handler_); 15735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gaia_screen_handler_->ShowGaia(is_enrolling_consumer_management_); 15745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 15755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1576f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)GaiaScreenHandler::FrameState SigninScreenHandler::FrameState() const { 1577f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(gaia_screen_handler_); 1578f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return gaia_screen_handler_->frame_state(); 1579f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1580f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1581f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)net::Error SigninScreenHandler::FrameError() const { 1582f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(gaia_screen_handler_); 1583f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return gaia_screen_handler_->frame_error(); 1584f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1585f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1586cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void SigninScreenHandler::OnCapsLockChanged(bool enabled) { 1587cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) caps_lock_enabled_ = enabled; 1588cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (page_is_ready()) 1589cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CallJS("login.AccountPickerScreen.setCapsLockState", caps_lock_enabled_); 1590cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1591cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 1593