| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "content/browser/indexed_db/indexed_db_backing_store.h" | 5 #include "content/browser/indexed_db/indexed_db_backing_store.h" |
| 6 | 6 |
| 7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
| 8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
| 9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
| 10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 } while (0) | 155 } while (0) |
| 156 | 156 |
| 157 #define INTERNAL_READ_ERROR(location) REPORT_ERROR("Read", location) | 157 #define INTERNAL_READ_ERROR(location) REPORT_ERROR("Read", location) |
| 158 #define INTERNAL_CONSISTENCY_ERROR(location) \ | 158 #define INTERNAL_CONSISTENCY_ERROR(location) \ |
| 159 REPORT_ERROR("Consistency", location) | 159 REPORT_ERROR("Consistency", location) |
| 160 #define INTERNAL_WRITE_ERROR(location) REPORT_ERROR("Write", location) | 160 #define INTERNAL_WRITE_ERROR(location) REPORT_ERROR("Write", location) |
| 161 | 161 |
| 162 // Use to signal conditions that usually indicate developer error, but | 162 // Use to signal conditions that usually indicate developer error, but |
| 163 // could be caused by data corruption. A macro is used instead of an | 163 // could be caused by data corruption. A macro is used instead of an |
| 164 // inline function so that the assert and log report the line number. | 164 // inline function so that the assert and log report the line number. |
| 165 // TODO: Improve test coverage so that all error conditions are "tested" and | 165 // TODO(cmumford): Improve test coverage so that all error conditions are |
| 166 // then delete this macro. | 166 // "tested" and then delete this macro. |
| 167 #define REPORT_ERROR_UNTESTED(type, location) \ | 167 #define REPORT_ERROR_UNTESTED(type, location) \ |
| 168 do { \ | 168 do { \ |
| 169 LOG(ERROR) << "IndexedDB " type " Error: " #location; \ | 169 LOG(ERROR) << "IndexedDB " type " Error: " #location; \ |
| 170 NOTREACHED(); \ | 170 NOTREACHED(); \ |
| 171 RecordInternalError(type, location); \ | 171 RecordInternalError(type, location); \ |
| 172 } while (0) | 172 } while (0) |
| 173 | 173 |
| 174 #define INTERNAL_READ_ERROR_UNTESTED(location) \ | 174 #define INTERNAL_READ_ERROR_UNTESTED(location) \ |
| 175 REPORT_ERROR_UNTESTED("Read", location) | 175 REPORT_ERROR_UNTESTED("Read", location) |
| 176 #define INTERNAL_CONSISTENCY_ERROR_UNTESTED(location) \ | 176 #define INTERNAL_CONSISTENCY_ERROR_UNTESTED(location) \ |
| (...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 857 const GURL& origin_url) { | 857 const GURL& origin_url) { |
| 858 const base::FilePath file_path = | 858 const base::FilePath file_path = |
| 859 path_base.Append(ComputeFileName(origin_url)); | 859 path_base.Append(ComputeFileName(origin_url)); |
| 860 DefaultLevelDBFactory leveldb_factory; | 860 DefaultLevelDBFactory leveldb_factory; |
| 861 return leveldb_factory.DestroyLevelDB(file_path); | 861 return leveldb_factory.DestroyLevelDB(file_path); |
| 862 } | 862 } |
| 863 | 863 |
| 864 bool IndexedDBBackingStore::ReadCorruptionInfo(const base::FilePath& path_base, | 864 bool IndexedDBBackingStore::ReadCorruptionInfo(const base::FilePath& path_base, |
| 865 const GURL& origin_url, | 865 const GURL& origin_url, |
| 866 std::string& message) { | 866 std::string& message) { |
| 867 | |
| 868 const base::FilePath info_path = | 867 const base::FilePath info_path = |
| 869 path_base.Append(ComputeCorruptionFileName(origin_url)); | 868 path_base.Append(ComputeCorruptionFileName(origin_url)); |
| 870 | 869 |
| 871 if (IsPathTooLong(info_path)) | 870 if (IsPathTooLong(info_path)) |
| 872 return false; | 871 return false; |
| 873 | 872 |
| 874 const int64 max_json_len = 4096; | 873 const int64 max_json_len = 4096; |
| 875 int64 file_size(0); | 874 int64 file_size(0); |
| 876 if (!GetFileSize(info_path, &file_size) || file_size > max_json_len) | 875 if (!GetFileSize(info_path, &file_size) || file_size > max_json_len) |
| 877 return false; | 876 return false; |
| (...skipping 1363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2241 : chained_blob_writer_(chained_blob_writer), | 2240 : chained_blob_writer_(chained_blob_writer), |
| 2242 task_runner_(task_runner), | 2241 task_runner_(task_runner), |
| 2243 bytes_written_(-1) {} | 2242 bytes_written_(-1) {} |
| 2244 | 2243 |
| 2245 void Run(base::File::Error rv, | 2244 void Run(base::File::Error rv, |
| 2246 int64 bytes, | 2245 int64 bytes, |
| 2247 FileWriterDelegate::WriteProgressStatus write_status) { | 2246 FileWriterDelegate::WriteProgressStatus write_status) { |
| 2248 if (write_status == FileWriterDelegate::SUCCESS_IO_PENDING) | 2247 if (write_status == FileWriterDelegate::SUCCESS_IO_PENDING) |
| 2249 return; // We don't care about progress events. | 2248 return; // We don't care about progress events. |
| 2250 if (rv == base::File::FILE_OK) { | 2249 if (rv == base::File::FILE_OK) { |
| 2251 DCHECK(bytes >= 0); | 2250 DCHECK_GE(bytes, 0); |
| 2252 DCHECK(write_status == FileWriterDelegate::SUCCESS_COMPLETED); | 2251 DCHECK_EQ(write_status, FileWriterDelegate::SUCCESS_COMPLETED); |
| 2253 bytes_written_ = bytes; | 2252 bytes_written_ = bytes; |
| 2254 } else { | 2253 } else { |
| 2255 DCHECK(write_status == FileWriterDelegate::ERROR_WRITE_STARTED || | 2254 DCHECK(write_status == FileWriterDelegate::ERROR_WRITE_STARTED || |
| 2256 write_status == FileWriterDelegate::ERROR_WRITE_NOT_STARTED); | 2255 write_status == FileWriterDelegate::ERROR_WRITE_NOT_STARTED); |
| 2257 } | 2256 } |
| 2258 task_runner_->PostTask( | 2257 task_runner_->PostTask( |
| 2259 FROM_HERE, | 2258 FROM_HERE, |
| 2260 base::Bind(&LocalWriteClosure::callBlobCallbackOnIDBTaskRunner, | 2259 base::Bind(&LocalWriteClosure::callBlobCallbackOnIDBTaskRunner, |
| 2261 this, | 2260 this, |
| 2262 write_status == FileWriterDelegate::SUCCESS_COMPLETED)); | 2261 write_status == FileWriterDelegate::SUCCESS_COMPLETED)); |
| (...skipping 1915 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4178 const GURL& url, | 4177 const GURL& url, |
| 4179 int64_t key) | 4178 int64_t key) |
| 4180 : is_file_(false), url_(url), key_(key) {} | 4179 : is_file_(false), url_(url), key_(key) {} |
| 4181 | 4180 |
| 4182 IndexedDBBackingStore::Transaction::WriteDescriptor::WriteDescriptor( | 4181 IndexedDBBackingStore::Transaction::WriteDescriptor::WriteDescriptor( |
| 4183 const FilePath& file_path, | 4182 const FilePath& file_path, |
| 4184 int64_t key) | 4183 int64_t key) |
| 4185 : is_file_(true), file_path_(file_path), key_(key) {} | 4184 : is_file_(true), file_path_(file_path), key_(key) {} |
| 4186 | 4185 |
| 4187 } // namespace content | 4186 } // namespace content |
| OLD | NEW |