| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "storage/browser/fileapi/obfuscated_file_util.h" | 5 #include "storage/browser/fileapi/obfuscated_file_util.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <queue> | 10 #include <queue> |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 274 | 274 |
| 275 base::File ObfuscatedFileUtil::CreateOrOpen( | 275 base::File ObfuscatedFileUtil::CreateOrOpen( |
| 276 FileSystemOperationContext* context, | 276 FileSystemOperationContext* context, |
| 277 const FileSystemURL& url, int file_flags) { | 277 const FileSystemURL& url, int file_flags) { |
| 278 base::File file = CreateOrOpenInternal(context, url, file_flags); | 278 base::File file = CreateOrOpenInternal(context, url, file_flags); |
| 279 if (file.IsValid() && file_flags & base::File::FLAG_WRITE && | 279 if (file.IsValid() && file_flags & base::File::FLAG_WRITE && |
| 280 context->quota_limit_type() == storage::kQuotaLimitTypeUnlimited && | 280 context->quota_limit_type() == storage::kQuotaLimitTypeUnlimited && |
| 281 sandbox_delegate_) { | 281 sandbox_delegate_) { |
| 282 sandbox_delegate_->StickyInvalidateUsageCache(url.origin(), url.type()); | 282 sandbox_delegate_->StickyInvalidateUsageCache(url.origin(), url.type()); |
| 283 } | 283 } |
| 284 return file.Pass(); | 284 return file; |
| 285 } | 285 } |
| 286 | 286 |
| 287 base::File::Error ObfuscatedFileUtil::EnsureFileExists( | 287 base::File::Error ObfuscatedFileUtil::EnsureFileExists( |
| 288 FileSystemOperationContext* context, | 288 FileSystemOperationContext* context, |
| 289 const FileSystemURL& url, | 289 const FileSystemURL& url, |
| 290 bool* created) { | 290 bool* created) { |
| 291 SandboxDirectoryDatabase* db = GetDirectoryDatabase(url, true); | 291 SandboxDirectoryDatabase* db = GetDirectoryDatabase(url, true); |
| 292 if (!db) | 292 if (!db) |
| 293 return base::File::FILE_ERROR_FAILED; | 293 return base::File::FILE_ERROR_FAILED; |
| 294 | 294 |
| (...skipping 762 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1057 | 1057 |
| 1058 if (base::PathExists(dest_local_path)) { | 1058 if (base::PathExists(dest_local_path)) { |
| 1059 if (!base::DeleteFile(dest_local_path, false /* recursive */)) | 1059 if (!base::DeleteFile(dest_local_path, false /* recursive */)) |
| 1060 return base::File(base::File::FILE_ERROR_FAILED); | 1060 return base::File(base::File::FILE_ERROR_FAILED); |
| 1061 LOG(WARNING) << "A stray file detected"; | 1061 LOG(WARNING) << "A stray file detected"; |
| 1062 InvalidateUsageCache(context, dest_url.origin(), dest_url.type()); | 1062 InvalidateUsageCache(context, dest_url.origin(), dest_url.type()); |
| 1063 } | 1063 } |
| 1064 | 1064 |
| 1065 base::File file = NativeFileUtil::CreateOrOpen(dest_local_path, file_flags); | 1065 base::File file = NativeFileUtil::CreateOrOpen(dest_local_path, file_flags); |
| 1066 if (!file.IsValid()) | 1066 if (!file.IsValid()) |
| 1067 return file.Pass(); | 1067 return file; |
| 1068 | 1068 |
| 1069 if (!file.created()) { | 1069 if (!file.created()) { |
| 1070 file.Close(); | 1070 file.Close(); |
| 1071 base::DeleteFile(dest_local_path, false /* recursive */); | 1071 base::DeleteFile(dest_local_path, false /* recursive */); |
| 1072 return base::File(base::File::FILE_ERROR_FAILED); | 1072 return base::File(base::File::FILE_ERROR_FAILED); |
| 1073 } | 1073 } |
| 1074 | 1074 |
| 1075 error = CommitCreateFile(root, dest_local_path, db, dest_file_info); | 1075 error = CommitCreateFile(root, dest_local_path, db, dest_file_info); |
| 1076 if (error != base::File::FILE_OK) { | 1076 if (error != base::File::FILE_OK) { |
| 1077 file.Close(); | 1077 file.Close(); |
| 1078 base::DeleteFile(dest_local_path, false /* recursive */); | 1078 base::DeleteFile(dest_local_path, false /* recursive */); |
| 1079 return base::File(error); | 1079 return base::File(error); |
| 1080 } | 1080 } |
| 1081 | 1081 |
| 1082 return file.Pass(); | 1082 return file; |
| 1083 } | 1083 } |
| 1084 | 1084 |
| 1085 base::File::Error ObfuscatedFileUtil::CreateFile( | 1085 base::File::Error ObfuscatedFileUtil::CreateFile( |
| 1086 FileSystemOperationContext* context, | 1086 FileSystemOperationContext* context, |
| 1087 const base::FilePath& src_file_path, | 1087 const base::FilePath& src_file_path, |
| 1088 const FileSystemURL& dest_url, | 1088 const FileSystemURL& dest_url, |
| 1089 FileInfo* dest_file_info) { | 1089 FileInfo* dest_file_info) { |
| 1090 SandboxDirectoryDatabase* db = GetDirectoryDatabase(dest_url, true); | 1090 SandboxDirectoryDatabase* db = GetDirectoryDatabase(dest_url, true); |
| 1091 | 1091 |
| 1092 base::FilePath root, dest_local_path; | 1092 base::FilePath root, dest_local_path; |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1367 | 1367 |
| 1368 int64_t growth = UsageForPath(file_info.name.size()); | 1368 int64_t growth = UsageForPath(file_info.name.size()); |
| 1369 if (!AllocateQuota(context, growth)) | 1369 if (!AllocateQuota(context, growth)) |
| 1370 return base::File(base::File::FILE_ERROR_NO_SPACE); | 1370 return base::File(base::File::FILE_ERROR_NO_SPACE); |
| 1371 base::File file = CreateAndOpenFile(context, url, &file_info, file_flags); | 1371 base::File file = CreateAndOpenFile(context, url, &file_info, file_flags); |
| 1372 if (file.IsValid()) { | 1372 if (file.IsValid()) { |
| 1373 UpdateUsage(context, url, growth); | 1373 UpdateUsage(context, url, growth); |
| 1374 context->change_observers()->Notify( | 1374 context->change_observers()->Notify( |
| 1375 &FileChangeObserver::OnCreateFile, base::MakeTuple(url)); | 1375 &FileChangeObserver::OnCreateFile, base::MakeTuple(url)); |
| 1376 } | 1376 } |
| 1377 return file.Pass(); | 1377 return file; |
| 1378 } | 1378 } |
| 1379 | 1379 |
| 1380 if (file_flags & base::File::FLAG_CREATE) | 1380 if (file_flags & base::File::FLAG_CREATE) |
| 1381 return base::File(base::File::FILE_ERROR_EXISTS); | 1381 return base::File(base::File::FILE_ERROR_EXISTS); |
| 1382 | 1382 |
| 1383 base::File::Info platform_file_info; | 1383 base::File::Info platform_file_info; |
| 1384 base::FilePath local_path; | 1384 base::FilePath local_path; |
| 1385 FileInfo file_info; | 1385 FileInfo file_info; |
| 1386 base::File::Error error = GetFileInfoInternal( | 1386 base::File::Error error = GetFileInfoInternal( |
| 1387 db, context, url, file_id, &file_info, &platform_file_info, &local_path); | 1387 db, context, url, file_id, &file_info, &platform_file_info, &local_path); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1401 base::File file = NativeFileUtil::CreateOrOpen(local_path, file_flags); | 1401 base::File file = NativeFileUtil::CreateOrOpen(local_path, file_flags); |
| 1402 if (!file.IsValid()) { | 1402 if (!file.IsValid()) { |
| 1403 error = file.error_details(); | 1403 error = file.error_details(); |
| 1404 if (error == base::File::FILE_ERROR_NOT_FOUND) { | 1404 if (error == base::File::FILE_ERROR_NOT_FOUND) { |
| 1405 // TODO(tzik): Also invalidate on-memory usage cache in UsageTracker. | 1405 // TODO(tzik): Also invalidate on-memory usage cache in UsageTracker. |
| 1406 // TODO(tzik): Delete database entry after ensuring the file lost. | 1406 // TODO(tzik): Delete database entry after ensuring the file lost. |
| 1407 InvalidateUsageCache(context, url.origin(), url.type()); | 1407 InvalidateUsageCache(context, url.origin(), url.type()); |
| 1408 LOG(WARNING) << "Lost a backing file."; | 1408 LOG(WARNING) << "Lost a backing file."; |
| 1409 return base::File(base::File::FILE_ERROR_FAILED); | 1409 return base::File(base::File::FILE_ERROR_FAILED); |
| 1410 } | 1410 } |
| 1411 return file.Pass(); | 1411 return file; |
| 1412 } | 1412 } |
| 1413 | 1413 |
| 1414 // If truncating we need to update the usage. | 1414 // If truncating we need to update the usage. |
| 1415 if (delta) { | 1415 if (delta) { |
| 1416 UpdateUsage(context, url, delta); | 1416 UpdateUsage(context, url, delta); |
| 1417 context->change_observers()->Notify( | 1417 context->change_observers()->Notify( |
| 1418 &FileChangeObserver::OnModifyFile, base::MakeTuple(url)); | 1418 &FileChangeObserver::OnModifyFile, base::MakeTuple(url)); |
| 1419 } | 1419 } |
| 1420 return file.Pass(); | 1420 return file; |
| 1421 } | 1421 } |
| 1422 | 1422 |
| 1423 bool ObfuscatedFileUtil::HasIsolatedStorage(const GURL& origin) { | 1423 bool ObfuscatedFileUtil::HasIsolatedStorage(const GURL& origin) { |
| 1424 return special_storage_policy_.get() && | 1424 return special_storage_policy_.get() && |
| 1425 special_storage_policy_->HasIsolatedStorage(origin); | 1425 special_storage_policy_->HasIsolatedStorage(origin); |
| 1426 } | 1426 } |
| 1427 | 1427 |
| 1428 } // namespace storage | 1428 } // namespace storage |
| OLD | NEW |