Bug 1648040 - Use the new session history if pref is on. r=smaug

Differential Revision: https://phabricator.services.mozilla.com/D80885
This commit is contained in:
Peter Van der Beken 2020-07-16 14:04:59 +00:00
parent 1eb115035d
commit 9db58fa8c3
3 changed files with 97 additions and 17 deletions

View File

@ -6619,8 +6619,22 @@ nsresult nsDocShell::CaptureState() {
NS_ENSURE_TRUE(windowState, NS_ERROR_FAILURE);
if (MOZ_UNLIKELY(MOZ_LOG_TEST(gPageCacheLog, LogLevel::Debug))) {
nsCOMPtr<nsIURI> uri = mOSHE->GetURI();
nsAutoCString spec;
nsCOMPtr<nsIURI> uri;
if (StaticPrefs::fission_sessionHistoryInParent()) {
uri = mActiveEntry->GetURI();
#ifdef DEBUG
nsCOMPtr<nsIURI> debugURI(mOSHE->GetURI());
MOZ_ASSERT(!uri == !debugURI);
if (uri && debugURI) {
bool debugURIEquals;
debugURI->Equals(uri, &debugURIEquals);
MOZ_ASSERT(debugURIEquals);
}
#endif
} else {
uri = mOSHE->GetURI();
}
if (uri) {
uri->GetSpec(spec);
}
@ -8211,7 +8225,14 @@ bool nsDocShell::IsSameDocumentNavigation(nsDocShellLoadState* aLoadState,
#ifdef DEBUG
if (aState.mHistoryNavBetweenSameDoc) {
nsCOMPtr<nsIInputStream> currentPostData = mOSHE->GetPostData();
nsCOMPtr<nsIInputStream> currentPostData;
if (StaticPrefs::fission_sessionHistoryInParent()) {
currentPostData = mActiveEntry->GetPostData();
MOZ_ASSERT(!(nsCOMPtr<nsIInputStream>(mOSHE->GetPostData())) ==
!currentPostData);
} else {
currentPostData = mOSHE->GetPostData();
}
NS_ASSERTION(currentPostData == aLoadState->PostDataStream(),
"Different POST data for entries for the same page?");
}
@ -8320,9 +8341,13 @@ nsresult nsDocShell::HandleSameDocumentNavigation(
if (mOSHE) {
/* save current position of scroller(s) (bug 59774) */
mOSHE->SetScrollPosition(scrollPos.x, scrollPos.y);
DebugOnly<nsresult> rv =
mOSHE->GetScrollRestorationIsManual(&scrollRestorationIsManual);
MOZ_ASSERT(NS_SUCCEEDED(rv), "Didn't expect this to fail.");
if (StaticPrefs::fission_sessionHistoryInParent()) {
scrollRestorationIsManual = mActiveEntry->GetScrollRestorationIsManual();
MOZ_ASSERT(mOSHE->GetScrollRestorationIsManual() ==
scrollRestorationIsManual);
} else {
scrollRestorationIsManual = mOSHE->GetScrollRestorationIsManual();
}
// Get the postdata and page ident from the current page, if
// the new load is being done via normal means. Note that
// "normal means" can be checked for just by checking for
@ -8427,7 +8452,16 @@ nsresult nsDocShell::HandleSameDocumentNavigation(
aLoadState->LoadType() == LOAD_RELOAD_NORMAL) &&
!scrollRestorationIsManual) {
needsScrollPosUpdate = true;
mOSHE->GetScrollPosition(&bx, &by);
if (StaticPrefs::fission_sessionHistoryInParent()) {
mActiveEntry->GetScrollPosition(&bx, &by);
#ifdef DEBUG
nscoord x, y;
mOSHE->GetScrollPosition(&x, &y);
MOZ_ASSERT(x == bx && y == by);
#endif
} else {
mOSHE->GetScrollPosition(&bx, &by);
}
}
// Dispatch the popstate and hashchange events, as appropriate.
@ -9539,7 +9573,18 @@ nsresult nsDocShell::DoURILoad(nsDocShellLoadState* aLoadState,
cacheKey = mOSHE->GetCacheKey();
}
bool uriModified = mLSHE ? mLSHE->GetURIWasModified() : false;
bool uriModified;
if (mLSHE) {
if (StaticPrefs::fission_sessionHistoryInParent()) {
uriModified = mLoadingEntry->GetURIWasModified();
MOZ_ASSERT(uriModified == mLSHE->GetURIWasModified());
} else {
uriModified = mLSHE->GetURIWasModified();
}
} else {
uriModified = false;
}
bool isXFOError = false;
if (mFailedChannel) {
nsresult status;
@ -10430,18 +10475,22 @@ nsresult nsDocShell::UpdateURLAndHistory(Document* aDocument, nsIURI* aNewURI,
mOSHE->SetScrollPosition(scrollPos.x, scrollPos.y);
bool scrollRestorationIsManual;
nsresult rv =
mOSHE->GetScrollRestorationIsManual(&scrollRestorationIsManual);
MOZ_ASSERT(NS_SUCCEEDED(rv), "Didn't expect this to fail.");
if (StaticPrefs::fission_sessionHistoryInParent()) {
scrollRestorationIsManual = mActiveEntry->GetScrollRestorationIsManual();
MOZ_ASSERT(mOSHE->GetScrollRestorationIsManual() ==
scrollRestorationIsManual);
} else {
scrollRestorationIsManual = mOSHE->GetScrollRestorationIsManual();
}
nsCOMPtr<nsIContentSecurityPolicy> csp = aDocument->GetCsp();
// Since we're not changing which page we have loaded, pass
// true for aCloneChildren.
rv = AddToSessionHistory(aNewURI, nullptr,
aDocument->NodePrincipal(), // triggeringPrincipal
nullptr, nullptr, csp, true,
getter_AddRefs(newSHEntry));
nsresult rv = AddToSessionHistory(
aNewURI, nullptr,
aDocument->NodePrincipal(), // triggeringPrincipal
nullptr, nullptr, csp, true, getter_AddRefs(newSHEntry));
NS_ENSURE_SUCCESS(rv, rv);
NS_ENSURE_TRUE(newSHEntry, NS_ERROR_FAILURE);
@ -10456,7 +10505,16 @@ nsresult nsDocShell::UpdateURLAndHistory(Document* aDocument, nsIURI* aNewURI,
// Set the new SHEntry's title (bug 655273).
nsString title;
mOSHE->GetTitle(title);
if (StaticPrefs::fission_sessionHistoryInParent()) {
title = mActiveEntry->GetTitle();
#ifdef DEBUG
nsString debugTitle;
mOSHE->GetTitle(debugTitle);
MOZ_ASSERT(title.Equals(debugTitle));
#endif
} else {
mOSHE->GetTitle(title);
}
newSHEntry->SetTitle(title);
// AddToSessionHistory may not modify mOSHE. In case it doesn't,
@ -10560,6 +10618,11 @@ NS_IMETHODIMP
nsDocShell::GetCurrentScrollRestorationIsManual(bool* aIsManual) {
*aIsManual = false;
if (mOSHE) {
if (StaticPrefs::fission_sessionHistoryInParent()) {
*aIsManual = mActiveEntry->GetScrollRestorationIsManual();
MOZ_ASSERT(mOSHE->GetScrollRestorationIsManual() == *aIsManual);
return NS_OK;
}
return mOSHE->GetScrollRestorationIsManual(aIsManual);
}
@ -10922,7 +10985,13 @@ nsDocShell::PersistLayoutHistoryState() {
if (mOSHE) {
bool scrollRestorationIsManual;
Unused << mOSHE->GetScrollRestorationIsManual(&scrollRestorationIsManual);
if (StaticPrefs::fission_sessionHistoryInParent()) {
scrollRestorationIsManual = mActiveEntry->GetScrollRestorationIsManual();
MOZ_ASSERT(mOSHE->GetScrollRestorationIsManual() ==
scrollRestorationIsManual);
} else {
scrollRestorationIsManual = mOSHE->GetScrollRestorationIsManual();
}
nsCOMPtr<nsILayoutHistoryState> layoutState;
if (RefPtr<PresShell> presShell = GetPresShell()) {
rv = presShell->CaptureHistoryState(getter_AddRefs(layoutState));

View File

@ -35,8 +35,19 @@ class SessionHistoryInfo {
return false; // FIXME
}
nsIInputStream* GetPostData() const { return mPostData; }
void GetScrollPosition(int32_t* aScrollPositionX, int32_t* aScrollPositionY) {
*aScrollPositionX = mScrollPositionX;
*aScrollPositionY = mScrollPositionY;
}
bool GetScrollRestorationIsManual() const {
return mScrollRestorationIsManual;
}
const nsAString& GetTitle() { return mTitle; }
nsIURI* GetURI() const { return mURI; }
bool GetURIWasModified() const { return mURIWasModified; }
uint64_t Id() const { return mId; }
private:

View File

@ -216,7 +216,7 @@ interface nsISHEntry : nsISupports
* Sets/gets the current scroll restoration state,
* if true == "manual", false == "auto".
*/
attribute boolean scrollRestorationIsManual;
[infallible] attribute boolean scrollRestorationIsManual;
/**
* Flag to indicate that the history entry was originally loaded in the