Bug 1263991 part 4: Support response body. r=bkelly

This commit is contained in:
Jonas Sicking 2016-06-07 02:46:03 -07:00
parent 64a8f66145
commit 4ab94e9f20
5 changed files with 60 additions and 4 deletions

View File

@ -52,6 +52,8 @@ struct IPCInternalResponse
HeadersGuardEnum headersGuard;
IPCChannelInfo channelInfo;
OptionalPrincipalInfo principalInfo;
OptionalIPCStream body;
int64_t bodySize;
};

View File

@ -10,9 +10,9 @@
#include "mozilla/dom/InternalHeaders.h"
#include "mozilla/dom/cache/CacheTypes.h"
#include "mozilla/ipc/PBackgroundSharedTypes.h"
#include "mozilla/ipc/IPCStreamUtils.h"
#include "nsIURI.h"
#include "nsStreamUtils.h"
#include "mozilla/dom/FetchTypes.h"
namespace mozilla {
namespace dom {
@ -50,6 +50,9 @@ InternalResponse::FromIPC(const IPCInternalResponse& aIPCResponse)
response->SetPrincipalInfo(Move(info));
}
nsCOMPtr<nsIInputStream> stream = DeserializeIPCStream(aIPCResponse.body());
response->SetBody(stream, aIPCResponse.bodySize());
switch (aIPCResponse.type())
{
case ResponseType::Basic:
@ -78,8 +81,32 @@ InternalResponse::~InternalResponse()
{
}
template void
InternalResponse::ToIPC<PContentParent>
(IPCInternalResponse* aIPCResponse,
PContentParent* aManager,
UniquePtr<mozilla::ipc::AutoIPCStream>& aAutoStream);
template void
InternalResponse::ToIPC<PContentChild>
(IPCInternalResponse* aIPCResponse,
PContentChild* aManager,
UniquePtr<mozilla::ipc::AutoIPCStream>& aAutoStream);
template void
InternalResponse::ToIPC<mozilla::ipc::PBackgroundParent>
(IPCInternalResponse* aIPCResponse,
mozilla::ipc::PBackgroundParent* aManager,
UniquePtr<mozilla::ipc::AutoIPCStream>& aAutoStream);
template void
InternalResponse::ToIPC<mozilla::ipc::PBackgroundChild>
(IPCInternalResponse* aIPCResponse,
mozilla::ipc::PBackgroundChild* aManager,
UniquePtr<mozilla::ipc::AutoIPCStream>& aAutoStream);
template<typename M>
void
InternalResponse::ToIPC(IPCInternalResponse* aIPCResponse)
InternalResponse::ToIPC(IPCInternalResponse* aIPCResponse,
M* aManager,
UniquePtr<mozilla::ipc::AutoIPCStream>& aAutoStream)
{
MOZ_ASSERT(aIPCResponse);
MOZ_ASSERT(!mURLList.IsEmpty());
@ -96,6 +123,19 @@ InternalResponse::ToIPC(IPCInternalResponse* aIPCResponse)
} else {
aIPCResponse->principalInfo() = void_t();
}
nsCOMPtr<nsIInputStream> body;
int64_t bodySize;
GetUnfilteredBody(getter_AddRefs(body), &bodySize);
if (body) {
aAutoStream.reset(new mozilla::ipc::AutoIPCStream(aIPCResponse->body()));
aAutoStream->Serialize(body, aManager);
} else {
aIPCResponse->body() = void_t();
}
aIPCResponse->bodySize() = bodySize;
}
already_AddRefed<InternalResponse>

View File

@ -17,6 +17,7 @@
namespace mozilla {
namespace ipc {
class PrincipalInfo;
class AutoIPCStream;
} // namespace ipc
namespace dom {
@ -36,7 +37,11 @@ public:
static already_AddRefed<InternalResponse>
FromIPC(const IPCInternalResponse& aIPCResponse);
void ToIPC(IPCInternalResponse* aIPCResponse);
template<typename M>
void
ToIPC(IPCInternalResponse* aIPCResponse,
M* aManager,
UniquePtr<mozilla::ipc::AutoIPCStream>& aAutoStream);
already_AddRefed<InternalResponse> Clone();

View File

@ -12,6 +12,7 @@
#include "mozilla/dom/ContentChild.h"
#include "mozilla/dom/ContentParent.h"
#include "mozilla/dom/InternalResponse.h"
#include "mozilla/ipc/IPCStreamUtils.h"
#include "mozilla/ErrorResult.h"
#include "mozilla/Preferences.h"
#include "mozilla/unused.h"
@ -301,8 +302,12 @@ FlyWebPublishedServerChild::OnFetchResponse(InternalRequest* aRequest,
mPendingRequests.Remove(aRequest);
IPCInternalResponse ipcResp;
aResponse->ToIPC(&ipcResp);
UniquePtr<mozilla::ipc::AutoIPCStream> autoStream;
aResponse->ToIPC(&ipcResp, Manager(), autoStream);
Unused << SendFetchResponse(ipcResp, id);
if (autoStream) {
autoStream->TakeOptionalValue();
}
}
already_AddRefed<WebSocket>

View File

@ -5,7 +5,11 @@
* You can obtain one at http://mozilla.org/MPL/2.0/. */
include protocol PContent;
include protocol PSendStream;
include protocol PFileDescriptorSet;
include FetchTypes;
include ChannelInfo;
include PBackgroundSharedTypes;
namespace mozilla {
namespace dom {