Chromium Code Reviews| 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 "webkit/browser/fileapi/obfuscated_file_util.h" | 5 #include "webkit/browser/fileapi/obfuscated_file_util.h" |
| 6 | 6 |
| 7 #include <queue> | 7 #include <queue> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 285 sandbox_delegate_) { | 285 sandbox_delegate_) { |
| 286 DCHECK_EQ(base::File::FILE_OK, error); | 286 DCHECK_EQ(base::File::FILE_OK, error); |
| 287 sandbox_delegate_->StickyInvalidateUsageCache(url.origin(), url.type()); | 287 sandbox_delegate_->StickyInvalidateUsageCache(url.origin(), url.type()); |
| 288 } | 288 } |
| 289 return error; | 289 return error; |
| 290 } | 290 } |
| 291 | 291 |
| 292 base::File::Error ObfuscatedFileUtil::Close( | 292 base::File::Error ObfuscatedFileUtil::Close( |
| 293 FileSystemOperationContext* context, | 293 FileSystemOperationContext* context, |
| 294 base::PlatformFile file) { | 294 base::PlatformFile file) { |
| 295 return NativeFileUtil::Close(file); | 295 base::File auto_closed(file); |
| 296 return base::File::FILE_OK; | |
| 296 } | 297 } |
| 297 | 298 |
| 298 base::File::Error ObfuscatedFileUtil::EnsureFileExists( | 299 base::File::Error ObfuscatedFileUtil::EnsureFileExists( |
| 299 FileSystemOperationContext* context, | 300 FileSystemOperationContext* context, |
| 300 const FileSystemURL& url, | 301 const FileSystemURL& url, |
| 301 bool* created) { | 302 bool* created) { |
| 302 SandboxDirectoryDatabase* db = GetDirectoryDatabase(url, true); | 303 SandboxDirectoryDatabase* db = GetDirectoryDatabase(url, true); |
| 303 if (!db) | 304 if (!db) |
| 304 return base::File::FILE_ERROR_FAILED; | 305 return base::File::FILE_ERROR_FAILED; |
| 305 | 306 |
| (...skipping 767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1073 DCHECK(!file_flags); | 1074 DCHECK(!file_flags); |
| 1074 DCHECK(!handle); | 1075 DCHECK(!handle); |
| 1075 error = NativeFileUtil::CopyOrMoveFile( | 1076 error = NativeFileUtil::CopyOrMoveFile( |
| 1076 src_file_path, dest_local_path, | 1077 src_file_path, dest_local_path, |
| 1077 FileSystemOperation::OPTION_NONE, | 1078 FileSystemOperation::OPTION_NONE, |
| 1078 fileapi::NativeFileUtil::CopyOrMoveModeForDestination(dest_url, | 1079 fileapi::NativeFileUtil::CopyOrMoveModeForDestination(dest_url, |
| 1079 true /* copy */)); | 1080 true /* copy */)); |
| 1080 created = true; | 1081 created = true; |
| 1081 } else { | 1082 } else { |
| 1082 if (base::PathExists(dest_local_path)) { | 1083 if (base::PathExists(dest_local_path)) { |
| 1083 if (!base::DeleteFile(dest_local_path, true /* recursive */)) { | 1084 if (!base::DeleteFile(dest_local_path, true /* recursive */)) |
| 1084 NOTREACHED(); | |
|
kinuko
2014/03/24 09:56:58
Why are you removing these NOTREACHED?
rvargas (doing something else)
2014/03/24 23:02:48
Because they are DCHECKing at the same time that h
kinuko
2014/03/25 03:15:26
I'm not original author of this code, and fine wit
| |
| 1085 return base::File::FILE_ERROR_FAILED; | 1085 return base::File::FILE_ERROR_FAILED; |
| 1086 } | |
| 1087 LOG(WARNING) << "A stray file detected"; | 1086 LOG(WARNING) << "A stray file detected"; |
| 1088 InvalidateUsageCache(context, dest_url.origin(), dest_url.type()); | 1087 InvalidateUsageCache(context, dest_url.origin(), dest_url.type()); |
| 1089 } | 1088 } |
| 1090 | 1089 |
| 1091 if (handle) { | 1090 if (handle) { |
| 1092 error = NativeFileUtil::CreateOrOpen( | 1091 // TODO(rvargas): Remove PlatformFile from this code. |
| 1093 dest_local_path, file_flags, handle, &created); | 1092 base::File file; |
| 1093 error = NativeFileUtil::CreateOrOpen(dest_local_path, file_flags, &file); | |
| 1094 if (error == base::File::FILE_OK) { | |
| 1095 created = file.created(); | |
| 1096 *handle = file.TakePlatformFile(); | |
| 1097 } | |
| 1094 // If this succeeds, we must close handle on any subsequent error. | 1098 // If this succeeds, we must close handle on any subsequent error. |
| 1095 } else { | 1099 } else { |
| 1096 DCHECK(!file_flags); // file_flags is only used by CreateOrOpen. | 1100 DCHECK(!file_flags); // file_flags is only used by CreateOrOpen. |
| 1097 error = NativeFileUtil::EnsureFileExists(dest_local_path, &created); | 1101 error = NativeFileUtil::EnsureFileExists(dest_local_path, &created); |
| 1098 } | 1102 } |
| 1099 } | 1103 } |
| 1100 if (error != base::File::FILE_OK) | 1104 if (error != base::File::FILE_OK) |
| 1101 return error; | 1105 return error; |
| 1102 | 1106 |
| 1103 if (!created) { | 1107 if (!created) { |
| 1104 NOTREACHED(); | |
| 1105 if (handle) { | 1108 if (handle) { |
| 1106 DCHECK_NE(base::kInvalidPlatformFileValue, *handle); | 1109 DCHECK_NE(base::kInvalidPlatformFileValue, *handle); |
| 1107 base::ClosePlatformFile(*handle); | 1110 base::ClosePlatformFile(*handle); |
| 1108 base::DeleteFile(dest_local_path, false /* recursive */); | 1111 base::DeleteFile(dest_local_path, false /* recursive */); |
| 1109 *handle = base::kInvalidPlatformFileValue; | 1112 *handle = base::kInvalidPlatformFileValue; |
| 1110 } | 1113 } |
| 1111 return base::File::FILE_ERROR_FAILED; | 1114 return base::File::FILE_ERROR_FAILED; |
| 1112 } | 1115 } |
| 1113 | 1116 |
| 1114 // This removes the root, including the trailing slash, leaving a relative | 1117 // This removes the root, including the trailing slash, leaving a relative |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1389 return base::File::FILE_ERROR_NOT_A_FILE; | 1392 return base::File::FILE_ERROR_NOT_A_FILE; |
| 1390 | 1393 |
| 1391 int64 delta = 0; | 1394 int64 delta = 0; |
| 1392 if (file_flags & (base::PLATFORM_FILE_CREATE_ALWAYS | | 1395 if (file_flags & (base::PLATFORM_FILE_CREATE_ALWAYS | |
| 1393 base::PLATFORM_FILE_OPEN_TRUNCATED)) { | 1396 base::PLATFORM_FILE_OPEN_TRUNCATED)) { |
| 1394 // The file exists and we're truncating. | 1397 // The file exists and we're truncating. |
| 1395 delta = -platform_file_info.size; | 1398 delta = -platform_file_info.size; |
| 1396 AllocateQuota(context, delta); | 1399 AllocateQuota(context, delta); |
| 1397 } | 1400 } |
| 1398 | 1401 |
| 1399 error = NativeFileUtil::CreateOrOpen( | 1402 // TODO(rvargas): make FileSystemFileUtil use base::File. |
| 1400 local_path, file_flags, file_handle, created); | 1403 base::File file; |
| 1404 error = NativeFileUtil::CreateOrOpen(local_path, file_flags, &file); | |
| 1401 if (error == base::File::FILE_ERROR_NOT_FOUND) { | 1405 if (error == base::File::FILE_ERROR_NOT_FOUND) { |
| 1402 // TODO(tzik): Also invalidate on-memory usage cache in UsageTracker. | 1406 // TODO(tzik): Also invalidate on-memory usage cache in UsageTracker. |
| 1403 // TODO(tzik): Delete database entry after ensuring the file lost. | 1407 // TODO(tzik): Delete database entry after ensuring the file lost. |
| 1404 InvalidateUsageCache(context, url.origin(), url.type()); | 1408 InvalidateUsageCache(context, url.origin(), url.type()); |
| 1405 LOG(WARNING) << "Lost a backing file."; | 1409 LOG(WARNING) << "Lost a backing file."; |
| 1406 error = base::File::FILE_ERROR_FAILED; | 1410 error = base::File::FILE_ERROR_FAILED; |
| 1407 } | 1411 } |
| 1408 | 1412 |
| 1413 if (error != base::File::FILE_OK) | |
| 1414 return error; | |
| 1415 | |
| 1416 *created = file.created(); | |
| 1417 *file_handle = file.TakePlatformFile(); | |
| 1418 | |
| 1409 // If truncating we need to update the usage. | 1419 // If truncating we need to update the usage. |
| 1410 if (error == base::File::FILE_OK && delta) { | 1420 if (delta) { |
| 1411 UpdateUsage(context, url, delta); | 1421 UpdateUsage(context, url, delta); |
| 1412 context->change_observers()->Notify( | 1422 context->change_observers()->Notify( |
| 1413 &FileChangeObserver::OnModifyFile, MakeTuple(url)); | 1423 &FileChangeObserver::OnModifyFile, MakeTuple(url)); |
| 1414 } | 1424 } |
| 1415 return error; | 1425 return error; |
| 1416 } | 1426 } |
| 1417 | 1427 |
| 1418 bool ObfuscatedFileUtil::HasIsolatedStorage(const GURL& origin) { | 1428 bool ObfuscatedFileUtil::HasIsolatedStorage(const GURL& origin) { |
| 1419 return special_storage_policy_.get() && | 1429 return special_storage_policy_.get() && |
| 1420 special_storage_policy_->HasIsolatedStorage(origin); | 1430 special_storage_policy_->HasIsolatedStorage(origin); |
| 1421 } | 1431 } |
| 1422 | 1432 |
| 1423 } // namespace fileapi | 1433 } // namespace fileapi |
| OLD | NEW |