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

Unified Diff: chrome/browser/chromeos/login/user_manager.cc

Issue 6677049: Comb up ownership things. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: d Created 9 years, 9 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/chromeos/login/user_manager.cc
diff --git a/chrome/browser/chromeos/login/user_manager.cc b/chrome/browser/chromeos/login/user_manager.cc
index 250f7bc8ab479d3d28d44d5b6d9177dd9638c3b0..05d95f2437e995884f200ac6d903f54829d1b1ba 100644
--- a/chrome/browser/chromeos/login/user_manager.cc
+++ b/chrome/browser/chromeos/login/user_manager.cc
@@ -7,6 +7,7 @@
#include "base/compiler_specific.h"
#include "base/file_path.h"
#include "base/file_util.h"
+#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/nss_util.h"
#include "base/path_service.h"
@@ -64,8 +65,7 @@ const int kDefaultImageResources[] = {
IDR_LOGIN_DEFAULT_USER_4
};
-// The one true UserManager.
-static UserManager* user_manager_ = NULL;
+base::LazyInstance<UserManager> g_user_manager(base::LINKER_INITIALIZED);
// Stores path to the image in local state. Runs on UI thread.
void SavePathToLocalState(const std::string& username,
@@ -132,13 +132,14 @@ bool IsDefaultImagePath(const std::string& path, size_t* image_id) {
void UpdateOwnership(bool is_owner) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- UserManager* user_manager = UserManager::Get();
- user_manager->set_current_user_is_owner(is_owner);
-
+ g_user_manager.Get().set_current_user_is_owner(is_owner);
+ NotificationService::current()->Notify(NotificationType::OWNERSHIP_CHECKED,
+ NotificationService::AllSources(),
+ NotificationService::NoDetails());
if (is_owner) {
// Also update cached value.
UserCrosSettingsProvider::UpdateCachedOwner(
- user_manager->logged_in_user().email());
+ g_user_manager.Get().logged_in_user().email());
}
}
@@ -148,6 +149,8 @@ void CheckOwnership() {
bool is_owner = OwnershipService::GetSharedInstance()->CurrentUserIsOwner();
VLOG(1) << "Current user " << (is_owner ? "is owner" : "is not owner");
+ g_user_manager.Get().set_current_user_is_owner(is_owner);
+
// UserManager should be accessed only on UI thread.
BrowserThread::PostTask(
BrowserThread::UI,
@@ -258,9 +261,7 @@ std::string UserManager::User::GetNameTooltip() const {
UserManager* UserManager::Get() {
// Not thread-safe.
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (!user_manager_)
- user_manager_ = new UserManager();
- return user_manager_;
+ return &g_user_manager.Get();
}
// static
@@ -576,10 +577,12 @@ void UserManager::Observe(NotificationType type,
}
bool UserManager::current_user_is_owner() const {
+ base::AutoLock lk(current_user_is_owner_lock_);
return current_user_is_owner_;
}
void UserManager::set_current_user_is_owner(bool current_user_is_owner) {
+ base::AutoLock lk(current_user_is_owner_lock_);
current_user_is_owner_ = current_user_is_owner;
}

Powered by Google App Engine
This is Rietveld 408576698