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

Unified Diff: webkit/fileapi/obfuscated_file_system_file_util.cc

Issue 7307013: Do not create a new directory database for read operations. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: '' Created 9 years, 5 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
« no previous file with comments | « webkit/fileapi/obfuscated_file_system_file_util.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « webkit/fileapi/obfuscated_file_system_file_util.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698