summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorygorshenin@chromium.org <ygorshenin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-11 13:31:46 +0000
committerygorshenin@chromium.org <ygorshenin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-11 13:31:46 +0000
commit688d82173be7b00aa3397191c25e1c32f5ce32ea (patch)
tree1eb1f6b52bab98385b4ce004042eab0fa87918fc
parent4e20b5735cd6b8df96ff04640427e18ac9e2b543 (diff)
downloadchromium_src-688d82173be7b00aa3397191c25e1c32f5ce32ea.zip
chromium_src-688d82173be7b00aa3397191c25e1c32f5ce32ea.tar.gz
chromium_src-688d82173be7b00aa3397191c25e1c32f5ce32ea.tar.bz2
active_user_ is reset to NULL when corresponding User object is deleted.
BUG=348235 Review URL: https://codereview.chromium.org/190743003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@256220 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/login/user_manager_impl.cc20
-rw-r--r--chrome/browser/chromeos/login/user_manager_impl.h4
2 files changed, 16 insertions, 8 deletions
diff --git a/chrome/browser/chromeos/login/user_manager_impl.cc b/chrome/browser/chromeos/login/user_manager_impl.cc
index 79086d9..6026c12 100644
--- a/chrome/browser/chromeos/login/user_manager_impl.cc
+++ b/chrome/browser/chromeos/login/user_manager_impl.cc
@@ -254,15 +254,13 @@ UserManagerImpl::~UserManagerImpl() {
// Can't use STLDeleteElements because of the private destructor of User.
for (UserList::iterator it = users_.begin(); it != users_.end();
it = users_.erase(it)) {
- if (active_user_ == *it)
- active_user_ = NULL;
- delete *it;
+ DeleteUser(*it);
}
// These are pointers to the same User instances that were in users_ list.
logged_in_users_.clear();
lru_logged_in_users_.clear();
- delete active_user_;
+ DeleteUser(active_user_);
}
void UserManagerImpl::Shutdown() {
@@ -609,8 +607,7 @@ void UserManagerImpl::RemoveUserFromList(const std::string& user_id) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
RemoveNonCryptohomeData(user_id);
if (user_loading_stage_ == STAGE_LOADED) {
- User* user = RemoveRegularOrLocallyManagedUserFromList(user_id);
- delete user;
+ DeleteUser(RemoveRegularOrLocallyManagedUserFromList(user_id));
} else if (user_loading_stage_ == STAGE_LOADING) {
DCHECK(gaia::ExtractDomainName(user_id) ==
UserManager::kLocallyManagedUserDomain);
@@ -1279,7 +1276,7 @@ void UserManagerImpl::RetrieveTrustedDevicePolicies() {
if ((*it)->GetType() == User::USER_TYPE_REGULAR &&
user_email != owner_email_) {
RemoveNonCryptohomeData(user_email);
- delete *it;
+ DeleteUser(*it);
it = users_.erase(it);
changed = true;
} else {
@@ -1708,7 +1705,7 @@ bool UserManagerImpl::UpdateAndCleanUpPublicAccounts(
for (UserList::iterator it = users_.begin(); it != users_.end();) {
if ((*it)->GetType() == User::USER_TYPE_PUBLIC_ACCOUNT) {
if (*it != GetLoggedInUser())
- delete *it;
+ DeleteUser(*it);
it = users_.erase(it);
} else {
++it;
@@ -2051,4 +2048,11 @@ void UserManagerImpl::UpdateNumberOfUsers() {
base::StringPrintf("%" PRIuS, GetLoggedInUsers().size()));
}
+void UserManagerImpl::DeleteUser(User* user) {
+ const bool is_active_user = (user == active_user_);
+ delete user;
+ if (is_active_user)
+ active_user_ = NULL;
+}
+
} // namespace chromeos
diff --git a/chrome/browser/chromeos/login/user_manager_impl.h b/chrome/browser/chromeos/login/user_manager_impl.h
index dae2766..3123e64 100644
--- a/chrome/browser/chromeos/login/user_manager_impl.h
+++ b/chrome/browser/chromeos/login/user_manager_impl.h
@@ -361,6 +361,10 @@ class UserManagerImpl
// Update the number of users.
void UpdateNumberOfUsers();
+ // A wrapper around C++ delete operator. Deletes |user|, and when |user|
+ // equals to active_user_, active_user_ is reset to NULL.
+ void DeleteUser(User* user);
+
// Interface to the signed settings store.
CrosSettings* cros_settings_;