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

Unified Diff: chrome/browser/profiles/profile_attributes_entry.cc

Issue 1631373003: Refactor ProfileInfoCache in c/b/ui/app_list (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Respond to comments, add sorting of ProfileAttributesEntry Created 4 years, 11 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/profiles/profile_attributes_entry.cc
diff --git a/chrome/browser/profiles/profile_attributes_entry.cc b/chrome/browser/profiles/profile_attributes_entry.cc
index 3adf2a0bffd53c2632b46826be473144bed427bc..c769c174cee95adddc1b39c4755ea50ab16d539a 100644
--- a/chrome/browser/profiles/profile_attributes_entry.cc
+++ b/chrome/browser/profiles/profile_attributes_entry.cc
@@ -3,8 +3,40 @@
// found in the LICENSE file.
#include "chrome/browser/profiles/profile_attributes_entry.h"
+
+#include "base/i18n/string_compare.h"
#include "chrome/browser/profiles/profile_info_cache.h"
+scoped_ptr<icu::Collator>
+ ProfileAttributesEntry::SortComparator::GetCollator() {
+ UErrorCode error_code = U_ZERO_ERROR;
+ // Use the default collator. The default locale should have been properly
+ // set by the time this constructor is called.
+ scoped_ptr<icu::Collator> collator(icu::Collator::createInstance(error_code));
+ DCHECK(U_SUCCESS(error_code));
+ return collator;
+}
+
+bool ProfileAttributesEntry::SortComparator::operator()(
+ const ProfileAttributesEntry* const a,
+ const ProfileAttributesEntry* const b) const {
+ if (!collator_)
+ return false; // If collator is absent sorting fails with undefined result.
tapted 2016/01/31 23:04:37 can this actually happen? I think this should DCHE
lwchkg 2016/02/01 06:31:20 The constructor has already DCHECKed. This is only
tapted 2016/02/02 00:20:55 That's not normally what we use DCHECK for. DCHECK
+
+ UCollationResult result = base::i18n::CompareString16WithCollator(
+ *collator_, a->GetName(), b->GetName());
+ if (result != UCOL_EQUAL)
+ return result == UCOL_LESS;
+
+ // Compare the profile paths. Since the paths are "[userdir]\Profile #", so
+ // comparisons take care of the numbers represented by # only.
+ base::FilePath::StringType a_path = a->GetPath().value();
+ base::FilePath::StringType b_path = b->GetPath().value();
+ if (a_path.length() != b_path.length())
+ return a_path.length() < b_path.length();
+ return a_path < b_path;
+}
+
ProfileAttributesEntry::ProfileAttributesEntry()
: profile_info_cache_(nullptr),
profile_path_(base::FilePath()) {}
@@ -39,7 +71,7 @@ base::string16 ProfileAttributesEntry::GetUserName() const {
return profile_info_cache_->GetUserNameOfProfileAtIndex(profile_index());
}
-const gfx::Image& ProfileAttributesEntry::GetAvatarIcon() {
+const gfx::Image& ProfileAttributesEntry::GetAvatarIcon() const {
return profile_info_cache_->GetAvatarIconOfProfileAtIndex(profile_index());
}

Powered by Google App Engine
This is Rietveld 408576698