blob: 60d02d97b9a5311095a1a3f31f009a5b6f2af0c5 [file] [log] [blame]
// Copyright 2016 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.
// TODO: This will move to //third_party/WebKit when //content/child/indexed_db
// is deleted but for now this will depend on //content/common types and so
// so belongs here.
module indexed_db.mojom;
import "mojo/common/file_path.mojom";
import "mojo/common/string16.mojom";
import "mojo/common/time.mojom";
import "url/mojo/origin.mojom";
enum CursorDirection {
Next,
NextNoDuplicate,
Prev,
PrevNoDuplicate,
};
enum DataLoss {
None,
Total,
};
// Represents key types that hold no data and so cannot be options in the
// KeyData union.
// TODO(jsbell): These types should be cleaned up end-to-end, leaving only the
// dataful options.
enum DatalessKeyType {
Invalid,
Null,
};
union KeyData {
array<Key> key_array;
array<uint8> binary;
mojo.common.mojom.String16 string;
double date;
double number;
DatalessKeyType other;
};
// Defined as a structure so that it can by typemapped with StructTraits.
struct Key {
KeyData data;
};
// Represents WebIDBKeyPathTypeString and WebIDBKeyPathTypeArray in a key path.
union KeyPathData {
mojo.common.mojom.String16 string;
array<mojo.common.mojom.String16> string_array;
};
struct KeyPath {
// A null value here corresponds to WebIDBKeyPathTypeNull.
KeyPathData? data;
};
struct KeyRange {
Key lower;
Key upper;
bool lower_open;
bool upper_open;
};
enum OperationType {
Add,
Put,
Delete,
Clear,
};
enum PutMode {
AddOrUpdate,
AddOnly,
CursorUpdate,
};
enum TaskType {
Normal,
Preemptive,
};
enum TransactionMode {
ReadOnly,
ReadWrite,
VersionChange,
};
struct IndexMetadata {
int64 id;
mojo.common.mojom.String16 name;
KeyPath key_path;
bool unique;
bool multi_entry;
};
struct ObjectStoreMetadata {
int64 id;
mojo.common.mojom.String16 name;
KeyPath key_path;
bool auto_increment;
int64 max_index_id;
array<IndexMetadata> indexes;
};
struct DatabaseMetadata {
int64 id;
mojo.common.mojom.String16 name;
int64 version;
int64 max_object_store_id;
array<ObjectStoreMetadata> object_stores;
};
struct IndexKeys {
int64 index_id;
array<Key> index_keys;
};
struct FileInfo {
mojo.common.mojom.FilePath path;
mojo.common.mojom.String16 name;
mojo.common.mojom.Time last_modified;
};
struct BlobInfo {
string uuid;
mojo.common.mojom.String16 mime_type;
int64 size;
FileInfo? file;
};
struct Value {
string bits;
array<BlobInfo> blob_or_file_info;
};
struct ReturnValue {
Value value;
Key primary_key;
KeyPath key_path;
};
struct Observation {
int64 object_store_id;
OperationType type;
KeyRange key_range;
Value? value;
};
struct ObserverTransaction {
int64 id;
array<int64> scope;
};
struct ObserverChanges {
map<int32, array<int32>> observation_index_map;
map<int32, ObserverTransaction> transaction_map;
array<Observation> observations;
};
// The Callbacks interface is used to return results for individual requests.
// Some requests may return multiple results before completion, such as
// UpgradeNeeded before SuccessDatabase.
//
// TODO(https://crbug.com/627484): Many of these could be replaced with
// replies associated with particular messages.
interface Callbacks {
Error(int32 code, mojo.common.mojom.String16 message);
// Factory::GetDatabaseNames
SuccessStringList(array<mojo.common.mojom.String16> value);
// Factory::Open / DeleteDatabase
Blocked(int64 existing_version);
// Factory::Open
UpgradeNeeded(associated Database database, int64 old_version,
DataLoss data_loss, string data_loss_message,
DatabaseMetadata db_metadata);
SuccessDatabase(associated Database? database, DatabaseMetadata metadata);
// Database::OpenCursor
SuccessCursor(associated Cursor cursor,
Key key,
Key primary_key,
Value? value);
// Database::Get / Cursor::Advance
SuccessValue(ReturnValue? value);
// Cursor::Continue / Advance
SuccessCursorContinue(Key key, Key primary_key, Value? value);
// Cursor::Prefetch
SuccessCursorPrefetch(array<Key> keys,
array<Key> primary_keys,
array<Value> values);
// Database::GetAll
SuccessArray(array<ReturnValue> values);
// Database::Put / Cursor::Update
SuccessKey(Key key);
// Database::Count / DeleteRange
// Factory::DeleteDatabase
SuccessInteger(int64 value);
// Cursor::Continue / Advance
Success();
};
// The DatabaseCallbacks interface is used to notification of events out of
// band to individual requests. A single instance is used for the lifetime of
// a database connection.
interface DatabaseCallbacks {
ForcedClose();
VersionChange(int64 old_version, int64 new_version);
Abort(int64 transaction_id, int32 code,
mojo.common.mojom.String16 message);
Complete(int64 transaction_id);
Changes(ObserverChanges changes);
};
interface Cursor {
Advance(uint32 count, associated Callbacks callbacks);
Continue(Key key, Key primary_key, associated Callbacks callbacks);
Prefetch(int32 count, associated Callbacks callbacks);
PrefetchReset(int32 used_prefetches, int32 unused_prefetches,
array<string> unused_blob_uuids);
};
interface Database {
CreateObjectStore(int64 transaction_id,
int64 object_store_id,
mojo.common.mojom.String16 name,
KeyPath key_path,
bool auto_increment);
DeleteObjectStore(int64 transaction_id,
int64 object_store_id);
RenameObjectStore(int64 transaction_id,
int64 object_store_id,
mojo.common.mojom.String16 new_name);
CreateTransaction(int64 transaction_id,
array<int64> object_store_ids,
TransactionMode mode);
Close();
VersionChangeIgnored();
AddObserver(int64 transaction_id,
int32 observer_id,
bool include_transaction,
bool no_records,
bool values,
uint16 operation_types);
RemoveObservers(array<int32> observers);
Get(int64 transaction_id,
int64 object_store_id,
int64 index_id,
KeyRange key_range,
bool key_only,
associated Callbacks callbacks);
GetAll(int64 transaction_id,
int64 object_store_id,
int64 index_id,
KeyRange key_range,
bool key_only,
int64 max_count,
associated Callbacks callbacks);
Put(int64 transaction_id,
int64 object_store_id,
Value value,
Key key,
PutMode mode,
array<IndexKeys> index_keys,
associated Callbacks callbacks);
SetIndexKeys(int64 transaction_id,
int64 object_store_id,
Key primary_key,
array<IndexKeys> index_keys);
SetIndexesReady(int64 transaction_id,
int64 object_store_id,
array<int64> index_ids);
OpenCursor(int64 transaction_id,
int64 object_store_id,
int64 index_id,
KeyRange key_range,
CursorDirection direction,
bool key_only,
TaskType task_type,
associated Callbacks callbacks);
Count(int64 transaction_id,
int64 object_store_id,
int64 index_id,
KeyRange key_range,
associated Callbacks callbacks);
DeleteRange(int64 transaction_id,
int64 object_store_id,
KeyRange key_range,
associated Callbacks callbacks);
Clear(int64 transaction_id,
int64 object_store_id,
associated Callbacks callbacks);
CreateIndex(int64 transaction_id,
int64 object_store_id,
int64 index_id,
mojo.common.mojom.String16 name,
KeyPath key_path,
bool unique,
bool multi_entry);
DeleteIndex(int64 transaction_id,
int64 object_store_id,
int64 index_id);
RenameIndex(int64 transaction_id,
int64 object_store_id,
int64 index_id,
mojo.common.mojom.String16 new_name);
Abort(int64 transaction_id);
Commit(int64 transaction_id);
AckReceivedBlobs(array<string> uuids);
};
interface Factory {
GetDatabaseNames(associated Callbacks callbacks, url.mojom.Origin origin);
Open(associated Callbacks callbacks,
associated DatabaseCallbacks database_callbacks, url.mojom.Origin origin,
mojo.common.mojom.String16 name, int64 version, int64 transaction_id);
DeleteDatabase(associated Callbacks callbacks, url.mojom.Origin origin,
mojo.common.mojom.String16 name);
};