| // Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "cryptohome/user_oldest_activity_timestamp_cache.h" |
| |
| #include <base/logging.h> |
| |
| using base::FilePath; |
| |
| namespace cryptohome { |
| |
| void UserOldestActivityTimestampCache::Initialize() { |
| CHECK(initialized_ == false); |
| initialized_ = true; |
| } |
| |
| void UserOldestActivityTimestampCache::AddExistingUser( |
| const FilePath& vault, base::Time timestamp) { |
| CHECK(initialized_); |
| users_timestamp_.insert(std::make_pair(timestamp, vault)); |
| if (oldest_known_timestamp_ > timestamp || |
| oldest_known_timestamp_.is_null()) { |
| oldest_known_timestamp_ = timestamp; |
| } |
| } |
| |
| void UserOldestActivityTimestampCache::UpdateExistingUser( |
| const FilePath& vault, base::Time timestamp) { |
| CHECK(initialized_); |
| for (UsersTimestamp::iterator i = users_timestamp_.begin(); |
| i != users_timestamp_.end(); ++i) { |
| if (i->second == vault) { |
| base::Time timestamp = users_timestamp_.begin()->first; |
| users_timestamp_.erase(i); |
| UpdateTimestampAfterRemoval(timestamp); |
| break; |
| } |
| } |
| AddExistingUser(vault, timestamp); |
| } |
| |
| void UserOldestActivityTimestampCache::AddExistingUserNotime( |
| const FilePath& vault) { |
| CHECK(initialized_); |
| users_timestamp_.insert(std::make_pair(base::Time(), vault)); |
| } |
| |
| FilePath UserOldestActivityTimestampCache::RemoveOldestUser() { |
| CHECK(initialized_); |
| FilePath vault; |
| if (!users_timestamp_.empty()) { |
| vault = users_timestamp_.begin()->second; |
| base::Time timestamp = users_timestamp_.begin()->first; |
| users_timestamp_.erase(users_timestamp_.begin()); |
| UpdateTimestampAfterRemoval(timestamp); |
| } |
| return vault; |
| } |
| |
| void UserOldestActivityTimestampCache::UpdateTimestampAfterRemoval( |
| base::Time timestamp) { |
| if (oldest_known_timestamp_ == timestamp) { |
| oldest_known_timestamp_ = users_timestamp_.empty() ? |
| base::Time() : users_timestamp_.begin()->first; |
| } |
| } |
| |
| |
| } // namespace cryptohome |