1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file.
4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/login/dom_login_display.h"
6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/frame/dom_browser.h"
8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/wm_ipc.h"
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/profiles/profile_manager.h"
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/browser_window.h"
11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace {
13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst char kLoginURL[] = "chrome://login";
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}  // namespace
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace chromeos {
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// DOMLoginDisplay, public: ---------------------------------------------------
19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenDOMLoginDisplay::~DOMLoginDisplay() {
21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (login_screen_)
22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    login_screen_->CloseWindow();
23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// DOMLoginDisplay, Singleton implementation: ----------------------------------
26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// static
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenDOMLoginDisplay* DOMLoginDisplay::GetInstance() {
29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  return Singleton<DOMLoginDisplay>::get();
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// LoginDisplay implementation: ------------------------------------------------
33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid DOMLoginDisplay::Destroy() {
35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  background_bounds_ = gfx::Rect();
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  delegate_ = NULL;
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid DOMLoginDisplay::Init(const std::vector<UserManager::User>& users,
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                           bool show_guest,
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                           bool show_new_user) {
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Testing that the delegate has been set.
43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DCHECK(delegate_);
44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  users_ = users;
45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // TODO(rharrison): Add mechanism to pass in the show_guest and show_new_user
47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // values.
48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  login_screen_ = DOMBrowser::CreateForDOM(ProfileManager::GetDefaultProfile());
49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  login_screen_->AddSelectedTabWithURL(GURL(kLoginURL),
50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                       PageTransition::START_PAGE);
51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  login_screen_->window()->Show();
52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid DOMLoginDisplay::OnBeforeUserRemoved(const std::string& username) {
55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // TODO(rharrison): Figure out if I need to split anything between this and
56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // OnUserRemoved
57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid DOMLoginDisplay::OnUserImageChanged(UserManager::User* user) {
60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // TODO(rharrison): Update the user in the user vector
61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // TODO(rharrison): Push the change to DOM Login screen
62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid DOMLoginDisplay::OnUserRemoved(const std::string& username) {
65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // TODO(rharrison): Remove the user from the user vector
66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // TODO(rharrison): Push the change to DOM Login screen
67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid DOMLoginDisplay::OnFadeOut() { }
70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid DOMLoginDisplay::SetUIEnabled(bool is_enabled) {
72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Send message to WM to enable/disable click on windows.
73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  WmIpc::Message message(WM_IPC_MESSAGE_WM_SET_LOGIN_STATE);
74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  message.set_param(0, is_enabled);
75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  WmIpc::instance()->SendMessage(message);
76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (is_enabled)
78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    login_handler_->ClearAndEnablePassword();
79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid DOMLoginDisplay::ShowError(int error_msg_id,
82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                int login_attempts,
83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                HelpAppLauncher::HelpTopic help_topic_id) {
84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // TODO(rharrison): Figure out what we should be doing here
85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// DOMLoginDisplay, LoginUIHandlerDelegate implementation: ---------------------
88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid DOMLoginDisplay::Login(const std::string& username,
90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                            const std::string& password) {
91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DCHECK(delegate_);
92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  delegate_->Login(username, password);
93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid DOMLoginDisplay::LoginAsGuest() {
96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DCHECK(delegate_);
97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  delegate_->LoginAsGuest();
98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// DOMLoginDisplay, private: ---------------------------------------------------
101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Singleton implementation: ---------------------------------------------------
103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenDOMLoginDisplay::DOMLoginDisplay()
105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    : LoginDisplay(NULL, gfx::Rect()),
106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      LoginUIHandlerDelegate(),
107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      login_screen_(NULL) {}
108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}  // namespace chromeos
110