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 883 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
894 if (origin_type_path.empty()) | 894 if (origin_type_path.empty()) |
895 return true; | 895 return true; |
896 | 896 |
897 if (error != base::PLATFORM_FILE_ERROR_NOT_FOUND) { | 897 if (error != base::PLATFORM_FILE_ERROR_NOT_FOUND) { |
898 // TODO(dmikurube): Consider the return value of DestroyDirectoryDatabase. | 898 // TODO(dmikurube): Consider the return value of DestroyDirectoryDatabase. |
899 // We ignore its error now since 1) it doesn't matter the final result, and | 899 // We ignore its error now since 1) it doesn't matter the final result, and |
900 // 2) it always returns false in Windows because of LevelDB's | 900 // 2) it always returns false in Windows because of LevelDB's |
901 // implementation. | 901 // implementation. |
902 // Information about failure would be useful for debugging. | 902 // Information about failure would be useful for debugging. |
903 DestroyDirectoryDatabase(origin, type); | 903 DestroyDirectoryDatabase(origin, type); |
904 if (!base::Delete(origin_type_path, true /* recursive */)) | 904 if (!base::DeleteFile(origin_type_path, true /* recursive */)) |
905 return false; | 905 return false; |
906 } | 906 } |
907 | 907 |
908 base::FilePath origin_path = VirtualPath::DirName(origin_type_path); | 908 base::FilePath origin_path = VirtualPath::DirName(origin_type_path); |
909 DCHECK_EQ(origin_path.value(), | 909 DCHECK_EQ(origin_path.value(), |
910 GetDirectoryForOrigin(origin, false, NULL).value()); | 910 GetDirectoryForOrigin(origin, false, NULL).value()); |
911 | 911 |
912 // At this point we are sure we had successfully deleted the origin/type | 912 // At this point we are sure we had successfully deleted the origin/type |
913 // directory (i.e. we're ready to just return true). | 913 // directory (i.e. we're ready to just return true). |
914 // See if we have other directories in this origin directory. | 914 // See if we have other directories in this origin directory. |
(...skipping 13 matching lines...) Expand all Loading... |
928 return true; | 928 return true; |
929 } | 929 } |
930 } | 930 } |
931 | 931 |
932 // No other directories seem exist. Try deleting the entire origin directory. | 932 // No other directories seem exist. Try deleting the entire origin directory. |
933 InitOriginDatabase(false); | 933 InitOriginDatabase(false); |
934 if (origin_database_) { | 934 if (origin_database_) { |
935 origin_database_->RemovePathForOrigin( | 935 origin_database_->RemovePathForOrigin( |
936 webkit_database::GetIdentifierFromOrigin(origin)); | 936 webkit_database::GetIdentifierFromOrigin(origin)); |
937 } | 937 } |
938 if (!base::Delete(origin_path, true /* recursive */)) | 938 if (!base::DeleteFile(origin_path, true /* recursive */)) |
939 return false; | 939 return false; |
940 | 940 |
941 return true; | 941 return true; |
942 } | 942 } |
943 | 943 |
944 // static | 944 // static |
945 base::FilePath::StringType ObfuscatedFileUtil::GetDirectoryNameForType( | 945 base::FilePath::StringType ObfuscatedFileUtil::GetDirectoryNameForType( |
946 FileSystemType type) { | 946 FileSystemType type) { |
947 switch (type) { | 947 switch (type) { |
948 case kFileSystemTypeTemporary: | 948 case kFileSystemTypeTemporary: |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1097 | 1097 |
1098 bool created = false; | 1098 bool created = false; |
1099 if (!src_file_path.empty()) { | 1099 if (!src_file_path.empty()) { |
1100 DCHECK(!file_flags); | 1100 DCHECK(!file_flags); |
1101 DCHECK(!handle); | 1101 DCHECK(!handle); |
1102 error = NativeFileUtil::CopyOrMoveFile( | 1102 error = NativeFileUtil::CopyOrMoveFile( |
1103 src_file_path, dest_local_path, true /* copy */); | 1103 src_file_path, dest_local_path, true /* copy */); |
1104 created = true; | 1104 created = true; |
1105 } else { | 1105 } else { |
1106 if (base::PathExists(dest_local_path)) { | 1106 if (base::PathExists(dest_local_path)) { |
1107 if (!base::Delete(dest_local_path, true /* recursive */)) { | 1107 if (!base::DeleteFile(dest_local_path, true /* recursive */)) { |
1108 NOTREACHED(); | 1108 NOTREACHED(); |
1109 return base::PLATFORM_FILE_ERROR_FAILED; | 1109 return base::PLATFORM_FILE_ERROR_FAILED; |
1110 } | 1110 } |
1111 LOG(WARNING) << "A stray file detected"; | 1111 LOG(WARNING) << "A stray file detected"; |
1112 InvalidateUsageCache(context, dest_origin, dest_type); | 1112 InvalidateUsageCache(context, dest_origin, dest_type); |
1113 } | 1113 } |
1114 | 1114 |
1115 if (handle) { | 1115 if (handle) { |
1116 error = NativeFileUtil::CreateOrOpen( | 1116 error = NativeFileUtil::CreateOrOpen( |
1117 dest_local_path, file_flags, handle, &created); | 1117 dest_local_path, file_flags, handle, &created); |
1118 // If this succeeds, we must close handle on any subsequent error. | 1118 // If this succeeds, we must close handle on any subsequent error. |
1119 } else { | 1119 } else { |
1120 DCHECK(!file_flags); // file_flags is only used by CreateOrOpen. | 1120 DCHECK(!file_flags); // file_flags is only used by CreateOrOpen. |
1121 error = NativeFileUtil::EnsureFileExists(dest_local_path, &created); | 1121 error = NativeFileUtil::EnsureFileExists(dest_local_path, &created); |
1122 } | 1122 } |
1123 } | 1123 } |
1124 if (error != base::PLATFORM_FILE_OK) | 1124 if (error != base::PLATFORM_FILE_OK) |
1125 return error; | 1125 return error; |
1126 | 1126 |
1127 if (!created) { | 1127 if (!created) { |
1128 NOTREACHED(); | 1128 NOTREACHED(); |
1129 if (handle) { | 1129 if (handle) { |
1130 DCHECK_NE(base::kInvalidPlatformFileValue, *handle); | 1130 DCHECK_NE(base::kInvalidPlatformFileValue, *handle); |
1131 base::ClosePlatformFile(*handle); | 1131 base::ClosePlatformFile(*handle); |
1132 base::Delete(dest_local_path, false /* recursive */); | 1132 base::DeleteFile(dest_local_path, false /* recursive */); |
1133 } | 1133 } |
1134 return base::PLATFORM_FILE_ERROR_FAILED; | 1134 return base::PLATFORM_FILE_ERROR_FAILED; |
1135 } | 1135 } |
1136 | 1136 |
1137 // This removes the root, including the trailing slash, leaving a relative | 1137 // This removes the root, including the trailing slash, leaving a relative |
1138 // path. | 1138 // path. |
1139 dest_file_info->data_path = base::FilePath( | 1139 dest_file_info->data_path = base::FilePath( |
1140 dest_local_path.value().substr(root.value().length() + 1)); | 1140 dest_local_path.value().substr(root.value().length() + 1)); |
1141 | 1141 |
1142 FileId file_id; | 1142 FileId file_id; |
1143 if (!db->AddFileInfo(*dest_file_info, &file_id)) { | 1143 if (!db->AddFileInfo(*dest_file_info, &file_id)) { |
1144 if (handle) { | 1144 if (handle) { |
1145 DCHECK_NE(base::kInvalidPlatformFileValue, *handle); | 1145 DCHECK_NE(base::kInvalidPlatformFileValue, *handle); |
1146 base::ClosePlatformFile(*handle); | 1146 base::ClosePlatformFile(*handle); |
1147 } | 1147 } |
1148 base::Delete(dest_local_path, false /* recursive */); | 1148 base::DeleteFile(dest_local_path, false /* recursive */); |
1149 return base::PLATFORM_FILE_ERROR_FAILED; | 1149 return base::PLATFORM_FILE_ERROR_FAILED; |
1150 } | 1150 } |
1151 TouchDirectory(db, dest_file_info->parent_id); | 1151 TouchDirectory(db, dest_file_info->parent_id); |
1152 | 1152 |
1153 return base::PLATFORM_FILE_OK; | 1153 return base::PLATFORM_FILE_OK; |
1154 } | 1154 } |
1155 | 1155 |
1156 base::FilePath ObfuscatedFileUtil::DataPathToLocalPath( | 1156 base::FilePath ObfuscatedFileUtil::DataPathToLocalPath( |
1157 const GURL& origin, FileSystemType type, const base::FilePath& data_path) { | 1157 const GURL& origin, FileSystemType type, const base::FilePath& data_path) { |
1158 PlatformFileError error = base::PLATFORM_FILE_OK; | 1158 PlatformFileError error = base::PLATFORM_FILE_OK; |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1233 } | 1233 } |
1234 if (!origin_database_->GetPathForOrigin(id, &directory_name)) { | 1234 if (!origin_database_->GetPathForOrigin(id, &directory_name)) { |
1235 if (error_code) | 1235 if (error_code) |
1236 *error_code = base::PLATFORM_FILE_ERROR_FAILED; | 1236 *error_code = base::PLATFORM_FILE_ERROR_FAILED; |
1237 return base::FilePath(); | 1237 return base::FilePath(); |
1238 } | 1238 } |
1239 | 1239 |
1240 base::FilePath path = file_system_directory_.Append(directory_name); | 1240 base::FilePath path = file_system_directory_.Append(directory_name); |
1241 bool exists_in_fs = base::DirectoryExists(path); | 1241 bool exists_in_fs = base::DirectoryExists(path); |
1242 if (!exists_in_db && exists_in_fs) { | 1242 if (!exists_in_db && exists_in_fs) { |
1243 if (!base::Delete(path, true)) { | 1243 if (!base::DeleteFile(path, true)) { |
1244 if (error_code) | 1244 if (error_code) |
1245 *error_code = base::PLATFORM_FILE_ERROR_FAILED; | 1245 *error_code = base::PLATFORM_FILE_ERROR_FAILED; |
1246 return base::FilePath(); | 1246 return base::FilePath(); |
1247 } | 1247 } |
1248 exists_in_fs = false; | 1248 exists_in_fs = false; |
1249 } | 1249 } |
1250 | 1250 |
1251 if (!exists_in_fs) { | 1251 if (!exists_in_fs) { |
1252 if (!create || !file_util::CreateDirectory(path)) { | 1252 if (!create || !file_util::CreateDirectory(path)) { |
1253 if (error_code) | 1253 if (error_code) |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1446 // special_storage_policy_->HasIsolatedStorage(origin) returns false | 1446 // special_storage_policy_->HasIsolatedStorage(origin) returns false |
1447 // for the same origin. | 1447 // for the same origin. |
1448 if (!isolated_origin_.is_empty()) { | 1448 if (!isolated_origin_.is_empty()) { |
1449 CHECK_EQ(isolated_origin_.spec(), origin.spec()); | 1449 CHECK_EQ(isolated_origin_.spec(), origin.spec()); |
1450 return true; | 1450 return true; |
1451 } | 1451 } |
1452 return false; | 1452 return false; |
1453 } | 1453 } |
1454 | 1454 |
1455 } // namespace fileapi | 1455 } // namespace fileapi |
OLD | NEW |