diff --git a/dom/ipc/DOMTypes.ipdlh b/dom/ipc/DOMTypes.ipdlh index 794056aef590..8a6bdf49b051 100644 --- a/dom/ipc/DOMTypes.ipdlh +++ b/dom/ipc/DOMTypes.ipdlh @@ -44,6 +44,116 @@ struct ClonedMessageData MessagePortIdentifier[] identfiers; }; +// I could remove this completely, but this will be gone in the following patch. +union BlobDataStream +{ + IPCStream; +}; + +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 +{ + // broken structure: 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