/src/mozilla-central/ipc/glue/nsIIPCSerializableInputStream.h
Line | Count | Source (jump to first uncovered line) |
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 | | |
21 | | } // namespace ipc |
22 | | } // namespace mozilla |
23 | | |
24 | | #define NS_IIPCSERIALIZABLEINPUTSTREAM_IID \ |
25 | | {0xb0211b14, 0xea6d, 0x40d4, {0x87, 0xb5, 0x7b, 0xe3, 0xdf, 0xac, 0x09, 0xd1}} |
26 | | |
27 | | class NS_NO_VTABLE nsIIPCSerializableInputStream : public nsISupports |
28 | | { |
29 | | public: |
30 | | typedef nsTArray<mozilla::ipc::FileDescriptor> |
31 | | FileDescriptorArray; |
32 | | |
33 | | NS_DECLARE_STATIC_IID_ACCESSOR(NS_IIPCSERIALIZABLEINPUTSTREAM_IID) |
34 | | |
35 | | virtual void |
36 | | Serialize(mozilla::ipc::InputStreamParams& aParams, |
37 | | FileDescriptorArray& aFileDescriptors) = 0; |
38 | | |
39 | | virtual bool |
40 | | Deserialize(const mozilla::ipc::InputStreamParams& aParams, |
41 | | const FileDescriptorArray& aFileDescriptors) = 0; |
42 | | |
43 | | // The number of bytes that are expected to be written when this |
44 | | // stream is serialized. A value of Some(N) indicates that N bytes |
45 | | // will be written to the IPC buffer, and will be used to decide |
46 | | // upon an optimal transmission mechanism. A value of Nothing |
47 | | // indicates that either serializing this stream will not require |
48 | | // serializing its contents (eg. a file-backed stream, or a stream |
49 | | // backed by an IPC actor), or the length of the stream's contents |
50 | | // cannot be determined. |
51 | | virtual mozilla::Maybe<uint64_t> |
52 | | ExpectedSerializedLength() = 0; |
53 | | }; |
54 | | |
55 | | NS_DEFINE_STATIC_IID_ACCESSOR(nsIIPCSerializableInputStream, |
56 | | NS_IIPCSERIALIZABLEINPUTSTREAM_IID) |
57 | | |
58 | | #define NS_DECL_NSIIPCSERIALIZABLEINPUTSTREAM \ |
59 | | virtual void \ |
60 | | Serialize(mozilla::ipc::InputStreamParams&, \ |
61 | | FileDescriptorArray&) override; \ |
62 | | \ |
63 | | virtual bool \ |
64 | | Deserialize(const mozilla::ipc::InputStreamParams&, \ |
65 | | const FileDescriptorArray&) override; \ |
66 | | \ |
67 | | virtual mozilla::Maybe<uint64_t> \ |
68 | | ExpectedSerializedLength() override; |
69 | | |
70 | | #define NS_FORWARD_NSIIPCSERIALIZABLEINPUTSTREAM(_to) \ |
71 | | virtual void \ |
72 | | Serialize(mozilla::ipc::InputStreamParams& aParams, \ |
73 | | FileDescriptorArray& aFileDescriptors) override \ |
74 | 0 | { \ |
75 | 0 | _to Serialize(aParams, aFileDescriptors); \ |
76 | 0 | } \ |
77 | | \ |
78 | | virtual bool \ |
79 | | Deserialize(const mozilla::ipc::InputStreamParams& aParams, \ |
80 | | const FileDescriptorArray& aFileDescriptors) override \ |
81 | 0 | { \ |
82 | 0 | return _to Deserialize(aParams, aFileDescriptors); \ |
83 | 0 | } \ |
84 | | \ |
85 | | virtual mozilla::Maybe<uint64_t> \ |
86 | | ExpectedSerializedLength() override \ |
87 | 0 | { \ |
88 | 0 | return _to ExpectedSerializedLength(); \ |
89 | 0 | } |
90 | | |
91 | | #define NS_FORWARD_SAFE_NSIIPCSERIALIZABLEINPUTSTREAM(_to) \ |
92 | | virtual void \ |
93 | | Serialize(mozilla::ipc::InputStreamParams& aParams, \ |
94 | | FileDescriptorArray& aFileDescriptors) override \ |
95 | | { \ |
96 | | if (_to) { \ |
97 | | _to->Serialize(aParams, aFileDescriptors); \ |
98 | | } \ |
99 | | } \ |
100 | | \ |
101 | | virtual bool \ |
102 | | Deserialize(const mozilla::ipc::InputStreamParams& aParams, \ |
103 | | const FileDescriptorArray& aFileDescriptors) override \ |
104 | | { \ |
105 | | return _to ? _to->Deserialize(aParams, aFileDescriptors) : false; \ |
106 | | } \ |
107 | | \ |
108 | | virtual mozilla::Maybe<uint64_t> \ |
109 | | ExpectedSerializedLength() override \ |
110 | | { \ |
111 | | return _to ? _to->ExpectedSerializedLength() : Nothing(); \ |
112 | | } |
113 | | |
114 | | #endif // mozilla_ipc_nsIIPCSerializableInputStream_h |