OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/fileapi/obfuscated_file_system_file_util.h" | 5 #include "webkit/fileapi/obfuscated_file_system_file_util.h" |
6 | 6 |
7 #include <queue> | 7 #include <queue> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
167 base::PlatformFileInfo* file_info, | 167 base::PlatformFileInfo* file_info, |
168 FilePath* platform_file_path) { | 168 FilePath* platform_file_path) { |
169 FileSystemDirectoryDatabase* db = GetDirectoryDatabase( | 169 FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
170 context->src_origin_url(), context->src_type(), false); | 170 context->src_origin_url(), context->src_type(), false); |
171 if (!db) | 171 if (!db) |
172 return base::PLATFORM_FILE_ERROR_NOT_FOUND; | 172 return base::PLATFORM_FILE_ERROR_NOT_FOUND; |
173 FileId file_id; | 173 FileId file_id; |
174 if (!db->GetFileWithPath(virtual_path, &file_id)) | 174 if (!db->GetFileWithPath(virtual_path, &file_id)) |
175 return base::PLATFORM_FILE_ERROR_NOT_FOUND; | 175 return base::PLATFORM_FILE_ERROR_NOT_FOUND; |
176 FileInfo local_info; | 176 FileInfo local_info; |
177 if (!db->GetFileInfo(file_id, &local_info)) { | 177 return GetFileInfoInternal(db, context, file_id, |
178 NOTREACHED(); | 178 &local_info, file_info, platform_file_path); |
179 return base::PLATFORM_FILE_ERROR_FAILED; | |
180 } | |
181 if (local_info.is_directory()) { | |
182 file_info->is_directory = true; | |
183 file_info->is_symbolic_link = false; | |
184 file_info->last_modified = local_info.modification_time; | |
185 *platform_file_path = FilePath(); | |
186 // We don't fill in ctime or atime. | |
187 return base::PLATFORM_FILE_OK; | |
188 } | |
189 if (local_info.data_path.empty()) | |
190 return base::PLATFORM_FILE_ERROR_INVALID_OPERATION; | |
191 FilePath data_path = DataPathToLocalPath(context->src_origin_url(), | |
192 context->src_type(), local_info.data_path); | |
193 return underlying_file_util_->GetFileInfo( | |
194 context, data_path, file_info, platform_file_path); | |
195 } | 179 } |
196 | 180 |
197 PlatformFileError ObfuscatedFileSystemFileUtil::ReadDirectory( | 181 PlatformFileError ObfuscatedFileSystemFileUtil::ReadDirectory( |
198 FileSystemOperationContext* context, | 182 FileSystemOperationContext* context, |
199 const FilePath& virtual_path, | 183 const FilePath& virtual_path, |
200 std::vector<base::FileUtilProxy::Entry>* entries) { | 184 std::vector<base::FileUtilProxy::Entry>* entries) { |
201 // TODO(kkanetkar): Implement directory read in multiple chunks. | 185 // TODO(kkanetkar): Implement directory read in multiple chunks. |
202 FileSystemDirectoryDatabase* db = GetDirectoryDatabase( | 186 FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
203 context->src_origin_url(), context->src_type(), false); | 187 context->src_origin_url(), context->src_type(), false); |
204 if (!db) { | 188 if (!db) { |
(...skipping 16 matching lines...) Expand all Loading... | |
221 } | 205 } |
222 if (!file_info.is_directory()) | 206 if (!file_info.is_directory()) |
223 return base::PLATFORM_FILE_ERROR_NOT_FOUND; | 207 return base::PLATFORM_FILE_ERROR_NOT_FOUND; |
224 std::vector<FileId> children; | 208 std::vector<FileId> children; |
225 if (!db->ListChildren(file_id, &children)) { | 209 if (!db->ListChildren(file_id, &children)) { |
226 NOTREACHED(); | 210 NOTREACHED(); |
227 return base::PLATFORM_FILE_ERROR_FAILED; | 211 return base::PLATFORM_FILE_ERROR_FAILED; |
228 } | 212 } |
229 std::vector<FileId>::iterator iter; | 213 std::vector<FileId>::iterator iter; |
230 for (iter = children.begin(); iter != children.end(); ++iter) { | 214 for (iter = children.begin(); iter != children.end(); ++iter) { |
231 if (!db->GetFileInfo(*iter, &file_info)) { | 215 if (!db->GetFileInfo(*iter, &file_info)) { |
kinuko
2011/07/14 04:18:28
this part is not needed?
tzik
2011/07/14 07:05:42
Done.
| |
232 NOTREACHED(); | 216 NOTREACHED(); |
233 return base::PLATFORM_FILE_ERROR_FAILED; | 217 return base::PLATFORM_FILE_ERROR_FAILED; |
234 } | 218 } |
219 | |
220 base::PlatformFileInfo platform_file_info; | |
221 FilePath file_path; | |
222 if (GetFileInfoInternal(db, context, file_id, | |
223 &file_info, &platform_file_info, &file_path) != | |
224 base::PLATFORM_FILE_OK) { | |
225 NOTREACHED(); | |
226 return base::PLATFORM_FILE_ERROR_FAILED; | |
227 } | |
228 | |
235 base::FileUtilProxy::Entry entry; | 229 base::FileUtilProxy::Entry entry; |
236 entry.name = file_info.name; | 230 entry.name = file_info.name; |
237 entry.is_directory = file_info.is_directory(); | 231 entry.is_directory = file_info.is_directory(); |
232 entry.size = entry.is_directory ? 0 : platform_file_info.size; | |
233 entry.last_modified_time = platform_file_info.last_modified; | |
238 entries->push_back(entry); | 234 entries->push_back(entry); |
239 } | 235 } |
240 return base::PLATFORM_FILE_OK; | 236 return base::PLATFORM_FILE_OK; |
241 } | 237 } |
242 | 238 |
243 PlatformFileError ObfuscatedFileSystemFileUtil::CreateDirectory( | 239 PlatformFileError ObfuscatedFileSystemFileUtil::CreateDirectory( |
244 FileSystemOperationContext* context, | 240 FileSystemOperationContext* context, |
245 const FilePath& virtual_path, | 241 const FilePath& virtual_path, |
246 bool exclusive, | 242 bool exclusive, |
247 bool recursive) { | 243 bool recursive) { |
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
714 ObfuscatedFileSystemFileUtil::CreateFileEnumerator( | 710 ObfuscatedFileSystemFileUtil::CreateFileEnumerator( |
715 FileSystemOperationContext* context, | 711 FileSystemOperationContext* context, |
716 const FilePath& root_path) { | 712 const FilePath& root_path) { |
717 FileSystemDirectoryDatabase* db = GetDirectoryDatabase( | 713 FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
718 context->src_origin_url(), context->src_type(), false); | 714 context->src_origin_url(), context->src_type(), false); |
719 if (!db) | 715 if (!db) |
720 return new FileSystemFileUtil::EmptyFileEnumerator(); | 716 return new FileSystemFileUtil::EmptyFileEnumerator(); |
721 return new ObfuscatedFileSystemFileEnumerator(db, root_path); | 717 return new ObfuscatedFileSystemFileEnumerator(db, root_path); |
722 } | 718 } |
723 | 719 |
720 PlatformFileError ObfuscatedFileSystemFileUtil::GetFileInfoInternal( | |
721 FileSystemDirectoryDatabase* db, | |
722 FileSystemOperationContext* context, | |
723 FileId file_id, | |
724 FileInfo* local_info, | |
725 base::PlatformFileInfo* file_info, | |
726 FilePath* platform_file_path) { | |
727 DCHECK(db); | |
728 DCHECK(context); | |
729 DCHECK(file_info); | |
730 DCHECK(platform_file_path); | |
731 | |
732 if (!db->GetFileInfo(file_id, local_info)) { | |
733 NOTREACHED(); | |
734 return base::PLATFORM_FILE_ERROR_FAILED; | |
735 } | |
736 | |
737 if (local_info->is_directory()) { | |
738 file_info->is_directory = true; | |
739 file_info->is_symbolic_link = false; | |
740 file_info->last_modified = local_info->modification_time; | |
741 *platform_file_path = FilePath(); | |
742 // We don't fill in ctime or atime. | |
743 return base::PLATFORM_FILE_OK; | |
744 } | |
745 if (local_info->data_path.empty()) | |
746 return base::PLATFORM_FILE_ERROR_INVALID_OPERATION; | |
747 FilePath data_path = DataPathToLocalPath(context->src_origin_url(), | |
748 context->src_type(), local_info->data_path); | |
749 return underlying_file_util_->GetFileInfo( | |
750 context, data_path, file_info, platform_file_path); | |
751 } | |
752 | |
724 PlatformFileError ObfuscatedFileSystemFileUtil::CreateFile( | 753 PlatformFileError ObfuscatedFileSystemFileUtil::CreateFile( |
725 FileSystemOperationContext* context, | 754 FileSystemOperationContext* context, |
726 const GURL& origin_url, FileSystemType type, const FilePath& source_path, | 755 const GURL& origin_url, FileSystemType type, const FilePath& source_path, |
727 FileInfo* file_info, int file_flags, PlatformFile* handle) { | 756 FileInfo* file_info, int file_flags, PlatformFile* handle) { |
728 if (handle) | 757 if (handle) |
729 *handle = base::kInvalidPlatformFileValue; | 758 *handle = base::kInvalidPlatformFileValue; |
730 FileSystemDirectoryDatabase* db = GetDirectoryDatabase( | 759 FileSystemDirectoryDatabase* db = GetDirectoryDatabase( |
731 origin_url, type, true); | 760 origin_url, type, true); |
732 int64 number; | 761 int64 number; |
733 if (!db || !db->GetNextInteger(&number)) | 762 if (!db || !db->GetNextInteger(&number)) |
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1047 return false; | 1076 return false; |
1048 } | 1077 } |
1049 origin_database_.reset( | 1078 origin_database_.reset( |
1050 new FileSystemOriginDatabase( | 1079 new FileSystemOriginDatabase( |
1051 file_system_directory_.AppendASCII(kOriginDatabaseName))); | 1080 file_system_directory_.AppendASCII(kOriginDatabaseName))); |
1052 } | 1081 } |
1053 return true; | 1082 return true; |
1054 } | 1083 } |
1055 | 1084 |
1056 } // namespace fileapi | 1085 } // namespace fileapi |
OLD | NEW |