mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 03:15:11 +00:00
Bug 1263991 part 4: Support response body. r=bkelly
This commit is contained in:
parent
64a8f66145
commit
4ab94e9f20
@ -52,6 +52,8 @@ struct IPCInternalResponse
|
||||
HeadersGuardEnum headersGuard;
|
||||
IPCChannelInfo channelInfo;
|
||||
OptionalPrincipalInfo principalInfo;
|
||||
OptionalIPCStream body;
|
||||
int64_t bodySize;
|
||||
};
|
||||
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user