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 <map> 9 #include <vector> 10 11 #include "base/basictypes.h" 12 #include "base/memory/scoped_vector.h" 13 #include "content/browser/indexed_db/indexed_db_backing_store.h" 14 #include "content/browser/indexed_db/indexed_db_database.h" 15 #include "content/browser/indexed_db/indexed_db_metadata.h" 16 #include "content/common/indexed_db/indexed_db_key_path.h" 17 18 namespace content { 19 20 class IndexedDBTransaction; 21 struct IndexedDBObjectStoreMetadata; 22 23 class IndexWriter { 24 public: 25 explicit IndexWriter(const IndexedDBIndexMetadata& index_metadata); 26 27 IndexWriter(const IndexedDBIndexMetadata& index_metadata, 28 const IndexedDBDatabase::IndexKeys& index_keys); 29 30 bool VerifyIndexKeys(IndexedDBBackingStore* store, 31 IndexedDBBackingStore::Transaction* transaction, 32 int64 database_id, 33 int64 object_store_id, 34 int64 index_id, 35 bool* can_add_keys, 36 const IndexedDBKey& primary_key, 37 base::string16* error_message) const WARN_UNUSED_RESULT; 38 39 void WriteIndexKeys(const IndexedDBBackingStore::RecordIdentifier& record, 40 IndexedDBBackingStore* store, 41 IndexedDBBackingStore::Transaction* transaction, 42 int64 database_id, 43 int64 object_store_id) const; 44 45 ~IndexWriter(); 46 47 private: 48 bool AddingKeyAllowed(IndexedDBBackingStore* store, 49 IndexedDBBackingStore::Transaction* transaction, 50 int64 database_id, 51 int64 object_store_id, 52 int64 index_id, 53 const IndexedDBKey& index_key, 54 const IndexedDBKey& primary_key, 55 bool* allowed) const WARN_UNUSED_RESULT; 56 57 const IndexedDBIndexMetadata index_metadata_; 58 IndexedDBDatabase::IndexKeys index_keys_; 59 }; 60 61 bool MakeIndexWriters( 62 scoped_refptr<IndexedDBTransaction> transaction, 63 IndexedDBBackingStore* store, 64 int64 database_id, 65 const IndexedDBObjectStoreMetadata& metadata, 66 const IndexedDBKey& primary_key, 67 bool key_was_generated, 68 const std::vector<int64>& index_ids, 69 const std::vector<IndexedDBDatabase::IndexKeys>& index_keys, 70 ScopedVector<IndexWriter>* index_writers, 71 base::string16* error_message, 72 bool* completed) WARN_UNUSED_RESULT; 73 74 } // namespace content 75 76 #endif // CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_INDEX_WRITER_H_ 77