summaryrefslogtreecommitdiffstats
path: root/dom/ipc/DOMTypes.ipdlh
diff options
context:
space:
mode:
Diffstat (limited to 'dom/ipc/DOMTypes.ipdlh')
-rw-r--r--dom/ipc/DOMTypes.ipdlh181
1 files changed, 181 insertions, 0 deletions
diff --git a/dom/ipc/DOMTypes.ipdlh b/dom/ipc/DOMTypes.ipdlh
new file mode 100644
index 000000000..e02760ada
--- /dev/null
+++ b/dom/ipc/DOMTypes.ipdlh
@@ -0,0 +1,181 @@
+/* -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 8 -*- */
+/* vim: set sw=4 ts=8 et tw=80 ft=cpp : */
+/* 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 PBlob;
+include protocol PSendStream;
+include IPCStream;
+include ProtocolTypes;
+
+using struct mozilla::void_t
+ from "ipc/IPCMessageUtils.h";
+
+using struct mozilla::SerializedStructuredCloneBuffer
+ from "ipc/IPCMessageUtils.h";
+
+namespace mozilla {
+namespace dom {
+
+union OptionalID
+{
+ nsID;
+ void_t;
+};
+
+struct MessagePortIdentifier
+{
+ nsID uuid;
+ nsID destinationUuid;
+ uint32_t sequenceId;
+ bool neutered;
+};
+
+struct ClonedMessageData
+{
+ SerializedStructuredCloneBuffer data;
+ PBlob[] blobs;
+ MessagePortIdentifier[] identfiers;
+};
+
+struct BlobDataStream
+{
+ IPCStream stream;
+ uint64_t length;
+};
+
+union BlobData
+{
+ // For remote blobs.
+ nsID;
+
+ // For memory-backed blobs.
+ BlobDataStream;
+
+ // For multiplex blobs.
+ BlobData[];
+};
+
+union OptionalBlobData
+{
+ BlobData;
+ void_t;
+};
+
+struct NormalBlobConstructorParams
+{
+ nsString contentType;
+ uint64_t length;
+
+ // This must be of type BlobData in a child->parent message, and will always
+ // be of type void_t in a parent->child message.
+ OptionalBlobData optionalBlobData;
+};
+
+struct FileBlobConstructorParams
+{
+ nsString name;
+ nsString contentType;
+ nsString path;
+ uint64_t length;
+ int64_t modDate;
+ bool isDirectory;
+
+ // This must be of type BlobData in a child->parent message, and will always
+ // be of type void_t in a parent->child message.
+ OptionalBlobData optionalBlobData;
+};
+
+struct SlicedBlobConstructorParams
+{
+ PBlob source;
+ nsID id;
+ uint64_t begin;
+ uint64_t end;
+ nsString contentType;
+};
+
+struct MysteryBlobConstructorParams
+{
+ // Nothing is known about this type of blob.
+};
+
+struct KnownBlobConstructorParams
+{
+ nsID id;
+};
+
+// This may only be used for same-process inter-thread communication!
+struct SameProcessBlobConstructorParams
+{
+ // This member should be reinterpret_cast'd to mozilla::dom::BlobImpl. It
+ // carries a reference.
+ intptr_t addRefedBlobImpl;
+};
+
+union AnyBlobConstructorParams
+{
+ // These types may be sent to/from parent and child.
+ NormalBlobConstructorParams;
+ FileBlobConstructorParams;
+ SameProcessBlobConstructorParams;
+
+ // This type may only be sent from parent to child.
+ MysteryBlobConstructorParams;
+
+ // These types may only be sent from child to parent.
+ SlicedBlobConstructorParams;
+ KnownBlobConstructorParams;
+};
+
+struct ChildBlobConstructorParams
+{
+ nsID id;
+
+ // May not be SlicedBlobConstructorParams or KnownBlobConstructorParams.
+ AnyBlobConstructorParams blobParams;
+};
+
+struct ParentBlobConstructorParams
+{
+ // May not be MysteryBlobConstructorParams.
+ AnyBlobConstructorParams blobParams;
+};
+
+union BlobConstructorParams
+{
+ ChildBlobConstructorParams;
+ ParentBlobConstructorParams;
+};
+
+union IPCDataTransferData
+{
+ nsString; // text
+ Shmem; // images using Shmem
+ PBlob; // files
+};
+
+struct IPCDataTransferImage
+{
+ uint32_t width;
+ uint32_t height;
+ uint32_t stride;
+ uint8_t format;
+};
+
+struct IPCDataTransferItem
+{
+ nsCString flavor;
+ // The image details are only used when transferring images.
+ IPCDataTransferImage imageDetails;
+ IPCDataTransferData data;
+};
+
+struct IPCDataTransfer
+{
+ IPCDataTransferItem[] items;
+};
+
+} // namespace dom
+} // namespace mozilla