Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3011)

Unified Diff: chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc

Issue 7382001: [ChromeOS] WebUI OOBE/Login refactoring. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sync and address comments in set #1 Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..fdc44b31e0d0ab66ac7eb1fbbb0b5484cd491a03 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,6 +19,12 @@ 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 {
@@ -21,7 +32,7 @@ namespace chromeos {
SigninScreenHandler::SigninScreenHandler()
: delegate_(WebUILoginDisplay::GetInstance()),
show_on_init_(false) {
- delegate_->set_login_handler(this);
+ delegate_->SetWebUIHandler(this);
}
void SigninScreenHandler::GetLocalizedStrings(
@@ -46,6 +57,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,8 +67,71 @@ 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() {
@@ -69,15 +145,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

Powered by Google App Engine
This is Rietveld 408576698