Index: webkit/fileapi/obfuscated_file_system_file_util.cc |
diff --git a/webkit/fileapi/obfuscated_file_system_file_util.cc b/webkit/fileapi/obfuscated_file_system_file_util.cc |
index a9c1c94829f823f46d0c086f97569bbc87df59de..44e5b0a283a7fe6c982465c5d3be116a3ab2cc65 100644 |
--- a/webkit/fileapi/obfuscated_file_system_file_util.cc |
+++ b/webkit/fileapi/obfuscated_file_system_file_util.cc |
@@ -69,8 +69,8 @@ PlatformFileError ObfuscatedFileSystemFileUtil::CreateOrOpen( |
DCHECK(!(file_flags & (base::PLATFORM_FILE_DELETE_ON_CLOSE | |
base::PLATFORM_FILE_HIDDEN | base::PLATFORM_FILE_EXCLUSIVE_READ | |
base::PLATFORM_FILE_EXCLUSIVE_WRITE))); |
- FileSystemDirectoryDatabase* db = |
- GetDirectoryDatabase(context->src_origin_url(), context->src_type()); |
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
+ context->src_origin_url(), context->src_type(), true); |
if (!db) |
return base::PLATFORM_FILE_ERROR_FAILED; |
FileId file_id; |
@@ -111,8 +111,8 @@ PlatformFileError ObfuscatedFileSystemFileUtil::EnsureFileExists( |
FileSystemOperationContext* context, |
const FilePath& virtual_path, |
bool* created) { |
- FileSystemDirectoryDatabase* db = |
- GetDirectoryDatabase(context->src_origin_url(), context->src_type()); |
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
+ context->src_origin_url(), context->src_type(), true); |
if (!db) |
return base::PLATFORM_FILE_ERROR_FAILED; |
FileId file_id; |
@@ -160,10 +160,10 @@ PlatformFileError ObfuscatedFileSystemFileUtil::GetFileInfo( |
const FilePath& virtual_path, |
base::PlatformFileInfo* file_info, |
FilePath* platform_file_path) { |
- FileSystemDirectoryDatabase* db = |
- GetDirectoryDatabase(context->src_origin_url(), context->src_type()); |
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
+ context->src_origin_url(), context->src_type(), false); |
if (!db) |
- return base::PLATFORM_FILE_ERROR_FAILED; |
+ return base::PLATFORM_FILE_ERROR_NOT_FOUND; |
FileId file_id; |
if (!db->GetFileWithPath(virtual_path, &file_id)) |
return base::PLATFORM_FILE_ERROR_NOT_FOUND; |
@@ -193,10 +193,17 @@ PlatformFileError ObfuscatedFileSystemFileUtil::ReadDirectory( |
const FilePath& virtual_path, |
std::vector<base::FileUtilProxy::Entry>* entries) { |
// TODO(kkanetkar): Implement directory read in multiple chunks. |
- FileSystemDirectoryDatabase* db = |
- GetDirectoryDatabase(context->src_origin_url(), context->src_type()); |
- if (!db) |
- return base::PLATFORM_FILE_ERROR_FAILED; |
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
+ context->src_origin_url(), context->src_type(), false); |
+ if (!db) { |
+ if (virtual_path.empty() || |
+ virtual_path.value() == FILE_PATH_LITERAL("/")) { |
+ // It's the root directory and the database hasn't been initialized yet. |
+ entries->clear(); |
+ return base::PLATFORM_FILE_OK; |
+ } |
+ return base::PLATFORM_FILE_ERROR_NOT_FOUND; |
+ } |
FileId file_id; |
if (!db->GetFileWithPath(virtual_path, &file_id)) |
return base::PLATFORM_FILE_ERROR_NOT_FOUND; |
@@ -233,8 +240,8 @@ PlatformFileError ObfuscatedFileSystemFileUtil::CreateDirectory( |
const FilePath& virtual_path, |
bool exclusive, |
bool recursive) { |
- FileSystemDirectoryDatabase* db = |
- GetDirectoryDatabase(context->src_origin_url(), context->src_type()); |
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
+ context->src_origin_url(), context->src_type(), true); |
if (!db) |
return base::PLATFORM_FILE_ERROR_FAILED; |
FileId file_id; |
@@ -284,8 +291,8 @@ PlatformFileError ObfuscatedFileSystemFileUtil::CopyOrMoveFile( |
const FilePath& src_file_path, |
const FilePath& dest_file_path, |
bool copy) { |
- FileSystemDirectoryDatabase* db = |
- GetDirectoryDatabase(context->src_origin_url(), context->src_type()); |
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
+ context->src_origin_url(), context->src_type(), true); |
if (!db) |
return base::PLATFORM_FILE_ERROR_FAILED; |
FileId src_file_id; |
@@ -372,8 +379,8 @@ PlatformFileError ObfuscatedFileSystemFileUtil::CopyInForeignFile( |
FileSystemOperationContext* context, |
const FilePath& src_file_path, |
const FilePath& dest_file_path) { |
- FileSystemDirectoryDatabase* db = |
- GetDirectoryDatabase(context->dest_origin_url(), context->dest_type()); |
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
+ context->dest_origin_url(), context->dest_type(), true); |
if (!db) |
return base::PLATFORM_FILE_ERROR_FAILED; |
FileId dest_file_id; |
@@ -406,8 +413,8 @@ PlatformFileError ObfuscatedFileSystemFileUtil::CopyInForeignFile( |
PlatformFileError ObfuscatedFileSystemFileUtil::DeleteFile( |
FileSystemOperationContext* context, |
const FilePath& virtual_path) { |
- FileSystemDirectoryDatabase* db = |
- GetDirectoryDatabase(context->src_origin_url(), context->src_type()); |
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
+ context->src_origin_url(), context->src_type(), true); |
if (!db) |
return base::PLATFORM_FILE_ERROR_FAILED; |
FileId file_id; |
@@ -433,8 +440,8 @@ PlatformFileError ObfuscatedFileSystemFileUtil::DeleteFile( |
PlatformFileError ObfuscatedFileSystemFileUtil::DeleteSingleDirectory( |
FileSystemOperationContext* context, |
const FilePath& virtual_path) { |
- FileSystemDirectoryDatabase* db = |
- GetDirectoryDatabase(context->src_origin_url(), context->src_type()); |
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
+ context->src_origin_url(), context->src_type(), true); |
if (!db) |
return base::PLATFORM_FILE_ERROR_FAILED; |
FileId file_id; |
@@ -455,8 +462,8 @@ PlatformFileError ObfuscatedFileSystemFileUtil::Touch( |
const FilePath& virtual_path, |
const base::Time& last_access_time, |
const base::Time& last_modified_time) { |
- FileSystemDirectoryDatabase* db = |
- GetDirectoryDatabase(context->src_origin_url(), context->src_type()); |
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
+ context->src_origin_url(), context->src_type(), true); |
if (!db) |
return base::PLATFORM_FILE_ERROR_FAILED; |
FileId file_id; |
@@ -512,8 +519,8 @@ PlatformFileError ObfuscatedFileSystemFileUtil::Truncate( |
bool ObfuscatedFileSystemFileUtil::PathExists( |
FileSystemOperationContext* context, |
const FilePath& virtual_path) { |
- FileSystemDirectoryDatabase* db = |
- GetDirectoryDatabase(context->src_origin_url(), context->src_type()); |
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
+ context->src_origin_url(), context->src_type(), false); |
if (!db) |
return false; |
FileId file_id; |
@@ -523,8 +530,8 @@ bool ObfuscatedFileSystemFileUtil::PathExists( |
bool ObfuscatedFileSystemFileUtil::DirectoryExists( |
FileSystemOperationContext* context, |
const FilePath& virtual_path) { |
- FileSystemDirectoryDatabase* db = |
- GetDirectoryDatabase(context->src_origin_url(), context->src_type()); |
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
michaeln
2011/07/05 19:10:12
What if the query is about the root directory, sho
kinuko
2011/07/06 07:44:14
Good question, and I don't have a good answer eith
|
+ context->src_origin_url(), context->src_type(), false); |
if (!db) |
return false; |
FileId file_id; |
@@ -541,13 +548,13 @@ bool ObfuscatedFileSystemFileUtil::DirectoryExists( |
bool ObfuscatedFileSystemFileUtil::IsDirectoryEmpty( |
FileSystemOperationContext* context, |
const FilePath& virtual_path) { |
- FileSystemDirectoryDatabase* db = |
- GetDirectoryDatabase(context->src_origin_url(), context->src_type()); |
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
+ context->src_origin_url(), context->src_type(), false); |
if (!db) |
- return false; |
+ return true; // Not a great answer, but it's what others do. |
FileId file_id; |
if (!db->GetFileWithPath(virtual_path, &file_id)) |
- return true; // Not a great answer, but it's what others do. |
+ return true; // Ditto. |
FileInfo file_info; |
if (!db->GetFileInfo(file_id, &file_info)) { |
DCHECK(!file_id); |
@@ -692,8 +699,8 @@ FileSystemFileUtil::AbstractFileEnumerator* |
ObfuscatedFileSystemFileUtil::CreateFileEnumerator( |
FileSystemOperationContext* context, |
const FilePath& root_path) { |
- FileSystemDirectoryDatabase* db = |
- GetDirectoryDatabase(context->src_origin_url(), context->src_type()); |
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
+ context->src_origin_url(), context->src_type(), false); |
if (!db) |
return new FileSystemFileUtil::EmptyFileEnumerator(); |
return new ObfuscatedFileSystemFileEnumerator(db, root_path); |
@@ -705,7 +712,8 @@ PlatformFileError ObfuscatedFileSystemFileUtil::CreateFile( |
FileInfo* file_info, int file_flags, PlatformFile* handle) { |
if (handle) |
*handle = base::kInvalidPlatformFileValue; |
- FileSystemDirectoryDatabase* db = GetDirectoryDatabase(origin_url, type); |
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
+ origin_url, type, true); |
int64 number; |
if (!db || !db->GetNextInteger(&number)) |
return base::PLATFORM_FILE_ERROR_FAILED; |
@@ -774,7 +782,8 @@ FilePath ObfuscatedFileSystemFileUtil::GetLocalPath( |
const GURL& origin_url, |
FileSystemType type, |
const FilePath& virtual_path) { |
- FileSystemDirectoryDatabase* db = GetDirectoryDatabase(origin_url, type); |
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
+ origin_url, type, false); |
if (!db) |
return FilePath(); |
FileId file_id; |
@@ -829,7 +838,8 @@ bool ObfuscatedFileSystemFileUtil::MigrateFromOldSandbox( |
FilePath dest_root = GetDirectoryForOriginAndType(origin_url, type, true); |
if (dest_root.empty()) |
return false; |
- FileSystemDirectoryDatabase* db = GetDirectoryDatabase(origin_url, type); |
+ FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
+ origin_url, type, false); |
if (!db) |
return false; |
@@ -928,9 +938,7 @@ FilePath ObfuscatedFileSystemFileUtil::LocalPathToDataPath( |
// quota even to create the database. Ah, in that case don't even get here? |
// Still doesn't answer the quota issue, though. |
FileSystemDirectoryDatabase* ObfuscatedFileSystemFileUtil::GetDirectoryDatabase( |
- const GURL& origin, FileSystemType type) { |
- |
- MarkUsed(); |
+ const GURL& origin, FileSystemType type, bool create) { |
std::string type_string = |
FileSystemPathManager::GetFileSystemTypeString(type); |
if (type_string.empty()) { |
@@ -939,10 +947,12 @@ FileSystemDirectoryDatabase* ObfuscatedFileSystemFileUtil::GetDirectoryDatabase( |
} |
std::string key = GetOriginIdentifierFromURL(origin) + type_string; |
DirectoryMap::iterator iter = directories_.find(key); |
- if (iter != directories_.end()) |
+ if (iter != directories_.end()) { |
+ MarkUsed(); |
return iter->second; |
+ } |
- FilePath path = GetDirectoryForOriginAndType(origin, type, true); |
+ FilePath path = GetDirectoryForOriginAndType(origin, type, create); |
if (path.empty()) |
return NULL; |
if (!file_util::DirectoryExists(path)) { |
@@ -951,6 +961,7 @@ FileSystemDirectoryDatabase* ObfuscatedFileSystemFileUtil::GetDirectoryDatabase( |
return NULL; |
} |
} |
+ MarkUsed(); |
path = path.AppendASCII(kDirectoryDatabaseName); |
FileSystemDirectoryDatabase* database = new FileSystemDirectoryDatabase(path); |
directories_[key] = database; |