Chromium Code Reviews| Index: chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc |
| diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc |
| index 5570e70a4d3a6a75ce96f05e4b5942cfb282ed9f..b345788e0c7b94230415975a1b12984c5f9fd004 100644 |
| --- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc |
| +++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc |
| @@ -5,7 +5,12 @@ |
| #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" |
| #include "base/values.h" |
| +#include "base/stringprintf.h" |
| +#include "chrome/browser/chromeos/cros/cros_library.h" |
| +#include "chrome/browser/chromeos/cros/power_library.h" |
| +#include "chrome/browser/chromeos/login/user_manager.h" |
| #include "chrome/browser/chromeos/login/webui_login_display.h" |
| +#include "chrome/common/url_constants.h" |
| #include "grit/generated_resources.h" |
| #include "ui/base/l10n/l10n_util.h" |
| @@ -14,14 +19,34 @@ namespace { |
| // Sign in screen id. |
| const char kSigninScreen[] = "signin"; |
| +// User dictionary keys. |
| +const char kKeyName[] = "name"; |
| +const char kKeyEmailAddress[] = "emailAddress"; |
| +const char kKeyCanRemove[] = "canRemove"; |
| +const char kKeyImageUrl[] = "imageUrl"; |
| + |
| } // namespace |
| namespace chromeos { |
| +// 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
|
| + |
| +void SigninScreenHandlerDelegate::set_webui_handler( |
| + LoginDisplayWebUIHandler* webui_handler) { |
| + webui_handler_ = webui_handler; |
| +} |
| + |
| +// LoginUIHandlerDelegate, protected: ------------------------------------------ |
|
Nikita (slow)
2011/07/15 07:11:02
nit: LoginUIHandler > SigninScreenHandler
xiyuan
2011/07/15 18:26:23
Ditto.
|
| + |
| +SigninScreenHandlerDelegate::~SigninScreenHandlerDelegate() { |
| +} |
| + |
| +// SigninScreenHandler, public: ------------------------------------------------ |
| + |
| SigninScreenHandler::SigninScreenHandler() |
| : delegate_(WebUILoginDisplay::GetInstance()), |
| show_on_init_(false) { |
| - delegate_->set_login_handler(this); |
| + delegate_->set_webui_handler(this); |
| } |
| void SigninScreenHandler::GetLocalizedStrings( |
| @@ -46,6 +71,8 @@ void SigninScreenHandler::Show() { |
| web_ui_->CallJavascriptFunction("cr.ui.Oobe.showScreen", screen); |
| } |
| +// SigninScreenHandler, private: ----------------------------------------------- |
| + |
| void SigninScreenHandler::Initialize() { |
| if (show_on_init_) { |
| show_on_init_ = false; |
| @@ -54,12 +81,75 @@ void SigninScreenHandler::Initialize() { |
| } |
| void SigninScreenHandler::RegisterMessages() { |
| - web_ui_->RegisterMessageCallback("authenticateUser", |
| - NewCallback(this, &SigninScreenHandler::HandleAuthenticateUser)); |
| + web_ui_->RegisterMessageCallback( |
| + "launchIncognito", |
| + NewCallback(this, |
| + &SigninScreenHandler::HandleLaunchIncognito)); |
| + web_ui_->RegisterMessageCallback( |
| + "authenticateUser", |
| + NewCallback(this, |
| + &SigninScreenHandler::HandleAuthenticateUser)); |
| + web_ui_->RegisterMessageCallback( |
| + "shutdownSystem", |
| + NewCallback(this, |
| + &SigninScreenHandler::HandleShutdownSystem)); |
| + web_ui_->RegisterMessageCallback( |
| + "getUsers", |
| + NewCallback(this, |
| + &SigninScreenHandler::HandleGetUsers)); |
| + web_ui_->RegisterMessageCallback( |
| + "removeUser", |
| + NewCallback(this, |
| + &SigninScreenHandler::HandleRemoveUser)); |
| +} |
| + |
| +void SigninScreenHandler::HandleGetUsers(const ListValue* args) { |
| + ListValue users_list; |
| + |
| + // Grab the users from the user manager. |
| + UserVector users = UserManager::Get()->GetUsers(); |
| + for (UserVector::const_iterator it = users.begin(); |
| + it != users.end(); ++it) { |
| + const std::string& email = it->email(); |
| + |
| + DictionaryValue* user_dict = new DictionaryValue(); |
| + user_dict->SetString(kKeyName, it->GetDisplayName()); |
| + user_dict->SetString(kKeyEmailAddress, email); |
| + user_dict->SetBoolean(kKeyCanRemove, !email.empty()); |
| + |
| + if (!email.empty()) { |
| + long long timestamp = base::TimeTicks::Now().ToInternalValue(); |
| + std::string image_url( |
| + StringPrintf("%s%s?id=%lld", |
| + chrome::kChromeUIUserImageURL, |
| + email.c_str(), |
| + timestamp)); |
| + user_dict->SetString(kKeyImageUrl, image_url); |
| + } else { |
| + std::string image_url(std::string(chrome::kChromeUIScheme) + "://" + |
| + std::string(chrome::kChromeUIThemePath) + "/IDR_LOGIN_DEFAULT_USER"); |
| + user_dict->SetString(kKeyImageUrl, image_url); |
| + } |
| + |
| + users_list.Append(user_dict); |
| + } |
| + |
| + // Add the Guest to the user list. |
| + DictionaryValue* guest_dict = new DictionaryValue(); |
| + guest_dict->SetString(kKeyName, l10n_util::GetStringUTF16(IDS_GUEST)); |
| + guest_dict->SetString(kKeyEmailAddress, ""); |
| + guest_dict->SetBoolean(kKeyCanRemove, false); |
| + std::string image_url(std::string(chrome::kChromeUIScheme) + "://" + |
| + std::string(chrome::kChromeUIThemePath) + "/IDR_LOGIN_GUEST"); |
| + guest_dict->SetString(kKeyImageUrl, image_url); |
| + users_list.Append(guest_dict); |
| + |
| + // Call the Javascript callback |
| + web_ui_->CallJavascriptFunction("getUsersCallback", users_list); |
| } |
| void SigninScreenHandler::ClearAndEnablePassword() { |
| - web_ui_->CallJavascriptFunction("login.SigninScreen.reset"); |
| + web_ui_->CallJavascriptFunction("resetPrompt"); |
| } |
| void SigninScreenHandler::ShowError(const std::string& error_text, |
| @@ -69,15 +159,35 @@ void SigninScreenHandler::ShowError(const std::string& error_text, |
| ClearAndEnablePassword(); |
| } |
| -void SigninScreenHandler::HandleAuthenticateUser(const ListValue* args) { |
| +void SigninScreenHandler::HandleAuthenticateUser(const base::ListValue* args) { |
| std::string username; |
| std::string password; |
| if (!args->GetString(0, &username) || |
| !args->GetString(1, &password)) { |
| + NOTREACHED(); |
| return; |
| } |
| delegate_->Login(username, password); |
| } |
| +void SigninScreenHandler::HandleLaunchIncognito(const base::ListValue* args) { |
| + delegate_->LoginAsGuest(); |
| +} |
| + |
| +void SigninScreenHandler::HandleShutdownSystem(const base::ListValue* args) { |
| + DCHECK(CrosLibrary::Get()->EnsureLoaded()); |
| + CrosLibrary::Get()->GetPowerLibrary()->RequestShutdown(); |
| +} |
| + |
| +void SigninScreenHandler::HandleRemoveUser(const base::ListValue* args) { |
| + std::string email; |
| + if (!args->GetString(0, &email)) { |
| + NOTREACHED(); |
| + return; |
| + } |
| + |
| + UserManager::Get()->RemoveUserFromList(email); |
| +} |
| + |
| } // namespace chromeos |