summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortzik@chromium.org <tzik@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-19 05:03:03 +0000
committertzik@chromium.org <tzik@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-19 05:03:03 +0000
commitf1ddaa4a69d5e6d17d1fc9a1062c26be4712d4fd (patch)
tree31e0799180f03a47db0f3e0377b9eadcec7dcf7c
parent4012362511707f3f1db4fb63248f0cc5b6d7f990 (diff)
downloadchromium_src-f1ddaa4a69d5e6d17d1fc9a1062c26be4712d4fd.zip
chromium_src-f1ddaa4a69d5e6d17d1fc9a1062c26be4712d4fd.tar.gz
chromium_src-f1ddaa4a69d5e6d17d1fc9a1062c26be4712d4fd.tar.bz2
Adding FileUtilProxy::Entry::{size,last_modified_time},
and FileEnumerator::{GetFilesize,GetLastModifiedTime}. BUG=89134 TEST=None Review URL: http://codereview.chromium.org/7355013 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@92975 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--base/file_util.h2
-rw-r--r--base/file_util_posix.cc10
-rw-r--r--base/file_util_proxy.cc3
-rw-r--r--base/file_util_proxy.h2
-rw-r--r--base/file_util_win.cc16
-rw-r--r--webkit/fileapi/file_system_directory_database.h2
-rw-r--r--webkit/fileapi/file_system_file_util.cc3
-rw-r--r--webkit/fileapi/obfuscated_file_system_file_util.cc62
-rw-r--r--webkit/fileapi/obfuscated_file_system_file_util.h8
9 files changed, 88 insertions, 20 deletions
diff --git a/base/file_util.h b/base/file_util.h
index 03c2396..6d786c2 100644
--- a/base/file_util.h
+++ b/base/file_util.h
@@ -469,6 +469,8 @@ class BASE_API FileEnumerator {
static bool IsDirectory(const FindInfo& info);
static FilePath GetFilename(const FindInfo& find_info);
+ static int64 GetFilesize(const FindInfo& find_info);
+ static base::Time GetLastModifiedTime(const FindInfo& find_info);
private:
// Returns true if the given path should be skipped in enumeration.
diff --git a/base/file_util_posix.cc b/base/file_util_posix.cc
index 2e7c91e..5c9fb14 100644
--- a/base/file_util_posix.cc
+++ b/base/file_util_posix.cc
@@ -735,6 +735,16 @@ FilePath FileEnumerator::GetFilename(const FindInfo& find_info) {
return FilePath(find_info.filename);
}
+// static
+int64 FileEnumerator::GetFilesize(const FindInfo& find_info) {
+ return find_info.stat.st_size;
+}
+
+// static
+base::Time FileEnumerator::GetLastModifiedTime(const FindInfo& find_info) {
+ return base::Time::FromTimeT(find_info.stat.st_mtime);
+}
+
bool FileEnumerator::ReadDirectory(std::vector<DirectoryEntryInfo>* entries,
const FilePath& source, bool show_links) {
base::ThreadRestrictions::AssertIOAllowed();
diff --git a/base/file_util_proxy.cc b/base/file_util_proxy.cc
index cff76bde..9b9ed88 100644
--- a/base/file_util_proxy.cc
+++ b/base/file_util_proxy.cc
@@ -451,6 +451,9 @@ class RelayReadDirectory : public MessageLoopRelay {
// This will just give the entry's name instead of entire path
// if we use current.value().
entry.name = file_util::FileEnumerator::GetFilename(info).value();
+ entry.size = file_util::FileEnumerator::GetFilesize(info);
+ entry.last_modified_time =
+ file_util::FileEnumerator::GetLastModifiedTime(info);
entries_.push_back(entry);
}
}
diff --git a/base/file_util_proxy.h b/base/file_util_proxy.h
index 72591c2..42b9cca 100644
--- a/base/file_util_proxy.h
+++ b/base/file_util_proxy.h
@@ -27,6 +27,8 @@ class BASE_API FileUtilProxy {
struct Entry {
FilePath::StringType name;
bool is_directory;
+ int64 size;
+ base::Time last_modified_time;
};
// This callback is used by methods that report only an error code. It is
diff --git a/base/file_util_win.cc b/base/file_util_win.cc
index 93bfe1d..9a138a3 100644
--- a/base/file_util_win.cc
+++ b/base/file_util_win.cc
@@ -10,6 +10,8 @@
#include <shellapi.h>
#include <shlobj.h>
#include <time.h>
+
+#include <limits>
#include <string>
#include "base/file_path.h"
@@ -893,6 +895,20 @@ FilePath FileEnumerator::GetFilename(const FindInfo& find_info) {
return FilePath(find_info.cFileName);
}
+// static
+int64 FileEnumerator::GetFilesize(const FindInfo& find_info) {
+ ULARGE_INTEGER size;
+ size.HighPart = find_info.nFileSizeHigh;
+ size.LowPart = find_info.nFileSizeLow;
+ DCHECK_LE(size.QuadPart, std::numeric_limits<int64>::max());
+ return static_cast<int64>(size.QuadPart);
+}
+
+// static
+base::Time FileEnumerator::GetLastModifiedTime(const FindInfo& find_info) {
+ return base::Time::FromFileTime(find_info.ftLastWriteTime);
+}
+
FilePath FileEnumerator::Next() {
base::ThreadRestrictions::AssertIOAllowed();
diff --git a/webkit/fileapi/file_system_directory_database.h b/webkit/fileapi/file_system_directory_database.h
index 2735b9d..d363499 100644
--- a/webkit/fileapi/file_system_directory_database.h
+++ b/webkit/fileapi/file_system_directory_database.h
@@ -38,7 +38,7 @@ class FileSystemDirectoryDatabase {
FileInfo();
~FileInfo();
- bool is_directory() {
+ bool is_directory() const {
return data_path.empty();
}
diff --git a/webkit/fileapi/file_system_file_util.cc b/webkit/fileapi/file_system_file_util.cc
index 41ff6f4..13f2527 100644
--- a/webkit/fileapi/file_system_file_util.cc
+++ b/webkit/fileapi/file_system_file_util.cc
@@ -128,6 +128,9 @@ PlatformFileError FileSystemFileUtil::ReadDirectory(
// This will just give the entry's name instead of entire path
// if we use current.value().
entry.name = file_util::FileEnumerator::GetFilename(info).value();
+ entry.size = file_util::FileEnumerator::GetFilesize(info);
+ entry.last_modified_time =
+ file_util::FileEnumerator::GetLastModifiedTime(info);
// TODO(rkc): Fix this also once we've refactored file_util
// http://code.google.com/p/chromium-os/issues/detail?id=15948
// This currently just prevents a file from showing up at all
diff --git a/webkit/fileapi/obfuscated_file_system_file_util.cc b/webkit/fileapi/obfuscated_file_system_file_util.cc
index 47cf37e..1f2ccfd 100644
--- a/webkit/fileapi/obfuscated_file_system_file_util.cc
+++ b/webkit/fileapi/obfuscated_file_system_file_util.cc
@@ -172,24 +172,8 @@ PlatformFileError ObfuscatedFileSystemFileUtil::GetFileInfo(
if (!db->GetFileWithPath(virtual_path, &file_id))
return base::PLATFORM_FILE_ERROR_NOT_FOUND;
FileInfo local_info;
- if (!db->GetFileInfo(file_id, &local_info)) {
- NOTREACHED();
- return base::PLATFORM_FILE_ERROR_FAILED;
- }
- if (local_info.is_directory()) {
- file_info->is_directory = true;
- file_info->is_symbolic_link = false;
- file_info->last_modified = local_info.modification_time;
- *platform_file_path = FilePath();
- // We don't fill in ctime or atime.
- return base::PLATFORM_FILE_OK;
- }
- if (local_info.data_path.empty())
- return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
- FilePath data_path = DataPathToLocalPath(context->src_origin_url(),
- context->src_type(), local_info.data_path);
- return underlying_file_util_->GetFileInfo(
- context, data_path, file_info, platform_file_path);
+ return GetFileInfoInternal(db, context, file_id,
+ &local_info, file_info, platform_file_path);
}
PlatformFileError ObfuscatedFileSystemFileUtil::ReadDirectory(
@@ -226,13 +210,20 @@ PlatformFileError ObfuscatedFileSystemFileUtil::ReadDirectory(
}
std::vector<FileId>::iterator iter;
for (iter = children.begin(); iter != children.end(); ++iter) {
- if (!db->GetFileInfo(*iter, &file_info)) {
+ base::PlatformFileInfo platform_file_info;
+ FilePath file_path;
+ if (GetFileInfoInternal(db, context, *iter,
+ &file_info, &platform_file_info, &file_path) !=
+ base::PLATFORM_FILE_OK) {
NOTREACHED();
return base::PLATFORM_FILE_ERROR_FAILED;
}
+
base::FileUtilProxy::Entry entry;
entry.name = file_info.name;
entry.is_directory = file_info.is_directory();
+ entry.size = entry.is_directory ? 0 : platform_file_info.size;
+ entry.last_modified_time = platform_file_info.last_modified;
entries->push_back(entry);
}
return base::PLATFORM_FILE_OK;
@@ -719,6 +710,39 @@ ObfuscatedFileSystemFileUtil::CreateFileEnumerator(
return new ObfuscatedFileSystemFileEnumerator(db, root_path);
}
+PlatformFileError ObfuscatedFileSystemFileUtil::GetFileInfoInternal(
+ FileSystemDirectoryDatabase* db,
+ FileSystemOperationContext* context,
+ FileId file_id,
+ FileInfo* local_info,
+ base::PlatformFileInfo* file_info,
+ FilePath* platform_file_path) {
+ DCHECK(db);
+ DCHECK(context);
+ DCHECK(file_info);
+ DCHECK(platform_file_path);
+
+ if (!db->GetFileInfo(file_id, local_info)) {
+ NOTREACHED();
+ return base::PLATFORM_FILE_ERROR_FAILED;
+ }
+
+ if (local_info->is_directory()) {
+ file_info->is_directory = true;
+ file_info->is_symbolic_link = false;
+ file_info->last_modified = local_info->modification_time;
+ *platform_file_path = FilePath();
+ // We don't fill in ctime or atime.
+ return base::PLATFORM_FILE_OK;
+ }
+ if (local_info->data_path.empty())
+ return base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
+ FilePath data_path = DataPathToLocalPath(context->src_origin_url(),
+ context->src_type(), local_info->data_path);
+ return underlying_file_util_->GetFileInfo(
+ context, data_path, file_info, platform_file_path);
+}
+
PlatformFileError ObfuscatedFileSystemFileUtil::CreateFile(
FileSystemOperationContext* context,
const GURL& origin_url, FileSystemType type, const FilePath& source_path,
diff --git a/webkit/fileapi/obfuscated_file_system_file_util.h b/webkit/fileapi/obfuscated_file_system_file_util.h
index 53f572e..966a4c3 100644
--- a/webkit/fileapi/obfuscated_file_system_file_util.h
+++ b/webkit/fileapi/obfuscated_file_system_file_util.h
@@ -187,6 +187,14 @@ class ObfuscatedFileSystemFileUtil : public FileSystemFileUtil,
typedef FileSystemDirectoryDatabase::FileId FileId;
typedef FileSystemDirectoryDatabase::FileInfo FileInfo;
+ base::PlatformFileError GetFileInfoInternal(
+ FileSystemDirectoryDatabase* db,
+ FileSystemOperationContext* context,
+ FileId file_id,
+ FileInfo* local_info,
+ base::PlatformFileInfo* file_info,
+ FilePath* platform_file_path);
+
// Creates a new file, both the underlying backing file and the entry in the
// database. file_info is an in-out parameter. Supply the name and
// parent_id; data_path is ignored. On success, data_path will