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

Unified Diff: webkit/fileapi/obfuscated_file_util.cc

Issue 14612002: [FileAPI] Disable usage cache for origin after file opening for pepper. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 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_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_util.cc
diff --git a/webkit/fileapi/obfuscated_file_util.cc b/webkit/fileapi/obfuscated_file_util.cc
index 8103e62c432775b4ef697ba74a1a95912cd980ba..ab42b4f60a26cc94334cb7f270ad352325fe63a9 100644
--- a/webkit/fileapi/obfuscated_file_util.cc
+++ b/webkit/fileapi/obfuscated_file_util.cc
@@ -261,80 +261,14 @@ PlatformFileError ObfuscatedFileUtil::CreateOrOpen(
FileSystemOperationContext* context,
const FileSystemURL& url, int file_flags,
PlatformFile* file_handle, bool* created) {
- 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(
- url.origin(), url.type(), true);
- if (!db)
- return base::PLATFORM_FILE_ERROR_FAILED;
- FileId file_id;
- if (!db->GetFileWithPath(url.path(), &file_id)) {
- // The file doesn't exist.
- if (!(file_flags & (base::PLATFORM_FILE_CREATE |
- base::PLATFORM_FILE_CREATE_ALWAYS | base::PLATFORM_FILE_OPEN_ALWAYS)))
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
- FileId parent_id;
- if (!db->GetFileWithPath(VirtualPath::DirName(url.path()),
- &parent_id))
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
- FileInfo file_info;
- InitFileInfo(&file_info, parent_id,
- VirtualPath::BaseName(url.path()).value());
-
- int64 growth = UsageForPath(file_info.name.size());
- if (!AllocateQuota(context, growth))
- return base::PLATFORM_FILE_ERROR_NO_SPACE;
- PlatformFileError error = CreateFile(
- context, base::FilePath(),
- url.origin(), url.type(), &file_info,
- file_flags, file_handle);
- if (created && base::PLATFORM_FILE_OK == error) {
- *created = true;
- UpdateUsage(context, url, growth);
- context->change_observers()->Notify(
- &FileChangeObserver::OnCreateFile, MakeTuple(url));
- }
- return error;
- }
-
- if (file_flags & base::PLATFORM_FILE_CREATE)
- return base::PLATFORM_FILE_ERROR_EXISTS;
-
- base::PlatformFileInfo platform_file_info;
- base::FilePath local_path;
- FileInfo file_info;
- base::PlatformFileError error = GetFileInfoInternal(
- db, context, url.origin(), url.type(), file_id,
- &file_info, &platform_file_info, &local_path);
- if (error != base::PLATFORM_FILE_OK)
- return error;
- if (file_info.is_directory())
- return base::PLATFORM_FILE_ERROR_NOT_A_FILE;
-
- int64 delta = 0;
- if (file_flags & (base::PLATFORM_FILE_CREATE_ALWAYS |
- base::PLATFORM_FILE_OPEN_TRUNCATED)) {
- // The file exists and we're truncating.
- delta = -platform_file_info.size;
- AllocateQuota(context, delta);
- }
-
- error = NativeFileUtil::CreateOrOpen(
- local_path, file_flags, file_handle, created);
- if (error == base::PLATFORM_FILE_ERROR_NOT_FOUND) {
- // TODO(tzik): Also invalidate on-memory usage cache in UsageTracker.
- // TODO(tzik): Delete database entry after ensuring the file lost.
- InvalidateUsageCache(context, url.origin(), url.type());
- LOG(WARNING) << "Lost a backing file.";
- error = base::PLATFORM_FILE_ERROR_FAILED;
- }
-
- // If truncating we need to update the usage.
- if (error == base::PLATFORM_FILE_OK && delta) {
- UpdateUsage(context, url, delta);
- context->change_observers()->Notify(
- &FileChangeObserver::OnModifyFile, MakeTuple(url));
+ PlatformFileError error = CreateOrOpenInternal(context, url, file_flags,
+ file_handle, created);
+ if (*file_handle != base::kInvalidPlatformFileValue &&
+ file_flags & base::PLATFORM_FILE_WRITE &&
+ url.type() == kFileSystemTypePersistent) {
kinuko 2013/04/30 05:14:23 instead should we check context->quota_limit_type(
tzik 2013/04/30 05:26:22 Done.
+ DCHECK_EQ(base::PLATFORM_FILE_OK, error);
+ context->file_system_context()->GetQuotaUtil(url.type())->
+ StickyInvalidateUsageCache(url.origin(), url.type());
}
return error;
}
@@ -1337,4 +1271,86 @@ PlatformFileError ObfuscatedFileUtil::GenerateNewLocalPath(
return base::PLATFORM_FILE_OK;
}
+PlatformFileError ObfuscatedFileUtil::CreateOrOpenInternal(
+ FileSystemOperationContext* context,
+ const FileSystemURL& url, int file_flags,
+ PlatformFile* file_handle, bool* created) {
+ 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(
+ url.origin(), url.type(), true);
+ if (!db)
+ return base::PLATFORM_FILE_ERROR_FAILED;
+ FileId file_id;
+ if (!db->GetFileWithPath(url.path(), &file_id)) {
+ // The file doesn't exist.
+ if (!(file_flags & (base::PLATFORM_FILE_CREATE |
+ base::PLATFORM_FILE_CREATE_ALWAYS | base::PLATFORM_FILE_OPEN_ALWAYS)))
+ return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+ FileId parent_id;
+ if (!db->GetFileWithPath(VirtualPath::DirName(url.path()),
+ &parent_id))
+ return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+ FileInfo file_info;
+ InitFileInfo(&file_info, parent_id,
+ VirtualPath::BaseName(url.path()).value());
+
+ int64 growth = UsageForPath(file_info.name.size());
+ if (!AllocateQuota(context, growth))
+ return base::PLATFORM_FILE_ERROR_NO_SPACE;
+ PlatformFileError error = CreateFile(
+ context, base::FilePath(),
+ url.origin(), url.type(), &file_info,
+ file_flags, file_handle);
+ if (created && base::PLATFORM_FILE_OK == error) {
+ *created = true;
+ UpdateUsage(context, url, growth);
+ context->change_observers()->Notify(
+ &FileChangeObserver::OnCreateFile, MakeTuple(url));
+ }
+ return error;
+ }
+
+ if (file_flags & base::PLATFORM_FILE_CREATE)
+ return base::PLATFORM_FILE_ERROR_EXISTS;
+
+ base::PlatformFileInfo platform_file_info;
+ base::FilePath local_path;
+ FileInfo file_info;
+ base::PlatformFileError error = GetFileInfoInternal(
+ db, context, url.origin(), url.type(), file_id,
+ &file_info, &platform_file_info, &local_path);
+ if (error != base::PLATFORM_FILE_OK)
+ return error;
+ if (file_info.is_directory())
+ return base::PLATFORM_FILE_ERROR_NOT_A_FILE;
+
+ int64 delta = 0;
+ if (file_flags & (base::PLATFORM_FILE_CREATE_ALWAYS |
+ base::PLATFORM_FILE_OPEN_TRUNCATED)) {
+ // The file exists and we're truncating.
+ delta = -platform_file_info.size;
+ AllocateQuota(context, delta);
+ }
+
+ error = NativeFileUtil::CreateOrOpen(
+ local_path, file_flags, file_handle, created);
+ if (error == base::PLATFORM_FILE_ERROR_NOT_FOUND) {
+ // TODO(tzik): Also invalidate on-memory usage cache in UsageTracker.
+ // TODO(tzik): Delete database entry after ensuring the file lost.
+ InvalidateUsageCache(context, url.origin(), url.type());
+ LOG(WARNING) << "Lost a backing file.";
+ error = base::PLATFORM_FILE_ERROR_FAILED;
+ }
+
+ // If truncating we need to update the usage.
+ if (error == base::PLATFORM_FILE_OK && delta) {
+ UpdateUsage(context, url, delta);
+ context->change_observers()->Notify(
+ &FileChangeObserver::OnModifyFile, MakeTuple(url));
+ }
+ return error;
+}
+
} // namespace fileapi
« no previous file with comments | « webkit/fileapi/obfuscated_file_util.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698