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