IDB: Implement cross-thread and IPC plumbing for 'get' support
[WebKit-https.git] / Source / WebKit2 / Shared / WebCoreArgumentCoders.h
1 /*
2  * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef WebCoreArgumentCoders_h
27 #define WebCoreArgumentCoders_h
28
29 #include "ArgumentCoders.h"
30
31 namespace WebCore {
32 class AffineTransform;
33 class AuthenticationChallenge;
34 class CertificateInfo;
35 class Color;
36 class Credential;
37 class Cursor;
38 class DatabaseDetails;
39 class FilterOperations;
40 class FloatPoint;
41 class FloatPoint3D;
42 class FloatRect;
43 class FloatSize;
44 class FixedPositionViewportConstraints;
45 class HTTPHeaderMap;
46 class IDBKeyPath;
47 class IntPoint;
48 class IntRect;
49 class IntSize;
50 class KeyframeValueList;
51 class URL;
52 class Notification;
53 class ProtectionSpace;
54 class ResourceError;
55 class ResourceRequest;
56 class ResourceResponse;
57 class StickyPositionViewportConstraints;
58 class TextCheckingRequestData;
59 class TransformationMatrix;
60 class UserStyleSheet;
61 class UserScript;
62 struct CompositionUnderline;
63 struct Cookie;
64 struct DictationAlternative;
65 struct DragSession;
66 struct FileChooserSettings;
67 struct IDBDatabaseMetadata;
68 struct IDBGetResult;
69 struct IDBIndexMetadata;
70 struct IDBKeyData;
71 struct IDBKeyRangeData;
72 struct IDBObjectStoreMetadata;
73 struct Length;
74 struct GrammarDetail;
75 struct MimeClassInfo;
76 struct PasteboardImage;
77 struct PasteboardWebContent;
78 struct PluginInfo;
79 struct ScrollableAreaParameters;
80 struct TextCheckingResult;
81 struct ViewportAttributes;
82 struct WindowFeatures;
83 }
84
85 #if PLATFORM(MAC)
86 namespace WebCore {
87 struct KeypressCommand;
88 }
89 #endif
90
91 #if PLATFORM(IOS)
92 namespace WebCore {
93 class FloatQuad;
94 class SelectionRect;
95 struct PasteboardImage;
96 struct PasteboardWebContent;
97 struct ViewportArguments;
98 }
99 #endif
100
101 namespace IPC {
102
103 template<> struct ArgumentCoder<WebCore::AffineTransform> {
104     static void encode(ArgumentEncoder&, const WebCore::AffineTransform&);
105     static bool decode(ArgumentDecoder&, WebCore::AffineTransform&);
106 };
107
108 template<> struct ArgumentCoder<WebCore::TransformationMatrix> {
109     static void encode(ArgumentEncoder&, const WebCore::TransformationMatrix&);
110     static bool decode(ArgumentDecoder&, WebCore::TransformationMatrix&);
111 };
112
113 template<> struct ArgumentCoder<WebCore::CertificateInfo> {
114     static void encode(ArgumentEncoder&, const WebCore::CertificateInfo&);
115     static bool decode(ArgumentDecoder&, WebCore::CertificateInfo&);
116 };
117
118 template<> struct ArgumentCoder<WebCore::FloatPoint> {
119     static void encode(ArgumentEncoder&, const WebCore::FloatPoint&);
120     static bool decode(ArgumentDecoder&, WebCore::FloatPoint&);
121 };
122
123 template<> struct ArgumentCoder<WebCore::FloatPoint3D> {
124     static void encode(ArgumentEncoder&, const WebCore::FloatPoint3D&);
125     static bool decode(ArgumentDecoder&, WebCore::FloatPoint3D&);
126 };
127
128 template<> struct ArgumentCoder<WebCore::FloatRect> {
129     static void encode(ArgumentEncoder&, const WebCore::FloatRect&);
130     static bool decode(ArgumentDecoder&, WebCore::FloatRect&);
131 };
132
133 template<> struct ArgumentCoder<WebCore::FloatSize> {
134     static void encode(ArgumentEncoder&, const WebCore::FloatSize&);
135     static bool decode(ArgumentDecoder&, WebCore::FloatSize&);
136 };
137
138 #if PLATFORM(IOS)
139 template<> struct ArgumentCoder<WebCore::FloatQuad> {
140     static void encode(ArgumentEncoder&, const WebCore::FloatQuad&);
141     static bool decode(ArgumentDecoder&, WebCore::FloatQuad&);
142 };
143
144 template<> struct ArgumentCoder<WebCore::ViewportArguments> {
145     static void encode(ArgumentEncoder&, const WebCore::ViewportArguments&);
146     static bool decode(ArgumentDecoder&, WebCore::ViewportArguments&);
147 };
148 #endif // PLATFORM(IOS)
149
150 template<> struct ArgumentCoder<WebCore::IntPoint> {
151     static void encode(ArgumentEncoder&, const WebCore::IntPoint&);
152     static bool decode(ArgumentDecoder&, WebCore::IntPoint&);
153 };
154
155 template<> struct ArgumentCoder<WebCore::IntRect> {
156     static void encode(ArgumentEncoder&, const WebCore::IntRect&);
157     static bool decode(ArgumentDecoder&, WebCore::IntRect&);
158 };
159
160 template<> struct ArgumentCoder<WebCore::IntSize> {
161     static void encode(ArgumentEncoder&, const WebCore::IntSize&);
162     static bool decode(ArgumentDecoder&, WebCore::IntSize&);
163 };
164
165 template<> struct ArgumentCoder<WebCore::Length> {
166     static void encode(ArgumentEncoder&, const WebCore::Length&);
167     static bool decode(ArgumentDecoder&, WebCore::Length&);
168 };
169
170 template<> struct ArgumentCoder<WebCore::ViewportAttributes> {
171     static void encode(ArgumentEncoder&, const WebCore::ViewportAttributes&);
172     static bool decode(ArgumentDecoder&, WebCore::ViewportAttributes&);
173 };
174
175 template<> struct ArgumentCoder<WebCore::MimeClassInfo> {
176     static void encode(ArgumentEncoder&, const WebCore::MimeClassInfo&);
177     static bool decode(ArgumentDecoder&, WebCore::MimeClassInfo&);
178 };
179
180 template<> struct ArgumentCoder<WebCore::PluginInfo> {
181     static void encode(ArgumentEncoder&, const WebCore::PluginInfo&);
182     static bool decode(ArgumentDecoder&, WebCore::PluginInfo&);
183 };
184
185 template<> struct ArgumentCoder<WebCore::HTTPHeaderMap> {
186     static void encode(ArgumentEncoder&, const WebCore::HTTPHeaderMap&);
187     static bool decode(ArgumentDecoder&, WebCore::HTTPHeaderMap&);
188 };
189
190 template<> struct ArgumentCoder<WebCore::AuthenticationChallenge> {
191     static void encode(ArgumentEncoder&, const WebCore::AuthenticationChallenge&);
192     static bool decode(ArgumentDecoder&, WebCore::AuthenticationChallenge&);
193 };
194
195 template<> struct ArgumentCoder<WebCore::ProtectionSpace> {
196     static void encode(ArgumentEncoder&, const WebCore::ProtectionSpace&);
197     static bool decode(ArgumentDecoder&, WebCore::ProtectionSpace&);
198 };
199
200 template<> struct ArgumentCoder<WebCore::Credential> {
201     static void encode(ArgumentEncoder&, const WebCore::Credential&);
202     static bool decode(ArgumentDecoder&, WebCore::Credential&);
203 };
204
205 template<> struct ArgumentCoder<WebCore::Cursor> {
206     static void encode(ArgumentEncoder&, const WebCore::Cursor&);
207     static bool decode(ArgumentDecoder&, WebCore::Cursor&);
208 };
209
210 template<> struct ArgumentCoder<WebCore::ResourceRequest> {
211 #if PLATFORM(MAC)
212     static const bool kShouldSerializeWebCoreData = false;
213 #else
214     static const bool kShouldSerializeWebCoreData = true;
215 #endif
216
217     static void encode(ArgumentEncoder&, const WebCore::ResourceRequest&);
218     static bool decode(ArgumentDecoder&, WebCore::ResourceRequest&);
219     static void encodePlatformData(ArgumentEncoder&, const WebCore::ResourceRequest&);
220     static bool decodePlatformData(ArgumentDecoder&, WebCore::ResourceRequest&);
221 };
222
223 template<> struct ArgumentCoder<WebCore::ResourceResponse> {
224     static void encode(ArgumentEncoder&, const WebCore::ResourceResponse&);
225     static bool decode(ArgumentDecoder&, WebCore::ResourceResponse&);
226     static void encodePlatformData(ArgumentEncoder&, const WebCore::ResourceResponse&);
227     static bool decodePlatformData(ArgumentDecoder&, WebCore::ResourceResponse&);
228 };
229
230 template<> struct ArgumentCoder<WebCore::ResourceError> {
231 #if PLATFORM(MAC)
232     static const bool kShouldSerializeWebCoreData = false;
233 #else
234     static const bool kShouldSerializeWebCoreData = true;
235 #endif
236
237     static void encode(ArgumentEncoder&, const WebCore::ResourceError&);
238     static bool decode(ArgumentDecoder&, WebCore::ResourceError&);
239     static void encodePlatformData(ArgumentEncoder&, const WebCore::ResourceError&);
240     static bool decodePlatformData(ArgumentDecoder&, WebCore::ResourceError&);
241 };
242
243 template<> struct ArgumentCoder<WebCore::WindowFeatures> {
244     static void encode(ArgumentEncoder&, const WebCore::WindowFeatures&);
245     static bool decode(ArgumentDecoder&, WebCore::WindowFeatures&);
246 };
247
248 template<> struct ArgumentCoder<WebCore::Color> {
249     static void encode(ArgumentEncoder&, const WebCore::Color&);
250     static bool decode(ArgumentDecoder&, WebCore::Color&);
251 };
252
253 #if PLATFORM(MAC)
254 template<> struct ArgumentCoder<WebCore::KeypressCommand> {
255     static void encode(ArgumentEncoder&, const WebCore::KeypressCommand&);
256     static bool decode(ArgumentDecoder&, WebCore::KeypressCommand&);
257 };
258 #endif
259
260 #if PLATFORM(IOS)
261 template<> struct ArgumentCoder<WebCore::SelectionRect> {
262     static void encode(ArgumentEncoder&, const WebCore::SelectionRect&);
263     static bool decode(ArgumentDecoder&, WebCore::SelectionRect&);
264 };
265
266 template<> struct ArgumentCoder<WebCore::PasteboardWebContent> {
267     static void encode(ArgumentEncoder&, const WebCore::PasteboardWebContent&);
268     static bool decode(ArgumentDecoder&, WebCore::PasteboardWebContent&);
269 };
270
271 template<> struct ArgumentCoder<WebCore::PasteboardImage> {
272     static void encode(ArgumentEncoder&, const WebCore::PasteboardImage&);
273     static bool decode(ArgumentDecoder&, WebCore::PasteboardImage&);
274 };
275 #endif
276
277 template<> struct ArgumentCoder<WebCore::CompositionUnderline> {
278     static void encode(ArgumentEncoder&, const WebCore::CompositionUnderline&);
279     static bool decode(ArgumentDecoder&, WebCore::CompositionUnderline&);
280 };
281
282 template<> struct ArgumentCoder<WebCore::Cookie> {
283     static void encode(ArgumentEncoder&, const WebCore::Cookie&);
284     static bool decode(ArgumentDecoder&, WebCore::Cookie&);
285 };
286
287 template<> struct ArgumentCoder<WebCore::DatabaseDetails> {
288     static void encode(ArgumentEncoder&, const WebCore::DatabaseDetails&);
289     static bool decode(ArgumentDecoder&, WebCore::DatabaseDetails&);
290 };
291
292 template<> struct ArgumentCoder<WebCore::DictationAlternative> {
293     static void encode(ArgumentEncoder&, const WebCore::DictationAlternative&);
294     static bool decode(ArgumentDecoder&, WebCore::DictationAlternative&);
295 };
296
297 template<> struct ArgumentCoder<WebCore::FileChooserSettings> {
298     static void encode(ArgumentEncoder&, const WebCore::FileChooserSettings&);
299     static bool decode(ArgumentDecoder&, WebCore::FileChooserSettings&);
300 };
301
302 template<> struct ArgumentCoder<WebCore::GrammarDetail> {
303     static void encode(ArgumentEncoder&, const WebCore::GrammarDetail&);
304     static bool decode(ArgumentDecoder&, WebCore::GrammarDetail&);
305 };
306
307 template<> struct ArgumentCoder<WebCore::TextCheckingRequestData> {
308     static void encode(ArgumentEncoder&, const WebCore::TextCheckingRequestData&);
309     static bool decode(ArgumentDecoder&, WebCore::TextCheckingRequestData&);
310 };
311
312 template<> struct ArgumentCoder<WebCore::TextCheckingResult> {
313     static void encode(ArgumentEncoder&, const WebCore::TextCheckingResult&);
314     static bool decode(ArgumentDecoder&, WebCore::TextCheckingResult&);
315 };
316     
317 template<> struct ArgumentCoder<WebCore::DragSession> {
318     static void encode(ArgumentEncoder&, const WebCore::DragSession&);
319     static bool decode(ArgumentDecoder&, WebCore::DragSession&);
320 };
321
322 template<> struct ArgumentCoder<WebCore::URL> {
323     static void encode(ArgumentEncoder&, const WebCore::URL&);
324     static bool decode(ArgumentDecoder&, WebCore::URL&);
325 };
326
327 template<> struct ArgumentCoder<WebCore::UserStyleSheet> {
328     static void encode(ArgumentEncoder&, const WebCore::UserStyleSheet&);
329     static bool decode(ArgumentDecoder&, WebCore::UserStyleSheet&);
330 };
331
332 template<> struct ArgumentCoder<WebCore::UserScript> {
333     static void encode(ArgumentEncoder&, const WebCore::UserScript&);
334     static bool decode(ArgumentDecoder&, WebCore::UserScript&);
335 };
336
337 template<> struct ArgumentCoder<WebCore::ScrollableAreaParameters> {
338     static void encode(ArgumentEncoder&, const WebCore::ScrollableAreaParameters&);
339     static bool decode(ArgumentDecoder&, WebCore::ScrollableAreaParameters&);
340 };
341
342 template<> struct ArgumentCoder<WebCore::FixedPositionViewportConstraints> {
343     static void encode(ArgumentEncoder&, const WebCore::FixedPositionViewportConstraints&);
344     static bool decode(ArgumentDecoder&, WebCore::FixedPositionViewportConstraints&);
345 };
346
347 template<> struct ArgumentCoder<WebCore::StickyPositionViewportConstraints> {
348     static void encode(ArgumentEncoder&, const WebCore::StickyPositionViewportConstraints&);
349     static bool decode(ArgumentDecoder&, WebCore::StickyPositionViewportConstraints&);
350 };
351
352 #if ENABLE(CSS_FILTERS) && !USE(COORDINATED_GRAPHICS)
353 template<> struct ArgumentCoder<WebCore::FilterOperations> {
354     static void encode(ArgumentEncoder&, const WebCore::FilterOperations&);
355     static bool decode(ArgumentDecoder&, WebCore::FilterOperations&);
356 };
357 #endif
358
359 #if ENABLE(INDEXED_DATABASE)
360 template<> struct ArgumentCoder<WebCore::IDBDatabaseMetadata> {
361     static void encode(ArgumentEncoder&, const WebCore::IDBDatabaseMetadata&);
362     static bool decode(ArgumentDecoder&, WebCore::IDBDatabaseMetadata&);
363 };
364
365 template<> struct ArgumentCoder<WebCore::IDBGetResult> {
366     static void encode(ArgumentEncoder&, const WebCore::IDBGetResult&);
367     static bool decode(ArgumentDecoder&, WebCore::IDBGetResult&);
368 };
369
370 template<> struct ArgumentCoder<WebCore::IDBIndexMetadata> {
371     static void encode(ArgumentEncoder&, const WebCore::IDBIndexMetadata&);
372     static bool decode(ArgumentDecoder&, WebCore::IDBIndexMetadata&);
373 };
374
375 template<> struct ArgumentCoder<WebCore::IDBKeyData> {
376     static void encode(ArgumentEncoder&, const WebCore::IDBKeyData&);
377     static bool decode(ArgumentDecoder&, WebCore::IDBKeyData&);
378 };
379
380 template<> struct ArgumentCoder<WebCore::IDBKeyPath> {
381     static void encode(ArgumentEncoder&, const WebCore::IDBKeyPath&);
382     static bool decode(ArgumentDecoder&, WebCore::IDBKeyPath&);
383 };
384
385 template<> struct ArgumentCoder<WebCore::IDBKeyRangeData> {
386     static void encode(ArgumentEncoder&, const WebCore::IDBKeyRangeData&);
387     static bool decode(ArgumentDecoder&, WebCore::IDBKeyRangeData&);
388 };
389
390 template<> struct ArgumentCoder<WebCore::IDBObjectStoreMetadata> {
391     static void encode(ArgumentEncoder&, const WebCore::IDBObjectStoreMetadata&);
392     static bool decode(ArgumentDecoder&, WebCore::IDBObjectStoreMetadata&);
393 };
394 #endif
395
396 } // namespace IPC
397
398 #endif // WebCoreArgumentCoders_h