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

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

Issue 7461142: [ChromeOS] Assorted WebUI login fixes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/stringprintf.h" 8 #include "base/stringprintf.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "chrome/browser/chromeos/cros/cros_library.h" 10 #include "chrome/browser/chromeos/cros/cros_library.h"
(...skipping 20 matching lines...) Expand all
31 const char kGaiaExtStartPage[] = 31 const char kGaiaExtStartPage[] =
32 "chrome-extension://mfffpogegjflfpflabcdkioaeobkgjik/main.html"; 32 "chrome-extension://mfffpogegjflfpflabcdkioaeobkgjik/main.html";
33 33
34 // User dictionary keys. 34 // User dictionary keys.
35 const char kKeyName[] = "name"; 35 const char kKeyName[] = "name";
36 const char kKeyEmailAddress[] = "emailAddress"; 36 const char kKeyEmailAddress[] = "emailAddress";
37 const char kKeyCanRemove[] = "canRemove"; 37 const char kKeyCanRemove[] = "canRemove";
38 const char kKeyImageUrl[] = "imageUrl"; 38 const char kKeyImageUrl[] = "imageUrl";
39 const char kKeyOauthTokenStatus[] = "oauthTokenStatus"; 39 const char kKeyOauthTokenStatus[] = "oauthTokenStatus";
40 40
41 // Max number of users to show.
42 const int kMaxUsers = 5;
43
41 // Sanitize emails. Currently, it only ensures all emails have a domain. 44 // Sanitize emails. Currently, it only ensures all emails have a domain.
42 std::string SanitizeEmail(const std::string& email) { 45 std::string SanitizeEmail(const std::string& email) {
43 std::string sanitized(email); 46 std::string sanitized(email);
44 47
45 // Apply a default domain if necessary. 48 // Apply a default domain if necessary.
46 if (sanitized.find('@') == std::string::npos) 49 if (sanitized.find('@') == std::string::npos)
47 sanitized += kDefaultDomain; 50 sanitized += kDefaultDomain;
48 51
49 return sanitized; 52 return sanitized;
50 } 53 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 oobe_ui_ = oobe_ui; 104 oobe_ui_ = oobe_ui;
102 if (!page_is_ready()) { 105 if (!page_is_ready()) {
103 show_on_init_ = true; 106 show_on_init_ = true;
104 return; 107 return;
105 } 108 }
106 109
107 if (oobe_ui) { 110 if (oobe_ui) {
108 // Shows new user sign-in for OOBE. 111 // Shows new user sign-in for OOBE.
109 HandleShowAddUser(NULL); 112 HandleShowAddUser(NULL);
110 } else { 113 } else {
111 // Populates and shows account picker for usual sign-in flow. 114 // Populates account picker. Animation is turned off for now until we
112 SendUserList(); 115 // figure out how to make it fast enough.
113 ShowScreen(kAccountPickerScreen, NULL); 116 SendUserList(false);
117
118 // Show sign-in UI if there is no visible users.
119 if (WebUILoginDisplay::GetInstance()->users().empty())
120 HandleShowAddUser(NULL);
121 else
122 ShowScreen(kAccountPickerScreen, NULL);
114 } 123 }
115 } 124 }
116 125
117 // SigninScreenHandler, private: ----------------------------------------------- 126 // SigninScreenHandler, private: -----------------------------------------------
118 127
119 void SigninScreenHandler::Initialize() { 128 void SigninScreenHandler::Initialize() {
120 if (show_on_init_) { 129 if (show_on_init_) {
121 show_on_init_ = false; 130 show_on_init_ = false;
122 Show(oobe_ui_); 131 Show(oobe_ui_);
123 } 132 }
(...skipping 14 matching lines...) Expand all
138 NewCallback(this, &SigninScreenHandler::HandleShutdownSystem)); 147 NewCallback(this, &SigninScreenHandler::HandleShutdownSystem));
139 web_ui_->RegisterMessageCallback("removeUser", 148 web_ui_->RegisterMessageCallback("removeUser",
140 NewCallback(this, &SigninScreenHandler::HandleRemoveUser)); 149 NewCallback(this, &SigninScreenHandler::HandleRemoveUser));
141 web_ui_->RegisterMessageCallback("toggleEnrollmentScreen", 150 web_ui_->RegisterMessageCallback("toggleEnrollmentScreen",
142 NewCallback(this, &SigninScreenHandler::HandleToggleEnrollmentScreen)); 151 NewCallback(this, &SigninScreenHandler::HandleToggleEnrollmentScreen));
143 web_ui_->RegisterMessageCallback("launchHelpApp", 152 web_ui_->RegisterMessageCallback("launchHelpApp",
144 NewCallback(this, &SigninScreenHandler::HandleLaunchHelpApp)); 153 NewCallback(this, &SigninScreenHandler::HandleLaunchHelpApp));
145 } 154 }
146 155
147 void SigninScreenHandler::HandleGetUsers(const base::ListValue* args) { 156 void SigninScreenHandler::HandleGetUsers(const base::ListValue* args) {
148 SendUserList(); 157 SendUserList(false);
149 } 158 }
150 159
151 void SigninScreenHandler::ClearAndEnablePassword() { 160 void SigninScreenHandler::ClearAndEnablePassword() {
152 web_ui_->CallJavascriptFunction("cr.ui.Oobe.resetSigninUI"); 161 web_ui_->CallJavascriptFunction("cr.ui.Oobe.resetSigninUI");
153 } 162 }
154 163
155 void SigninScreenHandler::OnLoginSuccess(const std::string& username) { 164 void SigninScreenHandler::OnLoginSuccess(const std::string& username) {
156 base::StringValue username_value(username); 165 base::StringValue username_value(username);
157 web_ui_->CallJavascriptFunction("cr.ui.Oobe.onLoginSuccess", username_value); 166 web_ui_->CallJavascriptFunction("cr.ui.Oobe.onLoginSuccess", username_value);
158 } 167 }
159 168
160 void SigninScreenHandler::ShowError(const std::string& error_text, 169 void SigninScreenHandler::OnUserRemoved(const std::string& username) {
170 SendUserList(false);
171 }
172
173 void SigninScreenHandler::ShowError(int login_attempts,
174 const std::string& error_text,
161 const std::string& help_link_text, 175 const std::string& help_link_text,
162 HelpAppLauncher::HelpTopic help_topic_id) { 176 HelpAppLauncher::HelpTopic help_topic_id) {
177 base::FundamentalValue login_attempts_value(login_attempts);
163 base::StringValue error_message(error_text); 178 base::StringValue error_message(error_text);
164 base::StringValue help_link(help_link_text); 179 base::StringValue help_link(help_link_text);
165 base::FundamentalValue help_id(static_cast<int>(help_topic_id)); 180 base::FundamentalValue help_id(static_cast<int>(help_topic_id));
166 web_ui_->CallJavascriptFunction("cr.ui.Oobe.showSignInError", 181 web_ui_->CallJavascriptFunction("cr.ui.Oobe.showSignInError",
182 login_attempts_value,
167 error_message, 183 error_message,
168 help_link, 184 help_link,
169 help_id); 185 help_id);
170 } 186 }
171 187
172 void SigninScreenHandler::HandleCompleteLogin(const base::ListValue* args) { 188 void SigninScreenHandler::HandleCompleteLogin(const base::ListValue* args) {
173 std::string username; 189 std::string username;
174 std::string password; 190 std::string password;
175 if (!args->GetString(0, &username) || 191 if (!args->GetString(0, &username) ||
176 !args->GetString(1, &password)) { 192 !args->GetString(1, &password)) {
(...skipping 27 matching lines...) Expand all
204 CrosLibrary::Get()->GetPowerLibrary()->RequestShutdown(); 220 CrosLibrary::Get()->GetPowerLibrary()->RequestShutdown();
205 } 221 }
206 222
207 void SigninScreenHandler::HandleRemoveUser(const base::ListValue* args) { 223 void SigninScreenHandler::HandleRemoveUser(const base::ListValue* args) {
208 std::string email; 224 std::string email;
209 if (!args->GetString(0, &email)) { 225 if (!args->GetString(0, &email)) {
210 NOTREACHED(); 226 NOTREACHED();
211 return; 227 return;
212 } 228 }
213 229
214 UserManager::Get()->RemoveUserFromList(email); 230 delegate_->RemoveUser(email);
215 } 231 }
216 232
217 void SigninScreenHandler::HandleShowAddUser(const base::ListValue* args) { 233 void SigninScreenHandler::HandleShowAddUser(const base::ListValue* args) {
218 if (extension_driven_) { 234 if (extension_driven_) {
219 DictionaryValue params; 235 DictionaryValue params;
220 params.SetString("startUrl", kGaiaExtStartPage); 236 params.SetString("startUrl", kGaiaExtStartPage);
221 237
222 std::string email; 238 std::string email;
223 // |args| can be null if it's OOBE. 239 // |args| can be null if it's OOBE.
224 if (args && args->GetString(0, &email)) 240 if (args && args->GetString(0, &email))
(...skipping 17 matching lines...) Expand all
242 return; 258 return;
243 } 259 }
244 260
245 if (!help_app_.get()) 261 if (!help_app_.get())
246 help_app_ = new HelpAppLauncher( 262 help_app_ = new HelpAppLauncher(
247 WebUILoginDisplay::GetLoginWindow()->GetNativeWindow()); 263 WebUILoginDisplay::GetLoginWindow()->GetNativeWindow());
248 help_app_->ShowHelpTopic( 264 help_app_->ShowHelpTopic(
249 static_cast<HelpAppLauncher::HelpTopic>(help_topic_id)); 265 static_cast<HelpAppLauncher::HelpTopic>(help_topic_id));
250 } 266 }
251 267
252 void SigninScreenHandler::SendUserList() { 268 void SigninScreenHandler::SendUserList(bool animated) {
269 bool show_guest = WebUILoginDisplay::GetInstance()->show_guest();
270
271 size_t max_non_owner_users = show_guest ? kMaxUsers - 2 : kMaxUsers - 1;
272 size_t non_owner_count = 0;
273
253 ListValue users_list; 274 ListValue users_list;
275 UserVector users = WebUILoginDisplay::GetInstance()->users();
254 276
255 // Grab the users from the user manager.
256 UserVector users = UserManager::Get()->GetUsers();
257 bool single_user = users.size() == 1; 277 bool single_user = users.size() == 1;
258 for (UserVector::const_iterator it = users.begin(); 278 for (UserVector::const_iterator it = users.begin();
259 it != users.end(); ++it) { 279 it != users.end(); ++it) {
260 const std::string& email = it->email(); 280 const std::string& email = it->email();
281 bool is_owner = email == UserCrosSettingsProvider::cached_owner();
261 282
262 DictionaryValue* user_dict = new DictionaryValue(); 283 if (non_owner_count < max_non_owner_users || is_owner) {
263 user_dict->SetString(kKeyName, it->GetDisplayName()); 284 DictionaryValue* user_dict = new DictionaryValue();
264 user_dict->SetString(kKeyEmailAddress, email); 285 user_dict->SetString(kKeyName, it->GetDisplayName());
265 user_dict->SetInteger(kKeyOauthTokenStatus, it->oauth_token_status()); 286 user_dict->SetString(kKeyEmailAddress, email);
287 user_dict->SetInteger(kKeyOauthTokenStatus, it->oauth_token_status());
266 288
267 // Single user check here is necessary because owner info might not be 289 // Single user check here is necessary because owner info might not be
268 // available when running into login screen on first boot. 290 // available when running into login screen on first boot.
269 // See http://crosbug.com/12723 291 // See http://crosbug.com/12723
270 user_dict->SetBoolean(kKeyCanRemove, 292 user_dict->SetBoolean(kKeyCanRemove,
271 !single_user && 293 !single_user &&
272 !email.empty() && 294 !email.empty() &&
273 email != UserCrosSettingsProvider::cached_owner()); 295 !is_owner);
274 296
275 if (!email.empty()) { 297 if (!email.empty()) {
276 long long timestamp = base::TimeTicks::Now().ToInternalValue(); 298 long long timestamp = base::TimeTicks::Now().ToInternalValue();
277 std::string image_url( 299 std::string image_url(
278 StringPrintf("%s%s?id=%lld", 300 StringPrintf("%s%s?id=%lld",
279 chrome::kChromeUIUserImageURL, 301 chrome::kChromeUIUserImageURL,
280 email.c_str(), 302 email.c_str(),
281 timestamp)); 303 timestamp));
282 user_dict->SetString(kKeyImageUrl, image_url); 304 user_dict->SetString(kKeyImageUrl, image_url);
283 } else { 305 } else {
284 std::string image_url(std::string(chrome::kChromeUIScheme) + "://" + 306 std::string image_url(std::string(chrome::kChromeUIScheme) + "://" +
285 std::string(chrome::kChromeUIThemePath) + "/IDR_LOGIN_DEFAULT_USER"); 307 std::string(chrome::kChromeUIThemePath) +
286 user_dict->SetString(kKeyImageUrl, image_url); 308 "/IDR_LOGIN_DEFAULT_USER");
309 user_dict->SetString(kKeyImageUrl, image_url);
310 }
311
312 users_list.Append(user_dict);
313 if (!is_owner)
314 ++non_owner_count;
287 } 315 }
288
289 users_list.Append(user_dict);
290 } 316 }
291 317
292 // Add the Guest to the user list. 318 if (show_guest) {
293 DictionaryValue* guest_dict = new DictionaryValue(); 319 // Add the Guest to the user list.
294 guest_dict->SetString(kKeyName, l10n_util::GetStringUTF16(IDS_GUEST)); 320 DictionaryValue* guest_dict = new DictionaryValue();
295 guest_dict->SetString(kKeyEmailAddress, ""); 321 guest_dict->SetString(kKeyName, l10n_util::GetStringUTF16(IDS_GUEST));
296 guest_dict->SetBoolean(kKeyCanRemove, false); 322 guest_dict->SetString(kKeyEmailAddress, "");
297 guest_dict->SetInteger(kKeyOauthTokenStatus, 323 guest_dict->SetBoolean(kKeyCanRemove, false);
298 UserManager::OAUTH_TOKEN_STATUS_UNKNOWN); 324 guest_dict->SetInteger(kKeyOauthTokenStatus,
299 std::string image_url(std::string(chrome::kChromeUIScheme) + "://" + 325 UserManager::OAUTH_TOKEN_STATUS_UNKNOWN);
300 std::string(chrome::kChromeUIThemePath) + "/IDR_LOGIN_GUEST"); 326 std::string image_url(std::string(chrome::kChromeUIScheme) + "://" +
301 guest_dict->SetString(kKeyImageUrl, image_url); 327 std::string(chrome::kChromeUIThemePath) + "/IDR_LOGIN_GUEST");
302 users_list.Append(guest_dict); 328 guest_dict->SetString(kKeyImageUrl, image_url);
329 users_list.Append(guest_dict);
330 }
303 331
304 // Call the Javascript callback 332 // Call the Javascript callback
333 base::FundamentalValue animated_value(animated);
305 web_ui_->CallJavascriptFunction("login.AccountPickerScreen.loadUsers", 334 web_ui_->CallJavascriptFunction("login.AccountPickerScreen.loadUsers",
306 users_list); 335 users_list, animated_value);
307 } 336 }
308 337
309 } // namespace chromeos 338 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698