From 545db4aaa0ae26ea80fd3ca99ffc9d60d3f4ca57 Mon Sep 17 00:00:00 2001 From: Mike Conley Date: Fri, 3 Jun 2022 15:17:33 +0000 Subject: [PATCH] Bug 1354248 - Part 3: Supply LoadInfoArgs through the RemoteStreamGetter mechanism. r=necko-reviewers,kershaw The LoadArgs are wrapped in a Maybe, since that seems to be what the conversion utilities (LoadInfoToLoadInfoArgs and LoadInfoArgsToLoadInfo) seem to expect. It's really up to the users of RemoteStreamGetter to determine whether or not they're willing to accept requests without LoadArgs. Differential Revision: https://phabricator.services.mozilla.com/D147334 --- netwerk/ipc/NeckoParent.cpp | 3 ++- netwerk/ipc/NeckoParent.h | 3 ++- netwerk/ipc/PNecko.ipdl | 2 +- netwerk/protocol/res/RemoteStreamGetter.cpp | 18 ++++++++++++------ netwerk/protocol/res/RemoteStreamGetter.h | 2 +- 5 files changed, 18 insertions(+), 10 deletions(-) diff --git a/netwerk/ipc/NeckoParent.cpp b/netwerk/ipc/NeckoParent.cpp index a61f0e222915..efaa39fcf404 100644 --- a/netwerk/ipc/NeckoParent.cpp +++ b/netwerk/ipc/NeckoParent.cpp @@ -830,7 +830,8 @@ mozilla::ipc::IPCResult NeckoParent::RecvEnsureHSTSData( } mozilla::ipc::IPCResult NeckoParent::RecvGetPageThumbStream( - nsIURI* aURI, GetPageThumbStreamResolver&& aResolver) { + nsIURI* aURI, const Maybe& aLoadInfoArgs, + GetPageThumbStreamResolver&& aResolver) { // Only the privileged about content process is allowed to access // things over the moz-page-thumb protocol. Any other content process // that tries to send this should have been blocked via the diff --git a/netwerk/ipc/NeckoParent.h b/netwerk/ipc/NeckoParent.h index 25cde2ff5e33..858709f1b02a 100644 --- a/netwerk/ipc/NeckoParent.h +++ b/netwerk/ipc/NeckoParent.h @@ -193,7 +193,8 @@ class NeckoParent : public PNeckoParent { /* Page thumbnails remote resource loading */ mozilla::ipc::IPCResult RecvGetPageThumbStream( - nsIURI* aURI, GetPageThumbStreamResolver&& aResolve); + nsIURI* aURI, const Maybe& aLoadInfoArgs, + GetPageThumbStreamResolver&& aResolve); PClassifierDummyChannelParent* AllocPClassifierDummyChannelParent( nsIURI* aURI, nsIURI* aTopWindowURI, const nsresult& aTopWindowURIResult, diff --git a/netwerk/ipc/PNecko.ipdl b/netwerk/ipc/PNecko.ipdl index a2305baeefc2..1b50158022ea 100644 --- a/netwerk/ipc/PNecko.ipdl +++ b/netwerk/ipc/PNecko.ipdl @@ -149,7 +149,7 @@ parent: /** * Page thumbnails remote resource loading */ - async GetPageThumbStream(nsIURI uri) returns (RemoteStreamInfo? info); + async GetPageThumbStream(nsIURI uri, LoadInfoArgs? loadInfo) returns (RemoteStreamInfo? info); child: /* Predictor Methods */ diff --git a/netwerk/protocol/res/RemoteStreamGetter.cpp b/netwerk/protocol/res/RemoteStreamGetter.cpp index 6977ec2636df..fb4d3987b743 100644 --- a/netwerk/protocol/res/RemoteStreamGetter.cpp +++ b/netwerk/protocol/res/RemoteStreamGetter.cpp @@ -36,13 +36,19 @@ RequestOrReason RemoteStreamGetter::GetAsync(nsIStreamListener* aListener, nsCOMPtr cancelableRequest(this); RefPtr self = this; + Maybe loadInfoArgs; + nsresult rv = ipc::LoadInfoToLoadInfoArgs(mLoadInfo, &loadInfoArgs); + if (NS_FAILED(rv)) { + return Err(rv); + } - (gNeckoChild->*aMethod)(mURI)->Then( - GetMainThreadSerialEventTarget(), __func__, - [self](const Maybe& info) { self->OnStream(info); }, - [self](const mozilla::ipc::ResponseRejectReason) { - self->OnStream(Nothing()); - }); + (gNeckoChild->*aMethod)(mURI, loadInfoArgs) + ->Then( + GetMainThreadSerialEventTarget(), __func__, + [self](const Maybe& info) { self->OnStream(info); }, + [self](const mozilla::ipc::ResponseRejectReason) { + self->OnStream(Nothing()); + }); return RequestOrCancelable(WrapNotNull(cancelableRequest)); } diff --git a/netwerk/protocol/res/RemoteStreamGetter.h b/netwerk/protocol/res/RemoteStreamGetter.h index 576e6468656b..5a4dae43a4d2 100644 --- a/netwerk/protocol/res/RemoteStreamGetter.h +++ b/netwerk/protocol/res/RemoteStreamGetter.h @@ -26,7 +26,7 @@ using RemoteStreamPromise = mozilla::MozPromise; using Method = RefPtr< MozPromise, ipc::ResponseRejectReason, true>> ( - PNeckoChild::*)(nsIURI*); + PNeckoChild::*)(nsIURI*, const Maybe&); /** * Helper class used with SimpleChannel to asynchronously obtain an input