| 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/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/values.h" | 8 #include "base/values.h" |
| 9 #include "base/stringprintf.h" |
| 10 #include "chrome/browser/chromeos/cros/cros_library.h" |
| 11 #include "chrome/browser/chromeos/cros/power_library.h" |
| 12 #include "chrome/browser/chromeos/login/user_manager.h" |
| 9 #include "chrome/browser/chromeos/login/webui_login_display.h" | 13 #include "chrome/browser/chromeos/login/webui_login_display.h" |
| 10 #include "chrome/common/chrome_switches.h" | 14 #include "chrome/common/chrome_switches.h" |
| 15 #include "chrome/common/url_constants.h" |
| 11 #include "grit/generated_resources.h" | 16 #include "grit/generated_resources.h" |
| 12 #include "ui/base/l10n/l10n_util.h" | 17 #include "ui/base/l10n/l10n_util.h" |
| 13 | 18 |
| 14 namespace { | 19 namespace { |
| 15 | 20 |
| 16 // Sign in screen id. | 21 // Sign in screen id. |
| 17 const char kSigninScreen[] = "signin"; | 22 const char kSigninScreen[] = "signin"; |
| 18 // Sign in screen id for GAIA extension hosted content. | 23 // Sign in screen id for GAIA extension hosted content. |
| 19 const char kGaiaSigninScreen[] = "gaia-signin"; | 24 const char kGaiaSigninScreen[] = "gaia-signin"; |
| 20 // Start page of GAIA authentication extension. | 25 // Start page of GAIA authentication extension. |
| 21 const char kGaiaExtStartPage[] = | 26 const char kGaiaExtStartPage[] = |
| 22 "chrome-extension://mfffpogegjflfpflabcdkioaeobkgjik/main.html"; | 27 "chrome-extension://mfffpogegjflfpflabcdkioaeobkgjik/main.html"; |
| 23 | 28 |
| 29 // User dictionary keys. |
| 30 const char kKeyName[] = "name"; |
| 31 const char kKeyEmailAddress[] = "emailAddress"; |
| 32 const char kKeyCanRemove[] = "canRemove"; |
| 33 const char kKeyImageUrl[] = "imageUrl"; |
| 34 |
| 24 } // namespace | 35 } // namespace |
| 25 | 36 |
| 26 namespace chromeos { | 37 namespace chromeos { |
| 27 | 38 |
| 28 SigninScreenHandler::SigninScreenHandler() | 39 SigninScreenHandler::SigninScreenHandler() |
| 29 : delegate_(WebUILoginDisplay::GetInstance()), | 40 : delegate_(WebUILoginDisplay::GetInstance()), |
| 30 show_on_init_(false), | 41 show_on_init_(false), |
| 31 extension_driven_( | 42 extension_driven_( |
| 32 CommandLine::ForCurrentProcess()->HasSwitch( | 43 CommandLine::ForCurrentProcess()->HasSwitch( |
| 33 switches::kWebUIGaiaLogin)) { | 44 switches::kWebUIGaiaLogin)) { |
| 34 delegate_->set_login_handler(this); | 45 delegate_->SetWebUIHandler(this); |
| 35 } | 46 } |
| 36 | 47 |
| 37 void SigninScreenHandler::GetLocalizedStrings( | 48 void SigninScreenHandler::GetLocalizedStrings( |
| 38 DictionaryValue* localized_strings) { | 49 DictionaryValue* localized_strings) { |
| 39 localized_strings->SetString("signinScreenTitle", | 50 localized_strings->SetString("signinScreenTitle", |
| 40 l10n_util::GetStringUTF16(IDS_LOGIN_TITLE)); | 51 l10n_util::GetStringUTF16(IDS_LOGIN_TITLE)); |
| 41 localized_strings->SetString("emailHint", | 52 localized_strings->SetString("emailHint", |
| 42 l10n_util::GetStringUTF16(IDS_LOGIN_USERNAME)); | 53 l10n_util::GetStringUTF16(IDS_LOGIN_USERNAME)); |
| 43 localized_strings->SetString("passwordHint", | 54 localized_strings->SetString("passwordHint", |
| 44 l10n_util::GetStringUTF16(IDS_LOGIN_PASSWORD)); | 55 l10n_util::GetStringUTF16(IDS_LOGIN_PASSWORD)); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 56 show_on_init_ = true; | 67 show_on_init_ = true; |
| 57 return; | 68 return; |
| 58 } | 69 } |
| 59 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kWebUIGaiaLogin)) { | 70 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kWebUIGaiaLogin)) { |
| 60 ShowScreen(kGaiaSigninScreen, kGaiaExtStartPage); | 71 ShowScreen(kGaiaSigninScreen, kGaiaExtStartPage); |
| 61 } else { | 72 } else { |
| 62 ShowScreen(kSigninScreen, NULL); | 73 ShowScreen(kSigninScreen, NULL); |
| 63 } | 74 } |
| 64 } | 75 } |
| 65 | 76 |
| 77 // SigninScreenHandler, private: ----------------------------------------------- |
| 78 |
| 66 void SigninScreenHandler::Initialize() { | 79 void SigninScreenHandler::Initialize() { |
| 67 if (show_on_init_) { | 80 if (show_on_init_) { |
| 68 show_on_init_ = false; | 81 show_on_init_ = false; |
| 69 Show(); | 82 Show(); |
| 70 } | 83 } |
| 71 } | 84 } |
| 72 | 85 |
| 73 void SigninScreenHandler::RegisterMessages() { | 86 void SigninScreenHandler::RegisterMessages() { |
| 87 web_ui_->RegisterMessageCallback("authenticateUser", |
| 88 NewCallback(this, &SigninScreenHandler::HandleAuthenticateUser)); |
| 74 web_ui_->RegisterMessageCallback("completeLogin", | 89 web_ui_->RegisterMessageCallback("completeLogin", |
| 75 NewCallback(this, &SigninScreenHandler::HandleCompleteLogin)); | 90 NewCallback(this, &SigninScreenHandler::HandleCompleteLogin)); |
| 76 web_ui_->RegisterMessageCallback("authenticateUser", | 91 web_ui_->RegisterMessageCallback("getUsers", |
| 77 NewCallback(this, &SigninScreenHandler::HandleAuthenticateUser)); | 92 NewCallback(this, &SigninScreenHandler::HandleGetUsers)); |
| 93 web_ui_->RegisterMessageCallback("launchIncognito", |
| 94 NewCallback(this, &SigninScreenHandler::HandleLaunchIncognito)); |
| 95 web_ui_->RegisterMessageCallback("shutdownSystem", |
| 96 NewCallback(this, &SigninScreenHandler::HandleShutdownSystem)); |
| 97 web_ui_->RegisterMessageCallback("removeUser", |
| 98 NewCallback(this, &SigninScreenHandler::HandleRemoveUser)); |
| 99 } |
| 100 |
| 101 void SigninScreenHandler::HandleGetUsers(const base::ListValue* args) { |
| 102 ListValue users_list; |
| 103 |
| 104 // Grab the users from the user manager. |
| 105 UserVector users = UserManager::Get()->GetUsers(); |
| 106 for (UserVector::const_iterator it = users.begin(); |
| 107 it != users.end(); ++it) { |
| 108 const std::string& email = it->email(); |
| 109 |
| 110 DictionaryValue* user_dict = new DictionaryValue(); |
| 111 user_dict->SetString(kKeyName, it->GetDisplayName()); |
| 112 user_dict->SetString(kKeyEmailAddress, email); |
| 113 user_dict->SetBoolean(kKeyCanRemove, !email.empty()); |
| 114 |
| 115 if (!email.empty()) { |
| 116 long long timestamp = base::TimeTicks::Now().ToInternalValue(); |
| 117 std::string image_url( |
| 118 StringPrintf("%s%s?id=%lld", |
| 119 chrome::kChromeUIUserImageURL, |
| 120 email.c_str(), |
| 121 timestamp)); |
| 122 user_dict->SetString(kKeyImageUrl, image_url); |
| 123 } else { |
| 124 std::string image_url(std::string(chrome::kChromeUIScheme) + "://" + |
| 125 std::string(chrome::kChromeUIThemePath) + "/IDR_LOGIN_DEFAULT_USER"); |
| 126 user_dict->SetString(kKeyImageUrl, image_url); |
| 127 } |
| 128 |
| 129 users_list.Append(user_dict); |
| 130 } |
| 131 |
| 132 // Add the Guest to the user list. |
| 133 DictionaryValue* guest_dict = new DictionaryValue(); |
| 134 guest_dict->SetString(kKeyName, l10n_util::GetStringUTF16(IDS_GUEST)); |
| 135 guest_dict->SetString(kKeyEmailAddress, ""); |
| 136 guest_dict->SetBoolean(kKeyCanRemove, false); |
| 137 std::string image_url(std::string(chrome::kChromeUIScheme) + "://" + |
| 138 std::string(chrome::kChromeUIThemePath) + "/IDR_LOGIN_GUEST"); |
| 139 guest_dict->SetString(kKeyImageUrl, image_url); |
| 140 users_list.Append(guest_dict); |
| 141 |
| 142 // Call the Javascript callback |
| 143 web_ui_->CallJavascriptFunction("getUsersCallback", users_list); |
| 78 } | 144 } |
| 79 | 145 |
| 80 void SigninScreenHandler::ClearAndEnablePassword() { | 146 void SigninScreenHandler::ClearAndEnablePassword() { |
| 81 web_ui_->CallJavascriptFunction("login.SigninScreen.reset"); | 147 web_ui_->CallJavascriptFunction("login.SigninScreen.reset"); |
| 82 } | 148 } |
| 83 | 149 |
| 84 void SigninScreenHandler::ShowError(const std::string& error_text, | 150 void SigninScreenHandler::ShowError(const std::string& error_text, |
| 85 const std::string& help_link_text, | 151 const std::string& help_link_text, |
| 86 HelpAppLauncher::HelpTopic help_topic_id) { | 152 HelpAppLauncher::HelpTopic help_topic_id) { |
| 87 // TODO(xiyuan): Pass error + help to a propery error UI and save topic id. | 153 // TODO(xiyuan): Pass error + help to a propery error UI and save topic id. |
| 88 ClearAndEnablePassword(); | 154 ClearAndEnablePassword(); |
| 89 } | 155 } |
| 90 | 156 |
| 91 void SigninScreenHandler::HandleCompleteLogin(const ListValue* args) { | 157 void SigninScreenHandler::HandleCompleteLogin(const base::ListValue* args) { |
| 92 std::string username; | 158 std::string username; |
| 93 std::string password; | 159 std::string password; |
| 94 if (!args->GetString(0, &username) || | 160 if (!args->GetString(0, &username) || |
| 95 !args->GetString(1, &password)) { | 161 !args->GetString(1, &password)) { |
| 96 NOTREACHED(); | 162 NOTREACHED(); |
| 97 return; | 163 return; |
| 98 } | 164 } |
| 99 | 165 |
| 100 delegate_->CompleteLogin(username, password); | 166 delegate_->CompleteLogin(username, password); |
| 101 } | 167 } |
| 102 | 168 |
| 103 void SigninScreenHandler::HandleAuthenticateUser(const ListValue* args) { | 169 void SigninScreenHandler::HandleAuthenticateUser(const base::ListValue* args) { |
| 104 std::string username; | 170 std::string username; |
| 105 std::string password; | 171 std::string password; |
| 106 if (!args->GetString(0, &username) || | 172 if (!args->GetString(0, &username) || |
| 107 !args->GetString(1, &password)) { | 173 !args->GetString(1, &password)) { |
| 108 NOTREACHED(); | 174 NOTREACHED(); |
| 109 return; | 175 return; |
| 110 } | 176 } |
| 111 | 177 |
| 112 delegate_->Login(username, password); | 178 delegate_->Login(username, password); |
| 113 } | 179 } |
| 114 | 180 |
| 181 void SigninScreenHandler::HandleLaunchIncognito(const base::ListValue* args) { |
| 182 delegate_->LoginAsGuest(); |
| 183 } |
| 184 |
| 185 void SigninScreenHandler::HandleShutdownSystem(const base::ListValue* args) { |
| 186 DCHECK(CrosLibrary::Get()->EnsureLoaded()); |
| 187 CrosLibrary::Get()->GetPowerLibrary()->RequestShutdown(); |
| 188 } |
| 189 |
| 190 void SigninScreenHandler::HandleRemoveUser(const base::ListValue* args) { |
| 191 std::string email; |
| 192 if (!args->GetString(0, &email)) { |
| 193 NOTREACHED(); |
| 194 return; |
| 195 } |
| 196 |
| 197 UserManager::Get()->RemoveUserFromList(email); |
| 198 } |
| 199 |
| 115 } // namespace chromeos | 200 } // namespace chromeos |
| OLD | NEW |