/* static */ already_AddRefed<nsIURI> InterceptedChannelBase::SecureUpgradeChannelURI(nsIChannel* aChannel) { nsCOMPtr<nsIURI> uri; nsresult rv = aChannel->GetURI(getter_AddRefs(uri)); NS_ENSURE_SUCCESS(rv, nullptr); nsCOMPtr<nsIURI> upgradedURI; rv = NS_GetSecureUpgradedURI(uri, getter_AddRefs(upgradedURI)); NS_ENSURE_SUCCESS(rv, nullptr); return upgradedURI.forget(); }
NS_IMETHODIMP InterceptedChannelContent::FinishSynthesizedResponse(const nsACString& aFinalURLSpec) { if (NS_WARN_IF(!mChannel)) { return NS_ERROR_NOT_AVAILABLE; } // Make sure the body output stream is always closed. If the channel was // intercepted with a null-body response then its possible the synthesis // completed without a stream copy operation. mResponseBody->Close(); mReportCollector->FlushConsoleReports(mChannel); EnsureSynthesizedResponse(); nsCOMPtr<nsIURI> originalURI; mChannel->GetURI(getter_AddRefs(originalURI)); nsCOMPtr<nsIURI> responseURI; if (!aFinalURLSpec.IsEmpty()) { nsresult rv = NS_NewURI(getter_AddRefs(responseURI), aFinalURLSpec); NS_ENSURE_SUCCESS(rv, rv); } else if (mSecureUpgrade) { nsresult rv = NS_GetSecureUpgradedURI(originalURI, getter_AddRefs(responseURI)); NS_ENSURE_SUCCESS(rv, rv); } else { responseURI = originalURI; } bool equal = false; originalURI->Equals(responseURI, &equal); if (!equal) { mChannel->ForceIntercepted(mSynthesizedInput); mChannel->BeginNonIPCRedirect(responseURI, *mSynthesizedResponseHead.ptr()); } else { mChannel->OverrideWithSynthesizedResponse(mSynthesizedResponseHead.ref(), mSynthesizedInput, mStreamListener); } mResponseBody = nullptr; mReleaseHandle = nullptr; mChannel = nullptr; mStreamListener = nullptr; return NS_OK; }
NS_IMETHODIMP InterceptedChannelContent::StartSynthesizedResponse(nsIInputStream* aBody, nsIInterceptedBodyCallback* aBodyCallback, nsICacheInfoChannel* aCacheInfoChannel, const nsACString& aFinalURLSpec, bool aResponseRedirected) { if (NS_WARN_IF(mClosed)) { return NS_ERROR_NOT_AVAILABLE; } EnsureSynthesizedResponse(); nsCOMPtr<nsIURI> originalURI; mChannel->GetURI(getter_AddRefs(originalURI)); nsCOMPtr<nsIURI> responseURI; if (!aFinalURLSpec.IsEmpty()) { nsresult rv = NS_NewURI(getter_AddRefs(responseURI), aFinalURLSpec); NS_ENSURE_SUCCESS(rv, rv); } else if (mSecureUpgrade) { nsresult rv = NS_GetSecureUpgradedURI(originalURI, getter_AddRefs(responseURI)); NS_ENSURE_SUCCESS(rv, rv); } else { responseURI = originalURI; } bool equal = false; originalURI->Equals(responseURI, &equal); if (!equal) { mChannel->ForceIntercepted(aBody, aBodyCallback, aCacheInfoChannel); mChannel->BeginNonIPCRedirect(responseURI, *mSynthesizedResponseHead.ptr(), aResponseRedirected); } else { mChannel->OverrideWithSynthesizedResponse(mSynthesizedResponseHead.ref(), aBody, aBodyCallback, mStreamListener, aCacheInfoChannel); } return NS_OK; }