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