Bug 1760580 - P2: Provide a reason when request is cancelled with NS_BINDING_ABORTED, r=necko-reviewers,media-playback-reviewers,valentin,chunmin

Differential Revision: https://phabricator.services.mozilla.com/D156071
This commit is contained in:
Kershaw Chang
2022-09-08 09:11:19 +00:00
parent 867883a547
commit bd7389a309
37 changed files with 120 additions and 63 deletions

View File

@@ -1239,7 +1239,8 @@ void CanonicalBrowsingContext::CanonicalDiscard() {
} }
if (mCurrentLoad) { if (mCurrentLoad) {
mCurrentLoad->Cancel(NS_BINDING_ABORTED); mCurrentLoad->Cancel(NS_BINDING_ABORTED,
"CanonicalBrowsingContext::CanonicalDiscard"_ns);
} }
if (mWebProgress) { if (mWebProgress) {
@@ -1401,7 +1402,7 @@ void CanonicalBrowsingContext::GoBack(
// Stop any known network loads if necessary. // Stop any known network loads if necessary.
if (mCurrentLoad) { if (mCurrentLoad) {
mCurrentLoad->Cancel(NS_BINDING_CANCELLED_OLD_LOAD); mCurrentLoad->Cancel(NS_BINDING_CANCELLED_OLD_LOAD, ""_ns);
} }
if (nsDocShell* docShell = nsDocShell::Cast(GetDocShell())) { if (nsDocShell* docShell = nsDocShell::Cast(GetDocShell())) {
@@ -1427,7 +1428,7 @@ void CanonicalBrowsingContext::GoForward(
// Stop any known network loads if necessary. // Stop any known network loads if necessary.
if (mCurrentLoad) { if (mCurrentLoad) {
mCurrentLoad->Cancel(NS_BINDING_CANCELLED_OLD_LOAD); mCurrentLoad->Cancel(NS_BINDING_CANCELLED_OLD_LOAD, ""_ns);
} }
if (auto* docShell = nsDocShell::Cast(GetDocShell())) { if (auto* docShell = nsDocShell::Cast(GetDocShell())) {
@@ -1453,7 +1454,7 @@ void CanonicalBrowsingContext::GoToIndex(
// Stop any known network loads if necessary. // Stop any known network loads if necessary.
if (mCurrentLoad) { if (mCurrentLoad) {
mCurrentLoad->Cancel(NS_BINDING_CANCELLED_OLD_LOAD); mCurrentLoad->Cancel(NS_BINDING_CANCELLED_OLD_LOAD, ""_ns);
} }
if (auto* docShell = nsDocShell::Cast(GetDocShell())) { if (auto* docShell = nsDocShell::Cast(GetDocShell())) {
@@ -1477,7 +1478,7 @@ void CanonicalBrowsingContext::Reload(uint32_t aReloadFlags) {
// Stop any known network loads if necessary. // Stop any known network loads if necessary.
if (mCurrentLoad) { if (mCurrentLoad) {
mCurrentLoad->Cancel(NS_BINDING_CANCELLED_OLD_LOAD); mCurrentLoad->Cancel(NS_BINDING_CANCELLED_OLD_LOAD, ""_ns);
} }
if (auto* docShell = nsDocShell::Cast(GetDocShell())) { if (auto* docShell = nsDocShell::Cast(GetDocShell())) {
@@ -1494,7 +1495,8 @@ void CanonicalBrowsingContext::Stop(uint32_t aStopFlags) {
// Stop any known network loads if necessary. // Stop any known network loads if necessary.
if (mCurrentLoad && (aStopFlags & nsIWebNavigation::STOP_NETWORK)) { if (mCurrentLoad && (aStopFlags & nsIWebNavigation::STOP_NETWORK)) {
mCurrentLoad->Cancel(NS_BINDING_ABORTED); mCurrentLoad->Cancel(NS_BINDING_ABORTED,
"CanonicalBrowsingContext::Stop"_ns);
} }
// Ask the docshell to stop to handle loads that haven't // Ask the docshell to stop to handle loads that haven't
@@ -2194,7 +2196,7 @@ bool CanonicalBrowsingContext::StartDocumentLoad(
// If we want to do a download, don't cancel the current navigation. // If we want to do a download, don't cancel the current navigation.
if (!aLoad->IsDownload()) { if (!aLoad->IsDownload()) {
mCurrentLoad->Cancel(NS_BINDING_CANCELLED_OLD_LOAD); mCurrentLoad->Cancel(NS_BINDING_CANCELLED_OLD_LOAD, ""_ns);
} }
} }
mCurrentLoad = aLoad; mCurrentLoad = aLoad;

View File

@@ -13300,7 +13300,8 @@ nsDocShell::ResumeRedirectedLoad(uint64_t aIdentifier, int32_t aHistoryIndex) {
nsDOMNavigationTiming* aTiming) { nsDOMNavigationTiming* aTiming) {
MOZ_ASSERT(aLoadState->GetPendingRedirectedChannel()); MOZ_ASSERT(aLoadState->GetPendingRedirectedChannel());
if (NS_WARN_IF(self->mIsBeingDestroyed)) { if (NS_WARN_IF(self->mIsBeingDestroyed)) {
aLoadState->GetPendingRedirectedChannel()->Cancel(NS_BINDING_ABORTED); aLoadState->GetPendingRedirectedChannel()->CancelWithReason(
NS_BINDING_ABORTED, "nsDocShell::mIsBeingDestroyed"_ns);
return NS_BINDING_ABORTED; return NS_BINDING_ABORTED;
} }

View File

@@ -799,7 +799,8 @@ void BodyConsumer::ShutDownMainThreadConsuming() {
mShuttingDown = true; mShuttingDown = true;
if (mConsumeBodyPump) { if (mConsumeBodyPump) {
mConsumeBodyPump->Cancel(NS_BINDING_ABORTED); mConsumeBodyPump->CancelWithReason(
NS_BINDING_ABORTED, "BodyConsumer::ShutDownMainThreadConsuming"_ns);
mConsumeBodyPump = nullptr; mConsumeBodyPump = nullptr;
} }
} }

View File

@@ -1776,7 +1776,8 @@ nsresult nsObjectLoadingContent::CloseChannel() {
nsCOMPtr<nsIStreamListener> listenerGrip(mFinalListener); nsCOMPtr<nsIStreamListener> listenerGrip(mFinalListener);
mChannel = nullptr; mChannel = nullptr;
mFinalListener = nullptr; mFinalListener = nullptr;
channelGrip->Cancel(NS_BINDING_ABORTED); channelGrip->CancelWithReason(NS_BINDING_ABORTED,
"nsObjectLoadingContent::CloseChannel"_ns);
if (listenerGrip) { if (listenerGrip) {
// mFinalListener is only set by LoadObject after OnStartRequest, or // mFinalListener is only set by LoadObject after OnStartRequest, or
// by OnStartRequest in the case of late-opened plugin streams // by OnStartRequest in the case of late-opened plugin streams

View File

@@ -110,7 +110,8 @@ nsForceXMLListener::OnStopRequest(nsIRequest* aRequest, nsresult aStatusCode) {
nsSyncLoader::~nsSyncLoader() { nsSyncLoader::~nsSyncLoader() {
if (mLoading && mChannel) { if (mLoading && mChannel) {
mChannel->Cancel(NS_BINDING_ABORTED); mChannel->CancelWithReason(NS_BINDING_ABORTED,
"nsSyncLoader::~nsSyncLoader"_ns);
} }
} }

View File

@@ -178,7 +178,8 @@ void AlternativeDataStreamListener::Cancel() {
if (mChannel && mStatus != AlternativeDataStreamListener::FALLBACK) { if (mChannel && mStatus != AlternativeDataStreamListener::FALLBACK) {
// if mStatus is fallback, we need to keep channel to forward request back // if mStatus is fallback, we need to keep channel to forward request back
// to FetchDriver // to FetchDriver
mChannel->Cancel(NS_BINDING_ABORTED); mChannel->CancelWithReason(NS_BINDING_ABORTED,
"AlternativeDataStreamListener::Cancel"_ns);
mChannel = nullptr; mChannel = nullptr;
} }
mStatus = AlternativeDataStreamListener::CANCELED; mStatus = AlternativeDataStreamListener::CANCELED;
@@ -923,7 +924,8 @@ FetchDriver::OnStartRequest(nsIRequest* aRequest) {
// channel will call in with an errored OnStartRequest(). // channel will call in with an errored OnStartRequest().
if (mFromPreload && mAborted) { if (mFromPreload && mAborted) {
aRequest->Cancel(NS_BINDING_ABORTED); aRequest->CancelWithReason(NS_BINDING_ABORTED,
"FetchDriver::OnStartRequest aborted"_ns);
return NS_BINDING_ABORTED; return NS_BINDING_ABORTED;
} }
@@ -1619,7 +1621,8 @@ void FetchDriver::RunAbortAlgorithm() {
} }
if (mChannel) { if (mChannel) {
mChannel->Cancel(NS_BINDING_ABORTED); mChannel->CancelWithReason(NS_BINDING_ABORTED,
"FetchDriver::RunAbortAlgorithm"_ns);
mChannel = nullptr; mChannel = nullptr;
} }

View File

@@ -1794,7 +1794,8 @@ class HTMLMediaElement::ChannelLoader final {
void Cancel() { void Cancel() {
mCancelled = true; mCancelled = true;
if (mChannel) { if (mChannel) {
mChannel->Cancel(NS_BINDING_ABORTED); mChannel->CancelWithReason(NS_BINDING_ABORTED,
"HTMLMediaElement::ChannelLoader::Cancel"_ns);
mChannel = nullptr; mChannel = nullptr;
} }
} }

View File

@@ -226,7 +226,8 @@ void HTMLTrackElement::SetSrc(const nsAString& aSrc, ErrorResult& aError) {
// Stop WebVTTListener. // Stop WebVTTListener.
mListener = nullptr; mListener = nullptr;
if (mChannel) { if (mChannel) {
mChannel->Cancel(NS_BINDING_ABORTED); mChannel->CancelWithReason(NS_BINDING_ABORTED,
"HTMLTrackElement::SetSrc"_ns);
mChannel = nullptr; mChannel = nullptr;
} }
@@ -473,7 +474,8 @@ void HTMLTrackElement::DispatchTrustedEvent(const nsAString& aName) {
void HTMLTrackElement::CancelChannelAndListener() { void HTMLTrackElement::CancelChannelAndListener() {
if (mChannel) { if (mChannel) {
mChannel->Cancel(NS_BINDING_ABORTED); mChannel->CancelWithReason(NS_BINDING_ABORTED,
"HTMLTrackElement::CancelChannelAndListener"_ns);
mChannel->SetNotificationCallbacks(nullptr); mChannel->SetNotificationCallbacks(nullptr);
mChannel = nullptr; mChannel = nullptr;
} }

View File

@@ -128,7 +128,8 @@ nsresult FetchImageHelper::ImageFetchListener::FetchDecodedImageFromURI(
void FetchImageHelper::ImageFetchListener::Clear() { void FetchImageHelper::ImageFetchListener::Clear() {
MOZ_ASSERT(NS_IsMainThread()); MOZ_ASSERT(NS_IsMainThread());
if (mChannel) { if (mChannel) {
mChannel->Cancel(NS_BINDING_ABORTED); mChannel->CancelWithReason(
NS_BINDING_ABORTED, "FetchImageHelper::ImageFetchListener::Clear"_ns);
mChannel = nullptr; mChannel = nullptr;
} }
mHelper = nullptr; mHelper = nullptr;

View File

@@ -799,7 +799,7 @@ void CompareNetwork::Abort() {
mState = Finished; mState = Finished;
MOZ_ASSERT(mChannel); MOZ_ASSERT(mChannel);
mChannel->Cancel(NS_BINDING_ABORTED); mChannel->CancelWithReason(NS_BINDING_ABORTED, "CompareNetwork::Abort"_ns);
mChannel = nullptr; mChannel = nullptr;
if (mCC) { if (mCC) {
@@ -1154,7 +1154,7 @@ void CompareCache::Abort() {
mState = Finished; mState = Finished;
if (mPump) { if (mPump) {
mPump->Cancel(NS_BINDING_ABORTED); mPump->CancelWithReason(NS_BINDING_ABORTED, "CompareCache::Abort"_ns);
mPump = nullptr; mPump = nullptr;
} }
} }

View File

@@ -50,7 +50,8 @@ class MainThreadReleaseRunnable final : public Runnable {
NS_IMETHOD NS_IMETHOD
Run() override { Run() override {
if (mLoadGroupToCancel) { if (mLoadGroupToCancel) {
mLoadGroupToCancel->Cancel(NS_BINDING_ABORTED); mLoadGroupToCancel->CancelWithReason(
NS_BINDING_ABORTED, "WorkerLoadInfo::MainThreadReleaseRunnable"_ns);
mLoadGroupToCancel = nullptr; mLoadGroupToCancel = nullptr;
} }

View File

@@ -928,7 +928,8 @@ void XMLHttpRequestMainThread::CloseRequest() {
mWaitingForOnStopRequest = false; mWaitingForOnStopRequest = false;
mErrorLoad = ErrorType::eTerminated; mErrorLoad = ErrorType::eTerminated;
if (mChannel) { if (mChannel) {
mChannel->Cancel(NS_BINDING_ABORTED); mChannel->CancelWithReason(NS_BINDING_ABORTED,
"XMLHttpRequestMainThread::CloseRequest"_ns);
} }
if (mTimeoutTimer) { if (mTimeoutTimer) {
mTimeoutTimer->Cancel(); mTimeoutTimer->Cancel();

View File

@@ -219,7 +219,8 @@ void XMLDocument::ResetToURI(nsIURI* aURI, nsILoadGroup* aLoadGroup,
nsIPrincipal* aPartitionedPrincipal) { nsIPrincipal* aPartitionedPrincipal) {
if (mChannelIsPending) { if (mChannelIsPending) {
StopDocumentLoad(); StopDocumentLoad();
mChannel->Cancel(NS_BINDING_ABORTED); mChannel->CancelWithReason(NS_BINDING_ABORTED,
"XMLDocument::ResetToURI"_ns);
mChannelIsPending = false; mChannelIsPending = false;
} }

View File

@@ -3165,7 +3165,8 @@ imgCacheValidator::OnStartRequest(nsIRequest* aRequest) {
// because OnStartRequest got delivered more than once), just bail. // because OnStartRequest got delivered more than once), just bail.
if (!mRequest) { if (!mRequest) {
MOZ_ASSERT_UNREACHABLE("OnStartRequest delivered more than once?"); MOZ_ASSERT_UNREACHABLE("OnStartRequest delivered more than once?");
aRequest->Cancel(NS_BINDING_ABORTED); aRequest->CancelWithReason(NS_BINDING_ABORTED,
"OnStartRequest delivered more than once?"_ns);
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
} }
@@ -3191,7 +3192,8 @@ imgCacheValidator::OnStartRequest(nsIRequest* aRequest) {
if (isFromCache && sameURI) { if (isFromCache && sameURI) {
// We don't need to load this any more. // We don't need to load this any more.
aRequest->Cancel(NS_BINDING_ABORTED); aRequest->CancelWithReason(NS_BINDING_ABORTED,
"imgCacheValidator::OnStartRequest"_ns);
mNewRequest = nullptr; mNewRequest = nullptr;
// Clear the validator before updating the proxies. The notifications may // Clear the validator before updating the proxies. The notifications may

View File

@@ -369,7 +369,8 @@ void nsFontFaceLoader::Cancel() {
mLoadTimer = nullptr; mLoadTimer = nullptr;
} }
if (nsCOMPtr<nsIChannel> channel = std::move(mChannel)) { if (nsCOMPtr<nsIChannel> channel = std::move(mChannel)) {
channel->Cancel(NS_BINDING_ABORTED); channel->CancelWithReason(NS_BINDING_ABORTED,
"nsFontFaceLoader::OnStopRequest"_ns);
} }
} }

View File

@@ -91,7 +91,8 @@ nsLoadGroup::nsLoadGroup()
} }
nsLoadGroup::~nsLoadGroup() { nsLoadGroup::~nsLoadGroup() {
DebugOnly<nsresult> rv = Cancel(NS_BINDING_ABORTED); DebugOnly<nsresult> rv =
CancelWithReason(NS_BINDING_ABORTED, "nsLoadGroup::~nsLoadGroup"_ns);
NS_ASSERTION(NS_SUCCEEDED(rv), "Cancel failed"); NS_ASSERTION(NS_SUCCEEDED(rv), "Cancel failed");
mDefaultLoadRequest = nullptr; mDefaultLoadRequest = nullptr;

View File

@@ -455,13 +455,18 @@ DocumentChannelChild::OnRedirectVerifyCallback(nsresult aStatusCode) {
NS_IMETHODIMP NS_IMETHODIMP
DocumentChannelChild::Cancel(nsresult aStatusCode) { DocumentChannelChild::Cancel(nsresult aStatusCode) {
return CancelWithReason(aStatusCode, "DocumentChannelChild::Cancel"_ns);
}
NS_IMETHODIMP DocumentChannelChild::CancelWithReason(
nsresult aStatusCode, const nsACString& aReason) {
if (mCanceled) { if (mCanceled) {
return NS_OK; return NS_OK;
} }
mCanceled = true; mCanceled = true;
if (CanSend()) { if (CanSend()) {
SendCancel(aStatusCode); SendCancel(aStatusCode, aReason);
} }
ShutdownListeners(aStatusCode); ShutdownListeners(aStatusCode);

View File

@@ -34,6 +34,8 @@ class DocumentChannelChild final : public DocumentChannel,
NS_IMETHOD AsyncOpen(nsIStreamListener* aListener) override; NS_IMETHOD AsyncOpen(nsIStreamListener* aListener) override;
NS_IMETHOD Cancel(nsresult aStatusCode) override; NS_IMETHOD Cancel(nsresult aStatusCode) override;
NS_IMETHOD CancelWithReason(nsresult aStatusCode,
const nsACString& aReason) override;
mozilla::ipc::IPCResult RecvFailedAsyncOpen(const nsresult& aStatusCode); mozilla::ipc::IPCResult RecvFailedAsyncOpen(const nsresult& aStatusCode);

View File

@@ -32,15 +32,16 @@ class DocumentChannelParent final
const DocumentChannelCreationArgs& aArgs); const DocumentChannelCreationArgs& aArgs);
// PDocumentChannelParent // PDocumentChannelParent
ipc::IPCResult RecvCancel(const nsresult& aStatus) { ipc::IPCResult RecvCancel(const nsresult& aStatus, const nsCString& aReason) {
if (mDocumentLoadListener) { if (mDocumentLoadListener) {
mDocumentLoadListener->Cancel(aStatus); mDocumentLoadListener->Cancel(aStatus, aReason);
} }
return IPC_OK(); return IPC_OK();
} }
void ActorDestroy(ActorDestroyReason aWhy) override { void ActorDestroy(ActorDestroyReason aWhy) override {
if (mDocumentLoadListener) { if (mDocumentLoadListener) {
mDocumentLoadListener->Cancel(NS_BINDING_ABORTED); mDocumentLoadListener->Cancel(NS_BINDING_ABORTED,
"DocumentChannelParent::ActorDestroy"_ns);
} }
} }

View File

@@ -1091,7 +1091,8 @@ void DocumentLoadListener::NotifyDocumentChannelFailed() {
}, },
[]() {}); []() {});
Cancel(NS_BINDING_ABORTED); Cancel(NS_BINDING_ABORTED,
"DocumentLoadListener::NotifyDocumentChannelFailed"_ns);
} }
void DocumentLoadListener::Disconnect(bool aContinueNavigating) { void DocumentLoadListener::Disconnect(bool aContinueNavigating) {
@@ -1117,7 +1118,8 @@ void DocumentLoadListener::Disconnect(bool aContinueNavigating) {
} }
} }
void DocumentLoadListener::Cancel(const nsresult& aStatusCode) { void DocumentLoadListener::Cancel(const nsresult& aStatusCode,
const nsACString& aReason) {
LOG( LOG(
("DocumentLoadListener Cancel [this=%p, " ("DocumentLoadListener Cancel [this=%p, "
"aStatusCode=%" PRIx32 " ]", "aStatusCode=%" PRIx32 " ]",
@@ -1126,7 +1128,7 @@ void DocumentLoadListener::Cancel(const nsresult& aStatusCode) {
return; return;
} }
if (mChannel) { if (mChannel) {
mChannel->Cancel(aStatusCode); mChannel->CancelWithReason(aStatusCode, aReason);
} }
DisconnectListeners(aStatusCode, aStatusCode); DisconnectListeners(aStatusCode, aStatusCode);
@@ -1739,14 +1741,16 @@ bool DocumentLoadListener::MaybeTriggerProcessSwitch(
if (!browsingContext->IsOwnedByProcess(GetContentProcessId(mContentParent))) { if (!browsingContext->IsOwnedByProcess(GetContentProcessId(mContentParent))) {
MOZ_LOG(gProcessIsolationLog, LogLevel::Error, MOZ_LOG(gProcessIsolationLog, LogLevel::Error,
("Process Switch Abort: context no longer owned by creator")); ("Process Switch Abort: context no longer owned by creator"));
Cancel(NS_BINDING_ABORTED); Cancel(NS_BINDING_ABORTED,
"Process Switch Abort: context no longer owned by creator"_ns);
return false; return false;
} }
if (browsingContext->IsReplaced()) { if (browsingContext->IsReplaced()) {
MOZ_LOG(gProcessIsolationLog, LogLevel::Warning, MOZ_LOG(gProcessIsolationLog, LogLevel::Warning,
("Process Switch Abort: replaced browsing context")); ("Process Switch Abort: replaced browsing context"));
Cancel(NS_BINDING_ABORTED); Cancel(NS_BINDING_ABORTED,
"Process Switch Abort: replaced browsing context"_ns);
return false; return false;
} }
@@ -1764,7 +1768,8 @@ bool DocumentLoadListener::MaybeTriggerProcessSwitch(
MOZ_LOG(gProcessIsolationLog, LogLevel::Error, MOZ_LOG(gProcessIsolationLog, LogLevel::Error,
("Process Switch Abort: CheckIsolationForNavigation Failed with %s", ("Process Switch Abort: CheckIsolationForNavigation Failed with %s",
GetStaticErrorName(optionsResult.inspectErr()))); GetStaticErrorName(optionsResult.inspectErr())));
Cancel(optionsResult.unwrapErr()); Cancel(optionsResult.unwrapErr(),
"Process Switch Abort: CheckIsolationForNavigation Failed"_ns);
return false; return false;
} }
@@ -2444,7 +2449,9 @@ DocumentLoadListener::OnStartRequest(nsIRequest* aRequest) {
LOG( LOG(
("DocumentLoadListener::RedirectToRealChannel failed because " ("DocumentLoadListener::RedirectToRealChannel failed because "
"browsingContext no longer owned by creator")); "browsingContext no longer owned by creator"));
Cancel(NS_BINDING_ABORTED); Cancel(NS_BINDING_ABORTED,
"DocumentLoadListener::RedirectToRealChannel failed because "
"browsingContext no longer owned by creator"_ns);
return NS_OK; return NS_OK;
} }
MOZ_DIAGNOSTIC_ASSERT( MOZ_DIAGNOSTIC_ASSERT(

View File

@@ -227,7 +227,7 @@ class DocumentLoadListener : public nsIInterfaceRequestor,
NS_DECLARE_STATIC_IID_ACCESSOR(DOCUMENT_LOAD_LISTENER_IID) NS_DECLARE_STATIC_IID_ACCESSOR(DOCUMENT_LOAD_LISTENER_IID)
// Called by the DocumentChannel if cancelled. // Called by the DocumentChannel if cancelled.
void Cancel(const nsresult& aStatusCode); void Cancel(const nsresult& aStatusCode, const nsACString& aReason);
nsIChannel* GetChannel() const { return mChannel; } nsIChannel* GetChannel() const { return mChannel; }

View File

@@ -28,7 +28,7 @@ protocol PDocumentChannel
parent: parent:
async Cancel(nsresult status); async Cancel(nsresult status, nsCString reason);
async __delete__(); async __delete__();

View File

@@ -248,7 +248,12 @@ NS_IMETHODIMP ParentProcessDocumentChannel::AsyncOpen(
} }
NS_IMETHODIMP ParentProcessDocumentChannel::Cancel(nsresult aStatus) { NS_IMETHODIMP ParentProcessDocumentChannel::Cancel(nsresult aStatus) {
LOG(("ParentProcessDocumentChannel Cancel [this=%p]", this)); return CancelWithReason(aStatus, "ParentProcessDocumentChannel::Cancel"_ns);
}
NS_IMETHODIMP ParentProcessDocumentChannel::CancelWithReason(
nsresult aStatusCode, const nsACString& aReason) {
LOG(("ParentProcessDocumentChannel CancelWithReason [this=%p]", this));
if (mCanceled) { if (mCanceled) {
return NS_OK; return NS_OK;
} }
@@ -256,7 +261,7 @@ NS_IMETHODIMP ParentProcessDocumentChannel::Cancel(nsresult aStatus) {
mCanceled = true; mCanceled = true;
// This will force the DocumentListener to abort the promise if there's one // This will force the DocumentListener to abort the promise if there's one
// pending. // pending.
mDocumentLoadListener->Cancel(aStatus); mDocumentLoadListener->Cancel(aStatusCode, aReason);
return NS_OK; return NS_OK;
} }

View File

@@ -31,6 +31,8 @@ class ParentProcessDocumentChannel : public DocumentChannel,
NS_IMETHOD AsyncOpen(nsIStreamListener* aListener) override; NS_IMETHOD AsyncOpen(nsIStreamListener* aListener) override;
NS_IMETHOD Cancel(nsresult aStatusCode) override; NS_IMETHOD Cancel(nsresult aStatusCode) override;
NS_IMETHOD CancelWithReason(nsresult aStatusCode,
const nsACString& aReason) override;
RefPtr<PDocumentChannelParent::RedirectToRealChannelPromise> RefPtr<PDocumentChannelParent::RedirectToRealChannelPromise>
RedirectToRealChannel( RedirectToRealChannel(

View File

@@ -1806,7 +1806,8 @@ HttpChannelChild::Cancel(nsresult aStatus) {
#endif #endif
if (remoteChannelExists) { if (remoteChannelExists) {
SendCancel(aStatus, mLoadInfo->GetRequestBlockingReason(), logOnParent); SendCancel(aStatus, mLoadInfo->GetRequestBlockingReason(),
mCanceledReason, logOnParent);
} else if (MOZ_UNLIKELY(!LoadOnStartRequestCalled() || } else if (MOZ_UNLIKELY(!LoadOnStartRequestCalled() ||
!LoadOnStopRequestCalled())) { !LoadOnStopRequestCalled())) {
Unused << AsyncAbort(mStatus); Unused << AsyncAbort(mStatus);

View File

@@ -703,8 +703,9 @@ mozilla::ipc::IPCResult HttpChannelParent::RecvResume() {
mozilla::ipc::IPCResult HttpChannelParent::RecvCancel( mozilla::ipc::IPCResult HttpChannelParent::RecvCancel(
const nsresult& status, const uint32_t& requestBlockingReason, const nsresult& status, const uint32_t& requestBlockingReason,
const mozilla::Maybe<nsCString>& logString) { const nsACString& reason, const mozilla::Maybe<nsCString>& logString) {
LOG(("HttpChannelParent::RecvCancel [this=%p]\n", this)); LOG(("HttpChannelParent::RecvCancel [this=%p, reason=%s]\n", this,
PromiseFlatCString(reason).get()));
// logging child cancel reason on the parent side // logging child cancel reason on the parent side
if (logString.isSome()) { if (logString.isSome()) {
@@ -713,7 +714,7 @@ mozilla::ipc::IPCResult HttpChannelParent::RecvCancel(
// May receive cancel before channel has been constructed! // May receive cancel before channel has been constructed!
if (mChannel) { if (mChannel) {
mChannel->Cancel(status); mChannel->CancelWithReason(status, reason);
if (MOZ_UNLIKELY(requestBlockingReason != if (MOZ_UNLIKELY(requestBlockingReason !=
nsILoadInfo::BLOCKING_REASON_NONE)) { nsILoadInfo::BLOCKING_REASON_NONE)) {

View File

@@ -169,6 +169,7 @@ class HttpChannelParent final : public nsIInterfaceRequestor,
virtual mozilla::ipc::IPCResult RecvResume() override; virtual mozilla::ipc::IPCResult RecvResume() override;
virtual mozilla::ipc::IPCResult RecvCancel( virtual mozilla::ipc::IPCResult RecvCancel(
const nsresult& status, const uint32_t& requestBlockingReason, const nsresult& status, const uint32_t& requestBlockingReason,
const nsACString& reason,
const mozilla::Maybe<nsCString>& logString) override; const mozilla::Maybe<nsCString>& logString) override;
virtual mozilla::ipc::IPCResult RecvRedirect2Verify( virtual mozilla::ipc::IPCResult RecvRedirect2Verify(
const nsresult& result, const RequestHeaderTuples& changedHeaders, const nsresult& result, const RequestHeaderTuples& changedHeaders,

View File

@@ -40,7 +40,7 @@ parent:
async Resume(); async Resume();
async Cancel(nsresult status, uint32_t requestBlockingReason, async Cancel(nsresult status, uint32_t requestBlockingReason,
nsCString? logString); nsCString aReason, nsCString? logString);
// Reports approval/veto of redirect by child process redirect observers // Reports approval/veto of redirect by child process redirect observers
async Redirect2Verify(nsresult result, RequestHeaderTuples changedHeaders, async Redirect2Verify(nsresult result, RequestHeaderTuples changedHeaders,

View File

@@ -5474,8 +5474,8 @@ nsHttpChannel::Cancel(nsresult status) {
} }
#endif #endif
LOG(("nsHttpChannel::Cancel [this=%p status=%" PRIx32 "]\n", this, LOG(("nsHttpChannel::Cancel [this=%p status=%" PRIx32 ", reason=%s]\n", this,
static_cast<uint32_t>(status))); static_cast<uint32_t>(status), mCanceledReason.get()));
MOZ_ASSERT_IF(!(mConnectionInfo && mConnectionInfo->UsingConnect()) && MOZ_ASSERT_IF(!(mConnectionInfo && mConnectionInfo->UsingConnect()) &&
NS_SUCCEEDED(mStatus), NS_SUCCEEDED(mStatus),
!AllowedErrorForHTTPSRRFallback(status)); !AllowedErrorForHTTPSRRFallback(status));

View File

@@ -279,12 +279,12 @@ ExtensionStreamGetter::Cancel(nsresult aStatus) {
mStatus = aStatus; mStatus = aStatus;
if (mPump) { if (mPump) {
mPump->Cancel(aStatus); mPump->CancelWithReason(aStatus, "ExtensionStreamGetter::Cancel"_ns);
mPump = nullptr; mPump = nullptr;
} }
if (mIsJarChannel && mJarChannel) { if (mIsJarChannel && mJarChannel) {
mJarChannel->Cancel(aStatus); mJarChannel->CancelWithReason(aStatus, "ExtensionStreamGetter::Cancel"_ns);
} }
return NS_OK; return NS_OK;
@@ -299,7 +299,8 @@ void ExtensionStreamGetter::CancelRequest(nsIStreamListener* aListener,
aListener->OnStartRequest(aChannel); aListener->OnStartRequest(aChannel);
aListener->OnStopRequest(aChannel, aResult); aListener->OnStopRequest(aChannel, aResult);
aChannel->Cancel(NS_BINDING_ABORTED); aChannel->CancelWithReason(NS_BINDING_ABORTED,
"ExtensionStreamGetter::CancelRequest"_ns);
} }
// Handle an input stream sent from the parent. // Handle an input stream sent from the parent.

View File

@@ -78,7 +78,8 @@ void RemoteStreamGetter::CancelRequest(nsIStreamListener* aListener,
aListener->OnStartRequest(aChannel); aListener->OnStartRequest(aChannel);
aListener->OnStopRequest(aChannel, aResult); aListener->OnStopRequest(aChannel, aResult);
aChannel->Cancel(NS_BINDING_ABORTED); aChannel->CancelWithReason(NS_BINDING_ABORTED,
"RemoteStreamGetter::CancelRequest"_ns);
} }
// Handle an input stream sent from the parent. // Handle an input stream sent from the parent.

View File

@@ -618,7 +618,8 @@ AsyncFetchAndSetIconForPage::Cancel() {
} }
mCanceled = true; mCanceled = true;
if (mRequest) { if (mRequest) {
mRequest->Cancel(NS_BINDING_ABORTED); mRequest->CancelWithReason(NS_BINDING_ABORTED,
"AsyncFetchAndSetIconForPage::Cancel"_ns);
} }
return NS_OK; return NS_OK;
} }
@@ -644,7 +645,8 @@ AsyncFetchAndSetIconForPage::OnStartRequest(nsIRequest* aRequest) {
!path.EqualsLiteral("/favicon.ico") && !path.EqualsLiteral("/favicon.ico") &&
NS_SUCCEEDED(httpChannel->IsNoStoreResponse(&isNoStore)) && isNoStore) { NS_SUCCEEDED(httpChannel->IsNoStoreResponse(&isNoStore)) && isNoStore) {
// Abandon the network fetch. // Abandon the network fetch.
mRequest->Cancel(NS_BINDING_ABORTED); mRequest->CancelWithReason(
NS_BINDING_ABORTED, "AsyncFetchAndSetIconForPage::OnStartRequest"_ns);
} }
} }
return NS_OK; return NS_OK;

View File

@@ -267,7 +267,8 @@ nsresult PageIconProtocolHandler::NewChannelInternal(nsIURI* aURI,
do_GetService(NS_STREAMTRANSPORTSERVICE_CONTRACTID, &rv); do_GetService(NS_STREAMTRANSPORTSERVICE_CONTRACTID, &rv);
if (NS_WARN_IF(NS_FAILED(rv))) { if (NS_WARN_IF(NS_FAILED(rv))) {
channel->Cancel(NS_BINDING_ABORTED); channel->CancelWithReason(NS_BINDING_ABORTED,
"GetFaviconData failed"_ns);
return; return;
} }

View File

@@ -131,7 +131,8 @@ class faviconAsyncLoader : public AsyncStatementCallback, public nsICancelable {
aListener->OnStartRequest(aChannel); aListener->OnStartRequest(aChannel);
aListener->OnStopRequest(aChannel, aResult); aListener->OnStopRequest(aChannel, aResult);
aChannel->Cancel(NS_BINDING_ABORTED); aChannel->CancelWithReason(NS_BINDING_ABORTED,
"faviconAsyncLoader::CancelRequest"_ns);
} }
NS_IMETHOD HandleCompletion(uint16_t aReason) override { NS_IMETHOD HandleCompletion(uint16_t aReason) override {

View File

@@ -255,7 +255,10 @@ MOZ_CAN_RUN_SCRIPT_BOUNDARY NS_IMETHODIMP nsDocLoader::Stop(void) {
NS_OBSERVER_ARRAY_NOTIFY_XPCOM_OBSERVERS(mChildList, Stop, ()); NS_OBSERVER_ARRAY_NOTIFY_XPCOM_OBSERVERS(mChildList, Stop, ());
if (mLoadGroup) rv = mLoadGroup->Cancel(NS_BINDING_ABORTED); if (mLoadGroup) {
rv = mLoadGroup->CancelWithReason(NS_BINDING_ABORTED,
"nsDocLoader::Stop"_ns);
}
// Don't report that we're flushing layout so IsBusy returns false after a // Don't report that we're flushing layout so IsBusy returns false after a
// Stop call. // Stop call.

View File

@@ -282,7 +282,8 @@ void PreloaderBase::RemoveLinkPreloadNode(nsINode* aNode) {
RemoveSelf(aNode->OwnerDoc()); RemoveSelf(aNode->OwnerDoc());
if (mChannel) { if (mChannel) {
mChannel->Cancel(NS_BINDING_ABORTED); mChannel->CancelWithReason(NS_BINDING_ABORTED,
"PreloaderBase::RemoveLinkPreloadNode"_ns);
} }
} }
} }

View File

@@ -35,7 +35,8 @@ nsresult IconLoader::LoadIcon(nsIURI* aIconURI, nsINode* aNode,
bool aIsInternalIcon) { bool aIsInternalIcon) {
if (mIconRequest) { if (mIconRequest) {
// Another icon request is already in flight. Kill it. // Another icon request is already in flight. Kill it.
mIconRequest->Cancel(NS_BINDING_ABORTED); mIconRequest->CancelWithReason(
NS_BINDING_ABORTED, "Another icon request is already in flight"_ns);
mIconRequest = nullptr; mIconRequest = nullptr;
} }
@@ -91,7 +92,8 @@ void IconLoader::Notify(imgIRequest* aRequest, int32_t aType,
uint32_t status = imgIRequest::STATUS_ERROR; uint32_t status = imgIRequest::STATUS_ERROR;
if (NS_FAILED(aRequest->GetImageStatus(&status)) || if (NS_FAILED(aRequest->GetImageStatus(&status)) ||
(status & imgIRequest::STATUS_ERROR)) { (status & imgIRequest::STATUS_ERROR)) {
mIconRequest->Cancel(NS_BINDING_ABORTED); mIconRequest->CancelWithReason(NS_BINDING_ABORTED,
"GetImageStatus failed"_ns);
mIconRequest = nullptr; mIconRequest = nullptr;
return; return;
} }
@@ -121,7 +123,7 @@ void IconLoader::Notify(imgIRequest* aRequest, int32_t aType,
if (aType == imgINotificationObserver::DECODE_COMPLETE) { if (aType == imgINotificationObserver::DECODE_COMPLETE) {
if (mIconRequest && mIconRequest == aRequest) { if (mIconRequest && mIconRequest == aRequest) {
mIconRequest->Cancel(NS_BINDING_ABORTED); mIconRequest->CancelWithReason(NS_BINDING_ABORTED, "DECODE_COMPLETE"_ns);
mIconRequest = nullptr; mIconRequest = nullptr;
} }
} }