summary refs log tree commit diff
path: root/gnu/packages/patches/icecat-CVE-2015-7207.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/patches/icecat-CVE-2015-7207.patch')
-rw-r--r--gnu/packages/patches/icecat-CVE-2015-7207.patch1140
1 files changed, 0 insertions, 1140 deletions
diff --git a/gnu/packages/patches/icecat-CVE-2015-7207.patch b/gnu/packages/patches/icecat-CVE-2015-7207.patch
deleted file mode 100644
index db5fc6ce66..0000000000
--- a/gnu/packages/patches/icecat-CVE-2015-7207.patch
+++ /dev/null
@@ -1,1140 +0,0 @@
-Copied from upstream:
-https://hg.mozilla.org/releases/mozilla-esr38/raw-rev/532544c91db7
-
-# HG changeset patch
-# User Dragana Damjanovic <dd.mozilla@gmail.com>
-# Date 1456962626 28800
-# Node ID 532544c91db7f13c39be1b7b7c4461cd03126e9c
-# Parent  f4220254d5bd0851a439467da39ba431e0ce2804
-Bug 1185256 - Save originURI to the history. r=bz ba=ritu
-
-MozReview-Commit-ID: Lvh9C84RQUc
-
-diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp
---- a/docshell/base/nsDocShell.cpp
-+++ b/docshell/base/nsDocShell.cpp
-@@ -1020,16 +1020,17 @@ nsDocShell::DestroyChildren()
- //*****************************************************************************
- // nsDocShell::nsISupports
- //*****************************************************************************
- 
- NS_IMPL_ADDREF_INHERITED(nsDocShell, nsDocLoader)
- NS_IMPL_RELEASE_INHERITED(nsDocShell, nsDocLoader)
- 
- NS_INTERFACE_MAP_BEGIN(nsDocShell)
-+  NS_INTERFACE_MAP_ENTRY(nsIDocShell_ESR38_2)
-   NS_INTERFACE_MAP_ENTRY(nsIDocShell_ESR38)
-   NS_INTERFACE_MAP_ENTRY(nsIDocShell)
-   NS_INTERFACE_MAP_ENTRY(nsIDocShellTreeItem)
-   NS_INTERFACE_MAP_ENTRY(nsIWebNavigation)
-   NS_INTERFACE_MAP_ENTRY(nsIBaseWindow)
-   NS_INTERFACE_MAP_ENTRY(nsIScrollable)
-   NS_INTERFACE_MAP_ENTRY(nsITextScroll)
-   NS_INTERFACE_MAP_ENTRY(nsIDocCharset)
-@@ -1372,16 +1373,17 @@ nsDocShell::LoadURI(nsIURI* aURI,
-     return NS_OK; // JS may not handle returning of an error code
-   }
- 
-   if (DoAppRedirectIfNeeded(aURI, aLoadInfo, aFirstParty)) {
-     return NS_OK;
-   }
- 
-   nsCOMPtr<nsIURI> referrer;
-+  nsCOMPtr<nsIURI> originalURI;
-   nsCOMPtr<nsIInputStream> postStream;
-   nsCOMPtr<nsIInputStream> headersStream;
-   nsCOMPtr<nsISupports> owner;
-   bool inheritOwner = false;
-   bool ownerIsExplicit = false;
-   bool sendReferrer = true;
-   uint32_t referrerPolicy = mozilla::net::RP_Default;
-   bool isSrcdoc = false;
-@@ -1398,16 +1400,20 @@ nsDocShell::LoadURI(nsIURI* aURI,
-   if (!StartupTimeline::HasRecord(StartupTimeline::FIRST_LOAD_URI) &&
-       mItemType == typeContent && !NS_IsAboutBlank(aURI)) {
-     StartupTimeline::RecordOnce(StartupTimeline::FIRST_LOAD_URI);
-   }
- 
-   // Extract the info from the DocShellLoadInfo struct...
-   if (aLoadInfo) {
-     aLoadInfo->GetReferrer(getter_AddRefs(referrer));
-+    nsCOMPtr<nsIDocShellLoadInfo_ESR38> liESR38 = do_QueryInterface(aLoadInfo);
-+    if (liESR38) {
-+      liESR38->GetOriginalURI(getter_AddRefs(originalURI));
-+    }
- 
-     nsDocShellInfoLoadType lt = nsIDocShellLoadInfo::loadNormal;
-     aLoadInfo->GetLoadType(&lt);
-     // Get the appropriate loadType from nsIDocShellLoadInfo type
-     loadType = ConvertDocShellLoadInfoToLoadType(lt);
- 
-     aLoadInfo->GetOwner(getter_AddRefs(owner));
-     aLoadInfo->GetInheritOwner(&inheritOwner);
-@@ -1652,34 +1658,35 @@ nsDocShell::LoadURI(nsIURI* aURI,
-   if (aLoadFlags & LOAD_FLAGS_FORCE_ALLOW_COOKIES) {
-     flags |= INTERNAL_LOAD_FLAGS_FORCE_ALLOW_COOKIES;
-   }
- 
-   if (isSrcdoc) {
-     flags |= INTERNAL_LOAD_FLAGS_IS_SRCDOC;
-   }
- 
--  return InternalLoad(aURI,
--                      referrer,
--                      referrerPolicy,
--                      owner,
--                      flags,
--                      target.get(),
--                      nullptr,      // No type hint
--                      NullString(), // No forced download
--                      postStream,
--                      headersStream,
--                      loadType,
--                      nullptr, // No SHEntry
--                      aFirstParty,
--                      srcdoc,
--                      sourceDocShell,
--                      baseURI,
--                      nullptr,  // No nsIDocShell
--                      nullptr); // No nsIRequest
-+  return InternalLoad2(aURI,
-+                       originalURI,
-+                       referrer,
-+                       referrerPolicy,
-+                       owner,
-+                       flags,
-+                       target.get(),
-+                       nullptr,      // No type hint
-+                       NullString(), // No forced download
-+                       postStream,
-+                       headersStream,
-+                       loadType,
-+                       nullptr, // No SHEntry
-+                       aFirstParty,
-+                       srcdoc,
-+                       sourceDocShell,
-+                       baseURI,
-+                       nullptr,  // No nsIDocShell
-+                       nullptr); // No nsIRequest
- }
- 
- NS_IMETHODIMP
- nsDocShell::LoadStream(nsIInputStream* aStream, nsIURI* aURI,
-                        const nsACString& aContentType,
-                        const nsACString& aContentCharset,
-                        nsIDocShellLoadInfo* aLoadInfo)
- {
-@@ -5398,21 +5405,21 @@ nsDocShell::LoadErrorPage(nsIURI* aURI, 
-   // end of the URL, so append it last.
-   errorPageUrl.AppendLiteral("&d=");
-   errorPageUrl.AppendASCII(escapedDescription.get());
- 
-   nsCOMPtr<nsIURI> errorPageURI;
-   rv = NS_NewURI(getter_AddRefs(errorPageURI), errorPageUrl);
-   NS_ENSURE_SUCCESS(rv, rv);
- 
--  return InternalLoad(errorPageURI, nullptr, mozilla::net::RP_Default,
--                      nullptr, INTERNAL_LOAD_FLAGS_INHERIT_OWNER, nullptr,
--                      nullptr, NullString(), nullptr, nullptr, LOAD_ERROR_PAGE,
--                      nullptr, true, NullString(), this, nullptr, nullptr,
--                      nullptr);
-+  return InternalLoad2(errorPageURI, nullptr, nullptr, mozilla::net::RP_Default,
-+                       nullptr, INTERNAL_LOAD_FLAGS_INHERIT_OWNER, nullptr,
-+                       nullptr, NullString(), nullptr, nullptr, LOAD_ERROR_PAGE,
-+                       nullptr, true, NullString(), this, nullptr, nullptr,
-+                       nullptr);
- }
- 
- NS_IMETHODIMP
- nsDocShell::Reload(uint32_t aReloadFlags)
- {
-   if (!IsNavigationAllowed()) {
-     return NS_OK; // JS may not handle returning of an error code
-   }
-@@ -5448,44 +5455,54 @@ nsDocShell::Reload(uint32_t aReloadFlags
-     nsCOMPtr<nsIDocument> doc(GetDocument());
- 
-     // Do not inherit owner from document
-     uint32_t flags = INTERNAL_LOAD_FLAGS_NONE;
-     nsAutoString srcdoc;
-     nsIPrincipal* principal = nullptr;
-     nsAutoString contentTypeHint;
-     nsCOMPtr<nsIURI> baseURI;
-+    nsCOMPtr<nsIURI> originalURI;
-     if (doc) {
-       principal = doc->NodePrincipal();
-       doc->GetContentType(contentTypeHint);
- 
-       if (doc->IsSrcdocDocument()) {
-         doc->GetSrcdocData(srcdoc);
-         flags |= INTERNAL_LOAD_FLAGS_IS_SRCDOC;
-         baseURI = doc->GetBaseURI();
-       }
--    }
--    rv = InternalLoad(mCurrentURI,
--                      mReferrerURI,
--                      mReferrerPolicy,
--                      principal,
--                      flags,
--                      nullptr,         // No window target
--                      NS_LossyConvertUTF16toASCII(contentTypeHint).get(),
--                      NullString(),    // No forced download
--                      nullptr,         // No post data
--                      nullptr,         // No headers data
--                      loadType,        // Load type
--                      nullptr,         // No SHEntry
--                      true,
--                      srcdoc,          // srcdoc argument for iframe
--                      this,            // For reloads we are the source
--                      baseURI,
--                      nullptr,         // No nsIDocShell
--                      nullptr);        // No nsIRequest
-+      nsCOMPtr<nsIChannel> chan = doc->GetChannel();
-+      if (chan) {
-+        nsCOMPtr<nsIHttpChannel> httpChan(do_QueryInterface(chan));
-+        if (httpChan) {
-+          httpChan->GetOriginalURI(getter_AddRefs(originalURI));
-+        }
-+      } 
-+    }
-+
-+    rv = InternalLoad2(mCurrentURI,
-+                       originalURI,
-+                       mReferrerURI,
-+                       mReferrerPolicy,
-+                       principal,
-+                       flags,
-+                       nullptr,         // No window target
-+                       NS_LossyConvertUTF16toASCII(contentTypeHint).get(),
-+                       NullString(),    // No forced download
-+                       nullptr,         // No post data
-+                       nullptr,         // No headers data
-+                       loadType,        // Load type
-+                       nullptr,         // No SHEntry
-+                       true,
-+                       srcdoc,          // srcdoc argument for iframe
-+                       this,            // For reloads we are the source
-+                       baseURI,
-+                       nullptr,         // No nsIDocShell
-+                       nullptr);        // No nsIRequest
-   }
- 
-   return rv;
- }
- 
- NS_IMETHODIMP
- nsDocShell::Stop(uint32_t aStopFlags)
- {
-@@ -9463,27 +9480,28 @@ CopyFavicon(nsIURI* aOldURI, nsIURI* aNe
- #endif
- }
- 
- } // anonymous namespace
- 
- class InternalLoadEvent : public nsRunnable
- {
- public:
--  InternalLoadEvent(nsDocShell* aDocShell, nsIURI* aURI,
-+  InternalLoadEvent(nsDocShell* aDocShell, nsIURI* aURI, nsIURI* aOriginalURI,
-                     nsIURI* aReferrer, uint32_t aReferrerPolicy,
-                     nsISupports* aOwner, uint32_t aFlags,
-                     const char* aTypeHint, nsIInputStream* aPostData,
-                     nsIInputStream* aHeadersData, uint32_t aLoadType,
-                     nsISHEntry* aSHEntry, bool aFirstParty,
-                     const nsAString& aSrcdoc, nsIDocShell* aSourceDocShell,
-                     nsIURI* aBaseURI)
-     : mSrcdoc(aSrcdoc)
-     , mDocShell(aDocShell)
-     , mURI(aURI)
-+    , mOriginalURI(aOriginalURI)
-     , mReferrer(aReferrer)
-     , mReferrerPolicy(aReferrerPolicy)
-     , mOwner(aOwner)
-     , mPostData(aPostData)
-     , mHeadersData(aHeadersData)
-     , mSHEntry(aSHEntry)
-     , mFlags(aFlags)
-     , mLoadType(aLoadType)
-@@ -9494,34 +9512,36 @@ public:
-     // Make sure to keep null things null as needed
-     if (aTypeHint) {
-       mTypeHint = aTypeHint;
-     }
-   }
- 
-   NS_IMETHOD Run()
-   {
--    return mDocShell->InternalLoad(mURI, mReferrer,
--                                   mReferrerPolicy,
--                                   mOwner, mFlags,
--                                   nullptr, mTypeHint.get(),
--                                   NullString(), mPostData, mHeadersData,
--                                   mLoadType, mSHEntry, mFirstParty,
--                                   mSrcdoc, mSourceDocShell, mBaseURI,
--                                   nullptr, nullptr);
-+    return mDocShell->InternalLoad2(mURI, mOriginalURI,
-+                                    mReferrer,
-+                                    mReferrerPolicy,
-+                                    mOwner, mFlags,
-+                                    nullptr, mTypeHint.get(),
-+                                    NullString(), mPostData, mHeadersData,
-+                                    mLoadType, mSHEntry, mFirstParty,
-+                                    mSrcdoc, mSourceDocShell, mBaseURI,
-+                                    nullptr, nullptr);
-   }
- 
- private:
-   // Use IDL strings so .get() returns null by default
-   nsXPIDLString mWindowTarget;
-   nsXPIDLCString mTypeHint;
-   nsString mSrcdoc;
- 
-   nsRefPtr<nsDocShell> mDocShell;
-   nsCOMPtr<nsIURI> mURI;
-+  nsCOMPtr<nsIURI> mOriginalURI;
-   nsCOMPtr<nsIURI> mReferrer;
-   uint32_t mReferrerPolicy;
-   nsCOMPtr<nsISupports> mOwner;
-   nsCOMPtr<nsIInputStream> mPostData;
-   nsCOMPtr<nsIInputStream> mHeadersData;
-   nsCOMPtr<nsISHEntry> mSHEntry;
-   uint32_t mFlags;
-   uint32_t mLoadType;
-@@ -9584,16 +9604,43 @@ nsDocShell::InternalLoad(nsIURI* aURI,
-                          nsISHEntry* aSHEntry,
-                          bool aFirstParty,
-                          const nsAString& aSrcdoc,
-                          nsIDocShell* aSourceDocShell,
-                          nsIURI* aBaseURI,
-                          nsIDocShell** aDocShell,
-                          nsIRequest** aRequest)
- {
-+  return InternalLoad2(aURI, nullptr, aReferrer, aReferrerPolicy, aOwner,
-+                       aFlags, aWindowTarget, aTypeHint, aFileName, aPostData,
-+                       aHeadersData, aLoadType, aSHEntry, aFirstParty, aSrcdoc,
-+                       aSourceDocShell, aBaseURI, aDocShell, aRequest);
-+}
-+
-+NS_IMETHODIMP
-+nsDocShell::InternalLoad2(nsIURI* aURI,
-+                          nsIURI* aOriginalURI,
-+                          nsIURI* aReferrer,
-+                          uint32_t aReferrerPolicy,
-+                          nsISupports* aOwner,
-+                          uint32_t aFlags,
-+                          const char16_t* aWindowTarget,
-+                          const char* aTypeHint,
-+                          const nsAString& aFileName,
-+                          nsIInputStream* aPostData,
-+                          nsIInputStream* aHeadersData,
-+                          uint32_t aLoadType,
-+                          nsISHEntry* aSHEntry,
-+                          bool aFirstParty,
-+                          const nsAString& aSrcdoc,
-+                          nsIDocShell* aSourceDocShell,
-+                          nsIURI* aBaseURI,
-+                          nsIDocShell** aDocShell,
-+                          nsIRequest** aRequest)
-+{
-   nsresult rv = NS_OK;
-   mOriginalUriString.Truncate();
- 
- #ifdef PR_LOGGING
-   if (gDocShellLeakLog && PR_LOG_TEST(gDocShellLeakLog, PR_LOG_DEBUG)) {
-     nsAutoCString spec;
-     if (aURI) {
-       aURI->GetSpec(spec);
-@@ -9831,34 +9878,58 @@ nsDocShell::InternalLoad(nsIURI* aURI,
-       targetDocShell = do_QueryInterface(webNav);
-     }
- 
-     //
-     // Transfer the load to the target DocShell...  Pass nullptr as the
-     // window target name from to prevent recursive retargeting!
-     //
-     if (NS_SUCCEEDED(rv) && targetDocShell) {
--      rv = targetDocShell->InternalLoad(aURI,
--                                        aReferrer,
--                                        aReferrerPolicy,
--                                        owner,
--                                        aFlags,
--                                        nullptr,         // No window target
--                                        aTypeHint,
--                                        NullString(),    // No forced download
--                                        aPostData,
--                                        aHeadersData,
--                                        aLoadType,
--                                        aSHEntry,
--                                        aFirstParty,
--                                        aSrcdoc,
--                                        aSourceDocShell,
--                                        aBaseURI,
--                                        aDocShell,
--                                        aRequest);
-+      nsCOMPtr<nsIDocShell_ESR38_2> dsESR38 = do_QueryInterface(targetDocShell);
-+      if (dsESR38) {
-+        rv = dsESR38->InternalLoad2(aURI,
-+                                    aOriginalURI,
-+                                    aReferrer,
-+                                    aReferrerPolicy,
-+                                    owner,
-+                                    aFlags,
-+                                    nullptr,         // No window target
-+                                    aTypeHint,
-+                                    NullString(),    // No forced download
-+                                    aPostData,
-+                                    aHeadersData,
-+                                    aLoadType,
-+                                    aSHEntry,
-+                                    aFirstParty,
-+                                    aSrcdoc,
-+                                    aSourceDocShell,
-+                                    aBaseURI,
-+                                    aDocShell,
-+                                    aRequest);
-+      } else {
-+        rv = targetDocShell->InternalLoad(aURI,
-+                                          aReferrer,
-+                                          aReferrerPolicy,
-+                                          owner,
-+                                          aFlags,
-+                                          nullptr,         // No window target
-+                                          aTypeHint,
-+                                          NullString(),    // No forced download
-+                                          aPostData,
-+                                          aHeadersData,
-+                                          aLoadType,
-+                                          aSHEntry,
-+                                          aFirstParty,
-+                                          aSrcdoc,
-+                                          aSourceDocShell,
-+                                          aBaseURI,
-+                                          aDocShell,
-+                                          aRequest);
-+      }
-+
-       if (rv == NS_ERROR_NO_CONTENT) {
-         // XXXbz except we never reach this code!
-         if (isNewWindow) {
-           //
-           // At this point, a new window has been created, but the
-           // URI did not have any data associated with it...
-           //
-           // So, the best we can do, is to tear down the new window
-@@ -9913,17 +9984,17 @@ nsDocShell::InternalLoad(nsIURI* aURI,
-       // the unload event also a replace load, so we don't
-       // create extra history entries.
-       if (LOAD_TYPE_HAS_FLAGS(aLoadType, LOAD_FLAGS_REPLACE_HISTORY)) {
-         mLoadType = LOAD_NORMAL_REPLACE;
-       }
- 
-       // Do this asynchronously
-       nsCOMPtr<nsIRunnable> ev =
--        new InternalLoadEvent(this, aURI, aReferrer,
-+        new InternalLoadEvent(this, aURI, aOriginalURI, aReferrer,
-                               aReferrerPolicy, aOwner, aFlags,
-                               aTypeHint, aPostData, aHeadersData,
-                               aLoadType, aSHEntry, aFirstParty, aSrcdoc,
-                               aSourceDocShell, aBaseURI);
-       return NS_DispatchToCurrentThread(ev);
-     }
- 
-     // Just ignore this load attempt
-@@ -10371,17 +10442,17 @@ nsDocShell::InternalLoad(nsIURI* aURI,
-   }
- 
-   net::PredictorLearn(aURI, nullptr,
-                       nsINetworkPredictor::LEARN_LOAD_TOPLEVEL, this);
-   net::PredictorPredict(aURI, nullptr,
-                         nsINetworkPredictor::PREDICT_LOAD, this, nullptr);
- 
-   nsCOMPtr<nsIRequest> req;
--  rv = DoURILoad(aURI, aReferrer,
-+  rv = DoURILoad(aURI, aOriginalURI, aReferrer,
-                  !(aFlags & INTERNAL_LOAD_FLAGS_DONT_SEND_REFERRER),
-                  aReferrerPolicy,
-                  owner, aTypeHint, aFileName, aPostData, aHeadersData,
-                  aFirstParty, aDocShell, getter_AddRefs(req),
-                  (aFlags & INTERNAL_LOAD_FLAGS_FIRST_LOAD) != 0,
-                  (aFlags & INTERNAL_LOAD_FLAGS_BYPASS_CLASSIFIER) != 0,
-                  (aFlags & INTERNAL_LOAD_FLAGS_FORCE_ALLOW_COOKIES) != 0,
-                  srcdoc, aBaseURI, contentType);
-@@ -10445,16 +10516,17 @@ nsDocShell::GetInheritedPrincipal(bool a
-     return docPrincipal;
-   }
- 
-   return nullptr;
- }
- 
- nsresult
- nsDocShell::DoURILoad(nsIURI* aURI,
-+                      nsIURI* aOriginalURI,
-                       nsIURI* aReferrerURI,
-                       bool aSendReferrer,
-                       uint32_t aReferrerPolicy,
-                       nsISupports* aOwner,
-                       const char* aTypeHint,
-                       const nsAString& aFileName,
-                       nsIInputStream* aPostData,
-                       nsIInputStream* aHeadersData,
-@@ -10652,17 +10724,22 @@ nsDocShell::DoURILoad(nsIURI* aURI,
-   }
- 
-   // Make sure to give the caller a channel if we managed to create one
-   // This is important for correct error page/session history interaction
-   if (aRequest) {
-     NS_ADDREF(*aRequest = channel);
-   }
- 
--  channel->SetOriginalURI(aURI);
-+  if (aOriginalURI) {
-+    channel->SetOriginalURI(aOriginalURI);
-+  } else {
-+    channel->SetOriginalURI(aURI);
-+  }
-+
-   if (aTypeHint && *aTypeHint) {
-     channel->SetContentType(nsDependentCString(aTypeHint));
-     mContentTypeHint = aTypeHint;
-   } else {
-     mContentTypeHint.Truncate();
-   }
- 
-   if (!aFileName.IsVoid()) {
-@@ -11624,16 +11701,20 @@ nsDocShell::AddState(JS::Handle<JS::Valu
- 
-     // AddToSessionHistory may not modify mOSHE.  In case it doesn't,
-     // we'll just set mOSHE here.
-     mOSHE = newSHEntry;
- 
-   } else {
-     newSHEntry = mOSHE;
-     newSHEntry->SetURI(newURI);
-+    nsCOMPtr<nsISHEntry_ESR38> entryESR38 = do_QueryInterface(newSHEntry);
-+    if (entryESR38) {
-+      entryESR38->SetOriginalURI(newURI);
-+    }
-   }
- 
-   // Step 4: Modify new/original session history entry and clear its POST
-   // data, if there is any.
-   newSHEntry->SetStateData(scContainer);
-   newSHEntry->SetPostData(nullptr);
- 
-   // If this push/replaceState changed the document's current URI and the new
-@@ -11816,16 +11897,17 @@ nsDocShell::AddToSessionHistory(nsIURI* 
- 
-     if (!entry) {
-       return NS_ERROR_OUT_OF_MEMORY;
-     }
-   }
- 
-   // Get the post data & referrer
-   nsCOMPtr<nsIInputStream> inputStream;
-+  nsCOMPtr<nsIURI> originalURI;
-   nsCOMPtr<nsIURI> referrerURI;
-   uint32_t referrerPolicy = mozilla::net::RP_Default;
-   nsCOMPtr<nsISupports> cacheKey;
-   nsCOMPtr<nsISupports> owner = aOwner;
-   bool expired = false;
-   bool discardLayoutState = false;
-   nsCOMPtr<nsICachingChannel> cacheChannel;
-   if (aChannel) {
-@@ -11843,16 +11925,17 @@ nsDocShell::AddToSessionHistory(nsIURI* 
-     if (!httpChannel) {
-       GetHttpChannel(aChannel, getter_AddRefs(httpChannel));
-     }
-     if (httpChannel) {
-       nsCOMPtr<nsIUploadChannel> uploadChannel(do_QueryInterface(httpChannel));
-       if (uploadChannel) {
-         uploadChannel->GetUploadStream(getter_AddRefs(inputStream));
-       }
-+      httpChannel->GetOriginalURI(getter_AddRefs(originalURI));
-       httpChannel->GetReferrer(getter_AddRefs(referrerURI));
-       httpChannel->GetReferrerPolicy(&referrerPolicy);
- 
-       discardLayoutState = ShouldDiscardLayoutState(httpChannel);
-     }
-     aChannel->GetOwner(getter_AddRefs(owner));
-     if (!owner) {
-       nsCOMPtr<nsILoadInfo> loadInfo;
-@@ -11875,16 +11958,21 @@ nsDocShell::AddToSessionHistory(nsIURI* 
-                 EmptyString(),     // Title
-                 inputStream,       // Post data stream
-                 nullptr,           // LayoutHistory state
-                 cacheKey,          // CacheKey
-                 mContentTypeHint,  // Content-type
-                 owner,             // Channel or provided owner
-                 mHistoryID,
-                 mDynamicallyCreated);
-+
-+  nsCOMPtr<nsISHEntry_ESR38> entryESR38 = do_QueryInterface(entry);
-+  if (entryESR38) {
-+    entryESR38->SetOriginalURI(originalURI);
-+  }
-   entry->SetReferrerURI(referrerURI);
-   entry->SetReferrerPolicy(referrerPolicy);
-   nsCOMPtr<nsIInputStreamChannel> inStrmChan = do_QueryInterface(aChannel);
-   if (inStrmChan) {
-     bool isSrcdocChannel;
-     inStrmChan->GetIsSrcdocChannel(&isSrcdocChannel);
-     if (isSrcdocChannel) {
-       nsAutoString srcdoc;
-@@ -11976,25 +12064,32 @@ nsDocShell::AddToSessionHistory(nsIURI* 
- nsresult
- nsDocShell::LoadHistoryEntry(nsISHEntry* aEntry, uint32_t aLoadType)
- {
-   if (!IsNavigationAllowed()) {
-     return NS_OK;
-   }
- 
-   nsCOMPtr<nsIURI> uri;
-+  nsCOMPtr<nsIURI> originalURI;
-   nsCOMPtr<nsIInputStream> postData;
-   nsCOMPtr<nsIURI> referrerURI;
-   uint32_t referrerPolicy;
-   nsAutoCString contentType;
-   nsCOMPtr<nsISupports> owner;
- 
-   NS_ENSURE_TRUE(aEntry, NS_ERROR_FAILURE);
- 
-   NS_ENSURE_SUCCESS(aEntry->GetURI(getter_AddRefs(uri)), NS_ERROR_FAILURE);
-+
-+  nsCOMPtr<nsISHEntry_ESR38> entryESR38 = do_QueryInterface(aEntry);
-+  if (entryESR38) {
-+    NS_ENSURE_SUCCESS(entryESR38->GetOriginalURI(getter_AddRefs(originalURI)),
-+                      NS_ERROR_FAILURE);
-+  }
-   NS_ENSURE_SUCCESS(aEntry->GetReferrerURI(getter_AddRefs(referrerURI)),
-                     NS_ERROR_FAILURE);
-   NS_ENSURE_SUCCESS(aEntry->GetReferrerPolicy(&referrerPolicy),
-                     NS_ERROR_FAILURE);
-   NS_ENSURE_SUCCESS(aEntry->GetPostData(getter_AddRefs(postData)),
-                     NS_ERROR_FAILURE);
-   NS_ENSURE_SUCCESS(aEntry->GetContentType(contentType), NS_ERROR_FAILURE);
-   NS_ENSURE_SUCCESS(aEntry->GetOwner(getter_AddRefs(owner)), NS_ERROR_FAILURE);
-@@ -12064,34 +12159,35 @@ nsDocShell::LoadHistoryEntry(nsISHEntry*
-   } else {
-     srcdoc = NullString();
-   }
- 
-   // Passing nullptr as aSourceDocShell gives the same behaviour as before
-   // aSourceDocShell was introduced. According to spec we should be passing
-   // the source browsing context that was used when the history entry was
-   // first created. bug 947716 has been created to address this issue.
--  rv = InternalLoad(uri,
--                    referrerURI,
--                    referrerPolicy,
--                    owner,
--                    flags,
--                    nullptr,            // No window target
--                    contentType.get(),  // Type hint
--                    NullString(),       // No forced file download
--                    postData,           // Post data stream
--                    nullptr,            // No headers stream
--                    aLoadType,          // Load type
--                    aEntry,             // SHEntry
--                    true,
--                    srcdoc,
--                    nullptr,            // Source docshell, see comment above
--                    baseURI,
--                    nullptr,            // No nsIDocShell
--                    nullptr);           // No nsIRequest
-+  rv = InternalLoad2(uri,
-+                     originalURI,
-+                     referrerURI,
-+                     referrerPolicy,
-+                     owner,
-+                     flags,
-+                     nullptr,            // No window target
-+                     contentType.get(),  // Type hint
-+                     NullString(),       // No forced file download
-+                     postData,           // Post data stream
-+                     nullptr,            // No headers stream
-+                     aLoadType,          // Load type
-+                     aEntry,             // SHEntry
-+                     true,
-+                     srcdoc,
-+                     nullptr,            // Source docshell, see comment above
-+                     baseURI,
-+                     nullptr,            // No nsIDocShell
-+                     nullptr);           // No nsIRequest
-   return rv;
- }
- 
- NS_IMETHODIMP
- nsDocShell::GetShouldSaveLayoutState(bool* aShould)
- {
-   *aShould = false;
-   if (mOSHE) {
-@@ -13527,35 +13623,36 @@ nsDocShell::OnLinkClickSync(nsIContent* 
-   // with it under InternalLoad; we do _not_ want to change the URI
-   // our caller passed in.
-   nsCOMPtr<nsIURI> clonedURI;
-   aURI->Clone(getter_AddRefs(clonedURI));
-   if (!clonedURI) {
-     return NS_ERROR_OUT_OF_MEMORY;
-   }
- 
--  nsresult rv = InternalLoad(clonedURI,                 // New URI
--                             referer,                   // Referer URI
--                             refererPolicy,             // Referer policy
--                             aContent->NodePrincipal(), // Owner is our node's
--                                                        // principal
--                             flags,
--                             target.get(),              // Window target
--                             NS_LossyConvertUTF16toASCII(typeHint).get(),
--                             aFileName,                 // Download as file
--                             aPostDataStream,           // Post data stream
--                             aHeadersDataStream,        // Headers stream
--                             LOAD_LINK,                 // Load type
--                             nullptr,                   // No SHEntry
--                             true,                      // first party site
--                             NullString(),              // No srcdoc
--                             this,                      // We are the source
--                             nullptr,                   // baseURI not needed
--                             aDocShell,                 // DocShell out-param
--                             aRequest);                 // Request out-param
-+  nsresult rv = InternalLoad2(clonedURI,                 // New URI
-+                              nullptr,                   // Original URI
-+                              referer,                   // Referer URI
-+                              refererPolicy,             // Referer policy
-+                              aContent->NodePrincipal(), // Owner is our node's
-+                                                         // principal
-+                              flags,
-+                              target.get(),              // Window target
-+                              NS_LossyConvertUTF16toASCII(typeHint).get(),
-+                              aFileName,                 // Download as file
-+                              aPostDataStream,           // Post data stream
-+                              aHeadersDataStream,        // Headers stream
-+                              LOAD_LINK,                 // Load type
-+                              nullptr,                   // No SHEntry
-+                              true,                      // first party site
-+                              NullString(),              // No srcdoc
-+                              this,                      // We are the source
-+                              nullptr,                   // baseURI not needed
-+                              aDocShell,                 // DocShell out-param
-+                              aRequest);                 // Request out-param
-   if (NS_SUCCEEDED(rv)) {
-     DispatchPings(aContent, aURI, referer, refererPolicy);
-   }
-   return rv;
- }
- 
- NS_IMETHODIMP
- nsDocShell::OnOverLink(nsIContent* aContent,
-diff --git a/docshell/base/nsDocShell.h b/docshell/base/nsDocShell.h
---- a/docshell/base/nsDocShell.h
-+++ b/docshell/base/nsDocShell.h
-@@ -132,17 +132,17 @@ enum eCharsetReloadState
- };
- 
- //*****************************************************************************
- //***    nsDocShell
- //*****************************************************************************
- 
- class nsDocShell final
-   : public nsDocLoader
--  , public nsIDocShell_ESR38
-+  , public nsIDocShell_ESR38_2
-   , public nsIWebNavigation
-   , public nsIBaseWindow
-   , public nsIScrollable
-   , public nsITextScroll
-   , public nsIDocCharset
-   , public nsIContentViewerContainer
-   , public nsIRefreshURI
-   , public nsIWebProgressListener
-@@ -164,16 +164,17 @@ public:
-   nsDocShell();
- 
-   NS_DECL_AND_IMPL_ZEROING_OPERATOR_NEW
- 
-   virtual nsresult Init() override;
- 
-   NS_DECL_ISUPPORTS_INHERITED
- 
-+  NS_DECL_NSIDOCSHELL_ESR38_2
-   NS_DECL_NSIDOCSHELL_ESR38
-   NS_DECL_NSIDOCSHELL
-   NS_DECL_NSIDOCSHELLTREEITEM
-   NS_DECL_NSIWEBNAVIGATION
-   NS_DECL_NSIBASEWINDOW
-   NS_DECL_NSISCROLLABLE
-   NS_DECL_NSITEXTSCROLL
-   NS_DECL_NSIDOCCHARSET
-@@ -312,17 +313,20 @@ protected:
-   // at the parent.
-   nsIPrincipal* GetInheritedPrincipal(bool aConsiderCurrentDocument);
- 
-   // Actually open a channel and perform a URI load.  Note: whatever owner is
-   // passed to this function will be set on the channel.  Callers who wish to
-   // not have an owner on the channel should just pass null.
-   // If aSrcdoc is not void, the load will be considered as a srcdoc load,
-   // and the contents of aSrcdoc will be loaded instead of aURI.
-+  // aOriginalURI will be set as the originalURI on the channel that does the
-+  // load. If aOriginalURI is null, aURI will be set as the originalURI.
-   nsresult DoURILoad(nsIURI* aURI,
-+                     nsIURI* aOriginalURI,
-                      nsIURI* aReferrer,
-                      bool aSendReferrer,
-                      uint32_t aReferrerPolicy,
-                      nsISupports* aOwner,
-                      const char* aTypeHint,
-                      const nsAString& aFileName,
-                      nsIInputStream* aPostData,
-                      nsIInputStream* aHeadersData,
-diff --git a/docshell/base/nsDocShellLoadInfo.cpp b/docshell/base/nsDocShellLoadInfo.cpp
---- a/docshell/base/nsDocShellLoadInfo.cpp
-+++ b/docshell/base/nsDocShellLoadInfo.cpp
-@@ -34,16 +34,17 @@ nsDocShellLoadInfo::~nsDocShellLoadInfo(
- // nsDocShellLoadInfo::nsISupports
- //*****************************************************************************
- 
- NS_IMPL_ADDREF(nsDocShellLoadInfo)
- NS_IMPL_RELEASE(nsDocShellLoadInfo)
- 
- NS_INTERFACE_MAP_BEGIN(nsDocShellLoadInfo)
-   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDocShellLoadInfo)
-+  NS_INTERFACE_MAP_ENTRY(nsIDocShellLoadInfo_ESR38)
-   NS_INTERFACE_MAP_ENTRY(nsIDocShellLoadInfo)
- NS_INTERFACE_MAP_END
- 
- //*****************************************************************************
- // nsDocShellLoadInfo::nsIDocShellLoadInfo
- //*****************************************************************************
- 
- NS_IMETHODIMP
-@@ -59,16 +60,33 @@ nsDocShellLoadInfo::GetReferrer(nsIURI**
- NS_IMETHODIMP
- nsDocShellLoadInfo::SetReferrer(nsIURI* aReferrer)
- {
-   mReferrer = aReferrer;
-   return NS_OK;
- }
- 
- NS_IMETHODIMP
-+nsDocShellLoadInfo::GetOriginalURI(nsIURI** aOriginalURI)
-+{
-+  NS_ENSURE_ARG_POINTER(aOriginalURI);
-+
-+  *aOriginalURI = mOriginalURI;
-+  NS_IF_ADDREF(*aOriginalURI);
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsDocShellLoadInfo::SetOriginalURI(nsIURI* aOriginalURI)
-+{
-+  mOriginalURI = aOriginalURI;
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
- nsDocShellLoadInfo::GetOwner(nsISupports** aOwner)
- {
-   NS_ENSURE_ARG_POINTER(aOwner);
- 
-   *aOwner = mOwner;
-   NS_IF_ADDREF(*aOwner);
-   return NS_OK;
- }
-diff --git a/docshell/base/nsDocShellLoadInfo.h b/docshell/base/nsDocShellLoadInfo.h
---- a/docshell/base/nsDocShellLoadInfo.h
-+++ b/docshell/base/nsDocShellLoadInfo.h
-@@ -14,29 +14,31 @@
- // Interfaces Needed
- #include "nsIDocShellLoadInfo.h"
- 
- class nsIInputStream;
- class nsISHEntry;
- class nsIURI;
- class nsIDocShell;
- 
--class nsDocShellLoadInfo : public nsIDocShellLoadInfo
-+class nsDocShellLoadInfo : public nsIDocShellLoadInfo_ESR38
- {
- public:
-   nsDocShellLoadInfo();
- 
-   NS_DECL_ISUPPORTS
-+  NS_DECL_NSIDOCSHELLLOADINFO_ESR38
-   NS_DECL_NSIDOCSHELLLOADINFO
- 
- protected:
-   virtual ~nsDocShellLoadInfo();
- 
- protected:
-   nsCOMPtr<nsIURI> mReferrer;
-+  nsCOMPtr<nsIURI> mOriginalURI;
-   nsCOMPtr<nsISupports> mOwner;
-   bool mInheritOwner;
-   bool mOwnerIsExplicit;
-   bool mSendReferrer;
-   nsDocShellInfoReferrerPolicy mReferrerPolicy;
-   nsDocShellInfoLoadType mLoadType;
-   nsCOMPtr<nsISHEntry> mSHEntry;
-   nsString mTarget;
-diff --git a/docshell/base/nsIDocShell.idl b/docshell/base/nsIDocShell.idl
---- a/docshell/base/nsIDocShell.idl
-+++ b/docshell/base/nsIDocShell.idl
-@@ -1059,8 +1059,66 @@ interface nsIDocShell : nsIDocShellTreeI
- interface nsIDocShell_ESR38 : nsIDocShell
- {
-   /**
-    * True if new child docshells should allow content retargeting.
-    * Setting allowContentRetargeting also overwrites this value.
-    */
-   [infallible] attribute boolean allowContentRetargetingOnChildren;
- };
-+
-+[scriptable, builtinclass, uuid(607604b6-8fe0-4d2c-8a6c-44f5f31a6e02)]
-+interface nsIDocShell_ESR38_2 : nsIDocShell_ESR38
-+{
-+  /**
-+   * Loads the given URI.  This method is identical to loadURI(...) except
-+   * that its parameter list is broken out instead of being packaged inside
-+   * of an nsIDocShellLoadInfo object...
-+   *
-+   * @param aURI            - The URI to load.
-+   * @param aOriginalURI    - The URI to set as the originalURI on the channel
-+   *                          that does the load. If null, aURI will be set as
-+   *                          the originalURI.
-+   * @param aReferrer       - Referring URI
-+   * @param aReferrerPolicy - Referrer policy
-+   * @param aOwner          - Owner (security principal) 
-+   * @param aInheritOwner   - Flag indicating whether the owner of the current
-+   *                          document should be inherited if aOwner is null.
-+   * @param aStopActiveDoc  - Flag indicating whether loading the current
-+   *                          document should be stopped.
-+   * @param aWindowTarget   - Window target for the load.
-+   * @param aTypeHint       - A hint as to the content-type of the resulting
-+   *                          data.  May be null or empty if no hint.
-+   * @param aFileName       - Non-null when the link should be downloaded as
-+                              the given filename.
-+   * @param aPostDataStream - Post data stream (if POSTing)
-+   * @param aHeadersStream  - Stream containing "extra" request headers...
-+   * @param aLoadFlags      - Flags to modify load behaviour. Flags are defined
-+   *                          in nsIWebNavigation.
-+   * @param aSHEntry        - Active Session History entry (if loading from SH)
-+   * @param aSrcdoc           When INTERNAL_LOAD_FLAGS_IS_SRCDOC is set, the
-+   *                          contents of this parameter will be loaded instead
-+   *                          of aURI.
-+   * @param aSourceDocShell - The source browsing context for the navigation.
-+   * @param aBaseURI        - The base URI to be used for the load.  Set in
-+   *                          srcdoc loads as it cannot otherwise be inferred
-+   *                          in certain situations such as view-source.
-+   */
-+  [noscript]void internalLoad2(in nsIURI aURI,
-+                               in nsIURI aOriginalURI,
-+                               in nsIURI aReferrer,
-+                               in unsigned long aReferrerPolicy,
-+                               in nsISupports aOwner,
-+                               in uint32_t aFlags,
-+                               in wstring aWindowTarget,
-+                               in string aTypeHint,
-+                               in AString aFileName,
-+                               in nsIInputStream aPostDataStream,
-+                               in nsIInputStream aHeadersStream,
-+                               in unsigned long aLoadFlags,
-+                               in nsISHEntry aSHEntry,
-+                               in boolean firstParty,
-+                               in AString aSrcdoc,
-+                               in nsIDocShell aSourceDocShell,
-+                               in nsIURI aBaseURI,
-+                               out nsIDocShell aDocShell,
-+                               out nsIRequest aRequest);
-+};
-diff --git a/docshell/base/nsIDocShellLoadInfo.idl b/docshell/base/nsIDocShellLoadInfo.idl
---- a/docshell/base/nsIDocShellLoadInfo.idl
-+++ b/docshell/base/nsIDocShellLoadInfo.idl
-@@ -106,8 +106,17 @@ interface nsIDocShellLoadInfo : nsISuppo
-     attribute nsIDocShell sourceDocShell;
- 
-     /**
-      * Used for srcdoc loads to give view-source knowledge of the load's base
-      * URI as this information isn't embedded in the load's URI.
-      */
-     attribute nsIURI baseURI;
- };
-+
-+[scriptable, uuid(9d3bc466-5efe-414d-ae8b-3830b45877bb)]
-+interface nsIDocShellLoadInfo_ESR38 : nsIDocShellLoadInfo
-+{
-+    /**
-+     * The originalURI to be passed to nsIDocShell.internalLoad. May be null.
-+     */
-+    attribute nsIURI originalURI;
-+};
-diff --git a/docshell/shistory/public/nsISHEntry.idl b/docshell/shistory/public/nsISHEntry.idl
---- a/docshell/shistory/public/nsISHEntry.idl
-+++ b/docshell/shistory/public/nsISHEntry.idl
-@@ -319,8 +319,18 @@ interface nsISHEntryInternal : nsISuppor
- #define NS_SHENTRY_CID \
- {0xbfd1a791, 0xad9f, 0x11d3, {0xbd, 0xc7, 0x0, 0x50, 0x4, 0xa, 0x9b, 0x44}}
- 
- #define NS_SHENTRY_CONTRACTID \
-     "@mozilla.org/browser/session-history-entry;1"
- 
- %}
- 
-+[scriptable, uuid(e45ab6ef-3485-449c-b91c-0846b2bf6faf)]
-+interface nsISHEntry_ESR38 : nsISHEntry
-+{
-+    /**
-+     * A readonly property that returns the original URI of the current entry.
-+     * If an entry is the result of a redirect this attribute holds original
-+     * URI. The object returned is of type nsIURI
-+     */
-+    attribute nsIURI originalURI;
-+};
-diff --git a/docshell/shistory/src/nsSHEntry.cpp b/docshell/shistory/src/nsSHEntry.cpp
---- a/docshell/shistory/src/nsSHEntry.cpp
-+++ b/docshell/shistory/src/nsSHEntry.cpp
-@@ -38,16 +38,17 @@ nsSHEntry::nsSHEntry()
-   , mIsSrcdocEntry(false)
- {
-   mShared = new nsSHEntryShared();
- }
- 
- nsSHEntry::nsSHEntry(const nsSHEntry &other)
-   : mShared(other.mShared)
-   , mURI(other.mURI)
-+  , mOriginalURI(other.mOriginalURI)
-   , mReferrerURI(other.mReferrerURI)
-   , mReferrerPolicy(other.mReferrerPolicy)
-   , mTitle(other.mTitle)
-   , mPostData(other.mPostData)
-   , mLoadType(0)         // XXX why not copy?
-   , mID(other.mID)
-   , mScrollPositionX(0)  // XXX why not copy?
-   , mScrollPositionY(0)  // XXX why not copy?
-@@ -74,17 +75,17 @@ nsSHEntry::~nsSHEntry()
-   // Null out the mParent pointers on all our kids.
-   mChildren.EnumerateForwards(ClearParentPtr, nullptr);
- }
- 
- //*****************************************************************************
- //    nsSHEntry: nsISupports
- //*****************************************************************************
- 
--NS_IMPL_ISUPPORTS(nsSHEntry, nsISHContainer, nsISHEntry, nsISHEntryInternal)
-+NS_IMPL_ISUPPORTS(nsSHEntry, nsISHContainer, nsISHEntry_ESR38, nsISHEntry, nsISHEntryInternal)
- 
- //*****************************************************************************
- //    nsSHEntry: nsISHEntry
- //*****************************************************************************
- 
- NS_IMETHODIMP nsSHEntry::SetScrollPosition(int32_t x, int32_t y)
- {
-   mScrollPositionX = x;
-@@ -119,16 +120,29 @@ NS_IMETHODIMP nsSHEntry::GetURI(nsIURI**
- }
- 
- NS_IMETHODIMP nsSHEntry::SetURI(nsIURI* aURI)
- {
-   mURI = aURI;
-   return NS_OK;
- }
- 
-+NS_IMETHODIMP nsSHEntry::GetOriginalURI(nsIURI** aOriginalURI)
-+{
-+  *aOriginalURI = mOriginalURI;
-+  NS_IF_ADDREF(*aOriginalURI);
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP nsSHEntry::SetOriginalURI(nsIURI* aOriginalURI)
-+{
-+  mOriginalURI = aOriginalURI;
-+  return NS_OK;
-+}
-+
- NS_IMETHODIMP nsSHEntry::GetReferrerURI(nsIURI **aReferrerURI)
- {
-   *aReferrerURI = mReferrerURI;
-   NS_IF_ADDREF(*aReferrerURI);
-   return NS_OK;
- }
- 
- NS_IMETHODIMP nsSHEntry::SetReferrerURI(nsIURI *aReferrerURI)
-diff --git a/docshell/shistory/src/nsSHEntry.h b/docshell/shistory/src/nsSHEntry.h
---- a/docshell/shistory/src/nsSHEntry.h
-+++ b/docshell/shistory/src/nsSHEntry.h
-@@ -17,25 +17,26 @@
- // Interfaces needed
- #include "nsISHEntry.h"
- #include "nsISHContainer.h"
- 
- class nsSHEntryShared;
- class nsIInputStream;
- class nsIURI;
- 
--class nsSHEntry final : public nsISHEntry,
-+class nsSHEntry final : public nsISHEntry_ESR38,
-                             public nsISHContainer,
-                             public nsISHEntryInternal
- {
- public: 
-   nsSHEntry();
-   nsSHEntry(const nsSHEntry &other);
- 
-   NS_DECL_ISUPPORTS
-+  NS_DECL_NSISHENTRY_ESR38
-   NS_DECL_NSISHENTRY
-   NS_DECL_NSISHENTRYINTERNAL
-   NS_DECL_NSISHCONTAINER
- 
-   void DropPresentationState();
- 
-   static nsresult Startup();
-   static void Shutdown();
-@@ -44,16 +45,17 @@ private:
-   ~nsSHEntry();
- 
-   // We share the state in here with other SHEntries which correspond to the
-   // same document.
-   nsRefPtr<nsSHEntryShared> mShared;
- 
-   // See nsSHEntry.idl for comments on these members.
-   nsCOMPtr<nsIURI>         mURI;
-+  nsCOMPtr<nsIURI>         mOriginalURI;
-   nsCOMPtr<nsIURI>         mReferrerURI;
-   uint32_t                 mReferrerPolicy;
-   nsString                 mTitle;
-   nsCOMPtr<nsIInputStream> mPostData;
-   uint32_t                 mLoadType;
-   uint32_t                 mID;
-   int32_t                  mScrollPositionX;
-   int32_t                  mScrollPositionY;
-diff --git a/docshell/shistory/src/nsSHistory.cpp b/docshell/shistory/src/nsSHistory.cpp
---- a/docshell/shistory/src/nsSHistory.cpp
-+++ b/docshell/shistory/src/nsSHistory.cpp
-@@ -1779,16 +1779,26 @@ nsSHistory::InitiateLoad(nsISHEntry * aF
-    * so that proper loadType is maintained through out a frameset
-    */
-   aFrameEntry->SetLoadType(aLoadType);    
-   aFrameDS->CreateLoadInfo (getter_AddRefs(loadInfo));
- 
-   loadInfo->SetLoadType(aLoadType);
-   loadInfo->SetSHEntry(aFrameEntry);
- 
-+  nsCOMPtr<nsIURI> originalURI;
-+  nsCOMPtr<nsISHEntry_ESR38> feESR38 = do_QueryInterface(aFrameEntry);
-+  if (feESR38) {
-+    feESR38->GetOriginalURI(getter_AddRefs(originalURI));
-+  }
-+  nsCOMPtr<nsIDocShellLoadInfo_ESR38> liESR38 = do_QueryInterface(loadInfo);
-+  if (liESR38) {
-+    liESR38->SetOriginalURI(originalURI);
-+  }
-+
-   nsCOMPtr<nsIURI> nextURI;
-   aFrameEntry->GetURI(getter_AddRefs(nextURI));
-   // Time   to initiate a document load
-   return aFrameDS->LoadURI(nextURI, loadInfo, nsIWebNavigation::LOAD_FLAGS_NONE, false);
- 
- }
- 
- 
-