| 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 1866 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1877 return s; | 1877 return s; |
| 1878 DCHECK_GE(version, 0); | 1878 DCHECK_GE(version, 0); |
| 1879 const std::string object_store_data_key = | 1879 const std::string object_store_data_key = |
| 1880 ObjectStoreDataKey::Encode(database_id, object_store_id, key); | 1880 ObjectStoreDataKey::Encode(database_id, object_store_id, key); |
| 1881 | 1881 |
| 1882 std::string v; | 1882 std::string v; |
| 1883 EncodeVarInt(version, &v); | 1883 EncodeVarInt(version, &v); |
| 1884 v.append(value.bits); | 1884 v.append(value.bits); |
| 1885 | 1885 |
| 1886 leveldb_transaction->Put(object_store_data_key, &v); | 1886 leveldb_transaction->Put(object_store_data_key, &v); |
| 1887 transaction->PutBlobInfo(database_id, | 1887 s = transaction->PutBlobInfoIfNeeded(database_id, |
| 1888 object_store_id, | 1888 object_store_id, |
| 1889 object_store_data_key, | 1889 object_store_data_key, |
| 1890 &value.blob_info, | 1890 &value.blob_info, |
| 1891 handles); | 1891 handles); |
| 1892 if (!s.ok()) |
| 1893 return s; |
| 1892 DCHECK(!handles->size()); | 1894 DCHECK(!handles->size()); |
| 1893 | 1895 |
| 1894 const std::string exists_entry_key = | 1896 const std::string exists_entry_key = |
| 1895 ExistsEntryKey::Encode(database_id, object_store_id, key); | 1897 ExistsEntryKey::Encode(database_id, object_store_id, key); |
| 1896 std::string version_encoded; | 1898 std::string version_encoded; |
| 1897 EncodeInt(version, &version_encoded); | 1899 EncodeInt(version, &version_encoded); |
| 1898 leveldb_transaction->Put(exists_entry_key, &version_encoded); | 1900 leveldb_transaction->Put(exists_entry_key, &version_encoded); |
| 1899 | 1901 |
| 1900 std::string key_encoded; | 1902 std::string key_encoded; |
| 1901 EncodeIDBKey(key, &key_encoded); | 1903 EncodeIDBKey(key, &key_encoded); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1930 int64 object_store_id, | 1932 int64 object_store_id, |
| 1931 const RecordIdentifier& record_identifier) { | 1933 const RecordIdentifier& record_identifier) { |
| 1932 IDB_TRACE("IndexedDBBackingStore::DeleteRecord"); | 1934 IDB_TRACE("IndexedDBBackingStore::DeleteRecord"); |
| 1933 if (!KeyPrefix::ValidIds(database_id, object_store_id)) | 1935 if (!KeyPrefix::ValidIds(database_id, object_store_id)) |
| 1934 return InvalidDBKeyStatus(); | 1936 return InvalidDBKeyStatus(); |
| 1935 LevelDBTransaction* leveldb_transaction = transaction->transaction(); | 1937 LevelDBTransaction* leveldb_transaction = transaction->transaction(); |
| 1936 | 1938 |
| 1937 const std::string object_store_data_key = ObjectStoreDataKey::Encode( | 1939 const std::string object_store_data_key = ObjectStoreDataKey::Encode( |
| 1938 database_id, object_store_id, record_identifier.primary_key()); | 1940 database_id, object_store_id, record_identifier.primary_key()); |
| 1939 leveldb_transaction->Remove(object_store_data_key); | 1941 leveldb_transaction->Remove(object_store_data_key); |
| 1940 transaction->PutBlobInfo( | 1942 leveldb::Status s = transaction->PutBlobInfoIfNeeded( |
| 1941 database_id, object_store_id, object_store_data_key, NULL, NULL); | 1943 database_id, object_store_id, object_store_data_key, NULL, NULL); |
| 1944 if (!s.ok()) |
| 1945 return s; |
| 1942 | 1946 |
| 1943 const std::string exists_entry_key = ExistsEntryKey::Encode( | 1947 const std::string exists_entry_key = ExistsEntryKey::Encode( |
| 1944 database_id, object_store_id, record_identifier.primary_key()); | 1948 database_id, object_store_id, record_identifier.primary_key()); |
| 1945 leveldb_transaction->Remove(exists_entry_key); | 1949 leveldb_transaction->Remove(exists_entry_key); |
| 1946 return leveldb::Status::OK(); | 1950 return leveldb::Status::OK(); |
| 1947 } | 1951 } |
| 1948 | 1952 |
| 1949 leveldb::Status IndexedDBBackingStore::DeleteRange( | 1953 leveldb::Status IndexedDBBackingStore::DeleteRange( |
| 1950 IndexedDBBackingStore::Transaction* transaction, | 1954 IndexedDBBackingStore::Transaction* transaction, |
| 1951 int64 database_id, | 1955 int64 database_id, |
| (...skipping 2186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4138 scoped_ptr<IndexedDBBackingStore::BlobChangeRecord> record( | 4142 scoped_ptr<IndexedDBBackingStore::BlobChangeRecord> record( |
| 4139 new BlobChangeRecord(key_, object_store_id_)); | 4143 new BlobChangeRecord(key_, object_store_id_)); |
| 4140 record->blob_info_ = blob_info_; | 4144 record->blob_info_ = blob_info_; |
| 4141 | 4145 |
| 4142 ScopedVector<webkit_blob::BlobDataHandle>::const_iterator iter; | 4146 ScopedVector<webkit_blob::BlobDataHandle>::const_iterator iter; |
| 4143 for (iter = handles_.begin(); iter != handles_.end(); ++iter) | 4147 for (iter = handles_.begin(); iter != handles_.end(); ++iter) |
| 4144 record->handles_.push_back(new webkit_blob::BlobDataHandle(**iter)); | 4148 record->handles_.push_back(new webkit_blob::BlobDataHandle(**iter)); |
| 4145 return record.Pass(); | 4149 return record.Pass(); |
| 4146 } | 4150 } |
| 4147 | 4151 |
| 4152 leveldb::Status IndexedDBBackingStore::Transaction::PutBlobInfoIfNeeded( |
| 4153 int64 database_id, |
| 4154 int64 object_store_id, |
| 4155 const std::string& object_store_data_key, |
| 4156 std::vector<IndexedDBBlobInfo>* blob_info, |
| 4157 ScopedVector<webkit_blob::BlobDataHandle>* handles) { |
| 4158 if (!blob_info || blob_info->empty()) { |
| 4159 blob_change_map_.erase(object_store_data_key); |
| 4160 incognito_blob_map_.erase(object_store_data_key); |
| 4161 |
| 4162 BlobEntryKey blob_entry_key; |
| 4163 StringPiece leveldb_key_piece(object_store_data_key); |
| 4164 if (!BlobEntryKey::FromObjectStoreDataKey(&leveldb_key_piece, |
| 4165 &blob_entry_key)) { |
| 4166 NOTREACHED(); |
| 4167 return InternalInconsistencyStatus(); |
| 4168 } |
| 4169 std::string value; |
| 4170 bool found = false; |
| 4171 leveldb::Status s = |
| 4172 transaction()->Get(blob_entry_key.Encode(), &value, &found); |
| 4173 if (!s.ok()) |
| 4174 return s; |
| 4175 if (!found) |
| 4176 return leveldb::Status::OK(); |
| 4177 } |
| 4178 PutBlobInfo( |
| 4179 database_id, object_store_id, object_store_data_key, blob_info, handles); |
| 4180 return leveldb::Status::OK(); |
| 4181 } |
| 4182 |
| 4148 // This is storing an info, even if empty, even if the previous key had no blob | 4183 // This is storing an info, even if empty, even if the previous key had no blob |
| 4149 // info that we know of. It duplicates a bunch of information stored in the | 4184 // info that we know of. It duplicates a bunch of information stored in the |
| 4150 // leveldb transaction, but only w.r.t. the user keys altered--we don't keep the | 4185 // leveldb transaction, but only w.r.t. the user keys altered--we don't keep the |
| 4151 // changes to exists or index keys here. | 4186 // changes to exists or index keys here. |
| 4152 void IndexedDBBackingStore::Transaction::PutBlobInfo( | 4187 void IndexedDBBackingStore::Transaction::PutBlobInfo( |
| 4153 int64 database_id, | 4188 int64 database_id, |
| 4154 int64 object_store_id, | 4189 int64 object_store_id, |
| 4155 const std::string& object_store_data_key, | 4190 const std::string& object_store_data_key, |
| 4156 std::vector<IndexedDBBlobInfo>* blob_info, | 4191 std::vector<IndexedDBBlobInfo>* blob_info, |
| 4157 ScopedVector<webkit_blob::BlobDataHandle>* handles) { | 4192 ScopedVector<webkit_blob::BlobDataHandle>* handles) { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 4178 const GURL& url, | 4213 const GURL& url, |
| 4179 int64_t key) | 4214 int64_t key) |
| 4180 : is_file_(false), url_(url), key_(key) {} | 4215 : is_file_(false), url_(url), key_(key) {} |
| 4181 | 4216 |
| 4182 IndexedDBBackingStore::Transaction::WriteDescriptor::WriteDescriptor( | 4217 IndexedDBBackingStore::Transaction::WriteDescriptor::WriteDescriptor( |
| 4183 const FilePath& file_path, | 4218 const FilePath& file_path, |
| 4184 int64_t key) | 4219 int64_t key) |
| 4185 : is_file_(true), file_path_(file_path), key_(key) {} | 4220 : is_file_(true), file_path_(file_path), key_(key) {} |
| 4186 | 4221 |
| 4187 } // namespace content | 4222 } // namespace content |
| OLD | NEW |