| 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 3d3a0008f7ab063f3b9c80d002ea1b7605621acf..93c263f0b3c5e0ea9c2afcddf105b7c8918b5401 100644
|
| --- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
|
| +++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
|
| @@ -6,8 +6,13 @@
|
|
|
| #include "base/command_line.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/chrome_switches.h"
|
| +#include "chrome/common/url_constants.h"
|
| #include "grit/generated_resources.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
|
|
| @@ -21,6 +26,12 @@ const char kGaiaSigninScreen[] = "gaia-signin";
|
| const char kGaiaExtStartPage[] =
|
| "chrome-extension://mfffpogegjflfpflabcdkioaeobkgjik/main.html";
|
|
|
| +// User dictionary keys.
|
| +const char kKeyName[] = "name";
|
| +const char kKeyEmailAddress[] = "emailAddress";
|
| +const char kKeyCanRemove[] = "canRemove";
|
| +const char kKeyImageUrl[] = "imageUrl";
|
| +
|
| } // namespace
|
|
|
| namespace chromeos {
|
| @@ -31,7 +42,7 @@ SigninScreenHandler::SigninScreenHandler()
|
| extension_driven_(
|
| CommandLine::ForCurrentProcess()->HasSwitch(
|
| switches::kWebUIGaiaLogin)) {
|
| - delegate_->set_login_handler(this);
|
| + delegate_->SetWebUIHandler(this);
|
| }
|
|
|
| void SigninScreenHandler::GetLocalizedStrings(
|
| @@ -63,6 +74,8 @@ void SigninScreenHandler::Show() {
|
| }
|
| }
|
|
|
| +// SigninScreenHandler, private: -----------------------------------------------
|
| +
|
| void SigninScreenHandler::Initialize() {
|
| if (show_on_init_) {
|
| show_on_init_ = false;
|
| @@ -71,10 +84,63 @@ void SigninScreenHandler::Initialize() {
|
| }
|
|
|
| void SigninScreenHandler::RegisterMessages() {
|
| - web_ui_->RegisterMessageCallback("completeLogin",
|
| - NewCallback(this, &SigninScreenHandler::HandleCompleteLogin));
|
| web_ui_->RegisterMessageCallback("authenticateUser",
|
| NewCallback(this, &SigninScreenHandler::HandleAuthenticateUser));
|
| + web_ui_->RegisterMessageCallback("completeLogin",
|
| + NewCallback(this, &SigninScreenHandler::HandleCompleteLogin));
|
| + web_ui_->RegisterMessageCallback("getUsers",
|
| + NewCallback(this, &SigninScreenHandler::HandleGetUsers));
|
| + web_ui_->RegisterMessageCallback("launchIncognito",
|
| + NewCallback(this, &SigninScreenHandler::HandleLaunchIncognito));
|
| + web_ui_->RegisterMessageCallback("shutdownSystem",
|
| + NewCallback(this, &SigninScreenHandler::HandleShutdownSystem));
|
| + web_ui_->RegisterMessageCallback("removeUser",
|
| + NewCallback(this, &SigninScreenHandler::HandleRemoveUser));
|
| +}
|
| +
|
| +void SigninScreenHandler::HandleGetUsers(const base::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() {
|
| @@ -88,7 +154,7 @@ void SigninScreenHandler::ShowError(const std::string& error_text,
|
| ClearAndEnablePassword();
|
| }
|
|
|
| -void SigninScreenHandler::HandleCompleteLogin(const ListValue* args) {
|
| +void SigninScreenHandler::HandleCompleteLogin(const base::ListValue* args) {
|
| std::string username;
|
| std::string password;
|
| if (!args->GetString(0, &username) ||
|
| @@ -100,7 +166,7 @@ void SigninScreenHandler::HandleCompleteLogin(const ListValue* args) {
|
| delegate_->CompleteLogin(username, password);
|
| }
|
|
|
| -void SigninScreenHandler::HandleAuthenticateUser(const ListValue* args) {
|
| +void SigninScreenHandler::HandleAuthenticateUser(const base::ListValue* args) {
|
| std::string username;
|
| std::string password;
|
| if (!args->GetString(0, &username) ||
|
| @@ -112,4 +178,23 @@ void SigninScreenHandler::HandleAuthenticateUser(const ListValue* args) {
|
| 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
|
|
|