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

Side by Side Diff: webkit/fileapi/obfuscated_file_util.cc

Issue 9370045: Fixed bug: we can now handle "a:b" as a file name. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Build fix. Created 8 years, 9 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « webkit/fileapi/file_system_util_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/fileapi/obfuscated_file_util.h" 5 #include "webkit/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 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 // The file doesn't exist. 290 // The file doesn't exist.
291 if (!(file_flags & (base::PLATFORM_FILE_CREATE | 291 if (!(file_flags & (base::PLATFORM_FILE_CREATE |
292 base::PLATFORM_FILE_CREATE_ALWAYS | base::PLATFORM_FILE_OPEN_ALWAYS))) 292 base::PLATFORM_FILE_CREATE_ALWAYS | base::PLATFORM_FILE_OPEN_ALWAYS)))
293 return base::PLATFORM_FILE_ERROR_NOT_FOUND; 293 return base::PLATFORM_FILE_ERROR_NOT_FOUND;
294 FileId parent_id; 294 FileId parent_id;
295 if (!db->GetFileWithPath(virtual_path.internal_path().DirName(), 295 if (!db->GetFileWithPath(virtual_path.internal_path().DirName(),
296 &parent_id)) 296 &parent_id))
297 return base::PLATFORM_FILE_ERROR_NOT_FOUND; 297 return base::PLATFORM_FILE_ERROR_NOT_FOUND;
298 FileInfo file_info; 298 FileInfo file_info;
299 InitFileInfo(&file_info, parent_id, 299 InitFileInfo(&file_info, parent_id,
300 virtual_path.internal_path().BaseName().value()); 300 VirtualPath::BaseName(virtual_path.internal_path()).value());
301 if (!AllocateQuotaForPath(context, 1, file_info.name.size())) 301 if (!AllocateQuotaForPath(context, 1, file_info.name.size()))
302 return base::PLATFORM_FILE_ERROR_NO_SPACE; 302 return base::PLATFORM_FILE_ERROR_NO_SPACE;
303 PlatformFileError error = CreateFile( 303 PlatformFileError error = CreateFile(
304 context, FileSystemPath(), 304 context, FileSystemPath(),
305 virtual_path.origin(), virtual_path.type(), &file_info, 305 virtual_path.origin(), virtual_path.type(), &file_info,
306 file_flags, file_handle); 306 file_flags, file_handle);
307 if (created && base::PLATFORM_FILE_OK == error) 307 if (created && base::PLATFORM_FILE_OK == error)
308 *created = true; 308 *created = true;
309 return error; 309 return error;
310 } 310 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 if (created) 353 if (created)
354 *created = false; 354 *created = false;
355 return base::PLATFORM_FILE_OK; 355 return base::PLATFORM_FILE_OK;
356 } 356 }
357 FileId parent_id; 357 FileId parent_id;
358 if (!db->GetFileWithPath(virtual_path.internal_path().DirName(), &parent_id)) 358 if (!db->GetFileWithPath(virtual_path.internal_path().DirName(), &parent_id))
359 return base::PLATFORM_FILE_ERROR_NOT_FOUND; 359 return base::PLATFORM_FILE_ERROR_NOT_FOUND;
360 360
361 FileInfo file_info; 361 FileInfo file_info;
362 InitFileInfo(&file_info, parent_id, 362 InitFileInfo(&file_info, parent_id,
363 virtual_path.internal_path().BaseName().value()); 363 VirtualPath::BaseName(virtual_path.internal_path()).value());
364 if (!AllocateQuotaForPath(context, 1, file_info.name.size())) 364 if (!AllocateQuotaForPath(context, 1, file_info.name.size()))
365 return base::PLATFORM_FILE_ERROR_NO_SPACE; 365 return base::PLATFORM_FILE_ERROR_NO_SPACE;
366 PlatformFileError error = CreateFile(context, 366 PlatformFileError error = CreateFile(context,
367 FileSystemPath(), 367 FileSystemPath(),
368 virtual_path.origin(), virtual_path.type(), &file_info, 368 virtual_path.origin(), virtual_path.type(), &file_info,
369 0, NULL); 369 0, NULL);
370 if (created && base::PLATFORM_FILE_OK == error) 370 if (created && base::PLATFORM_FILE_OK == error)
371 *created = true; 371 *created = true;
372 return error; 372 return error;
373 } 373 }
(...skipping 15 matching lines...) Expand all
389 if (!db->GetFileInfo(file_id, &file_info)) { 389 if (!db->GetFileInfo(file_id, &file_info)) {
390 NOTREACHED(); 390 NOTREACHED();
391 return base::PLATFORM_FILE_ERROR_FAILED; 391 return base::PLATFORM_FILE_ERROR_FAILED;
392 } 392 }
393 if (!file_info.is_directory()) 393 if (!file_info.is_directory())
394 return base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY; 394 return base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY;
395 return base::PLATFORM_FILE_OK; 395 return base::PLATFORM_FILE_OK;
396 } 396 }
397 397
398 std::vector<FilePath::StringType> components; 398 std::vector<FilePath::StringType> components;
399 virtual_path.internal_path().GetComponents(&components); 399 VirtualPath::GetComponents(virtual_path.internal_path(), &components);
400 FileId parent_id = 0; 400 FileId parent_id = 0;
401 size_t index; 401 size_t index;
402 for (index = 0; index < components.size(); ++index) { 402 for (index = 0; index < components.size(); ++index) {
403 FilePath::StringType name = components[index]; 403 FilePath::StringType name = components[index];
404 if (name == FILE_PATH_LITERAL("/")) 404 if (name == FILE_PATH_LITERAL("/"))
405 continue; 405 continue;
406 if (!db->GetChildWithName(parent_id, name, &parent_id)) 406 if (!db->GetChildWithName(parent_id, name, &parent_id))
407 break; 407 break;
408 } 408 }
409 if (!recursive && components.size() - index > 1) 409 if (!recursive && components.size() - index > 1)
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
709 TouchDirectory(db, dest_file_info.parent_id); 709 TouchDirectory(db, dest_file_info.parent_id);
710 return error; 710 return error;
711 } else { 711 } else {
712 FileId dest_parent_id; 712 FileId dest_parent_id;
713 if (!db->GetFileWithPath(dest_path.internal_path().DirName(), 713 if (!db->GetFileWithPath(dest_path.internal_path().DirName(),
714 &dest_parent_id)) { 714 &dest_parent_id)) {
715 NOTREACHED(); // We shouldn't be called in this case. 715 NOTREACHED(); // We shouldn't be called in this case.
716 return base::PLATFORM_FILE_ERROR_NOT_FOUND; 716 return base::PLATFORM_FILE_ERROR_NOT_FOUND;
717 } 717 }
718 InitFileInfo(&dest_file_info, dest_parent_id, 718 InitFileInfo(&dest_file_info, dest_parent_id,
719 dest_path.internal_path().BaseName().value()); 719 VirtualPath::BaseName(dest_path.internal_path()).value());
720 if (!AllocateQuotaForPath(context, 1, dest_file_info.name.size())) 720 if (!AllocateQuotaForPath(context, 1, dest_file_info.name.size()))
721 return base::PLATFORM_FILE_ERROR_NO_SPACE; 721 return base::PLATFORM_FILE_ERROR_NO_SPACE;
722 return CreateFile(context, src_local_path, 722 return CreateFile(context, src_local_path,
723 dest_path.origin(), dest_path.type(), &dest_file_info, 723 dest_path.origin(), dest_path.type(), &dest_file_info,
724 0, NULL); 724 0, NULL);
725 } 725 }
726 } else { // It's a move. 726 } else { // It's a move.
727 if (overwrite) { 727 if (overwrite) {
728 AllocateQuotaForPath(context, -1, 728 AllocateQuotaForPath(context, -1,
729 -static_cast<int64>(src_file_info.name.size())); 729 -static_cast<int64>(src_file_info.name.size()));
(...skipping 13 matching lines...) Expand all
743 FileId dest_parent_id; 743 FileId dest_parent_id;
744 if (!db->GetFileWithPath(dest_path.internal_path().DirName(), 744 if (!db->GetFileWithPath(dest_path.internal_path().DirName(),
745 &dest_parent_id)) { 745 &dest_parent_id)) {
746 NOTREACHED(); 746 NOTREACHED();
747 return base::PLATFORM_FILE_ERROR_FAILED; 747 return base::PLATFORM_FILE_ERROR_FAILED;
748 } 748 }
749 FilePath dest_internal_path = dest_path.internal_path(); 749 FilePath dest_internal_path = dest_path.internal_path();
750 FilePath src_internal_path = src_path.internal_path(); 750 FilePath src_internal_path = src_path.internal_path();
751 if (!AllocateQuotaForPath( 751 if (!AllocateQuotaForPath(
752 context, 0, 752 context, 0,
753 static_cast<int64>(dest_internal_path.BaseName().value().size()) 753 static_cast<int64>(
754 -static_cast<int64>(src_file_info.name.size()))) 754 VirtualPath::BaseName(dest_internal_path).value().size()) -
755 static_cast<int64>(src_file_info.name.size())))
755 return base::PLATFORM_FILE_ERROR_NO_SPACE; 756 return base::PLATFORM_FILE_ERROR_NO_SPACE;
756 FileId src_parent_id = src_file_info.parent_id; 757 FileId src_parent_id = src_file_info.parent_id;
757 src_file_info.parent_id = dest_parent_id; 758 src_file_info.parent_id = dest_parent_id;
758 src_file_info.name = dest_path.internal_path().BaseName().value(); 759 src_file_info.name =
760 VirtualPath::BaseName(dest_path.internal_path()).value();
759 if (!db->UpdateFileInfo(src_file_id, src_file_info)) 761 if (!db->UpdateFileInfo(src_file_id, src_file_info))
760 return base::PLATFORM_FILE_ERROR_FAILED; 762 return base::PLATFORM_FILE_ERROR_FAILED;
761 UpdatePathQuotaUsage( 763 UpdatePathQuotaUsage(
762 context, src_path.origin(), src_path.type(), 0, 764 context, src_path.origin(), src_path.type(), 0,
763 static_cast<int64>(dest_internal_path.BaseName().value().size()) - 765 static_cast<int64>(
764 static_cast<int64>(src_internal_path.BaseName().value().size())); 766 VirtualPath::BaseName(dest_internal_path).value().size()) -
767 static_cast<int64>(
768 VirtualPath::BaseName(src_internal_path).value().size()));
765 TouchDirectory(db, src_parent_id); 769 TouchDirectory(db, src_parent_id);
766 TouchDirectory(db, dest_parent_id); 770 TouchDirectory(db, dest_parent_id);
767 return base::PLATFORM_FILE_OK; 771 return base::PLATFORM_FILE_OK;
768 } 772 }
769 } 773 }
770 NOTREACHED(); 774 NOTREACHED();
771 return base::PLATFORM_FILE_ERROR_FAILED; 775 return base::PLATFORM_FILE_ERROR_FAILED;
772 } 776 }
773 777
774 PlatformFileError ObfuscatedFileUtil::CopyInForeignFile( 778 PlatformFileError ObfuscatedFileUtil::CopyInForeignFile(
(...skipping 20 matching lines...) Expand all
795 underlying_src_path, 799 underlying_src_path,
796 dest_local_path, true /* copy */); 800 dest_local_path, true /* copy */);
797 } else { 801 } else {
798 FileId dest_parent_id; 802 FileId dest_parent_id;
799 if (!db->GetFileWithPath(dest_path.internal_path().DirName(), 803 if (!db->GetFileWithPath(dest_path.internal_path().DirName(),
800 &dest_parent_id)) { 804 &dest_parent_id)) {
801 NOTREACHED(); // We shouldn't be called in this case. 805 NOTREACHED(); // We shouldn't be called in this case.
802 return base::PLATFORM_FILE_ERROR_NOT_FOUND; 806 return base::PLATFORM_FILE_ERROR_NOT_FOUND;
803 } 807 }
804 InitFileInfo(&dest_file_info, dest_parent_id, 808 InitFileInfo(&dest_file_info, dest_parent_id,
805 dest_path.internal_path().BaseName().value()); 809 VirtualPath::BaseName(dest_path.internal_path()).value());
806 if (!AllocateQuotaForPath(context, 1, dest_file_info.name.size())) 810 if (!AllocateQuotaForPath(context, 1, dest_file_info.name.size()))
807 return base::PLATFORM_FILE_ERROR_NO_SPACE; 811 return base::PLATFORM_FILE_ERROR_NO_SPACE;
808 return CreateFile(context, underlying_src_path, 812 return CreateFile(context, underlying_src_path,
809 dest_path.origin(), dest_path.type(), &dest_file_info, 813 dest_path.origin(), dest_path.type(), &dest_file_info,
810 0, NULL); 814 0, NULL);
811 } 815 }
812 return base::PLATFORM_FILE_ERROR_FAILED; 816 return base::PLATFORM_FILE_ERROR_FAILED;
813 } 817 }
814 818
815 PlatformFileError ObfuscatedFileUtil::DeleteFile( 819 PlatformFileError ObfuscatedFileUtil::DeleteFile(
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
946 if (db->GetFileWithPath(relative_virtual_path, &file_id)) { 950 if (db->GetFileWithPath(relative_virtual_path, &file_id)) {
947 NOTREACHED(); // File already exists. 951 NOTREACHED(); // File already exists.
948 return false; 952 return false;
949 } 953 }
950 if (!db->GetFileWithPath(relative_virtual_path.DirName(), &file_id)) { 954 if (!db->GetFileWithPath(relative_virtual_path.DirName(), &file_id)) {
951 NOTREACHED(); // Parent doesn't exist. 955 NOTREACHED(); // Parent doesn't exist.
952 return false; 956 return false;
953 } 957 }
954 958
955 FileInfo file_info; 959 FileInfo file_info;
956 file_info.name = src_full_path.BaseName().value(); 960 file_info.name = VirtualPath::BaseName(src_full_path).value();
957 if (file_util::FileEnumerator::IsDirectory(info)) { 961 if (file_util::FileEnumerator::IsDirectory(info)) {
958 #if defined(OS_WIN) 962 #if defined(OS_WIN)
959 file_info.modification_time = 963 file_info.modification_time =
960 base::Time::FromFileTime(info.ftLastWriteTime); 964 base::Time::FromFileTime(info.ftLastWriteTime);
961 #elif defined(OS_POSIX) 965 #elif defined(OS_POSIX)
962 file_info.modification_time = base::Time::FromTimeT(info.stat.st_mtime); 966 file_info.modification_time = base::Time::FromTimeT(info.stat.st_mtime);
963 #endif 967 #endif
964 } else { 968 } else {
965 file_info.data_path = 969 file_info.data_path =
966 FilePath(kLegacyDataDirectory).Append(relative_virtual_path); 970 FilePath(kLegacyDataDirectory).Append(relative_virtual_path);
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1027 if (path.empty()) 1031 if (path.empty())
1028 return true; 1032 return true;
1029 if (!file_util::DirectoryExists(path)) 1033 if (!file_util::DirectoryExists(path))
1030 return true; 1034 return true;
1031 path = path.AppendASCII(kDirectoryDatabaseName); 1035 path = path.AppendASCII(kDirectoryDatabaseName);
1032 return FileSystemDirectoryDatabase::DestroyDatabase(path); 1036 return FileSystemDirectoryDatabase::DestroyDatabase(path);
1033 } 1037 }
1034 1038
1035 // static 1039 // static
1036 int64 ObfuscatedFileUtil::ComputeFilePathCost(const FilePath& path) { 1040 int64 ObfuscatedFileUtil::ComputeFilePathCost(const FilePath& path) {
1037 return GetPathQuotaUsage(1, path.BaseName().value().size()); 1041 return GetPathQuotaUsage(1, VirtualPath::BaseName(path).value().size());
1038 } 1042 }
1039 1043
1040 PlatformFileError ObfuscatedFileUtil::GetFileInfoInternal( 1044 PlatformFileError ObfuscatedFileUtil::GetFileInfoInternal(
1041 FileSystemDirectoryDatabase* db, 1045 FileSystemDirectoryDatabase* db,
1042 FileSystemOperationContext* context, 1046 FileSystemOperationContext* context,
1043 const GURL& origin, 1047 const GURL& origin,
1044 FileSystemType type, 1048 FileSystemType type,
1045 FileId file_id, 1049 FileId file_id,
1046 FileInfo* local_info, 1050 FileInfo* local_info,
1047 base::PlatformFileInfo* file_info, 1051 base::PlatformFileInfo* file_info,
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
1299 return false; 1303 return false;
1300 } 1304 }
1301 origin_database_.reset( 1305 origin_database_.reset(
1302 new FileSystemOriginDatabase( 1306 new FileSystemOriginDatabase(
1303 file_system_directory_.AppendASCII(kOriginDatabaseName))); 1307 file_system_directory_.AppendASCII(kOriginDatabaseName)));
1304 } 1308 }
1305 return true; 1309 return true;
1306 } 1310 }
1307 1311
1308 } // namespace fileapi 1312 } // namespace fileapi
OLDNEW
« no previous file with comments | « webkit/fileapi/file_system_util_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698