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