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/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" |
(...skipping 11 matching lines...) Expand all Loading... |
22 #include "chrome/browser/chromeos/cros/cryptohome_library.h" | 22 #include "chrome/browser/chromeos/cros/cryptohome_library.h" |
23 #include "chrome/browser/chromeos/input_method/input_method_manager.h" | 23 #include "chrome/browser/chromeos/input_method/input_method_manager.h" |
24 #include "chrome/browser/chromeos/login/default_user_images.h" | 24 #include "chrome/browser/chromeos/login/default_user_images.h" |
25 #include "chrome/browser/chromeos/login/login_display.h" | 25 #include "chrome/browser/chromeos/login/login_display.h" |
26 #include "chrome/browser/chromeos/login/ownership_service.h" | 26 #include "chrome/browser/chromeos/login/ownership_service.h" |
27 #include "chrome/browser/chromeos/user_cros_settings_provider.h" | 27 #include "chrome/browser/chromeos/user_cros_settings_provider.h" |
28 #include "chrome/browser/chromeos/wm_ipc.h" | 28 #include "chrome/browser/chromeos/wm_ipc.h" |
29 #include "chrome/browser/defaults.h" | 29 #include "chrome/browser/defaults.h" |
30 #include "chrome/browser/prefs/pref_service.h" | 30 #include "chrome/browser/prefs/pref_service.h" |
31 #include "chrome/browser/prefs/scoped_user_pref_update.h" | 31 #include "chrome/browser/prefs/scoped_user_pref_update.h" |
| 32 #include "chrome/common/chrome_notification_types.h" |
32 #include "chrome/common/chrome_paths.h" | 33 #include "chrome/common/chrome_paths.h" |
33 #include "chrome/common/chrome_switches.h" | 34 #include "chrome/common/chrome_switches.h" |
34 #include "content/browser/browser_thread.h" | 35 #include "content/browser/browser_thread.h" |
35 #include "content/common/notification_service.h" | 36 #include "content/common/notification_service.h" |
36 #include "content/common/notification_type.h" | |
37 #include "ui/base/resource/resource_bundle.h" | 37 #include "ui/base/resource/resource_bundle.h" |
38 #include "ui/gfx/codec/png_codec.h" | 38 #include "ui/gfx/codec/png_codec.h" |
39 | 39 |
40 namespace chromeos { | 40 namespace chromeos { |
41 | 41 |
42 namespace { | 42 namespace { |
43 | 43 |
44 // A vector pref of the users who have logged into the device. | 44 // A vector pref of the users who have logged into the device. |
45 const char kLoggedInUsers[] = "LoggedInUsers"; | 45 const char kLoggedInUsers[] = "LoggedInUsers"; |
46 // A dictionary that maps usernames to file paths to their images. | 46 // A dictionary that maps usernames to file paths to their images. |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 LOG(ERROR) << "Failed to remove user image."; | 96 LOG(ERROR) << "Failed to remove user image."; |
97 return; | 97 return; |
98 } | 98 } |
99 } | 99 } |
100 | 100 |
101 // Updates current user ownership on UI thread. | 101 // Updates current user ownership on UI thread. |
102 void UpdateOwnership(bool is_owner) { | 102 void UpdateOwnership(bool is_owner) { |
103 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 103 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
104 | 104 |
105 g_user_manager.Get().set_current_user_is_owner(is_owner); | 105 g_user_manager.Get().set_current_user_is_owner(is_owner); |
106 NotificationService::current()->Notify(NotificationType::OWNERSHIP_CHECKED, | 106 NotificationService::current()->Notify( |
107 NotificationService::AllSources(), | 107 chrome::NOTIFICATION_OWNERSHIP_CHECKED, |
108 NotificationService::NoDetails()); | 108 NotificationService::AllSources(), |
| 109 NotificationService::NoDetails()); |
109 if (is_owner) { | 110 if (is_owner) { |
110 // Also update cached value. | 111 // Also update cached value. |
111 UserCrosSettingsProvider::UpdateCachedOwner( | 112 UserCrosSettingsProvider::UpdateCachedOwner( |
112 g_user_manager.Get().logged_in_user().email()); | 113 g_user_manager.Get().logged_in_user().email()); |
113 } | 114 } |
114 } | 115 } |
115 | 116 |
116 // Checks current user's ownership on file thread. | 117 // Checks current user's ownership on file thread. |
117 void CheckOwnership() { | 118 void CheckOwnership() { |
118 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 119 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
530 DVLOG(1) << "Loaded image for " << username; | 531 DVLOG(1) << "Loaded image for " << username; |
531 user_images_[username] = image; | 532 user_images_[username] = image; |
532 User user; | 533 User user; |
533 user.set_email(username); | 534 user.set_email(username); |
534 user.set_image(image); | 535 user.set_image(image); |
535 if (logged_in_user_.email() == username) | 536 if (logged_in_user_.email() == username) |
536 logged_in_user_.set_image(image); | 537 logged_in_user_.set_image(image); |
537 if (should_save_image) | 538 if (should_save_image) |
538 SaveUserImage(username, image); | 539 SaveUserImage(username, image); |
539 NotificationService::current()->Notify( | 540 NotificationService::current()->Notify( |
540 NotificationType::LOGIN_USER_IMAGE_CHANGED, | 541 chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, |
541 Source<UserManager>(this), | 542 Source<UserManager>(this), |
542 Details<const User>(&user)); | 543 Details<const User>(&user)); |
543 } | 544 } |
544 | 545 |
545 bool UserManager::IsLoggedInAsGuest() const { | 546 bool UserManager::IsLoggedInAsGuest() const { |
546 return logged_in_user().email() == kGuestUser; | 547 return logged_in_user().email() == kGuestUser; |
547 } | 548 } |
548 | 549 |
549 // Private constructor and destructor. Do nothing. | 550 // Private constructor and destructor. Do nothing. |
550 UserManager::UserManager() | 551 UserManager::UserManager() |
551 : ALLOW_THIS_IN_INITIALIZER_LIST(image_loader_(new UserImageLoader(this))), | 552 : ALLOW_THIS_IN_INITIALIZER_LIST(image_loader_(new UserImageLoader(this))), |
552 current_user_is_owner_(false), | 553 current_user_is_owner_(false), |
553 current_user_is_new_(false), | 554 current_user_is_new_(false), |
554 user_is_logged_in_(false) { | 555 user_is_logged_in_(false) { |
555 registrar_.Add(this, NotificationType::OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED, | 556 registrar_.Add(this, chrome::NOTIFICATION_OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED, |
556 NotificationService::AllSources()); | 557 NotificationService::AllSources()); |
557 } | 558 } |
558 | 559 |
559 UserManager::~UserManager() { | 560 UserManager::~UserManager() { |
560 image_loader_->set_delegate(NULL); | 561 image_loader_->set_delegate(NULL); |
561 } | 562 } |
562 | 563 |
563 FilePath UserManager::GetImagePathForUser(const std::string& username) { | 564 FilePath UserManager::GetImagePathForUser(const std::string& username) { |
564 std::string filename = username + ".png"; | 565 std::string filename = username + ".png"; |
565 FilePath user_data_dir; | 566 FilePath user_data_dir; |
(...skipping 29 matching lines...) Expand all Loading... |
595 CrosLibrary::Get()->GetCryptohomeLibrary()->Pkcs11GetTpmTokenInfo( | 596 CrosLibrary::Get()->GetCryptohomeLibrary()->Pkcs11GetTpmTokenInfo( |
596 &local_token_name, &local_user_pin); | 597 &local_token_name, &local_user_pin); |
597 if (token_name) | 598 if (token_name) |
598 *token_name = local_token_name; | 599 *token_name = local_token_name; |
599 if (user_pin) | 600 if (user_pin) |
600 *user_pin = local_user_pin; | 601 *user_pin = local_user_pin; |
601 } | 602 } |
602 | 603 |
603 void UserManager::NotifyOnLogin() { | 604 void UserManager::NotifyOnLogin() { |
604 NotificationService::current()->Notify( | 605 NotificationService::current()->Notify( |
605 NotificationType::LOGIN_USER_CHANGED, | 606 chrome::NOTIFICATION_LOGIN_USER_CHANGED, |
606 Source<UserManager>(this), | 607 Source<UserManager>(this), |
607 Details<const User>(&logged_in_user_)); | 608 Details<const User>(&logged_in_user_)); |
608 | 609 |
609 chromeos::input_method::InputMethodManager::GetInstance()-> | 610 chromeos::input_method::InputMethodManager::GetInstance()-> |
610 SetDeferImeStartup(false); | 611 SetDeferImeStartup(false); |
611 // Shut down the IME so that it will reload the user's settings. | 612 // Shut down the IME so that it will reload the user's settings. |
612 chromeos::input_method::InputMethodManager::GetInstance()-> | 613 chromeos::input_method::InputMethodManager::GetInstance()-> |
613 StopInputMethodDaemon(); | 614 StopInputMethodDaemon(); |
614 // Let the window manager know that we're logged in now. | 615 // Let the window manager know that we're logged in now. |
615 WmIpc::instance()->SetLoggedInProperty(true); | 616 WmIpc::instance()->SetLoggedInProperty(true); |
616 // Ensure we've opened the real user's key/certificate database. | 617 // Ensure we've opened the real user's key/certificate database. |
617 crypto::OpenPersistentNSSDB(); | 618 crypto::OpenPersistentNSSDB(); |
618 | 619 |
619 // Only load the Opencryptoki library into NSS if we have this switch. | 620 // Only load the Opencryptoki library into NSS if we have this switch. |
620 // TODO(gspencer): Remove this switch once cryptohomed work is finished: | 621 // TODO(gspencer): Remove this switch once cryptohomed work is finished: |
621 // http://crosbug.com/12295 and http://crosbug.com/12304 | 622 // http://crosbug.com/12295 and http://crosbug.com/12304 |
622 if (CommandLine::ForCurrentProcess()->HasSwitch( | 623 if (CommandLine::ForCurrentProcess()->HasSwitch( |
623 switches::kLoadOpencryptoki)) { | 624 switches::kLoadOpencryptoki)) { |
624 crypto::EnableTPMTokenForNSS(new RealTPMTokenInfoDelegate()); | 625 crypto::EnableTPMTokenForNSS(new RealTPMTokenInfoDelegate()); |
625 } | 626 } |
626 | 627 |
627 // Schedules current user ownership check on file thread. | 628 // Schedules current user ownership check on file thread. |
628 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, | 629 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, |
629 NewRunnableFunction(&CheckOwnership)); | 630 NewRunnableFunction(&CheckOwnership)); |
630 } | 631 } |
631 | 632 |
632 void UserManager::Observe(NotificationType type, | 633 void UserManager::Observe(int type, |
633 const NotificationSource& source, | 634 const NotificationSource& source, |
634 const NotificationDetails& details) { | 635 const NotificationDetails& details) { |
635 if (type == NotificationType::OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED) { | 636 if (type == chrome::NOTIFICATION_OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED) { |
636 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, | 637 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, |
637 NewRunnableFunction(&CheckOwnership)); | 638 NewRunnableFunction(&CheckOwnership)); |
638 } | 639 } |
639 } | 640 } |
640 | 641 |
641 bool UserManager::current_user_is_owner() const { | 642 bool UserManager::current_user_is_owner() const { |
642 base::AutoLock lk(current_user_is_owner_lock_); | 643 base::AutoLock lk(current_user_is_owner_lock_); |
643 return current_user_is_owner_; | 644 return current_user_is_owner_; |
644 } | 645 } |
645 | 646 |
646 void UserManager::set_current_user_is_owner(bool current_user_is_owner) { | 647 void UserManager::set_current_user_is_owner(bool current_user_is_owner) { |
647 base::AutoLock lk(current_user_is_owner_lock_); | 648 base::AutoLock lk(current_user_is_owner_lock_); |
648 current_user_is_owner_ = current_user_is_owner; | 649 current_user_is_owner_ = current_user_is_owner; |
649 } | 650 } |
650 | 651 |
651 } // namespace chromeos | 652 } // namespace chromeos |
OLD | NEW |