Bug 1510569 - Correctly reconstruct nsIRequest in tab parent r=Ehsan

When `TabParent::ReconstructWebProgressRequest` was introduced in
31b206e2046f63af31424489e3d61d7761805878, it mistakenly was unconditionally
constructing an `nsIRequest` from the received `RequestData`, even when the URI
was null.

Additionally `ReconstructWebProgressRequest` has been updated to use the Gecko
style for out parameters (accepting an `nsIFoo**` and passing
`getter_AddRefs(...)` instead of `nsCOMPtr<nsIFoo>&`).

Differential Revision: https://phabricator.services.mozilla.com/D34445

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Barret Rennie 2019-06-13 20:59:35 +00:00
parent 3f9e2ec379
commit 5ac437d877
2 changed files with 28 additions and 15 deletions

View File

@ -2402,7 +2402,8 @@ mozilla::ipc::IPCResult BrowserParent::RecvOnStateChange(
nsCOMPtr<nsIWebProgress> webProgress;
nsCOMPtr<nsIRequest> request;
ReconstructWebProgressAndRequest(manager, aWebProgressData, aRequestData,
webProgress, request);
getter_AddRefs(webProgress),
getter_AddRefs(request));
if (aWebProgressData && aWebProgressData->isTopLevel()) {
Unused << browser->SetIsNavigating(aStateChangeData->isNavigating());
@ -2441,7 +2442,8 @@ mozilla::ipc::IPCResult BrowserParent::RecvOnProgressChange(
nsCOMPtr<nsIWebProgress> webProgress;
nsCOMPtr<nsIRequest> request;
ReconstructWebProgressAndRequest(manager, aWebProgressData, aRequestData,
webProgress, request);
getter_AddRefs(webProgress),
getter_AddRefs(request));
Unused << managerAsListener->OnProgressChange(
webProgress, request, aCurSelfProgress, aMaxSelfProgress,
@ -2465,7 +2467,8 @@ mozilla::ipc::IPCResult BrowserParent::RecvOnStatusChange(
nsCOMPtr<nsIWebProgress> webProgress;
nsCOMPtr<nsIRequest> request;
ReconstructWebProgressAndRequest(manager, aWebProgressData, aRequestData,
webProgress, request);
getter_AddRefs(webProgress),
getter_AddRefs(request));
Unused << managerAsListener->OnStatusChange(webProgress, request, aStatus,
aMessage.get());
@ -2487,7 +2490,8 @@ mozilla::ipc::IPCResult BrowserParent::RecvOnContentBlockingEvent(
nsCOMPtr<nsIWebProgress> webProgress;
nsCOMPtr<nsIRequest> request;
ReconstructWebProgressAndRequest(manager, aWebProgressData, aRequestData,
webProgress, request);
getter_AddRefs(webProgress),
getter_AddRefs(request));
Unused << managerAsListener->OnContentBlockingEvent(webProgress, request,
aEvent);
@ -2529,21 +2533,31 @@ bool BrowserParent::GetWebProgressListener(
void BrowserParent::ReconstructWebProgressAndRequest(
nsIWebProgress* aManager, const Maybe<WebProgressData>& aWebProgressData,
const RequestData& aRequestData, nsCOMPtr<nsIWebProgress>& aOutWebProgress,
nsCOMPtr<nsIRequest>& aOutRequest) {
const RequestData& aRequestData, nsIWebProgress** aOutWebProgress,
nsIRequest** aOutRequest) {
MOZ_DIAGNOSTIC_ASSERT(aOutWebProgress,
"aOutWebProgress should never be null");
MOZ_DIAGNOSTIC_ASSERT(aOutRequest, "aOutRequest should never be null");
nsCOMPtr<nsIWebProgress> webProgress;
if (aWebProgressData) {
aOutWebProgress = MakeAndAddRef<RemoteWebProgress>(
webProgress = new RemoteWebProgress(
aManager, aWebProgressData->outerDOMWindowID(),
aWebProgressData->innerDOMWindowID(), aWebProgressData->loadType(),
aWebProgressData->isLoadingDocument(), aWebProgressData->isTopLevel());
} else {
aOutWebProgress =
MakeAndAddRef<RemoteWebProgress>(aManager, 0, 0, 0, false, false);
webProgress = new RemoteWebProgress(aManager, 0, 0, 0, false, false);
}
webProgress.forget(aOutWebProgress);
aOutRequest = MakeAndAddRef<RemoteWebProgressRequest>(
aRequestData.requestURI(), aRequestData.originalRequestURI(),
aRequestData.matchedList());
if (aRequestData.requestURI()) {
nsCOMPtr<nsIRequest> request = MakeAndAddRef<RemoteWebProgressRequest>(
aRequestData.requestURI(), aRequestData.originalRequestURI(),
aRequestData.matchedList());
request.forget(aOutRequest);
} else {
*aOutRequest = nullptr;
}
}
mozilla::ipc::IPCResult BrowserParent::RecvSessionStoreUpdate(

View File

@ -308,9 +308,8 @@ class BrowserParent final : public PBrowserParent,
void ReconstructWebProgressAndRequest(
nsIWebProgress* aManager, const Maybe<WebProgressData>& aWebProgressData,
const RequestData& aRequestData,
nsCOMPtr<nsIWebProgress>& aOutWebProgress,
nsCOMPtr<nsIRequest>& aOutRequest);
const RequestData& aRequestData, nsIWebProgress** aOutWebProgress,
nsIRequest** aOutRequest);
mozilla::ipc::IPCResult RecvSessionStoreUpdate(
const Maybe<nsCString>& aDocShellCaps, const Maybe<bool>& aPrivatedMode,