diff --git a/mozilla/docshell/base/nsDocShell.cpp b/mozilla/docshell/base/nsDocShell.cpp index 6449b2d41f8..27687950ea7 100644 --- a/mozilla/docshell/base/nsDocShell.cpp +++ b/mozilla/docshell/base/nsDocShell.cpp @@ -4019,8 +4019,9 @@ nsresult nsDocShell::AddToSessionHistory(nsIURI *aURI, } } - // Get the post data + // Get the post data & referrer nsCOMPtr inputStream; + nsCOMPtr referrerURI; nsCOMPtr cacheKey; if (aChannel) { nsCOMPtr cacheChannel(do_QueryInterface(aChannel)); @@ -4034,6 +4035,7 @@ nsresult nsDocShell::AddToSessionHistory(nsIURI *aURI, if(httpChannel) { httpChannel->GetUploadStream(getter_AddRefs(inputStream)); + httpChannel->GetReferrer(getter_AddRefs(referrerURI)); } } @@ -4044,6 +4046,7 @@ nsresult nsDocShell::AddToSessionHistory(nsIURI *aURI, inputStream, // Post data stream nsnull, // LayoutHistory state cacheKey); // CacheKey + entry->SetReferrerURI(referrerURI); // If no Session History component is available in the parent DocShell @@ -4077,6 +4080,8 @@ NS_IMETHODIMP nsDocShell::LoadHistoryEntry(nsISHEntry* aEntry, PRUint32 aLoadTyp { nsCOMPtr uri; nsCOMPtr postData; + nsCOMPtr referrerURI; + PRBool repost = PR_TRUE; NS_ENSURE_TRUE(aEntry, NS_ERROR_FAILURE); @@ -4084,6 +4089,7 @@ NS_IMETHODIMP nsDocShell::LoadHistoryEntry(nsISHEntry* aEntry, PRUint32 aLoadTyp NS_ENSURE_TRUE(hEntry, NS_ERROR_FAILURE); NS_ENSURE_SUCCESS(hEntry->GetURI(getter_AddRefs(uri)), NS_ERROR_FAILURE); + NS_ENSURE_SUCCESS(aEntry->GetReferrerURI(getter_AddRefs(referrerURI)), NS_ERROR_FAILURE); NS_ENSURE_SUCCESS(aEntry->GetPostData(getter_AddRefs(postData)), NS_ERROR_FAILURE); @@ -4113,7 +4119,7 @@ NS_IMETHODIMP nsDocShell::LoadHistoryEntry(nsISHEntry* aEntry, PRUint32 aLoadTyp } #endif /* 0 */ - NS_ENSURE_SUCCESS(InternalLoad(uri, mReferrerURI, nsnull, PR_TRUE, PR_FALSE, nsnull, + NS_ENSURE_SUCCESS(InternalLoad(uri, referrerURI, nsnull, PR_TRUE, PR_FALSE, nsnull, postData, nsnull, aLoadType, aEntry), NS_ERROR_FAILURE); return NS_OK; @@ -4164,6 +4170,7 @@ nsDocShell::CloneAndReplace(nsISHEntry * src, PRUint32 aCloneID, nsCOMPtr uri; nsCOMPtr postdata; nsCOMPtr LHS; + nsCOMPtr referrerURI; PRUnichar * title=nsnull; nsCOMPtr parent; PRUint32 id; @@ -4173,6 +4180,7 @@ nsDocShell::CloneAndReplace(nsISHEntry * src, PRUint32 aCloneID, return result; srcHE->GetURI(getter_AddRefs(uri)); + src->GetReferrerURI(getter_AddRefs(referrerURI)); src->GetPostData(getter_AddRefs(postdata)); srcHE->GetTitle(&title); src->GetLayoutHistoryState(getter_AddRefs(LHS)); @@ -4182,6 +4190,7 @@ nsDocShell::CloneAndReplace(nsISHEntry * src, PRUint32 aCloneID, // XXX do we care much about valid values for these uri, title etc.... dest->SetURI(uri); + dest->SetReferrerURI(referrerURI); dest->SetPostData(postdata); dest->SetLayoutHistoryState(LHS); dest->SetTitle(title); diff --git a/mozilla/xpfe/components/shistory/public/nsISHEntry.idl b/mozilla/xpfe/components/shistory/public/nsISHEntry.idl index 7fc400d0d9a..724ffc8fb9d 100644 --- a/mozilla/xpfe/components/shistory/public/nsISHEntry.idl +++ b/mozilla/xpfe/components/shistory/public/nsISHEntry.idl @@ -41,6 +41,9 @@ interface nsISHEntry : nsISupports /** URI for the document */ void SetURI(in nsIURI aURI); +/** Referrer URI */ +attribute nsIURI referrerURI; + /** DOM Document */ attribute nsIDOMDocument document; diff --git a/mozilla/xpfe/components/shistory/src/nsSHEntry.cpp b/mozilla/xpfe/components/shistory/src/nsSHEntry.cpp index 9023d78e9cb..309e067227a 100644 --- a/mozilla/xpfe/components/shistory/src/nsSHEntry.cpp +++ b/mozilla/xpfe/components/shistory/src/nsSHEntry.cpp @@ -84,6 +84,20 @@ NS_IMETHODIMP nsSHEntry::SetURI(nsIURI* aURI) return NS_OK; } +NS_IMETHODIMP nsSHEntry::GetReferrerURI(nsIURI **aReferrerURI) +{ + NS_ENSURE_ARG_POINTER(aReferrerURI); + *aReferrerURI = mReferrerURI; + NS_IF_ADDREF(*aReferrerURI); + return NS_OK; +} + +NS_IMETHODIMP nsSHEntry::SetReferrerURI(nsIURI *aReferrerURI) +{ + mReferrerURI = aReferrerURI; + return NS_OK; +} + NS_IMETHODIMP nsSHEntry::SetDocument(nsIDOMDocument* aDocument) { mDocument = aDocument; diff --git a/mozilla/xpfe/components/shistory/src/nsSHEntry.h b/mozilla/xpfe/components/shistory/src/nsSHEntry.h index 3a82b92177c..62ede83dd56 100644 --- a/mozilla/xpfe/components/shistory/src/nsSHEntry.h +++ b/mozilla/xpfe/components/shistory/src/nsSHEntry.h @@ -56,6 +56,7 @@ private: nsCOMPtr mURI; + nsCOMPtr mReferrerURI; nsCOMPtr mDocument; nsString mTitle; nsCOMPtr mPostData;