Bug 1654525 - Ensure loads initiated from session history in parent reuse the existing SHEntries, r=peterv

Differential Revision: https://phabricator.services.mozilla.com/D85173
This commit is contained in:
Olli Pettay
2020-07-29 14:23:09 +00:00
parent 154b135c19
commit cbe2e95419
5 changed files with 47 additions and 5 deletions

View File

@@ -76,6 +76,10 @@ nsDocShellLoadState::nsDocShellLoadState(
mHeadersStream = aLoadState.HeadersStream();
mSrcdocData = aLoadState.SrcdocData();
mChannelInitialized = aLoadState.ChannelInitialized();
if (aLoadState.sessionHistoryInfo().isSome()) {
mSessionHistoryInfo =
MakeUnique<SessionHistoryInfo>(aLoadState.sessionHistoryInfo().value());
}
}
nsDocShellLoadState::nsDocShellLoadState(const nsDocShellLoadState& aOther)
@@ -504,6 +508,12 @@ nsISHEntry* nsDocShellLoadState::SHEntry() const { return mSHEntry; }
void nsDocShellLoadState::SetSHEntry(nsISHEntry* aSHEntry) {
mSHEntry = aSHEntry;
nsCOMPtr<SessionHistoryEntry> she = do_QueryInterface(aSHEntry);
if (she) {
SetSessionHistoryInfo(she->Info());
} else {
mSessionHistoryInfo = nullptr;
}
}
void nsDocShellLoadState::SetSessionHistoryInfo(
@@ -905,5 +915,8 @@ DocShellLoadStateInit nsDocShellLoadState::Serialize() {
loadState.ResultPrincipalURI() = mResultPrincipalURI;
loadState.LoadIdentifier() = mLoadIdentifier;
loadState.ChannelInitialized() = mChannelInitialized;
if (mSessionHistoryInfo) {
loadState.sessionHistoryInfo().emplace(*mSessionHistoryInfo);
}
return loadState;
}