diff --git a/accessible/base/Logging.cpp b/accessible/base/Logging.cpp index 2ad1d2c33a8a..2b4aebec16c0 100644 --- a/accessible/base/Logging.cpp +++ b/accessible/base/Logging.cpp @@ -274,6 +274,9 @@ static void LogShellLoadType(nsIDocShell* aDocShell) { case LOAD_REFRESH: printf("refresh; "); break; + case LOAD_REFRESH_REPLACE: + printf("refresh replace; "); + break; case LOAD_RELOAD_CHARSET_CHANGE: printf("reload charset change; "); break; diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp index d3ee7c8c67f6..59980b05220e 100644 --- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -5328,7 +5328,7 @@ nsDocShell::ForceRefreshURI(nsIURI* aURI, nsIPrincipal* aPrincipal, * we have in mind (15000 ms as defined by REFRESH_REDIRECT_TIMER). * Pass a REPLACE flag to LoadURI(). */ - loadState->SetLoadType(LOAD_NORMAL_REPLACE); + loadState->SetLoadType(LOAD_REFRESH_REPLACE); /* For redirects we mimic HTTP, which passes the * original referrer. @@ -5800,6 +5800,7 @@ nsresult nsDocShell::Embed(nsIContentViewer* aContentViewer, // Determine if this type of load should update history switch (mLoadType) { case LOAD_NORMAL_REPLACE: + case LOAD_REFRESH_REPLACE: case LOAD_STOP_CONTENT_AND_REPLACE: case LOAD_RELOAD_BYPASS_CACHE: case LOAD_RELOAD_BYPASS_PROXY: @@ -11093,7 +11094,7 @@ bool nsDocShell::OnNewURI(nsIURI* aURI, nsIChannel* aChannel, // in session history. if (!mozilla::SessionHistoryInParent() && rootSH && ((mLoadType & (LOAD_CMD_HISTORY | LOAD_CMD_RELOAD)) || - mLoadType == LOAD_NORMAL_REPLACE)) { + mLoadType == LOAD_NORMAL_REPLACE || mLoadType == LOAD_REFRESH_REPLACE)) { mPreviousEntryIndex = rootSH->Index(); if (!mozilla::SessionHistoryInParent()) { rootSH->LegacySHistory()->UpdateIndex(); diff --git a/docshell/base/nsDocShellLoadTypes.h b/docshell/base/nsDocShellLoadTypes.h index 1ea189958bca..dcef69879ac6 100644 --- a/docshell/base/nsDocShellLoadTypes.h +++ b/docshell/base/nsDocShellLoadTypes.h @@ -77,6 +77,10 @@ enum LoadType : uint32_t { nsIWebNavigation::LOAD_FLAGS_IS_LINK), LOAD_REFRESH = MAKE_LOAD_TYPE(nsIDocShell::LOAD_CMD_NORMAL, nsIWebNavigation::LOAD_FLAGS_IS_REFRESH), + LOAD_REFRESH_REPLACE = + MAKE_LOAD_TYPE(nsIDocShell::LOAD_CMD_NORMAL, + nsIWebNavigation::LOAD_FLAGS_IS_REFRESH | + nsIWebNavigation::LOAD_FLAGS_REPLACE_HISTORY), LOAD_RELOAD_CHARSET_CHANGE = MAKE_LOAD_TYPE(nsIDocShell::LOAD_CMD_RELOAD, nsIWebNavigation::LOAD_FLAGS_CHARSET_CHANGE), @@ -142,6 +146,7 @@ static inline bool IsValidLoadType(uint32_t aLoadType) { case LOAD_RELOAD_ALLOW_MIXED_CONTENT: case LOAD_LINK: case LOAD_REFRESH: + case LOAD_REFRESH_REPLACE: case LOAD_RELOAD_CHARSET_CHANGE: case LOAD_RELOAD_CHARSET_CHANGE_BYPASS_PROXY_AND_CACHE: case LOAD_RELOAD_CHARSET_CHANGE_BYPASS_CACHE: @@ -173,6 +178,11 @@ static inline nsDOMNavigationTiming::Type ConvertLoadTypeToNavigationType( case LOAD_NORMAL_ALLOW_MIXED_CONTENT: case LOAD_LINK: case LOAD_STOP_CONTENT: + // FIXME: It isn't clear that LOAD_REFRESH_REPLACE should have a different + // navigation type than LOAD_REFRESH. Those loads historically used the + // LOAD_NORMAL_REPLACE type, and therefore wound up with TYPE_NAVIGATE by + // default. + case LOAD_REFRESH_REPLACE: case LOAD_REPLACE_BYPASS_CACHE: result = nsDOMNavigationTiming::TYPE_NAVIGATE; break;