1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
5  * You can obtain one at http://mozilla.org/MPL/2.0/. */
6 
7 #ifndef mozilla_ipc_nsIIPCSerializableInputStream_h
8 #define mozilla_ipc_nsIIPCSerializableInputStream_h
9 
10 #include "mozilla/Attributes.h"
11 #include "mozilla/Maybe.h"
12 #include "nsISupports.h"
13 #include "nsTArrayForwardDeclare.h"
14 
15 namespace mozilla {
16 namespace ipc {
17 
18 class FileDescriptor;
19 class InputStreamParams;
20 class ChildToParentStreamActorManager;
21 class ParentToChildStreamActorManager;
22 
23 }  // namespace ipc
24 
25 }  // namespace mozilla
26 
27 #define NS_IIPCSERIALIZABLEINPUTSTREAM_IID           \
28   {                                                  \
29     0xb0211b14, 0xea6d, 0x40d4, {                    \
30       0x87, 0xb5, 0x7b, 0xe3, 0xdf, 0xac, 0x09, 0xd1 \
31     }                                                \
32   }
33 
34 class NS_NO_VTABLE nsIIPCSerializableInputStream : public nsISupports {
35  public:
36   typedef nsTArray<mozilla::ipc::FileDescriptor> FileDescriptorArray;
37 
38   NS_DECLARE_STATIC_IID_ACCESSOR(NS_IIPCSERIALIZABLEINPUTSTREAM_IID)
39 
40   virtual void Serialize(
41       mozilla::ipc::InputStreamParams& aParams,
42       FileDescriptorArray& aFileDescriptors, bool aDelayedStart,
43       uint32_t aMaxSize, uint32_t* aSizeUsed,
44       mozilla::ipc::ParentToChildStreamActorManager* aManager) = 0;
45 
46   virtual void Serialize(
47       mozilla::ipc::InputStreamParams& aParams,
48       FileDescriptorArray& aFileDescriptors, bool aDelayedStart,
49       uint32_t aMaxSize, uint32_t* aSizeUsed,
50       mozilla::ipc::ChildToParentStreamActorManager* aManager) = 0;
51 
52   virtual bool Deserialize(const mozilla::ipc::InputStreamParams& aParams,
53                            const FileDescriptorArray& aFileDescriptors) = 0;
54 };
55 
56 NS_DEFINE_STATIC_IID_ACCESSOR(nsIIPCSerializableInputStream,
57                               NS_IIPCSERIALIZABLEINPUTSTREAM_IID)
58 
59 #define NS_DECL_NSIIPCSERIALIZABLEINPUTSTREAM                                 \
60   virtual void Serialize(                                                     \
61       mozilla::ipc::InputStreamParams&, FileDescriptorArray&, bool, uint32_t, \
62       uint32_t*, mozilla::ipc::ParentToChildStreamActorManager*) override;    \
63                                                                               \
64   virtual void Serialize(                                                     \
65       mozilla::ipc::InputStreamParams&, FileDescriptorArray&, bool, uint32_t, \
66       uint32_t*, mozilla::ipc::ChildToParentStreamActorManager*) override;    \
67                                                                               \
68   virtual bool Deserialize(const mozilla::ipc::InputStreamParams&,            \
69                            const FileDescriptorArray&) override;
70 
71 #define NS_FORWARD_NSIIPCSERIALIZABLEINPUTSTREAM(_to)                      \
72   virtual void Serialize(                                                  \
73       mozilla::ipc::InputStreamParams& aParams,                            \
74       FileDescriptorArray& aFileDescriptors, bool aDelayedStart,           \
75       uint32_t aMaxSize, uint32_t* aSizeUsed,                              \
76       mozilla::ipc::ParentToChildStreamActorManager* aManager) override {  \
77     _to Serialize(aParams, aFileDescriptors, aDelayedStart, aMaxSize,      \
78                   aSizeUsed, aManager);                                    \
79   }                                                                        \
80                                                                            \
81   virtual void Serialize(                                                  \
82       mozilla::ipc::InputStreamParams& aParams,                            \
83       FileDescriptorArray& aFileDescriptors, bool aDelayedStart,           \
84       uint32_t aMaxSize, uint32_t* aSizeUsed,                              \
85       mozilla::ipc::ChildToParentStreamActorManager* aManager) override {  \
86     _to Serialize(aParams, aFileDescriptors, aDelayedStart, aMaxSize,      \
87                   aSizeUsed, aManager);                                    \
88   }                                                                        \
89                                                                            \
90   virtual bool Deserialize(const mozilla::ipc::InputStreamParams& aParams, \
91                            const FileDescriptorArray& aFileDescriptors)    \
92       override {                                                           \
93     return _to Deserialize(aParams, aFileDescriptors);                     \
94   }
95 
96 #define NS_FORWARD_SAFE_NSIIPCSERIALIZABLEINPUTSTREAM(_to)                 \
97   virtual void Serialize(                                                  \
98       mozilla::ipc::InputStreamParams& aParams,                            \
99       FileDescriptorArray& aFileDescriptors, bool aDelayedStart,           \
100       uint32_t aMaxSize, uint32_t* aSizeUsed,                              \
101       mozilla::ipc::ParentToChildStreamActorManager* aManager) override {  \
102     if (_to) {                                                             \
103       _to->Serialize(aParams, aFileDescriptors, aDelayedStart, aMaxSize,   \
104                      aSizeUsed, aManager);                                 \
105     }                                                                      \
106   }                                                                        \
107                                                                            \
108   virtual void Serialize(                                                  \
109       mozilla::ipc::InputStreamParams& aParams,                            \
110       FileDescriptorArray& aFileDescriptors, bool aDelayedStart,           \
111       uint32_t aMaxSize, uint32_t* aSizeUsed,                              \
112       mozilla::ipc::ChildToParentStreamActorManager* aManager) override {  \
113     if (_to) {                                                             \
114       _to->Serialize(aParams, aFileDescriptors, aDelayedStart, aMaxSize,   \
115                      aSizeUsed, aManager);                                 \
116     }                                                                      \
117   }                                                                        \
118                                                                            \
119   virtual bool Deserialize(const mozilla::ipc::InputStreamParams& aParams, \
120                            const FileDescriptorArray& aFileDescriptors)    \
121       override {                                                           \
122     return _to ? _to->Deserialize(aParams, aFileDescriptors) : false;      \
123   }
124 
125 #endif  // mozilla_ipc_nsIIPCSerializableInputStream_h
126