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 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_INDEX_WRITER_H_ 6 #define CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_INDEX_WRITER_H_ 7 8 #include <stdint.h> 9 10 #include <map> 11 #include <memory> 12 #include <vector> 13 14 #include "base/macros.h" 15 #include "base/strings/string16.h" 16 #include "content/browser/indexed_db/indexed_db_backing_store.h" 17 #include "content/browser/indexed_db/indexed_db_database.h" 18 #include "third_party/blink/public/common/indexeddb/indexeddb_key.h" 19 20 namespace blink { 21 struct IndexedDBObjectStoreMetadata; 22 } 23 24 namespace content { 25 26 class IndexedDBTransaction; 27 28 class IndexWriter { 29 public: 30 explicit IndexWriter(const blink::IndexedDBIndexMetadata& index_metadata); 31 32 IndexWriter(const blink::IndexedDBIndexMetadata& index_metadata, 33 const std::vector<blink::IndexedDBKey>& keys); 34 35 bool VerifyIndexKeys(IndexedDBBackingStore* store, 36 IndexedDBBackingStore::Transaction* transaction, 37 int64_t database_id, 38 int64_t object_store_id, 39 int64_t index_id, 40 bool* can_add_keys, 41 const blink::IndexedDBKey& primary_key, 42 base::string16* error_message) const WARN_UNUSED_RESULT; 43 44 leveldb::Status WriteIndexKeys( 45 const IndexedDBBackingStore::RecordIdentifier& record, 46 IndexedDBBackingStore* store, 47 IndexedDBBackingStore::Transaction* transaction, 48 int64_t database_id, 49 int64_t object_store_id) const; 50 51 ~IndexWriter(); 52 53 private: 54 bool AddingKeyAllowed(IndexedDBBackingStore* store, 55 IndexedDBBackingStore::Transaction* transaction, 56 int64_t database_id, 57 int64_t object_store_id, 58 int64_t index_id, 59 const blink::IndexedDBKey& index_key, 60 const blink::IndexedDBKey& primary_key, 61 bool* allowed) const WARN_UNUSED_RESULT; 62 63 const blink::IndexedDBIndexMetadata index_metadata_; 64 const std::vector<blink::IndexedDBKey> keys_; 65 66 DISALLOW_COPY_AND_ASSIGN(IndexWriter); 67 }; 68 69 bool MakeIndexWriters(IndexedDBTransaction* transaction, 70 IndexedDBBackingStore* store, 71 int64_t database_id, 72 const blink::IndexedDBObjectStoreMetadata& metadata, 73 const blink::IndexedDBKey& primary_key, 74 bool key_was_generated, 75 const std::vector<blink::IndexedDBIndexKeys>& index_keys, 76 std::vector<std::unique_ptr<IndexWriter>>* index_writers, 77 base::string16* error_message, 78 bool* completed) WARN_UNUSED_RESULT; 79 80 } // namespace content 81 82 #endif // CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_INDEX_WRITER_H_ 83