/* -*- 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; using struct mozilla::void_t from "ipc/IPCMessageUtils.h"; using struct mozilla::SerializedStructuredCloneBuffer from "ipc/IPCMessageUtils.h"; using struct nsID from "nsID.h"; namespace mozilla { namespace dom { union OptionalID { nsID; void_t; }; struct ClonedMessageData { SerializedStructuredCloneBuffer data; PBlob[] blobs; }; union BlobData { // For remote blobs. nsID; // For memory-backed blobs. uint8_t[]; // For file snapshots, this is an nsIInputStream. intptr_t; // 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; uint64_t length; uint64_t modDate; // 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::FileImpl. It // carries a reference. intptr_t addRefedFileImpl; }; 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; }; } // namespace dom } // namespace mozilla