1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 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) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/webui_login_display.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ash/shell.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/lock/screen_locker.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/chrome_user_selection_screen.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/user_adding_screen.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/webui_login_view.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h" 176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/grit/chromium_strings.h" 186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/grit/generated_resources.h" 19a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "chromeos/ime/ime_keyboard.h" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/ime/input_method_manager.h" 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/login/user_names.h" 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/user_manager/user_manager.h" 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "grit/components_strings.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h" 26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ui/wm/core/user_activity_detector.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WebUILoginDisplay, public: -------------------------------------------------- 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebUILoginDisplay::~WebUILoginDisplay() { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webui_handler_) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webui_handler_->ResetSigninScreenHandlerDelegate(); 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if !defined(USE_ATHENA) 36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch wm::UserActivityDetector* activity_detector = ash::Shell::GetInstance()-> 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci user_activity_detector(); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (activity_detector->HasObserver(this)) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) activity_detector->RemoveObserver(this); 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// LoginDisplay implementation: ------------------------------------------------ 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebUILoginDisplay::WebUILoginDisplay(LoginDisplay::Delegate* delegate) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : LoginDisplay(delegate, gfx::Rect()), 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_guest_(false), 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_new_user_(false), 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) webui_handler_(NULL), 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gaia_screen_(new GaiaScreen()), 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) user_selection_screen_(new ChromeUserSelectionScreen()) { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 54a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void WebUILoginDisplay::ClearAndEnablePassword() { 55a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (webui_handler_) 56a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) webui_handler_->ClearAndEnablePassword(); 57a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 58a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void WebUILoginDisplay::Init(const user_manager::UserList& users, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool show_guest, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool show_users, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool show_new_user) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Testing that the delegate has been set. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(delegate_); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) user_selection_screen_->Init(users, show_guest); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_guest_ = show_guest; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_users_ = show_users; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_new_user_ = show_new_user; 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if !defined(USE_ATHENA) 72c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch wm::UserActivityDetector* activity_detector = ash::Shell::GetInstance()-> 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_activity_detector(); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!activity_detector->HasObserver(this)) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) activity_detector->AddObserver(this); 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// ---- Common methods 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// ---- User selection screen methods 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::OnBeforeUserRemoved(const std::string& username) { 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) user_selection_screen_->OnBeforeUserRemoved(username); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebUILoginDisplay::OnUserRemoved(const std::string& username) { 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) user_selection_screen_->OnUserRemoved(username); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void WebUILoginDisplay::OnUserImageChanged(const user_manager::User& user) { 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) user_selection_screen_->OnUserImageChanged(user); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void WebUILoginDisplay::HandleGetUsers() { 9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) user_selection_screen_->HandleGetUsers(); 9746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const user_manager::UserList& WebUILoginDisplay::GetUsers() const { 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return user_selection_screen_->GetUsers(); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// User selection screen, screen lock API 10446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 10546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void WebUILoginDisplay::SetAuthType( 10646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& username, 10746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ScreenlockBridge::LockHandler::AuthType auth_type) { 10846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) user_selection_screen_->SetAuthType(username, auth_type); 10946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 11046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 11146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)ScreenlockBridge::LockHandler::AuthType WebUILoginDisplay::GetAuthType( 11246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& username) const { 11346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return user_selection_screen_->GetAuthType(username); 11446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 11546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// ---- Gaia screen methods 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// ---- Not yet classified methods 119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebUILoginDisplay::OnPreferencesChanged() { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webui_handler_) 122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) webui_handler_->OnPreferencesChanged(); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::SetUIEnabled(bool is_enabled) { 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(nkostylev): Cleanup this condition, 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // see http://crbug.com/157885 and http://crbug.com/158255. 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allow this call only before user sign in or at lock screen. 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If this call is made after new user signs in but login screen is still 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // around that would trigger a sign in extension refresh. 1316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (is_enabled && (!user_manager::UserManager::Get()->IsUserLoggedIn() || 132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ScreenLocker::default_screen_locker())) { 133a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ClearAndEnablePassword(); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 136a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (chromeos::LoginDisplayHost* host = 137a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) chromeos::LoginDisplayHostImpl::default_host()) { 138a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (chromeos::WebUILoginView* login_view = host->GetWebUILoginView()) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) login_view->SetUIEnabled(is_enabled); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::ShowError(int error_msg_id, 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int login_attempts, 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HelpAppLauncher::HelpTopic help_topic_id) { 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << "Show error, error_id: " << error_msg_id 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ", attempts:" << login_attempts 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ", help_topic_id: " << help_topic_id; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!webui_handler_) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error_text; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (error_msg_id) { 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDS_LOGIN_ERROR_AUTHENTICATING_HOSTED: 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_text = l10n_util::GetStringFUTF8( 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_msg_id, l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_OS_NAME)); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDS_LOGIN_ERROR_CAPTIVE_PORTAL: 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_text = l10n_util::GetStringFUTF8( 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_msg_id, delegate()->GetConnectedNetworkName()); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_text = l10n_util::GetStringUTF8(error_msg_id); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Only display hints about keyboard layout if the error is authentication- 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // related. 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (error_msg_id != IDS_LOGIN_ERROR_WHITELIST && 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_msg_id != IDS_LOGIN_ERROR_OWNER_KEY_LOST && 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_msg_id != IDS_LOGIN_ERROR_OWNER_REQUIRED) { 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Display a warning if Caps Lock is on. 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_method::InputMethodManager* ime_manager = 174a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) input_method::InputMethodManager::Get(); 175a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (ime_manager->GetImeKeyboard()->CapsLockIsEnabled()) { 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(ivankr): use a format string instead of concatenation. 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_text += "\n" + 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF8(IDS_LOGIN_ERROR_CAPS_LOCK_HINT); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Display a hint to switch keyboards if there are other active input 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // methods. 18303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (ime_manager->GetActiveIMEState()->GetNumActiveInputMethods() > 1) { 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_text += "\n" + 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF8(IDS_LOGIN_ERROR_KEYBOARD_SWITCH_HINT); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string help_link; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (error_msg_id) { 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDS_LOGIN_ERROR_AUTHENTICATING_HOSTED: 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) help_link = l10n_util::GetStringUTF8(IDS_LEARN_MORE); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (login_attempts > 1) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) help_link = l10n_util::GetStringUTF8(IDS_LEARN_MORE); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webui_handler_->ShowError(login_attempts, error_text, help_link, 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) help_topic_id); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::ShowErrorScreen(LoginDisplay::SigninError error_id) { 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VLOG(1) << "Show error screen, error_id: " << error_id; 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!webui_handler_) 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webui_handler_->ShowErrorScreen(error_id); 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::ShowGaiaPasswordChanged(const std::string& username) { 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webui_handler_) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webui_handler_->ShowGaiaPasswordChanged(username); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::ShowPasswordChangedDialog(bool show_password_error) { 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (webui_handler_) 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webui_handler_->ShowPasswordChangedDialog(show_password_error); 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::ShowSigninUI(const std::string& email) { 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (webui_handler_) 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webui_handler_->ShowSigninUI(email); 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WebUILoginDisplay, NativeWindowDelegate implementation: --------------------- 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::NativeWindow WebUILoginDisplay::GetNativeWindow() const { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return parent_window(); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WebUILoginDisplay, SigninScreenHandlerDelegate implementation: -------------- 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::CancelPasswordChangedFlow() { 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(delegate_); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->CancelPasswordChangedFlow(); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 238868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void WebUILoginDisplay::CancelUserAdding() { 239868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!UserAddingScreen::Get()->IsRunning()) { 240868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) LOG(ERROR) << "User adding screen not running."; 241868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return; 242868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 243868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) UserAddingScreen::Get()->Cancel(); 244868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 245868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::CreateAccount() { 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(delegate_); 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->CreateAccount(); 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void WebUILoginDisplay::CompleteLogin(const UserContext& user_context) { 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(delegate_); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_->CompleteLogin(user_context); 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 258116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid WebUILoginDisplay::Login(const UserContext& user_context, 259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const SigninSpecifics& specifics) { 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(delegate_); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delegate_->Login(user_context, specifics); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::MigrateUserData(const std::string& old_password) { 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(delegate_); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->MigrateUserData(old_password); 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::LoadWallpaper(const std::string& username) { 2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WallpaperManager::Get()->SetUserWallpaperDelayed(username); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::LoadSigninWallpaper() { 276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WallpaperManager::Get()->SetDefaultWallpaperDelayed( 277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chromeos::login::kSignInUser); 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::OnSigninScreenReady() { 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->OnSigninScreenReady(); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::RemoveUser(const std::string& username) { 2866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) user_manager::UserManager::Get()->RemoveUser(username, this); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::ResyncUserData() { 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(delegate_); 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->ResyncUserData(); 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::ShowEnterpriseEnrollmentScreen() { 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->OnStartEnterpriseEnrollment(); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void WebUILoginDisplay::ShowKioskEnableScreen() { 3017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (delegate_) 3027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) delegate_->OnStartKioskEnableScreen(); 3037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 3047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 305868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void WebUILoginDisplay::ShowKioskAutolaunchScreen() { 306868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (delegate_) 307868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) delegate_->OnStartKioskAutolaunchScreen(); 308868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 309868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::ShowWrongHWIDScreen() { 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->ShowWrongHWIDScreen(); 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::SetWebUIHandler( 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoginDisplayWebUIHandler* webui_handler) { 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webui_handler_ = webui_handler; 318cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gaia_screen_->SetHandler(webui_handler_); 319cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) user_selection_screen_->SetHandler(webui_handler_); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::ShowSigninScreenForCreds( 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& username, 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& password) { 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (webui_handler_) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webui_handler_->ShowSigninScreenForCreds(username, password); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WebUILoginDisplay::IsShowGuest() const { 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return show_guest_; 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WebUILoginDisplay::IsShowUsers() const { 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return show_users_; 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 337a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)bool WebUILoginDisplay::IsSigninInProgress() const { 338a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return delegate_->IsSigninInProgress(); 339a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 340a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 341a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)bool WebUILoginDisplay::IsUserSigninCompleted() const { 342a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return is_signin_completed(); 343a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 344a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUILoginDisplay::SetDisplayEmail(const std::string& email) { 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->SetDisplayEmail(email); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebUILoginDisplay::Signout() { 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->Signout(); 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid WebUILoginDisplay::OnUserActivity(const ui::Event* event) { 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->ResetPublicSessionAutoLoginTimer(); 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 361