forked from mirrors/gecko-dev
This is a complete rewrite of RemoteLazyInputStream to run off of its own toplevel protocol, rather than being managed by other protocols like PBackground or PContent. This should improve performance thanks to no longer needing to operate on a main or worker thread, and due to no longer needing the migration step for the stream actor. This also acts as a step towards no longer requiring a manager actor to serialize input streams, as the type is now actor-agnostic, and should support being sent over IPC between any pair of processes. Differential Revision: https://phabricator.services.mozilla.com/D141040
101 lines
1.9 KiB
Text
101 lines
1.9 KiB
Text
/* 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 ProtocolTypes;
|
|
|
|
using struct mozilla::void_t from "mozilla/ipc/IPCCore.h";
|
|
[RefCounted] using class DataPipeReceiver from "mozilla/ipc/DataPipe.h";
|
|
[RefCounted] using class mozilla::RemoteLazyInputStream from "mozilla/RemoteLazyInputStream.h";
|
|
|
|
namespace mozilla {
|
|
namespace ipc {
|
|
|
|
struct HeaderEntry
|
|
{
|
|
nsCString name;
|
|
nsCString value;
|
|
};
|
|
|
|
struct StringInputStreamParams
|
|
{
|
|
nsCString data;
|
|
};
|
|
|
|
struct FileInputStreamParams
|
|
{
|
|
FileDescriptor fileDescriptor;
|
|
int32_t behaviorFlags;
|
|
int32_t ioFlags;
|
|
};
|
|
|
|
struct MultiplexInputStreamParams
|
|
{
|
|
InputStreamParams[] streams;
|
|
uint32_t currentStream;
|
|
nsresult status;
|
|
bool startedReadingCurrent;
|
|
};
|
|
|
|
struct SlicedInputStreamParams
|
|
{
|
|
InputStreamParams stream;
|
|
uint64_t start;
|
|
uint64_t length;
|
|
uint64_t curPos;
|
|
bool closed;
|
|
};
|
|
|
|
struct RemoteLazyInputStreamParams
|
|
{
|
|
RemoteLazyInputStream stream;
|
|
};
|
|
|
|
struct DataPipeReceiverStreamParams
|
|
{
|
|
DataPipeReceiver pipe;
|
|
};
|
|
|
|
union InputStreamParams
|
|
{
|
|
StringInputStreamParams;
|
|
FileInputStreamParams;
|
|
BufferedInputStreamParams;
|
|
MIMEInputStreamParams;
|
|
MultiplexInputStreamParams;
|
|
SlicedInputStreamParams;
|
|
RemoteLazyInputStreamParams;
|
|
InputStreamLengthWrapperParams;
|
|
EncryptedFileInputStreamParams;
|
|
DataPipeReceiverStreamParams;
|
|
};
|
|
|
|
struct EncryptedFileInputStreamParams
|
|
{
|
|
FileInputStreamParams fileInputStreamParams;
|
|
uint8_t[] key;
|
|
uint32_t blockSize;
|
|
};
|
|
|
|
struct BufferedInputStreamParams
|
|
{
|
|
InputStreamParams? optionalStream;
|
|
uint32_t bufferSize;
|
|
};
|
|
|
|
struct MIMEInputStreamParams
|
|
{
|
|
InputStreamParams? optionalStream;
|
|
HeaderEntry[] headers;
|
|
bool startedReading;
|
|
};
|
|
|
|
struct InputStreamLengthWrapperParams
|
|
{
|
|
InputStreamParams stream;
|
|
int64_t length;
|
|
bool consumed;
|
|
};
|
|
|
|
} // namespace ipc
|
|
} // namespace mozilla
|