summaryrefslogtreecommitdiffstats
path: root/net/base
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-11 23:27:47 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-11 23:27:47 +0000
commit1525c68ec291218d831e29ea34aaf5a516daf855 (patch)
tree50dfc5908f79cdee9ceca8a6d82bcd13c6427000 /net/base
parentd7e2df1d26c084d299feec37695aacd211dae073 (diff)
downloadchromium_src-1525c68ec291218d831e29ea34aaf5a516daf855.zip
chromium_src-1525c68ec291218d831e29ea34aaf5a516daf855.tar.gz
chromium_src-1525c68ec291218d831e29ea34aaf5a516daf855.tar.bz2
Make sure the parent directory always comes first when listing directories.
BUG=35288 TEST=see bug Review URL: http://codereview.chromium.org/596054 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@38854 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base')
-rw-r--r--net/base/directory_lister.cc17
-rw-r--r--net/base/directory_lister_unittest.cc12
2 files changed, 14 insertions, 15 deletions
diff --git a/net/base/directory_lister.cc b/net/base/directory_lister.cc
index ef3130b..ab45e2f 100644
--- a/net/base/directory_lister.cc
+++ b/net/base/directory_lister.cc
@@ -41,18 +41,21 @@ class DirectoryDataEvent : public Task {
// comparison function on the filenames for sorting in the user's locale.
static bool CompareFindInfo(const file_util::FileEnumerator::FindInfo& a,
const file_util::FileEnumerator::FindInfo& b) {
+ // Parent directory before all else.
+ if (file_util::IsDotDot(file_util::FileEnumerator::GetFilename(a)))
+ return true;
+ if (file_util::IsDotDot(file_util::FileEnumerator::GetFilename(b)))
+ return false;
+
+ // Directories before regular files.
bool a_is_directory = file_util::FileEnumerator::IsDirectory(a);
bool b_is_directory = file_util::FileEnumerator::IsDirectory(b);
if (a_is_directory != b_is_directory)
return a_is_directory;
-#if defined(OS_WIN)
- return file_util::LocaleAwareCompareFilenames(FilePath(a.cFileName),
- FilePath(b.cFileName));
-#elif defined(OS_POSIX)
- return file_util::LocaleAwareCompareFilenames(FilePath(a.filename),
- FilePath(b.filename));
-#endif
+ return file_util::LocaleAwareCompareFilenames(
+ file_util::FileEnumerator::GetFilename(a),
+ file_util::FileEnumerator::GetFilename(b));
}
DirectoryLister::DirectoryLister(const FilePath& dir,
diff --git a/net/base/directory_lister_unittest.cc b/net/base/directory_lister_unittest.cc
index 85e2b647..f3cd33b 100644
--- a/net/base/directory_lister_unittest.cc
+++ b/net/base/directory_lister_unittest.cc
@@ -35,17 +35,13 @@ class ListerDelegate : public net::DirectoryLister::DirectoryListerDelegate {
!file_util::FileEnumerator::IsDirectory(file_list_[current])) {
continue;
}
+ EXPECT_FALSE(file_util::IsDotDot(
+ file_util::FileEnumerator::GetFilename(file_list_[current])));
EXPECT_EQ(file_util::FileEnumerator::IsDirectory(file_list_[previous]),
file_util::FileEnumerator::IsDirectory(file_list_[current]));
-#if defined(OS_WIN)
EXPECT_TRUE(file_util::LocaleAwareCompareFilenames(
- FilePath(file_list_[previous].cFileName),
- FilePath(file_list_[current].cFileName)));
-#elif defined(OS_POSIX)
- EXPECT_TRUE(file_util::LocaleAwareCompareFilenames(
- FilePath(file_list_[previous].filename),
- FilePath(file_list_[current].filename)));
-#endif
+ file_util::FileEnumerator::GetFilename(file_list_[previous]),
+ file_util::FileEnumerator::GetFilename(file_list_[current])));
}
}
}