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

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

Issue 7608018: Handle inconsistency between DB and Files (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: '' Created 9 years, 4 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
OLDNEW
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 769 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 return base::PLATFORM_FILE_ERROR_FAILED; 780 return base::PLATFORM_FILE_ERROR_FAILED;
781 PlatformFileError error; 781 PlatformFileError error;
782 bool created = false; 782 bool created = false;
783 if (!source_path.empty()) { 783 if (!source_path.empty()) {
784 DCHECK(!file_flags); 784 DCHECK(!file_flags);
785 DCHECK(!handle); 785 DCHECK(!handle);
786 error = underlying_file_util_->CopyOrMoveFile( 786 error = underlying_file_util_->CopyOrMoveFile(
787 context, source_path, path, true /* copy */); 787 context, source_path, path, true /* copy */);
788 created = true; 788 created = true;
789 } else { 789 } else {
790 if (file_util::PathExists(path)) {
791 if (!file_util::Delete(path, false)) {
792 NOTREACHED();
793 return base::PLATFORM_FILE_ERROR_FAILED;
794 }
795 context->file_system_context()->RecalculateUsage(origin_url, type);
ericu 2011/08/17 00:54:08 What's the purpose of this RecalculateUsage call?
kinuko 2011/08/18 01:26:36 Eric, this is one of the place we wondered if we'd
tzik 2011/08/18 08:02:26 Thanks for explaining kinuko-san, it is what I wan
796 LOG(WARNING) << "A stray file detected";
797 }
798
790 if (handle) { 799 if (handle) {
791 error = underlying_file_util_->CreateOrOpen( 800 error = underlying_file_util_->CreateOrOpen(
792 context, path, file_flags, handle, &created); 801 context, path, file_flags, handle, &created);
793 // If this succeeds, we must close handle on any subsequent error. 802 // If this succeeds, we must close handle on any subsequent error.
794 } else { 803 } else {
795 DCHECK(!file_flags); // file_flags is only used by CreateOrOpen. 804 DCHECK(!file_flags); // file_flags is only used by CreateOrOpen.
796 error = underlying_file_util_->EnsureFileExists( 805 error = underlying_file_util_->EnsureFileExists(
797 context, path, &created); 806 context, path, &created);
798 } 807 }
799 } 808 }
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
1025 directories_[key] = database; 1034 directories_[key] = database;
1026 return database; 1035 return database;
1027 } 1036 }
1028 1037
1029 FilePath ObfuscatedFileSystemFileUtil::GetDirectoryForOrigin( 1038 FilePath ObfuscatedFileSystemFileUtil::GetDirectoryForOrigin(
1030 const GURL& origin, bool create) { 1039 const GURL& origin, bool create) {
1031 if (!InitOriginDatabase(create)) 1040 if (!InitOriginDatabase(create))
1032 return FilePath(); 1041 return FilePath();
1033 FilePath directory_name; 1042 FilePath directory_name;
1034 std::string id = GetOriginIdentifierFromURL(origin); 1043 std::string id = GetOriginIdentifierFromURL(origin);
1035 if (!create && !origin_database_->HasOriginPath(id)) 1044
1045 bool exists_in_db = origin_database_->HasOriginPath(id);
1046 if (!exists_in_db && !create)
1036 return FilePath(); 1047 return FilePath();
1037 if (!origin_database_->GetPathForOrigin(id, &directory_name)) 1048 if (!origin_database_->GetPathForOrigin(id, &directory_name))
1038 return FilePath(); 1049 return FilePath();
1050
1039 FilePath path = file_system_directory_.Append(directory_name); 1051 FilePath path = file_system_directory_.Append(directory_name);
ericu 2011/08/17 00:54:08 This part looks like a good idea.
1040 if (!file_util::DirectoryExists(path) && 1052 bool exists_in_fs = file_util::DirectoryExists(path);
1041 (!create || !file_util::CreateDirectory(path))) 1053 if (!exists_in_db && exists_in_fs) {
1042 return FilePath(); 1054 if (!file_util::Delete(path, true))
1055 return FilePath();
1056 exists_in_fs = false;
1057 }
1058
1059 if (!exists_in_fs) {
1060 if (!create || !file_util::CreateDirectory(path))
1061 return FilePath();
1062 }
1063
1043 return path; 1064 return path;
1044 } 1065 }
1045 1066
1046 void ObfuscatedFileSystemFileUtil::MarkUsed() { 1067 void ObfuscatedFileSystemFileUtil::MarkUsed() {
1047 if (timer_.IsRunning()) 1068 if (timer_.IsRunning())
1048 timer_.Reset(); 1069 timer_.Reset();
1049 else 1070 else
1050 timer_.Start(base::TimeDelta::FromSeconds(kFlushDelaySeconds), this, 1071 timer_.Start(base::TimeDelta::FromSeconds(kFlushDelaySeconds), this,
1051 &ObfuscatedFileSystemFileUtil::DropDatabases); 1072 &ObfuscatedFileSystemFileUtil::DropDatabases);
1052 } 1073 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1093 return false; 1114 return false;
1094 } 1115 }
1095 origin_database_.reset( 1116 origin_database_.reset(
1096 new FileSystemOriginDatabase( 1117 new FileSystemOriginDatabase(
1097 file_system_directory_.AppendASCII(kOriginDatabaseName))); 1118 file_system_directory_.AppendASCII(kOriginDatabaseName)));
1098 } 1119 }
1099 return true; 1120 return true;
1100 } 1121 }
1101 1122
1102 } // namespace fileapi 1123 } // namespace fileapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698