790b829be479b8acb69112d7ef10c862feae22d5
[WebKit-https.git] / Source / WebKit / Shared / WebCoreArgumentCoders.h
1 /*
2  * Copyright (C) 2010-2017 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 #pragma once
27
28 #include "ArgumentCoders.h"
29 #include <WebCore/AutoplayEvent.h>
30 #include <WebCore/CacheStorageConnection.h>
31 #include <WebCore/CaptureDevice.h>
32 #include <WebCore/ColorSpace.h>
33 #include <WebCore/DiagnosticLoggingClient.h>
34 #include <WebCore/FrameLoaderTypes.h>
35 #include <WebCore/IndexedDB.h>
36 #include <WebCore/MediaSelectionOption.h>
37 #include <WebCore/NetworkLoadMetrics.h>
38 #include <WebCore/NotificationDirection.h>
39 #include <WebCore/PaymentHeaders.h>
40 #include <WebCore/RealtimeMediaSource.h>
41 #include <WebCore/ScrollSnapOffsetsInfo.h>
42
43 namespace WTF {
44 class MonotonicTime;
45 class Seconds;
46 }
47
48 namespace PAL {
49 class SessionID;
50 }
51
52 namespace WebCore {
53 class AffineTransform;
54 class AuthenticationChallenge;
55 class BlobPart;
56 class CertificateInfo;
57 class Color;
58 class Credential;
59 class CubicBezierTimingFunction;
60 class Cursor;
61 class DatabaseDetails;
62 class DragData;
63 class FilterOperation;
64 class FilterOperations;
65 class FloatPoint;
66 class FloatPoint3D;
67 class FloatRect;
68 class FloatRoundedRect;
69 class FloatSize;
70 class FixedPositionViewportConstraints;
71 class HTTPHeaderMap;
72 class IntPoint;
73 class IntRect;
74 class IntSize;
75 class KeyframeValueList;
76 class LayoutSize;
77 class LayoutPoint;
78 class LinearTimingFunction;
79 class Notification;
80 class Path;
81 class ProtectionSpace;
82 class Region;
83 class ResourceError;
84 class ResourceRequest;
85 class ResourceResponse;
86 class SpringTimingFunction;
87 class StepsTimingFunction;
88 class StickyPositionViewportConstraints;
89 class TextCheckingRequestData;
90 class TransformationMatrix;
91 class UserStyleSheet;
92 class URL;
93
94 struct CacheQueryOptions;
95 struct CompositionUnderline;
96 struct DictationAlternative;
97 struct DictionaryPopupInfo;
98 struct EventTrackingRegions;
99 struct ExceptionDetails;
100 struct FileChooserSettings;
101 struct Length;
102 struct GrammarDetail;
103 struct MimeClassInfo;
104 struct PasteboardImage;
105 struct PasteboardURL;
106 struct PasteboardWebContent;
107 struct PluginInfo;
108 struct RecentSearch;
109 struct ResourceLoadStatistics;
110 struct ScrollableAreaParameters;
111 struct TextCheckingResult;
112 struct TextIndicatorData;
113 struct ViewportAttributes;
114 struct WindowFeatures;
115     
116 template <typename> class BoxExtent;
117 using FloatBoxExtent = BoxExtent<float>;
118 }
119
120 #if PLATFORM(COCOA)
121 namespace WebCore {
122 class MachSendRight;
123 struct KeypressCommand;
124 }
125 #endif
126
127 #if PLATFORM(IOS)
128 namespace WebCore {
129 class FloatQuad;
130 class SelectionRect;
131 struct Highlight;
132 struct PasteboardImage;
133 struct PasteboardWebContent;
134 struct ViewportArguments;
135 }
136 #endif
137
138 #if USE(SOUP)
139 namespace WebCore {
140 struct SoupNetworkProxySettings;
141 }
142 #endif
143
144 #if PLATFORM(WPE)
145 namespace WebCore {
146 struct PasteboardWebContents;
147 }
148 #endif
149
150 #if ENABLE(CONTENT_FILTERING)
151 namespace WebCore {
152 class ContentFilterUnblockHandler;
153 }
154 #endif
155
156 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
157 namespace WebCore {
158 class MediaPlaybackTargetContext;
159 }
160 #endif
161
162 #if ENABLE(MEDIA_SESSION)
163 namespace WebCore {
164 class MediaSessionMetadata;
165 }
166 #endif
167
168 #if ENABLE(MEDIA_STREAM)
169 namespace WebCore {
170 class CaptureDevice;
171 struct MediaConstraints;
172 }
173 #endif
174
175 #if ENABLE(INDEXED_DATABASE)
176 namespace WebCore {
177 using IDBKeyPath = Variant<String, Vector<String>>;
178 }
179 #endif
180
181 namespace IPC {
182
183 template<> struct ArgumentCoder<WTF::MonotonicTime> {
184     static void encode(Encoder&, const WTF::MonotonicTime&);
185     static bool decode(Decoder&, WTF::MonotonicTime&);
186 };
187
188 template<> struct ArgumentCoder<WTF::Seconds> {
189     static void encode(Encoder&, const WTF::Seconds&);
190     static bool decode(Decoder&, WTF::Seconds&);
191 };
192
193 template<> struct ArgumentCoder<WebCore::AffineTransform> {
194     static void encode(Encoder&, const WebCore::AffineTransform&);
195     static bool decode(Decoder&, WebCore::AffineTransform&);
196 };
197
198 template<> struct ArgumentCoder<WebCore::CacheQueryOptions> {
199     static void encode(Encoder&, const WebCore::CacheQueryOptions&);
200     static bool decode(Decoder&, WebCore::CacheQueryOptions&);
201 };
202
203 template<> struct ArgumentCoder<WebCore::DOMCache::CacheInfo> {
204     static void encode(Encoder&, const WebCore::DOMCache::CacheInfo&);
205     static bool decode(Decoder&, WebCore::DOMCache::CacheInfo&);
206 };
207
208 template<> struct ArgumentCoder<WebCore::DOMCache::Record> {
209     static void encode(Encoder&, const WebCore::DOMCache::Record&);
210     static bool decode(Decoder&, WebCore::DOMCache::Record&);
211 };
212
213 template<> struct ArgumentCoder<WebCore::EventTrackingRegions> {
214     static void encode(Encoder&, const WebCore::EventTrackingRegions&);
215     static bool decode(Decoder&, WebCore::EventTrackingRegions&);
216 };
217
218 template<> struct ArgumentCoder<WebCore::TransformationMatrix> {
219     static void encode(Encoder&, const WebCore::TransformationMatrix&);
220     static bool decode(Decoder&, WebCore::TransformationMatrix&);
221 };
222
223 template<> struct ArgumentCoder<WebCore::LinearTimingFunction> {
224     static void encode(Encoder&, const WebCore::LinearTimingFunction&);
225     static bool decode(Decoder&, WebCore::LinearTimingFunction&);
226 };
227
228 template<> struct ArgumentCoder<WebCore::CubicBezierTimingFunction> {
229     static void encode(Encoder&, const WebCore::CubicBezierTimingFunction&);
230     static bool decode(Decoder&, WebCore::CubicBezierTimingFunction&);
231 };
232
233 template<> struct ArgumentCoder<WebCore::StepsTimingFunction> {
234     static void encode(Encoder&, const WebCore::StepsTimingFunction&);
235     static bool decode(Decoder&, WebCore::StepsTimingFunction&);
236 };
237
238 template<> struct ArgumentCoder<WebCore::SpringTimingFunction> {
239     static void encode(Encoder&, const WebCore::SpringTimingFunction&);
240     static bool decode(Decoder&, WebCore::SpringTimingFunction&);
241 };
242
243 template<> struct ArgumentCoder<WebCore::CertificateInfo> {
244     static void encode(Encoder&, const WebCore::CertificateInfo&);
245     static bool decode(Decoder&, WebCore::CertificateInfo&);
246 };
247
248 template<> struct ArgumentCoder<WebCore::FloatPoint> {
249     static void encode(Encoder&, const WebCore::FloatPoint&);
250     static bool decode(Decoder&, WebCore::FloatPoint&);
251 };
252
253 template<> struct ArgumentCoder<WebCore::FloatPoint3D> {
254     static void encode(Encoder&, const WebCore::FloatPoint3D&);
255     static bool decode(Decoder&, WebCore::FloatPoint3D&);
256 };
257
258 template<> struct ArgumentCoder<WebCore::FloatRect> {
259     static void encode(Encoder&, const WebCore::FloatRect&);
260     static bool decode(Decoder&, WebCore::FloatRect&);
261 };
262     
263 template<> struct ArgumentCoder<WebCore::FloatBoxExtent> {
264     static void encode(Encoder&, const WebCore::FloatBoxExtent&);
265     static bool decode(Decoder&, WebCore::FloatBoxExtent&);
266 };
267
268 template<> struct ArgumentCoder<WebCore::FloatSize> {
269     static void encode(Encoder&, const WebCore::FloatSize&);
270     static bool decode(Decoder&, WebCore::FloatSize&);
271 };
272
273 template<> struct ArgumentCoder<WebCore::FloatRoundedRect> {
274     static void encode(Encoder&, const WebCore::FloatRoundedRect&);
275     static bool decode(Decoder&, WebCore::FloatRoundedRect&);
276 };
277
278 #if PLATFORM(IOS)
279 template<> struct ArgumentCoder<WebCore::FloatQuad> {
280     static void encode(Encoder&, const WebCore::FloatQuad&);
281     static bool decode(Decoder&, WebCore::FloatQuad&);
282 };
283
284 template<> struct ArgumentCoder<WebCore::ViewportArguments> {
285     static void encode(Encoder&, const WebCore::ViewportArguments&);
286     static bool decode(Decoder&, WebCore::ViewportArguments&);
287 };
288 #endif // PLATFORM(IOS)
289
290 template<> struct ArgumentCoder<WebCore::IntPoint> {
291     static void encode(Encoder&, const WebCore::IntPoint&);
292     static bool decode(Decoder&, WebCore::IntPoint&);
293 };
294
295 template<> struct ArgumentCoder<WebCore::IntRect> {
296     static void encode(Encoder&, const WebCore::IntRect&);
297     static bool decode(Decoder&, WebCore::IntRect&);
298 };
299
300 template<> struct ArgumentCoder<WebCore::IntSize> {
301     static void encode(Encoder&, const WebCore::IntSize&);
302     static bool decode(Decoder&, WebCore::IntSize&);
303 };
304
305 template<> struct ArgumentCoder<WebCore::LayoutSize> {
306     static void encode(Encoder&, const WebCore::LayoutSize&);
307     static bool decode(Decoder&, WebCore::LayoutSize&);
308 };
309
310 template<> struct ArgumentCoder<WebCore::LayoutPoint> {
311     static void encode(Encoder&, const WebCore::LayoutPoint&);
312     static bool decode(Decoder&, WebCore::LayoutPoint&);
313 };
314
315 template<> struct ArgumentCoder<WebCore::Path> {
316     static void encode(Encoder&, const WebCore::Path&);
317     static bool decode(Decoder&, WebCore::Path&);
318 };
319
320 template<> struct ArgumentCoder<WebCore::Region> {
321     static void encode(Encoder&, const WebCore::Region&);
322     static bool decode(Decoder&, WebCore::Region&);
323 };
324
325 template<> struct ArgumentCoder<WebCore::Length> {
326     static void encode(Encoder&, const WebCore::Length&);
327     static bool decode(Decoder&, WebCore::Length&);
328 };
329
330 template<> struct ArgumentCoder<WebCore::ViewportAttributes> {
331     static void encode(Encoder&, const WebCore::ViewportAttributes&);
332     static bool decode(Decoder&, WebCore::ViewportAttributes&);
333 };
334
335 template<> struct ArgumentCoder<WebCore::MimeClassInfo> {
336     static void encode(Encoder&, const WebCore::MimeClassInfo&);
337     static bool decode(Decoder&, WebCore::MimeClassInfo&);
338 };
339
340 template<> struct ArgumentCoder<WebCore::PluginInfo> {
341     static void encode(Encoder&, const WebCore::PluginInfo&);
342     static bool decode(Decoder&, WebCore::PluginInfo&);
343 };
344
345 template<> struct ArgumentCoder<WebCore::AuthenticationChallenge> {
346     static void encode(Encoder&, const WebCore::AuthenticationChallenge&);
347     static bool decode(Decoder&, WebCore::AuthenticationChallenge&);
348 };
349
350 template<> struct ArgumentCoder<WebCore::ProtectionSpace> {
351     static void encode(Encoder&, const WebCore::ProtectionSpace&);
352     static bool decode(Decoder&, WebCore::ProtectionSpace&);
353     static void encodePlatformData(Encoder&, const WebCore::ProtectionSpace&);
354     static bool decodePlatformData(Decoder&, WebCore::ProtectionSpace&);
355 };
356
357 template<> struct ArgumentCoder<WebCore::Credential> {
358     static void encode(Encoder&, const WebCore::Credential&);
359     static bool decode(Decoder&, WebCore::Credential&);
360     static void encodePlatformData(Encoder&, const WebCore::Credential&);
361     static bool decodePlatformData(Decoder&, WebCore::Credential&);
362 };
363
364 template<> struct ArgumentCoder<WebCore::Cursor> {
365     static void encode(Encoder&, const WebCore::Cursor&);
366     static bool decode(Decoder&, WebCore::Cursor&);
367 };
368
369 template<> struct ArgumentCoder<WebCore::ResourceRequest> {
370     static void encode(Encoder&, const WebCore::ResourceRequest&);
371     static bool decode(Decoder&, WebCore::ResourceRequest&);
372     static void encodePlatformData(Encoder&, const WebCore::ResourceRequest&);
373     static bool decodePlatformData(Decoder&, WebCore::ResourceRequest&);
374 };
375
376 template<> struct ArgumentCoder<WebCore::ResourceError> {
377     static void encode(Encoder&, const WebCore::ResourceError&);
378     static bool decode(Decoder&, WebCore::ResourceError&);
379     static void encodePlatformData(Encoder&, const WebCore::ResourceError&);
380     static bool decodePlatformData(Decoder&, WebCore::ResourceError&);
381 };
382
383 template<> struct ArgumentCoder<WebCore::WindowFeatures> {
384     static void encode(Encoder&, const WebCore::WindowFeatures&);
385     static bool decode(Decoder&, WebCore::WindowFeatures&);
386 };
387
388 template<> struct ArgumentCoder<WebCore::Color> {
389     static void encode(Encoder&, const WebCore::Color&);
390     static bool decode(Decoder&, WebCore::Color&);
391 };
392
393 #if ENABLE(DRAG_SUPPORT)
394 template<> struct ArgumentCoder<WebCore::DragData> {
395     static void encode(Encoder&, const WebCore::DragData&);
396     static bool decode(Decoder&, WebCore::DragData&);
397 };
398 #endif
399
400 #if PLATFORM(COCOA)
401 template<> struct ArgumentCoder<WebCore::MachSendRight> {
402     static void encode(Encoder&, const WebCore::MachSendRight&);
403     static void encode(Encoder&, WebCore::MachSendRight&&);
404     static bool decode(Decoder&, WebCore::MachSendRight&);
405 };
406
407 template<> struct ArgumentCoder<WebCore::KeypressCommand> {
408     static void encode(Encoder&, const WebCore::KeypressCommand&);
409     static bool decode(Decoder&, WebCore::KeypressCommand&);
410 };
411 #endif
412
413 #if PLATFORM(IOS)
414 template<> struct ArgumentCoder<WebCore::SelectionRect> {
415     static void encode(Encoder&, const WebCore::SelectionRect&);
416     static bool decode(Decoder&, WebCore::SelectionRect&);
417 };
418
419 template<> struct ArgumentCoder<WebCore::Highlight> {
420     static void encode(Encoder&, const WebCore::Highlight&);
421     static bool decode(Decoder&, WebCore::Highlight&);
422 };
423
424 template<> struct ArgumentCoder<WebCore::PasteboardWebContent> {
425     static void encode(Encoder&, const WebCore::PasteboardWebContent&);
426     static bool decode(Decoder&, WebCore::PasteboardWebContent&);
427 };
428
429 template<> struct ArgumentCoder<WebCore::PasteboardURL> {
430     static void encode(Encoder&, const WebCore::PasteboardURL&);
431     static bool decode(Decoder&, WebCore::PasteboardURL&);
432 };
433
434 template<> struct ArgumentCoder<WebCore::PasteboardImage> {
435     static void encode(Encoder&, const WebCore::PasteboardImage&);
436     static bool decode(Decoder&, WebCore::PasteboardImage&);
437 };
438 #endif
439
440 #if USE(SOUP)
441 template<> struct ArgumentCoder<WebCore::SoupNetworkProxySettings> {
442     static void encode(Encoder&, const WebCore::SoupNetworkProxySettings&);
443     static bool decode(Decoder&, WebCore::SoupNetworkProxySettings&);
444 };
445 #endif
446
447 #if PLATFORM(WPE)
448 template<> struct ArgumentCoder<WebCore::PasteboardWebContent> {
449     static void encode(Encoder&, const WebCore::PasteboardWebContent&);
450     static bool decode(Decoder&, WebCore::PasteboardWebContent&);
451 };
452 #endif
453
454 template<> struct ArgumentCoder<WebCore::CompositionUnderline> {
455     static void encode(Encoder&, const WebCore::CompositionUnderline&);
456     static bool decode(Decoder&, WebCore::CompositionUnderline&);
457 };
458
459 template<> struct ArgumentCoder<WebCore::DatabaseDetails> {
460     static void encode(Encoder&, const WebCore::DatabaseDetails&);
461     static bool decode(Decoder&, WebCore::DatabaseDetails&);
462 };
463
464 template<> struct ArgumentCoder<WebCore::DictationAlternative> {
465     static void encode(Encoder&, const WebCore::DictationAlternative&);
466     static bool decode(Decoder&, WebCore::DictationAlternative&);
467 };
468
469 template<> struct ArgumentCoder<WebCore::FileChooserSettings> {
470     static void encode(Encoder&, const WebCore::FileChooserSettings&);
471     static bool decode(Decoder&, WebCore::FileChooserSettings&);
472 };
473
474 template<> struct ArgumentCoder<WebCore::GrammarDetail> {
475     static void encode(Encoder&, const WebCore::GrammarDetail&);
476     static bool decode(Decoder&, WebCore::GrammarDetail&);
477 };
478
479 template<> struct ArgumentCoder<WebCore::TextCheckingRequestData> {
480     static void encode(Encoder&, const WebCore::TextCheckingRequestData&);
481     static bool decode(Decoder&, WebCore::TextCheckingRequestData&);
482 };
483
484 template<> struct ArgumentCoder<WebCore::TextCheckingResult> {
485     static void encode(Encoder&, const WebCore::TextCheckingResult&);
486     static bool decode(Decoder&, WebCore::TextCheckingResult&);
487 };
488     
489 template<> struct ArgumentCoder<WebCore::URL> {
490     static void encode(Encoder&, const WebCore::URL&);
491     static bool decode(Decoder&, WebCore::URL&);
492 };
493
494 template<> struct ArgumentCoder<WebCore::UserStyleSheet> {
495     static void encode(Encoder&, const WebCore::UserStyleSheet&);
496     static bool decode(Decoder&, WebCore::UserStyleSheet&);
497 };
498
499 template<> struct ArgumentCoder<WebCore::ScrollableAreaParameters> {
500     static void encode(Encoder&, const WebCore::ScrollableAreaParameters&);
501     static bool decode(Decoder&, WebCore::ScrollableAreaParameters&);
502 };
503
504 template<> struct ArgumentCoder<WebCore::FixedPositionViewportConstraints> {
505     static void encode(Encoder&, const WebCore::FixedPositionViewportConstraints&);
506     static bool decode(Decoder&, WebCore::FixedPositionViewportConstraints&);
507 };
508
509 template<> struct ArgumentCoder<WebCore::StickyPositionViewportConstraints> {
510     static void encode(Encoder&, const WebCore::StickyPositionViewportConstraints&);
511     static bool decode(Decoder&, WebCore::StickyPositionViewportConstraints&);
512 };
513
514 #if !USE(COORDINATED_GRAPHICS)
515 template<> struct ArgumentCoder<WebCore::FilterOperations> {
516     static void encode(Encoder&, const WebCore::FilterOperations&);
517     static bool decode(Decoder&, WebCore::FilterOperations&);
518 };
519     
520 template<> struct ArgumentCoder<WebCore::FilterOperation> {
521     static void encode(Encoder&, const WebCore::FilterOperation&);
522 };
523 bool decodeFilterOperation(Decoder&, RefPtr<WebCore::FilterOperation>&);
524 #endif
525
526 template<> struct ArgumentCoder<WebCore::BlobPart> {
527     static void encode(Encoder&, const WebCore::BlobPart&);
528     static bool decode(Decoder&, WebCore::BlobPart&);
529 };
530
531 #if ENABLE(CONTENT_FILTERING)
532 template<> struct ArgumentCoder<WebCore::ContentFilterUnblockHandler> {
533     static void encode(Encoder&, const WebCore::ContentFilterUnblockHandler&);
534     static bool decode(Decoder&, WebCore::ContentFilterUnblockHandler&);
535 };
536 #endif
537
538 #if ENABLE(MEDIA_SESSION)
539 template<> struct ArgumentCoder<WebCore::MediaSessionMetadata> {
540     static void encode(Encoder&, const WebCore::MediaSessionMetadata&);
541     static bool decode(Decoder&, WebCore::MediaSessionMetadata&);
542 };
543 #endif
544
545 template<> struct ArgumentCoder<WebCore::TextIndicatorData> {
546     static void encode(Encoder&, const WebCore::TextIndicatorData&);
547     static bool decode(Decoder&, WebCore::TextIndicatorData&);
548 };
549
550 template<> struct ArgumentCoder<WebCore::DictionaryPopupInfo> {
551     static void encode(Encoder&, const WebCore::DictionaryPopupInfo&);
552     static bool decode(Decoder&, WebCore::DictionaryPopupInfo&);
553 };
554
555 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
556 template<> struct ArgumentCoder<WebCore::MediaPlaybackTargetContext> {
557     static void encode(Encoder&, const WebCore::MediaPlaybackTargetContext&);
558     static bool decode(Decoder&, WebCore::MediaPlaybackTargetContext&);
559     static void encodePlatformData(Encoder&, const WebCore::MediaPlaybackTargetContext&);
560     static bool decodePlatformData(Decoder&, WebCore::MediaPlaybackTargetContext&);
561 };
562 #endif
563
564 template<> struct ArgumentCoder<WebCore::RecentSearch> {
565     static void encode(Encoder&, const WebCore::RecentSearch&);
566     static bool decode(Decoder&, WebCore::RecentSearch&);
567 };
568
569 template<> struct ArgumentCoder<WebCore::ExceptionDetails> {
570     static void encode(Encoder&, const WebCore::ExceptionDetails&);
571     static bool decode(Decoder&, WebCore::ExceptionDetails&);
572 };
573
574 template<> struct ArgumentCoder<WebCore::ResourceLoadStatistics> {
575     static void encode(Encoder&, const WebCore::ResourceLoadStatistics&);
576     static bool decode(Decoder&, WebCore::ResourceLoadStatistics&);
577 };
578
579 #if ENABLE(APPLE_PAY)
580
581 template<> struct ArgumentCoder<WebCore::Payment> {
582     static void encode(Encoder&, const WebCore::Payment&);
583     static bool decode(Decoder&, WebCore::Payment&);
584 };
585
586 template<> struct ArgumentCoder<WebCore::PaymentAuthorizationResult> {
587     static void encode(Encoder&, const WebCore::PaymentAuthorizationResult&);
588     static bool decode(Decoder&, WebCore::PaymentAuthorizationResult&);
589 };
590
591 template<> struct ArgumentCoder<WebCore::PaymentContact> {
592     static void encode(Encoder&, const WebCore::PaymentContact&);
593     static bool decode(Decoder&, WebCore::PaymentContact&);
594 };
595
596 template<> struct ArgumentCoder<WebCore::PaymentError> {
597     static void encode(Encoder&, const WebCore::PaymentError&);
598     static bool decode(Decoder&, WebCore::PaymentError&);
599 };
600
601 template<> struct ArgumentCoder<WebCore::PaymentMerchantSession> {
602     static void encode(Encoder&, const WebCore::PaymentMerchantSession&);
603     static bool decode(Decoder&, WebCore::PaymentMerchantSession&);
604 };
605
606 template<> struct ArgumentCoder<WebCore::PaymentMethod> {
607     static void encode(Encoder&, const WebCore::PaymentMethod&);
608     static bool decode(Decoder&, WebCore::PaymentMethod&);
609 };
610
611 template<> struct ArgumentCoder<WebCore::PaymentMethodUpdate> {
612     static void encode(Encoder&, const WebCore::PaymentMethodUpdate&);
613     static bool decode(Decoder&, WebCore::PaymentMethodUpdate&);
614 };
615
616 template<> struct ArgumentCoder<WebCore::ApplePaySessionPaymentRequest> {
617     static void encode(Encoder&, const WebCore::ApplePaySessionPaymentRequest&);
618     static bool decode(Decoder&, WebCore::ApplePaySessionPaymentRequest&);
619 };
620
621 template<> struct ArgumentCoder<WebCore::ApplePaySessionPaymentRequest::ContactFields> {
622     static void encode(Encoder&, const WebCore::ApplePaySessionPaymentRequest::ContactFields&);
623     static bool decode(Decoder&, WebCore::ApplePaySessionPaymentRequest::ContactFields&);
624 };
625
626 template<> struct ArgumentCoder<WebCore::ApplePaySessionPaymentRequest::LineItem> {
627     static void encode(Encoder&, const WebCore::ApplePaySessionPaymentRequest::LineItem&);
628     static bool decode(Decoder&, WebCore::ApplePaySessionPaymentRequest::LineItem&);
629 };
630
631 template<> struct ArgumentCoder<WebCore::ApplePaySessionPaymentRequest::MerchantCapabilities> {
632     static void encode(Encoder&, const WebCore::ApplePaySessionPaymentRequest::MerchantCapabilities&);
633     static bool decode(Decoder&, WebCore::ApplePaySessionPaymentRequest::MerchantCapabilities&);
634 };
635
636 template<> struct ArgumentCoder<WebCore::ApplePaySessionPaymentRequest::ShippingMethod> {
637     static void encode(Encoder&, const WebCore::ApplePaySessionPaymentRequest::ShippingMethod&);
638     static bool decode(Decoder&, WebCore::ApplePaySessionPaymentRequest::ShippingMethod&);
639 };
640
641 template<> struct ArgumentCoder<WebCore::ApplePaySessionPaymentRequest::TotalAndLineItems> {
642     static void encode(Encoder&, const WebCore::ApplePaySessionPaymentRequest::TotalAndLineItems&);
643     static bool decode(Decoder&, WebCore::ApplePaySessionPaymentRequest::TotalAndLineItems&);
644 };
645
646 template<> struct ArgumentCoder<WebCore::ShippingContactUpdate> {
647     static void encode(Encoder&, const WebCore::ShippingContactUpdate&);
648     static bool decode(Decoder&, WebCore::ShippingContactUpdate&);
649 };
650
651 template<> struct ArgumentCoder<WebCore::ShippingMethodUpdate> {
652     static void encode(Encoder&, const WebCore::ShippingMethodUpdate&);
653     static bool decode(Decoder&, WebCore::ShippingMethodUpdate&);
654 };
655
656 #endif
657
658 #if ENABLE(MEDIA_STREAM)
659 template<> struct ArgumentCoder<WebCore::MediaConstraints> {
660     static void encode(Encoder&, const WebCore::MediaConstraints&);
661     static bool decode(Decoder&, WebCore::MediaConstraints&);
662 };
663
664 template<> struct ArgumentCoder<WebCore::CaptureDevice> {
665     static void encode(Encoder&, const WebCore::CaptureDevice&);
666     static bool decode(Decoder&, WebCore::CaptureDevice&);
667 };
668 #endif
669
670 #if ENABLE(INDEXED_DATABASE)
671
672 template<> struct ArgumentCoder<WebCore::IDBKeyPath> {
673     static void encode(Encoder&, const WebCore::IDBKeyPath&);
674     static bool decode(Decoder&, WebCore::IDBKeyPath&);
675 };
676
677 #endif
678
679 #if ENABLE(CSS_SCROLL_SNAP)
680
681 template<> struct ArgumentCoder<WebCore::ScrollOffsetRange<float>> {
682     static void encode(Encoder&, const WebCore::ScrollOffsetRange<float>&);
683     static bool decode(Decoder&, WebCore::ScrollOffsetRange<float>&);
684 };
685
686 #endif
687
688 template<> struct ArgumentCoder<WebCore::MediaSelectionOption> {
689     static void encode(Encoder&, const WebCore::MediaSelectionOption&);
690     static bool decode(Decoder&, WebCore::MediaSelectionOption&);
691 };
692
693 } // namespace IPC
694
695 namespace WTF {
696
697 template<> struct EnumTraits<WebCore::ColorSpace> {
698     using values = EnumValues<
699     WebCore::ColorSpace,
700     WebCore::ColorSpace::ColorSpaceDeviceRGB,
701     WebCore::ColorSpace::ColorSpaceSRGB,
702     WebCore::ColorSpace::ColorSpaceLinearRGB,
703     WebCore::ColorSpace::ColorSpaceDisplayP3
704     >;
705 };
706
707 template<> struct EnumTraits<WebCore::HasInsecureContent> {
708     using values = EnumValues<
709         WebCore::HasInsecureContent,
710         WebCore::HasInsecureContent::No,
711         WebCore::HasInsecureContent::Yes
712     >;
713 };
714
715 template<> struct EnumTraits<WebCore::AutoplayEvent> {
716     using values = EnumValues<
717         WebCore::AutoplayEvent,
718         WebCore::AutoplayEvent::DidPreventMediaFromPlaying,
719         WebCore::AutoplayEvent::DidPlayMediaPreventedFromPlaying,
720         WebCore::AutoplayEvent::DidAutoplayMediaPastThresholdWithoutUserInterference,
721         WebCore::AutoplayEvent::UserDidInterfereWithPlayback
722     >;
723 };
724
725 template<> struct EnumTraits<WebCore::ShouldSample> {
726     using values = EnumValues<
727         WebCore::ShouldSample,
728         WebCore::ShouldSample::No,
729         WebCore::ShouldSample::Yes
730     >;
731 };
732
733 template<> struct EnumTraits<WebCore::NetworkLoadPriority> {
734     using values = EnumValues<
735         WebCore::NetworkLoadPriority,
736         WebCore::NetworkLoadPriority::Low,
737         WebCore::NetworkLoadPriority::Medium,
738         WebCore::NetworkLoadPriority::High
739     >;
740 };
741
742 template<> struct EnumTraits<WebCore::NotificationDirection> {
743     using values = EnumValues<
744         WebCore::NotificationDirection,
745         WebCore::NotificationDirection::Auto,
746         WebCore::NotificationDirection::Ltr,
747         WebCore::NotificationDirection::Rtl
748     >;
749 };
750
751 #if ENABLE(INDEXED_DATABASE)
752 template<> struct EnumTraits<WebCore::IndexedDB::GetAllType> {
753     using values = EnumValues<
754         WebCore::IndexedDB::GetAllType,
755         WebCore::IndexedDB::GetAllType::Keys,
756         WebCore::IndexedDB::GetAllType::Values
757     >;
758 };
759 #endif
760
761 #if ENABLE(MEDIA_STREAM)
762 template<> struct EnumTraits<WebCore::CaptureDevice::DeviceType> {
763     using values = EnumValues<
764         WebCore::CaptureDevice::DeviceType,
765         WebCore::CaptureDevice::DeviceType::Unknown,
766         WebCore::CaptureDevice::DeviceType::Audio,
767         WebCore::CaptureDevice::DeviceType::Video
768     >;
769 };
770 template<> struct EnumTraits<WebCore::RealtimeMediaSource::Type> {
771     using values = EnumValues<
772         WebCore::RealtimeMediaSource::Type,
773         WebCore::RealtimeMediaSource::Type::None,
774         WebCore::RealtimeMediaSource::Type::Audio,
775         WebCore::RealtimeMediaSource::Type::Video
776     >;
777 };
778 #endif
779
780 template<> struct EnumTraits<WebCore::MediaSelectionOption::Type> {
781     using values = EnumValues<
782         WebCore::MediaSelectionOption::Type,
783         WebCore::MediaSelectionOption::Type::Regular,
784         WebCore::MediaSelectionOption::Type::LegibleOff,
785         WebCore::MediaSelectionOption::Type::LegibleAuto
786     >;
787 };
788
789 } // namespace WTF