Commit 0feaa290 authored by Sean Feng's avatar Sean Feng
Browse files

Bug 1804086 - Allow document charset to be passed from content to parent...

Bug 1804086 - Allow document charset to be passed from content to parent r=smaug,necko-reviewers,kershaw

This is needed for doing content decoding for ORB.

Depends on D172490

Differential Revision: https://phabricator.services.mozilla.com/D172491
parent 078281d4
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -349,6 +349,7 @@ struct HttpChannelOpenArgs
  bool                        forceMainDocumentChannel;
  uint8_t                     redirectionLimit;
  nsString                    classicScriptHintCharset;
  nsString                    documentCharacterSet;
};

struct HttpChannelConnectArgs
+12 −0
Original line number Diff line number Diff line
@@ -6075,6 +6075,18 @@ NS_IMETHODIMP HttpBaseChannel::GetClassicScriptHintCharset(
  return NS_OK;
}

NS_IMETHODIMP HttpBaseChannel::SetDocumentCharacterSet(
    const nsAString& aDocumentCharacterSet) {
  mDocumentCharacterSet = aDocumentCharacterSet;
  return NS_OK;
}

NS_IMETHODIMP HttpBaseChannel::GetDocumentCharacterSet(
    nsAString& aDocumentCharacterSet) {
  aDocumentCharacterSet = mDocumentCharacterSet;
  return NS_OK;
}

void HttpBaseChannel::SetConnectionInfo(nsHttpConnectionInfo* aCI) {
  mConnectionInfo = aCI ? aCI->Clone() : nullptr;
}
+6 −0
Original line number Diff line number Diff line
@@ -357,6 +357,10 @@ class HttpBaseChannel : public nsHashPropertyBag,
  NS_IMETHOD GetClassicScriptHintCharset(
      nsAString& aClassicScriptHintCharset) override;

  NS_IMETHOD SetDocumentCharacterSet(
      const nsAString& aDocumentCharacterSet) override;
  NS_IMETHOD GetDocumentCharacterSet(nsAString& aDocumentCharacterSet) override;

  virtual void SetConnectionInfo(
      mozilla::net::nsHttpConnectionInfo* aCI) override;

@@ -820,6 +824,8 @@ class HttpBaseChannel : public nsHashPropertyBag,
  uint64_t mEarlyHintPreloaderId = 0;

  nsString mClassicScriptHintCharset;
  nsString mDocumentCharacterSet;

  // clang-format off
  MOZ_ATOMIC_BITFIELDS(mAtomicBitfields1, 32, (
    (uint32_t, UpgradeToSecure, 1),
+10 −0
Original line number Diff line number Diff line
@@ -2271,6 +2271,16 @@ nsresult HttpChannelChild::ContinueAsyncOpen() {
  openArgs.earlyHintPreloaderId() = mEarlyHintPreloaderId;

  openArgs.classicScriptHintCharset() = mClassicScriptHintCharset;

  RefPtr<Document> doc;
  mLoadInfo->GetLoadingDocument(getter_AddRefs(doc));

  if (doc) {
    nsAutoString documentCharacterSet;
    doc->GetCharacterSet(documentCharacterSet);
    openArgs.documentCharacterSet() = documentCharacterSet;
  }

  // This must happen before the constructor message is sent. Otherwise messages
  // from the parent could arrive quickly and be delivered to the wrong event
  // target.
+6 −2
Original line number Diff line number Diff line
@@ -141,7 +141,8 @@ bool HttpChannelParent::Init(const HttpChannelCreationArgs& aArgs) {
          a.dispatchFetchEventStart(), a.dispatchFetchEventEnd(),
          a.handleFetchEventStart(), a.handleFetchEventEnd(),
          a.forceMainDocumentChannel(), a.navigationStartTimeStamp(),
          a.earlyHintPreloaderId(), a.classicScriptHintCharset());
          a.earlyHintPreloaderId(), a.classicScriptHintCharset(),
          a.documentCharacterSet());
    }
    case HttpChannelCreationArgs::THttpChannelConnectArgs: {
      const HttpChannelConnectArgs& cArgs = aArgs.get_HttpChannelConnectArgs();
@@ -405,7 +406,8 @@ bool HttpChannelParent::DoAsyncOpen(
    const bool& aForceMainDocumentChannel,
    const TimeStamp& aNavigationStartTimeStamp,
    const uint64_t& aEarlyHintPreloaderId,
    const nsAString& aClassicScriptHintCharset) {
    const nsAString& aClassicScriptHintCharset,
    const nsAString& aDocumentCharacterSet) {
  MOZ_ASSERT(aURI, "aURI should not be NULL");

  if (aEarlyHintPreloaderId) {
@@ -509,6 +511,8 @@ bool HttpChannelParent::DoAsyncOpen(
  }

  httpChannel->SetClassicScriptHintCharset(aClassicScriptHintCharset);
  httpChannel->SetDocumentCharacterSet(aDocumentCharacterSet);

  if (aAPIRedirectToURI) {
    httpChannel->RedirectTo(aAPIRedirectToURI);
  }
Loading