blob: 489c62735f582a1ce735d26ec9aaa1cd53c76160 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_INDEXED_DB_INSTANCE_RECORD_H_
#define CONTENT_BROWSER_INDEXED_DB_INSTANCE_RECORD_H_
#include "content/browser/indexed_db/indexed_db_value.h"
#include "third_party/blink/public/common/indexeddb/indexeddb_key.h"
namespace content::indexed_db {
// Base class for an IndexedDB record.
class Record {
public:
virtual ~Record() = default;
virtual blink::IndexedDBKey& key() = 0;
virtual blink::IndexedDBKey& primary_key() = 0;
virtual IndexedDBValue& value() = 0;
};
// An object store record has a key and value, with `primary_key()` being the
// key itself.
class ObjectStoreRecord : public Record {
public:
ObjectStoreRecord(blink::IndexedDBKey key, IndexedDBValue value);
~ObjectStoreRecord() override;
blink::IndexedDBKey& key() override;
blink::IndexedDBKey& primary_key() override;
IndexedDBValue& value() override;
private:
blink::IndexedDBKey key_;
IndexedDBValue value_;
};
// It is an error to call `value()` on this type of record.
class ObjectStoreKeyOnlyRecord : public ObjectStoreRecord {
public:
explicit ObjectStoreKeyOnlyRecord(blink::IndexedDBKey key);
~ObjectStoreKeyOnlyRecord() override;
IndexedDBValue& value() override;
};
class IndexRecord : public Record {
public:
IndexRecord(blink::IndexedDBKey key,
blink::IndexedDBKey primary_key,
IndexedDBValue value);
~IndexRecord() override;
blink::IndexedDBKey& key() override;
blink::IndexedDBKey& primary_key() override;
IndexedDBValue& value() override;
private:
blink::IndexedDBKey key_;
blink::IndexedDBKey primary_key_;
IndexedDBValue value_;
};
// It is an error to call `value()` on this type of record.
class IndexKeyOnlyRecord : public IndexRecord {
public:
explicit IndexKeyOnlyRecord(blink::IndexedDBKey key,
blink::IndexedDBKey primary_key);
~IndexKeyOnlyRecord() override;
IndexedDBValue& value() override;
};
} // namespace content::indexed_db
#endif // CONTENT_BROWSER_INDEXED_DB_INSTANCE_RECORD_H_