Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" | 5 #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" |
| 6 | 6 |
| 7 #include "base/values.h" | 7 #include "base/values.h" |
| 8 #include "base/stringprintf.h" | |
| 9 #include "chrome/browser/chromeos/cros/cros_library.h" | |
| 10 #include "chrome/browser/chromeos/cros/power_library.h" | |
| 11 #include "chrome/browser/chromeos/login/user_manager.h" | |
| 8 #include "chrome/browser/chromeos/login/webui_login_display.h" | 12 #include "chrome/browser/chromeos/login/webui_login_display.h" |
| 13 #include "chrome/common/url_constants.h" | |
| 9 #include "grit/generated_resources.h" | 14 #include "grit/generated_resources.h" |
| 10 #include "ui/base/l10n/l10n_util.h" | 15 #include "ui/base/l10n/l10n_util.h" |
| 11 | 16 |
| 12 namespace { | 17 namespace { |
| 13 | 18 |
| 14 // Sign in screen id. | 19 // Sign in screen id. |
| 15 const char kSigninScreen[] = "signin"; | 20 const char kSigninScreen[] = "signin"; |
| 16 | 21 |
| 22 // User dictionary keys. | |
| 23 const char kKeyName[] = "name"; | |
| 24 const char kKeyEmailAddress[] = "emailAddress"; | |
| 25 const char kKeyCanRemove[] = "canRemove"; | |
| 26 const char kKeyImageUrl[] = "imageUrl"; | |
| 27 | |
| 17 } // namespace | 28 } // namespace |
| 18 | 29 |
| 19 namespace chromeos { | 30 namespace chromeos { |
| 20 | 31 |
| 32 // LoginUIHandlerDelegate, public: ------------------------------------------ | |
|
Nikita (slow)
2011/07/15 07:11:02
nit: LoginUIHandler > SigninScreenHandler
xiyuan
2011/07/15 18:26:23
Removed since SigninScreenHandlerDelegate is an in
| |
| 33 | |
| 34 void SigninScreenHandlerDelegate::set_webui_handler( | |
| 35 LoginDisplayWebUIHandler* webui_handler) { | |
| 36 webui_handler_ = webui_handler; | |
| 37 } | |
| 38 | |
| 39 // LoginUIHandlerDelegate, protected: ------------------------------------------ | |
|
Nikita (slow)
2011/07/15 07:11:02
nit: LoginUIHandler > SigninScreenHandler
xiyuan
2011/07/15 18:26:23
Ditto.
| |
| 40 | |
| 41 SigninScreenHandlerDelegate::~SigninScreenHandlerDelegate() { | |
| 42 } | |
| 43 | |
| 44 // SigninScreenHandler, public: ------------------------------------------------ | |
| 45 | |
| 21 SigninScreenHandler::SigninScreenHandler() | 46 SigninScreenHandler::SigninScreenHandler() |
| 22 : delegate_(WebUILoginDisplay::GetInstance()), | 47 : delegate_(WebUILoginDisplay::GetInstance()), |
| 23 show_on_init_(false) { | 48 show_on_init_(false) { |
| 24 delegate_->set_login_handler(this); | 49 delegate_->set_webui_handler(this); |
| 25 } | 50 } |
| 26 | 51 |
| 27 void SigninScreenHandler::GetLocalizedStrings( | 52 void SigninScreenHandler::GetLocalizedStrings( |
| 28 DictionaryValue* localized_strings) { | 53 DictionaryValue* localized_strings) { |
| 29 localized_strings->SetString("signinScreenTitle", | 54 localized_strings->SetString("signinScreenTitle", |
| 30 l10n_util::GetStringUTF16(IDS_LOGIN_TITLE)); | 55 l10n_util::GetStringUTF16(IDS_LOGIN_TITLE)); |
| 31 localized_strings->SetString("emailHint", | 56 localized_strings->SetString("emailHint", |
| 32 l10n_util::GetStringUTF16(IDS_LOGIN_USERNAME)); | 57 l10n_util::GetStringUTF16(IDS_LOGIN_USERNAME)); |
| 33 localized_strings->SetString("passwordHint", | 58 localized_strings->SetString("passwordHint", |
| 34 l10n_util::GetStringUTF16(IDS_LOGIN_PASSWORD)); | 59 l10n_util::GetStringUTF16(IDS_LOGIN_PASSWORD)); |
| 35 localized_strings->SetString("signinButton", | 60 localized_strings->SetString("signinButton", |
| 36 l10n_util::GetStringUTF16(IDS_LOGIN_BUTTON)); | 61 l10n_util::GetStringUTF16(IDS_LOGIN_BUTTON)); |
| 37 } | 62 } |
| 38 | 63 |
| 39 void SigninScreenHandler::Show() { | 64 void SigninScreenHandler::Show() { |
| 40 if (!page_is_ready()) { | 65 if (!page_is_ready()) { |
| 41 show_on_init_ = true; | 66 show_on_init_ = true; |
| 42 return; | 67 return; |
| 43 } | 68 } |
| 44 | 69 |
| 45 StringValue screen(kSigninScreen); | 70 StringValue screen(kSigninScreen); |
| 46 web_ui_->CallJavascriptFunction("cr.ui.Oobe.showScreen", screen); | 71 web_ui_->CallJavascriptFunction("cr.ui.Oobe.showScreen", screen); |
| 47 } | 72 } |
| 48 | 73 |
| 74 // SigninScreenHandler, private: ----------------------------------------------- | |
| 75 | |
| 49 void SigninScreenHandler::Initialize() { | 76 void SigninScreenHandler::Initialize() { |
| 50 if (show_on_init_) { | 77 if (show_on_init_) { |
| 51 show_on_init_ = false; | 78 show_on_init_ = false; |
| 52 Show(); | 79 Show(); |
| 53 } | 80 } |
| 54 } | 81 } |
| 55 | 82 |
| 56 void SigninScreenHandler::RegisterMessages() { | 83 void SigninScreenHandler::RegisterMessages() { |
| 57 web_ui_->RegisterMessageCallback("authenticateUser", | 84 web_ui_->RegisterMessageCallback( |
| 58 NewCallback(this, &SigninScreenHandler::HandleAuthenticateUser)); | 85 "launchIncognito", |
| 86 NewCallback(this, | |
| 87 &SigninScreenHandler::HandleLaunchIncognito)); | |
| 88 web_ui_->RegisterMessageCallback( | |
| 89 "authenticateUser", | |
| 90 NewCallback(this, | |
| 91 &SigninScreenHandler::HandleAuthenticateUser)); | |
| 92 web_ui_->RegisterMessageCallback( | |
| 93 "shutdownSystem", | |
| 94 NewCallback(this, | |
| 95 &SigninScreenHandler::HandleShutdownSystem)); | |
| 96 web_ui_->RegisterMessageCallback( | |
| 97 "getUsers", | |
| 98 NewCallback(this, | |
| 99 &SigninScreenHandler::HandleGetUsers)); | |
| 100 web_ui_->RegisterMessageCallback( | |
| 101 "removeUser", | |
| 102 NewCallback(this, | |
| 103 &SigninScreenHandler::HandleRemoveUser)); | |
| 104 } | |
| 105 | |
| 106 void SigninScreenHandler::HandleGetUsers(const ListValue* args) { | |
| 107 ListValue users_list; | |
| 108 | |
| 109 // Grab the users from the user manager. | |
| 110 UserVector users = UserManager::Get()->GetUsers(); | |
| 111 for (UserVector::const_iterator it = users.begin(); | |
| 112 it != users.end(); ++it) { | |
| 113 const std::string& email = it->email(); | |
| 114 | |
| 115 DictionaryValue* user_dict = new DictionaryValue(); | |
| 116 user_dict->SetString(kKeyName, it->GetDisplayName()); | |
| 117 user_dict->SetString(kKeyEmailAddress, email); | |
| 118 user_dict->SetBoolean(kKeyCanRemove, !email.empty()); | |
| 119 | |
| 120 if (!email.empty()) { | |
| 121 long long timestamp = base::TimeTicks::Now().ToInternalValue(); | |
| 122 std::string image_url( | |
| 123 StringPrintf("%s%s?id=%lld", | |
| 124 chrome::kChromeUIUserImageURL, | |
| 125 email.c_str(), | |
| 126 timestamp)); | |
| 127 user_dict->SetString(kKeyImageUrl, image_url); | |
| 128 } else { | |
| 129 std::string image_url(std::string(chrome::kChromeUIScheme) + "://" + | |
| 130 std::string(chrome::kChromeUIThemePath) + "/IDR_LOGIN_DEFAULT_USER"); | |
| 131 user_dict->SetString(kKeyImageUrl, image_url); | |
| 132 } | |
| 133 | |
| 134 users_list.Append(user_dict); | |
| 135 } | |
| 136 | |
| 137 // Add the Guest to the user list. | |
| 138 DictionaryValue* guest_dict = new DictionaryValue(); | |
| 139 guest_dict->SetString(kKeyName, l10n_util::GetStringUTF16(IDS_GUEST)); | |
| 140 guest_dict->SetString(kKeyEmailAddress, ""); | |
| 141 guest_dict->SetBoolean(kKeyCanRemove, false); | |
| 142 std::string image_url(std::string(chrome::kChromeUIScheme) + "://" + | |
| 143 std::string(chrome::kChromeUIThemePath) + "/IDR_LOGIN_GUEST"); | |
| 144 guest_dict->SetString(kKeyImageUrl, image_url); | |
| 145 users_list.Append(guest_dict); | |
| 146 | |
| 147 // Call the Javascript callback | |
| 148 web_ui_->CallJavascriptFunction("getUsersCallback", users_list); | |
| 59 } | 149 } |
| 60 | 150 |
| 61 void SigninScreenHandler::ClearAndEnablePassword() { | 151 void SigninScreenHandler::ClearAndEnablePassword() { |
| 62 web_ui_->CallJavascriptFunction("login.SigninScreen.reset"); | 152 web_ui_->CallJavascriptFunction("resetPrompt"); |
| 63 } | 153 } |
| 64 | 154 |
| 65 void SigninScreenHandler::ShowError(const std::string& error_text, | 155 void SigninScreenHandler::ShowError(const std::string& error_text, |
| 66 const std::string& help_link_text, | 156 const std::string& help_link_text, |
| 67 HelpAppLauncher::HelpTopic help_topic_id) { | 157 HelpAppLauncher::HelpTopic help_topic_id) { |
| 68 // TODO(xiyuan): Pass error + help to a propery error UI and save topic id. | 158 // TODO(xiyuan): Pass error + help to a propery error UI and save topic id. |
| 69 ClearAndEnablePassword(); | 159 ClearAndEnablePassword(); |
| 70 } | 160 } |
| 71 | 161 |
| 72 void SigninScreenHandler::HandleAuthenticateUser(const ListValue* args) { | 162 void SigninScreenHandler::HandleAuthenticateUser(const base::ListValue* args) { |
| 73 std::string username; | 163 std::string username; |
| 74 std::string password; | 164 std::string password; |
| 75 if (!args->GetString(0, &username) || | 165 if (!args->GetString(0, &username) || |
| 76 !args->GetString(1, &password)) { | 166 !args->GetString(1, &password)) { |
| 167 NOTREACHED(); | |
| 77 return; | 168 return; |
| 78 } | 169 } |
| 79 | 170 |
| 80 delegate_->Login(username, password); | 171 delegate_->Login(username, password); |
| 81 } | 172 } |
| 82 | 173 |
| 174 void SigninScreenHandler::HandleLaunchIncognito(const base::ListValue* args) { | |
| 175 delegate_->LoginAsGuest(); | |
| 176 } | |
| 177 | |
| 178 void SigninScreenHandler::HandleShutdownSystem(const base::ListValue* args) { | |
| 179 DCHECK(CrosLibrary::Get()->EnsureLoaded()); | |
| 180 CrosLibrary::Get()->GetPowerLibrary()->RequestShutdown(); | |
| 181 } | |
| 182 | |
| 183 void SigninScreenHandler::HandleRemoveUser(const base::ListValue* args) { | |
| 184 std::string email; | |
| 185 if (!args->GetString(0, &email)) { | |
| 186 NOTREACHED(); | |
| 187 return; | |
| 188 } | |
| 189 | |
| 190 UserManager::Get()->RemoveUserFromList(email); | |
| 191 } | |
| 192 | |
| 83 } // namespace chromeos | 193 } // namespace chromeos |
| OLD | NEW |