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

Side by Side Diff: chrome/browser/chromeos/login/user_manager.cc

Issue 7590002: [cros] Added histograms for user image usage (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: No write to map for default images 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/chromeos/login/user_manager.h" 5 #include "chrome/browser/chromeos/login/user_manager.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 #include "base/file_path.h" 9 #include "base/file_path.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
11 #include "base/lazy_instance.h" 11 #include "base/lazy_instance.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/metrics/histogram.h"
13 #include "base/path_service.h" 14 #include "base/path_service.h"
14 #include "base/string_util.h" 15 #include "base/string_util.h"
15 #include "base/stringprintf.h" 16 #include "base/stringprintf.h"
16 #include "base/time.h" 17 #include "base/time.h"
17 #include "base/utf_string_conversions.h" 18 #include "base/utf_string_conversions.h"
18 #include "base/values.h" 19 #include "base/values.h"
19 #include "crypto/nss_util.h" 20 #include "crypto/nss_util.h"
20 #include "chrome/browser/browser_process.h" 21 #include "chrome/browser/browser_process.h"
21 #include "chrome/browser/chromeos/cros/cros_library.h" 22 #include "chrome/browser/chromeos/cros/cros_library.h"
22 #include "chrome/browser/chromeos/cros/cryptohome_library.h" 23 #include "chrome/browser/chromeos/cros/cryptohome_library.h"
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 } // namespace 217 } // namespace
217 218
218 UserManager::User::User() : oauth_token_status_(OAUTH_TOKEN_STATUS_UNKNOWN), 219 UserManager::User::User() : oauth_token_status_(OAUTH_TOKEN_STATUS_UNKNOWN),
219 is_displayname_unique_(false) { 220 is_displayname_unique_(false) {
220 image_ = *ResourceBundle::GetSharedInstance().GetBitmapNamed( 221 image_ = *ResourceBundle::GetSharedInstance().GetBitmapNamed(
221 kDefaultImageResources[0]); 222 kDefaultImageResources[0]);
222 } 223 }
223 224
224 UserManager::User::~User() {} 225 UserManager::User::~User() {}
225 226
227 void UserManager::User::SetImage(const SkBitmap& image,
228 int default_image_index) {
229 image_ = image;
230 default_image_index_ = default_image_index;
231 }
232
226 std::string UserManager::User::GetDisplayName() const { 233 std::string UserManager::User::GetDisplayName() const {
227 size_t i = email_.find('@'); 234 size_t i = email_.find('@');
228 if (i == 0 || i == std::string::npos) { 235 if (i == 0 || i == std::string::npos) {
229 return email_; 236 return email_;
230 } 237 }
231 return email_.substr(0, i); 238 return email_.substr(0, i);
232 } 239 }
233 240
234 bool UserManager::User::NeedsNameTooltip() const { 241 bool UserManager::User::NeedsNameTooltip() const {
235 return !is_displayname_unique_; 242 return !is_displayname_unique_;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 } else { 303 } else {
297 int oauth_token_status = OAUTH_TOKEN_STATUS_UNKNOWN; 304 int oauth_token_status = OAUTH_TOKEN_STATUS_UNKNOWN;
298 if (prefs_oauth_status && 305 if (prefs_oauth_status &&
299 prefs_oauth_status->GetIntegerWithoutPathExpansion(email, 306 prefs_oauth_status->GetIntegerWithoutPathExpansion(email,
300 &oauth_token_status)) { 307 &oauth_token_status)) {
301 user.set_oauth_token_status( 308 user.set_oauth_token_status(
302 static_cast<OAuthTokenStatus>(oauth_token_status)); 309 static_cast<OAuthTokenStatus>(oauth_token_status));
303 } 310 }
304 } 311 }
305 312
306 UserImages::const_iterator image_it = user_images_.find(email);
307 std::string image_path; 313 std::string image_path;
308 if (image_it == user_images_.end()) { 314 // Get account image path.
309 // Get account image path. 315 if (prefs_images &&
310 if (prefs_images && 316 prefs_images->GetStringWithoutPathExpansion(email, &image_path)) {
311 prefs_images->GetStringWithoutPathExpansion(email, &image_path)) { 317 int default_image_id = kDefaultImagesCount;
312 int default_image_id = kDefaultImagesCount; 318 if (IsDefaultImagePath(image_path, &default_image_id)) {
313 if (IsDefaultImagePath(image_path, &default_image_id)) { 319 DCHECK(default_image_id >= 0);
314 DCHECK(default_image_id < kDefaultImagesCount); 320 DCHECK(default_image_id < kDefaultImagesCount);
315 int resource_id = kDefaultImageResources[default_image_id]; 321 int resource_id = kDefaultImageResources[default_image_id];
316 user.set_image( 322 user.SetImage(
317 *ResourceBundle::GetSharedInstance().GetBitmapNamed( 323 *ResourceBundle::GetSharedInstance().GetBitmapNamed(
318 resource_id)); 324 resource_id),
319 user_images_[email] = user.image(); 325 default_image_id);
320 } else { 326 } else {
327 UserImages::const_iterator image_it = user_images_.find(email);
328 if (image_it == user_images_.end()) {
321 // Insert the default image so we don't send another request if 329 // Insert the default image so we don't send another request if
322 // GetUsers is called twice. 330 // GetUsers is called twice.
323 user_images_[email] = user.image(); 331 user_images_[email] = user.image();
324 image_loader_->Start(email, image_path, false); 332 image_loader_->Start(email, image_path, false);
333 } else {
334 user.SetImage(image_it->second, -1);
325 } 335 }
326 } 336 }
327 } else {
328 user.set_image(image_it->second);
329 } 337 }
330 338
331 // Makes table to determine whether displayname is unique. 339 // Makes table to determine whether displayname is unique.
332 const std::string& display_name = user.GetDisplayName(); 340 const std::string& display_name = user.GetDisplayName();
333 ++display_name_count[display_name]; 341 ++display_name_count[display_name];
334 342
335 users.push_back(user); 343 users.push_back(user);
336 } 344 }
337 } 345 }
338 346
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 std::string user_email = it->email(); 390 std::string user_email = it->email();
383 // Skip the most recent user. 391 // Skip the most recent user.
384 if (email != user_email) { 392 if (email != user_email) {
385 prefs_users_update->Append(Value::CreateStringValue(user_email)); 393 prefs_users_update->Append(Value::CreateStringValue(user_email));
386 } else { 394 } else {
387 logged_in_user_ = *it; 395 logged_in_user_ = *it;
388 } 396 }
389 } 397 }
390 prefs->SavePersistentPrefs(); 398 prefs->SavePersistentPrefs();
391 NotifyOnLogin(); 399 NotifyOnLogin();
392 if (current_user_is_new_) 400 if (current_user_is_new_) {
393 SetDefaultUserImage(email); 401 SetDefaultUserImage(email);
402 } else {
403 int metric = kDefaultImagesCount;
404 if (logged_in_user_.default_image_index() != -1)
405 metric = logged_in_user_.default_image_index();
jar (doing other things) 2011/08/10 17:48:52 personal style nit: not critical: I prefer to cal
406 UMA_HISTOGRAM_ENUMERATION("UserImage.LoggedIn",
407 metric,
408 kDefaultImagesCount + 1);
409 }
394 } 410 }
395 411
396 void UserManager::RemoveUser(const std::string& email, 412 void UserManager::RemoveUser(const std::string& email,
397 RemoveUserDelegate* delegate) { 413 RemoveUserDelegate* delegate) {
398 // Get a copy of the current users. 414 // Get a copy of the current users.
399 std::vector<User> users = GetUsers(); 415 std::vector<User> users = GetUsers();
400 416
401 // Sanity check: we must not remove single user. This check may seem 417 // Sanity check: we must not remove single user. This check may seem
402 // redundant at a first sight because this single user must be an owner and 418 // redundant at a first sight because this single user must be an owner and
403 // we perform special check later in order not to remove an owner. However 419 // we perform special check later in order not to remove an owner. However
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
573 return image_id; 589 return image_id;
574 } 590 }
575 591
576 void UserManager::OnImageLoaded(const std::string& username, 592 void UserManager::OnImageLoaded(const std::string& username,
577 const SkBitmap& image, 593 const SkBitmap& image,
578 bool should_save_image) { 594 bool should_save_image) {
579 DVLOG(1) << "Loaded image for " << username; 595 DVLOG(1) << "Loaded image for " << username;
580 user_images_[username] = image; 596 user_images_[username] = image;
581 User user; 597 User user;
582 user.set_email(username); 598 user.set_email(username);
583 user.set_image(image); 599 user.SetImage(image, -1);
584 if (logged_in_user_.email() == username) 600 if (logged_in_user_.email() == username)
585 logged_in_user_.set_image(image); 601 logged_in_user_.SetImage(image, -1);
586 if (should_save_image) 602 if (should_save_image)
587 SaveUserImage(username, image); 603 SaveUserImage(username, image);
588 NotificationService::current()->Notify( 604 NotificationService::current()->Notify(
589 chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, 605 chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED,
590 Source<UserManager>(this), 606 Source<UserManager>(this),
591 Details<const User>(&user)); 607 Details<const User>(&user));
592 } 608 }
593 609
594 bool UserManager::IsLoggedInAsGuest() const { 610 bool UserManager::IsLoggedInAsGuest() const {
595 return logged_in_user().email() == kGuestUser; 611 return logged_in_user().email() == kGuestUser;
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 } 722 }
707 723
708 void UserManager::NotifyLocalStateChanged() { 724 void UserManager::NotifyLocalStateChanged() {
709 FOR_EACH_OBSERVER( 725 FOR_EACH_OBSERVER(
710 Observer, 726 Observer,
711 observer_list_, 727 observer_list_,
712 LocalStateChanged(this)); 728 LocalStateChanged(this));
713 } 729 }
714 730
715 } // namespace chromeos 731 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698