Bug 1581859: Part 2b - Add LOAD_FLAGS_IS_REFRESH to all navigations triggered by meta refreshes. r=nika

The extension framework needs to set specific flags on navigations triggered
by meta refresh headers. Adding this to the load type of all navigations
triggered by meta refreshes allows it to do this without tracking docshells on
which refreshes are attempted so that it can make inferences.

Differential Revision: https://phabricator.services.mozilla.com/D108726
This commit is contained in:
Kris Maglione 2021-03-18 05:51:06 +00:00
Родитель 6410970b1e
Коммит 6f0d80b656
3 изменённых файлов: 16 добавлений и 2 удалений

Просмотреть файл

@ -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;

Просмотреть файл

@ -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();

Просмотреть файл

@ -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;