/* -*- 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 InputStreamParams; 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 ClonedMessageData { SerializedStructuredCloneBuffer data; PBlob[] blobs; }; struct NormalBlobConstructorParams { nsString contentType; uint64_t length; }; struct FileBlobConstructorParams { nsString name; nsString contentType; uint64_t length; uint64_t modDate; }; struct SlicedBlobConstructorParams { PBlob source; // Must be void_t for parent -> child and nsID for child -> parent. OptionalID optionalID; uint64_t begin; uint64_t end; nsString contentType; }; struct MysteryBlobConstructorParams { // Nothing is known about this type of blob. }; struct KnownBlobConstructorParams { nsID id; }; union AnyBlobConstructorParams { NormalBlobConstructorParams; FileBlobConstructorParams; SlicedBlobConstructorParams; MysteryBlobConstructorParams; KnownBlobConstructorParams; }; struct ChildBlobConstructorParams { nsID id; // May never be KnownBlobConstructorParams. AnyBlobConstructorParams blobParams; }; struct ParentBlobConstructorParams { // May not be MysteryBlobConstructorParams. AnyBlobConstructorParams blobParams; // This must be of type void_t for: // - SlicedBlobConstructorParams // - KnownBlobConstructorParams // This must be of type InputStreamParams for: // - NormalBlobConstructorParams // - FileBlobConstructorParams OptionalInputStreamParams optionalInputStreamParams; }; union BlobConstructorParams { ChildBlobConstructorParams; ParentBlobConstructorParams; }; } // namespace dom } // namespace mozilla