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 18namespace content { 19 20class IndexedDBTransaction; 21struct IndexedDBObjectStoreMetadata; 22 23class 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 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 61bool 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 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