// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef WebIDBValue_h
#define WebIDBValue_h

#include "public/platform/WebBlobInfo.h"
#include "public/platform/WebData.h"
#include "public/platform/WebVector.h"
#include "public/platform/modules/indexeddb/WebIDBKey.h"
#include "public/platform/modules/indexeddb/WebIDBKeyPath.h"

namespace blink {

struct WebIDBValue {
  WebIDBValue() {}
  explicit WebIDBValue(const WebData& data) : data(data) {}
  WebIDBValue(const WebData& data, const WebVector<WebBlobInfo>& blobInfo)
      : data(data), webBlobInfo(blobInfo) {}
  WebIDBValue(const WebData& data,
              const WebVector<WebBlobInfo>& blobInfo,
              const WebIDBKey& primaryKey,
              const WebIDBKeyPath& keyPath)
      : data(data),
        webBlobInfo(blobInfo),
        primaryKey(primaryKey),
        keyPath(keyPath) {}

  // The serialized JavaScript bits (ignoring blob data) for this IDB Value.
  // Required value.
  WebData data;
  // Collection of blob info referenced by [[data]]. Optional and empty for
  // values without blobs.
  WebVector<WebBlobInfo> webBlobInfo;
  // The auto-generated primary key and key path. Both are set when IDB is
  // generating keys (and not JavaScript).  Optional; If set then a property
  // named [[keyPath]] will be set to [[primaryKey]] on the deserialized
  // [[data]] object before calling the event handler.
  WebIDBKey primaryKey;
  WebIDBKeyPath keyPath;
};

}  // namespace blink

#endif
