summaryrefslogtreecommitdiffstats
path: root/dom/indexedDB/PBackgroundIDBRequest.ipdl
blob: 293f65a59872e7d9fb9ce7fa040120eb004b72d8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

include protocol PBackgroundIDBTransaction;
include protocol PBackgroundIDBVersionChangeTransaction;

include PBackgroundIDBSharedTypes;

include "mozilla/dom/indexedDB/SerializationHelpers.h";
include "mozilla/dom/indexedDB/ActorsChild.h";

using struct mozilla::void_t from "mozilla/ipc/IPCCore.h";

using class mozilla::dom::indexedDB::Key
  from "mozilla/dom/indexedDB/Key.h";

namespace mozilla {
namespace dom {
namespace indexedDB {

struct ObjectStoreAddResponse
{
  Key key;
};

struct ObjectStorePutResponse
{
  Key key;
};

struct ObjectStoreGetResponse
{
  SerializedStructuredCloneReadInfo cloneInfo;
};

struct ObjectStoreGetKeyResponse
{
  Key key;
};

struct ObjectStoreGetAllResponse
{
  SerializedStructuredCloneReadInfo[] cloneInfos;
};

struct ObjectStoreGetAllKeysResponse
{
  Key[] keys;
};

struct ObjectStoreDeleteResponse
{ };

struct ObjectStoreClearResponse
{ };

struct ObjectStoreCountResponse
{
  uint64_t count;
};

struct IndexGetResponse
{
  SerializedStructuredCloneReadInfo cloneInfo;
};

struct IndexGetKeyResponse
{
  Key key;
};

struct IndexGetAllResponse
{
  SerializedStructuredCloneReadInfo[] cloneInfos;
};

struct IndexGetAllKeysResponse
{
  Key[] keys;
};

struct IndexCountResponse
{
  uint64_t count;
};

union RequestResponse
{
  nsresult;
  ObjectStoreGetResponse;
  ObjectStoreGetKeyResponse;
  ObjectStoreAddResponse;
  ObjectStorePutResponse;
  ObjectStoreDeleteResponse;
  ObjectStoreClearResponse;
  ObjectStoreCountResponse;
  ObjectStoreGetAllResponse;
  ObjectStoreGetAllKeysResponse;
  IndexGetResponse;
  IndexGetKeyResponse;
  IndexGetAllResponse;
  IndexGetAllKeysResponse;
  IndexCountResponse;
};

struct PreprocessInfo
{
  SerializedStructuredCloneFile[] files;
};

struct ObjectStoreGetPreprocessParams
{
  PreprocessInfo preprocessInfo;
};

struct ObjectStoreGetAllPreprocessParams
{
  PreprocessInfo[] preprocessInfos;
};

union PreprocessParams
{
  ObjectStoreGetPreprocessParams;
  ObjectStoreGetAllPreprocessParams;
};

struct ObjectStoreGetPreprocessResponse
{
};

struct ObjectStoreGetAllPreprocessResponse
{
};

// The nsresult is used if an error occurs for any preprocess request type.
// The specific response types are sent on success.
union PreprocessResponse
{
  nsresult;
  ObjectStoreGetPreprocessResponse;
  ObjectStoreGetAllPreprocessResponse;
};

[ManualDealloc, ChildImpl="indexedDB::BackgroundRequestChild", ParentImpl=virtual]
protocol PBackgroundIDBRequest
{
  manager PBackgroundIDBTransaction or PBackgroundIDBVersionChangeTransaction;

parent:
  async Continue(PreprocessResponse response);

child:
  async __delete__(RequestResponse response);

  // Preprocess is used in cases where response processing needs to do something
  // asynchronous off of the child actor's thread before returning the actual
  // result to user code. This is necessary because RequestResponse processing
  // occurs in __delete__ and the PBackgroundIDBRequest implementations'
  // life-cycles are controlled by IPC and are not otherwise reference counted.
  // By introducing the (optional) Preprocess/Continue steps reference counting
  // or the introduction of additional runnables are avoided.
  async Preprocess(PreprocessParams params);
};

} // namespace indexedDB
} // namespace dom
} // namespace mozilla