#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 {
class Record {
public:
virtual ~Record() = default;
virtual blink::IndexedDBKey& key() = 0;
virtual blink::IndexedDBKey& primary_key() = 0;
virtual IndexedDBValue& value() = 0;
};
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_;
};
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_;
};
class IndexKeyOnlyRecord : public IndexRecord {
public:
explicit IndexKeyOnlyRecord(blink::IndexedDBKey key,
blink::IndexedDBKey primary_key);
~IndexKeyOnlyRecord() override;
IndexedDBValue& value() override;
};
}
#endif