15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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/chromeos/login/webui_login_display.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/wm/user_activity_detector.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/login_display_host_impl.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/screen_locker.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/chromeos/login/user_adding_screen.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/wallpaper_manager.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/webui_login_view.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/ime/input_method_manager.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/ime/xkeyboard.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/chromium_strings.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const int kPasswordClearTimeoutSec = 60; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WebUILoginDisplay, public: -------------------------------------------------- 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebUILoginDisplay::~WebUILoginDisplay() { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webui_handler_) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webui_handler_->ResetSigninScreenHandlerDelegate(); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::UserActivityDetector* activity_detector = ash::Shell::GetInstance()-> 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_activity_detector(); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (activity_detector->HasObserver(this)) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) activity_detector->RemoveObserver(this); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// LoginDisplay implementation: ------------------------------------------------ 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebUILoginDisplay::WebUILoginDisplay(LoginDisplay::Delegate* delegate) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : LoginDisplay(delegate, gfx::Rect()), 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_guest_(false), 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_new_user_(false), 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webui_handler_(NULL) { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 51a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void WebUILoginDisplay::ClearAndEnablePassword() { 52a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (webui_handler_) 53a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) webui_handler_->ClearAndEnablePassword(); 54a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 55a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::Init(const UserList& users, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool show_guest, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool show_users, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool show_new_user) { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Testing that the delegate has been set. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(delegate_); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) users_ = users; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_guest_ = show_guest; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_users_ = show_users; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_new_user_ = show_new_user; 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::UserActivityDetector* activity_detector = ash::Shell::GetInstance()-> 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_activity_detector(); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!activity_detector->HasObserver(this)) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) activity_detector->AddObserver(this); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::OnPreferencesChanged() { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webui_handler_) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webui_handler_->OnPreferencesChanged(); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::OnBeforeUserRemoved(const std::string& username) { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (UserList::iterator it = users_.begin(); it != users_.end(); ++it) { 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((*it)->email() == username) { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) users_.erase(it); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::OnUserImageChanged(const User& user) { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webui_handler_) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webui_handler_->OnUserImageChanged(user); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::OnUserRemoved(const std::string& username) { 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webui_handler_) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webui_handler_->OnUserRemoved(username); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::OnFadeOut() { 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::OnLoginSuccess(const std::string& username) { 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webui_handler_) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webui_handler_->OnLoginSuccess(username); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::SetUIEnabled(bool is_enabled) { 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(nkostylev): Cleanup this condition, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // see http://crbug.com/157885 and http://crbug.com/158255. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allow this call only before user sign in or at lock screen. 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If this call is made after new user signs in but login screen is still 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // around that would trigger a sign in extension refresh. 112a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (is_enabled && 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!UserManager::Get()->IsUserLoggedIn() || 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScreenLocker::default_screen_locker())) { 115a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ClearAndEnablePassword(); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 118a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (chromeos::LoginDisplayHost* host = 119a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) chromeos::LoginDisplayHostImpl::default_host()) { 120a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (chromeos::WebUILoginView* login_view = host->GetWebUILoginView()) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) login_view->SetUIEnabled(is_enabled); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::SelectPod(int index) { 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::ShowError(int error_msg_id, 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int login_attempts, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HelpAppLauncher::HelpTopic help_topic_id) { 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << "Show error, error_id: " << error_msg_id 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ", attempts:" << login_attempts 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ", help_topic_id: " << help_topic_id; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!webui_handler_) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error_text; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (error_msg_id) { 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDS_LOGIN_ERROR_AUTHENTICATING_HOSTED: 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_text = l10n_util::GetStringFUTF8( 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_msg_id, l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_OS_NAME)); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDS_LOGIN_ERROR_CAPTIVE_PORTAL: 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_text = l10n_util::GetStringFUTF8( 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_msg_id, delegate()->GetConnectedNetworkName()); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_text = l10n_util::GetStringUTF8(error_msg_id); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Only display hints about keyboard layout if the error is authentication- 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // related. 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (error_msg_id != IDS_LOGIN_ERROR_WHITELIST && 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_msg_id != IDS_LOGIN_ERROR_OWNER_KEY_LOST && 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_msg_id != IDS_LOGIN_ERROR_OWNER_REQUIRED) { 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Display a warning if Caps Lock is on. 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_method::InputMethodManager* ime_manager = 159a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) input_method::InputMethodManager::Get(); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ime_manager->GetXKeyboard()->CapsLockIsEnabled()) { 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(ivankr): use a format string instead of concatenation. 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_text += "\n" + 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF8(IDS_LOGIN_ERROR_CAPS_LOCK_HINT); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Display a hint to switch keyboards if there are other active input 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // methods. 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ime_manager->GetNumActiveInputMethods() > 1) { 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_text += "\n" + 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF8(IDS_LOGIN_ERROR_KEYBOARD_SWITCH_HINT); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string help_link; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (error_msg_id) { 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDS_LOGIN_ERROR_AUTHENTICATING_HOSTED: 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) help_link = l10n_util::GetStringUTF8(IDS_LEARN_MORE); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (login_attempts > 1) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) help_link = l10n_util::GetStringUTF8(IDS_LEARN_MORE); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webui_handler_->ShowError(login_attempts, error_text, help_link, 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) help_topic_id); 187868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AccessibilityManager::Get()->MaybeSpeak(error_text); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::ShowErrorScreen(LoginDisplay::SigninError error_id) { 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VLOG(1) << "Show error screen, error_id: " << error_id; 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!webui_handler_) 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webui_handler_->ShowErrorScreen(error_id); 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::ShowGaiaPasswordChanged(const std::string& username) { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webui_handler_) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webui_handler_->ShowGaiaPasswordChanged(username); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::ShowPasswordChangedDialog(bool show_password_error) { 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (webui_handler_) 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webui_handler_->ShowPasswordChangedDialog(show_password_error); 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::ShowSigninUI(const std::string& email) { 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (webui_handler_) 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webui_handler_->ShowSigninUI(email); 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WebUILoginDisplay, NativeWindowDelegate implementation: --------------------- 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::NativeWindow WebUILoginDisplay::GetNativeWindow() const { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return parent_window(); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WebUILoginDisplay, SigninScreenHandlerDelegate implementation: -------------- 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::CancelPasswordChangedFlow() { 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(delegate_); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->CancelPasswordChangedFlow(); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 224868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void WebUILoginDisplay::CancelUserAdding() { 225868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!UserAddingScreen::Get()->IsRunning()) { 226868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) LOG(ERROR) << "User adding screen not running."; 227868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return; 228868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 229868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) UserAddingScreen::Get()->Cancel(); 230868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 231868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::CreateAccount() { 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(delegate_); 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->CreateAccount(); 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void WebUILoginDisplay::CompleteLogin(const UserContext& user_context) { 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(delegate_); 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_->CompleteLogin(user_context); 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void WebUILoginDisplay::Login(const UserContext& user_context) { 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(delegate_); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_->Login(user_context); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::LoginAsRetailModeUser() { 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(delegate_); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->LoginAsRetailModeUser(); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::LoginAsGuest() { 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(delegate_); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->LoginAsGuest(); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::LoginAsPublicAccount(const std::string& username) { 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(delegate_); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->LoginAsPublicAccount(username); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::MigrateUserData(const std::string& old_password) { 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(delegate_); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->MigrateUserData(old_password); 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::LoadWallpaper(const std::string& username) { 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WallpaperManager::Get()->SetUserWallpaper(username); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::LoadSigninWallpaper() { 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WallpaperManager::Get()->SetDefaultWallpaper(); 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::OnSigninScreenReady() { 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->OnSigninScreenReady(); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::RemoveUser(const std::string& username) { 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserManager::Get()->RemoveUser(username, this); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::ResyncUserData() { 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(delegate_); 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->ResyncUserData(); 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::ShowEnterpriseEnrollmentScreen() { 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->OnStartEnterpriseEnrollment(); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void WebUILoginDisplay::ShowKioskEnableScreen() { 3037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (delegate_) 3047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) delegate_->OnStartKioskEnableScreen(); 3057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 3067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::ShowResetScreen() { 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->OnStartDeviceReset(); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 312868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void WebUILoginDisplay::ShowKioskAutolaunchScreen() { 313868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (delegate_) 314868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) delegate_->OnStartKioskAutolaunchScreen(); 315868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 316868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::ShowWrongHWIDScreen() { 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->ShowWrongHWIDScreen(); 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::SetWebUIHandler( 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoginDisplayWebUIHandler* webui_handler) { 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webui_handler_ = webui_handler; 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::ShowSigninScreenForCreds( 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& username, 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& password) { 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webui_handler_) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webui_handler_->ShowSigninScreenForCreds(username, password); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const UserList& WebUILoginDisplay::GetUsers() const { 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return users_; 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WebUILoginDisplay::IsShowGuest() const { 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return show_guest_; 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WebUILoginDisplay::IsShowUsers() const { 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return show_users_; 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WebUILoginDisplay::IsShowNewUser() const { 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return show_new_user_; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 350a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)bool WebUILoginDisplay::IsSigninInProgress() const { 351a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return delegate_->IsSigninInProgress(); 352a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 353a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 354a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)bool WebUILoginDisplay::IsUserSigninCompleted() const { 355a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return is_signin_completed(); 356a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 357a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::SetDisplayEmail(const std::string& email) { 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->SetDisplayEmail(email); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::Signout() { 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->Signout(); 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid WebUILoginDisplay::OnUserActivity(const ui::Event* event) { 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!password_clear_timer_.IsRunning()) 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartPasswordClearTimer(); 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) password_clear_timer_.Reset(); 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->ResetPublicSessionAutoLoginTimer(); 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::StartPasswordClearTimer() { 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!password_clear_timer_.IsRunning()); 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) password_clear_timer_.Start(FROM_HERE, 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta::FromSeconds(kPasswordClearTimeoutSec), this, 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &WebUILoginDisplay::OnPasswordClearTimerExpired); 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::OnPasswordClearTimerExpired() { 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (webui_handler_) 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webui_handler_->ClearUserPodPassword(); 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 388