Verified Commit 1f91f7be authored by valenting's avatar valenting Committed by ma1
Browse files

Bug 1914521 - Make nsPartChannel inherit the content disposition of the...

Bug 1914521 - Make nsPartChannel inherit the content disposition of the multipart response  a=RyanVM

Original Revision: https://phabricator.services.mozilla.com/D223728

Differential Revision: https://phabricator.services.mozilla.com/D224288
parent e1784bef
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -467,6 +467,12 @@ nsMultiMixedConv::OnStartRequest(nsIRequest* request) {
    if (NS_SUCCEEDED(rv)) {
      mRootContentSecurityPolicy = csp;
    }
    nsCString contentDisposition;
    rv = httpChannel->GetResponseHeader("content-disposition"_ns,
                                        contentDisposition);
    if (NS_SUCCEEDED(rv)) {
      mRootContentDisposition = contentDisposition;
    }
  } else {
    // try asking the channel directly
    rv = mChannel->GetContentType(contentType);
@@ -837,7 +843,11 @@ nsresult nsMultiMixedConv::SendStart() {
  rv = mPartChannel->SetContentLength(mContentLength);
  if (NS_FAILED(rv)) return rv;

  if (!mRootContentDisposition.IsEmpty()) {
    mPartChannel->SetContentDisposition(mRootContentDisposition);
  } else {
    mPartChannel->SetContentDisposition(mContentDisposition);
  }

  // Each part of a multipart/replace response can be used
  // for the top level document.  We must inform upper layers
+6 −4
Original line number Diff line number Diff line
@@ -150,15 +150,17 @@ class nsMultiMixedConv : public nsIStreamConverter {
  nsCOMPtr<nsIStreamListener> mFinalListener;  // this guy gets the converted
                                               // data via his OnDataAvailable()

  nsCOMPtr<nsIChannel>
      mChannel;  // The channel as we get in in OnStartRequest call
  RefPtr<nsPartChannel> mPartChannel;  // the channel for the given part we're
  // The channel as we get it in OnStartRequest call
  nsCOMPtr<nsIChannel> mChannel;
  // the channel for the given part we're
  // processing. one channel per part.
  RefPtr<nsPartChannel> mPartChannel;
  nsCOMPtr<nsISupports> mContext;
  nsCString mContentType;
  nsCString mContentDisposition;
  nsCString mContentSecurityPolicy;
  nsCString mRootContentSecurityPolicy;
  nsCString mRootContentDisposition;
  uint64_t mContentLength{UINT64_MAX};
  uint64_t mTotalSent{0};