mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-05 05:30:29 +00:00
Bug 1381702 - Bypass cache when (Ctrl-)F5 refreshing a page that reloads because of charset definition late in the markup. r=bz
This adds two new load types: LOAD_RELOAD_CHARSET_CHANGE_BYPASS_PROXY_AND_CACHE, LOAD_RELOAD_CHARSET_CHANGE_BYPASS_CACHE which are used when charset reaload is invoked and the original load was a cache-bypassing load.
This commit is contained in:
parent
b05c674ceb
commit
0fbf49856d
@ -714,6 +714,8 @@ ConvertLoadTypeToNavigationType(uint32_t aLoadType)
|
||||
break;
|
||||
case LOAD_RELOAD_NORMAL:
|
||||
case LOAD_RELOAD_CHARSET_CHANGE:
|
||||
case LOAD_RELOAD_CHARSET_CHANGE_BYPASS_PROXY_AND_CACHE:
|
||||
case LOAD_RELOAD_CHARSET_CHANGE_BYPASS_CACHE:
|
||||
case LOAD_RELOAD_BYPASS_CACHE:
|
||||
case LOAD_RELOAD_BYPASS_PROXY:
|
||||
case LOAD_RELOAD_BYPASS_PROXY_AND_CACHE:
|
||||
@ -1141,6 +1143,12 @@ nsDocShell::ConvertDocShellLoadInfoToLoadType(
|
||||
case nsIDocShellLoadInfo::loadReloadCharsetChange:
|
||||
loadType = LOAD_RELOAD_CHARSET_CHANGE;
|
||||
break;
|
||||
case nsIDocShellLoadInfo::loadReloadCharsetChangeBypassCache:
|
||||
loadType = LOAD_RELOAD_CHARSET_CHANGE_BYPASS_CACHE;
|
||||
break;
|
||||
case nsIDocShellLoadInfo::loadReloadCharsetChangeBypassProxyAndCache:
|
||||
break;
|
||||
loadType = LOAD_RELOAD_CHARSET_CHANGE_BYPASS_PROXY_AND_CACHE;
|
||||
case nsIDocShellLoadInfo::loadReloadBypassCache:
|
||||
loadType = LOAD_RELOAD_BYPASS_CACHE;
|
||||
break;
|
||||
@ -1216,6 +1224,12 @@ nsDocShell::ConvertLoadTypeToDocShellLoadInfo(uint32_t aLoadType)
|
||||
case LOAD_RELOAD_CHARSET_CHANGE:
|
||||
docShellLoadType = nsIDocShellLoadInfo::loadReloadCharsetChange;
|
||||
break;
|
||||
case LOAD_RELOAD_CHARSET_CHANGE_BYPASS_CACHE:
|
||||
docShellLoadType = nsIDocShellLoadInfo::loadReloadCharsetChangeBypassCache;
|
||||
break;
|
||||
case LOAD_RELOAD_CHARSET_CHANGE_BYPASS_PROXY_AND_CACHE:
|
||||
docShellLoadType = nsIDocShellLoadInfo::loadReloadCharsetChangeBypassProxyAndCache;
|
||||
break;
|
||||
case LOAD_RELOAD_BYPASS_CACHE:
|
||||
docShellLoadType = nsIDocShellLoadInfo::loadReloadBypassCache;
|
||||
break;
|
||||
@ -1397,7 +1411,9 @@ nsDocShell::LoadURI(nsIURI* aURI,
|
||||
(shEntry &&
|
||||
((parentLoadType & LOAD_CMD_HISTORY) ||
|
||||
(parentLoadType == LOAD_RELOAD_NORMAL) ||
|
||||
(parentLoadType == LOAD_RELOAD_CHARSET_CHANGE)))) {
|
||||
(parentLoadType == LOAD_RELOAD_CHARSET_CHANGE) ||
|
||||
(parentLoadType == LOAD_RELOAD_CHARSET_CHANGE_BYPASS_CACHE) ||
|
||||
(parentLoadType == LOAD_RELOAD_CHARSET_CHANGE_BYPASS_PROXY_AND_CACHE)))) {
|
||||
// If the parent url, bypassed history or was loaded from
|
||||
// history, pass on the parent's loadType to the new child
|
||||
// frame too, so that the child frame will also
|
||||
@ -7325,7 +7341,9 @@ nsDocShell::Embed(nsIContentViewer* aContentViewer,
|
||||
if (mCurrentURI &&
|
||||
(mLoadType & LOAD_CMD_HISTORY ||
|
||||
mLoadType == LOAD_RELOAD_NORMAL ||
|
||||
mLoadType == LOAD_RELOAD_CHARSET_CHANGE)) {
|
||||
mLoadType == LOAD_RELOAD_CHARSET_CHANGE ||
|
||||
mLoadType == LOAD_RELOAD_CHARSET_CHANGE_BYPASS_CACHE ||
|
||||
mLoadType == LOAD_RELOAD_CHARSET_CHANGE_BYPASS_PROXY_AND_CACHE)) {
|
||||
bool isWyciwyg = false;
|
||||
// Check if the url is wyciwyg
|
||||
rv = mCurrentURI->SchemeIs("wyciwyg", &isWyciwyg);
|
||||
@ -11320,7 +11338,9 @@ nsDocShell::DoURILoad(nsIURI* aURI,
|
||||
*/
|
||||
if (mLoadType == LOAD_HISTORY ||
|
||||
mLoadType == LOAD_RELOAD_NORMAL ||
|
||||
mLoadType == LOAD_RELOAD_CHARSET_CHANGE) {
|
||||
mLoadType == LOAD_RELOAD_CHARSET_CHANGE ||
|
||||
mLoadType == LOAD_RELOAD_CHARSET_CHANGE_BYPASS_CACHE ||
|
||||
mLoadType == LOAD_RELOAD_CHARSET_CHANGE_BYPASS_PROXY_AND_CACHE) {
|
||||
if (cacheChannel && cacheKey) {
|
||||
cacheChannel->SetCacheKey(cacheKey);
|
||||
}
|
||||
@ -11499,6 +11519,12 @@ nsDocShell::DoChannelLoad(nsIChannel* aChannel,
|
||||
break;
|
||||
}
|
||||
|
||||
case LOAD_RELOAD_CHARSET_CHANGE_BYPASS_PROXY_AND_CACHE:
|
||||
case LOAD_RELOAD_CHARSET_CHANGE_BYPASS_CACHE:
|
||||
loadFlags |= nsIRequest::LOAD_BYPASS_CACHE |
|
||||
nsIRequest::LOAD_FRESH_CONNECTION;
|
||||
MOZ_FALLTHROUGH;
|
||||
|
||||
case LOAD_RELOAD_CHARSET_CHANGE: {
|
||||
// Use SetAllowStaleCacheContent (not LOAD_FROM_CACHE flag) since we only want
|
||||
// to force cache load for this channel, not the whole loadGroup.
|
||||
@ -14407,7 +14433,17 @@ nsDocShell::ReloadDocument(const char* aCharset, int32_t aSource)
|
||||
cv->SetHintCharacterSetSource(aSource);
|
||||
if (eCharsetReloadRequested != mCharsetReloadState) {
|
||||
mCharsetReloadState = eCharsetReloadRequested;
|
||||
return Reload(LOAD_FLAGS_CHARSET_CHANGE);
|
||||
switch (mLoadType) {
|
||||
case LOAD_RELOAD_BYPASS_PROXY_AND_CACHE:
|
||||
return Reload(LOAD_FLAGS_CHARSET_CHANGE |
|
||||
LOAD_FLAGS_BYPASS_CACHE |
|
||||
LOAD_FLAGS_BYPASS_PROXY);
|
||||
case LOAD_RELOAD_BYPASS_CACHE:
|
||||
return Reload(LOAD_FLAGS_CHARSET_CHANGE |
|
||||
LOAD_FLAGS_BYPASS_CACHE);
|
||||
default:
|
||||
return Reload(LOAD_FLAGS_CHARSET_CHANGE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -55,6 +55,8 @@ enum LoadType
|
||||
LOAD_LINK = MAKE_LOAD_TYPE(nsIDocShell::LOAD_CMD_NORMAL, nsIWebNavigation::LOAD_FLAGS_IS_LINK),
|
||||
LOAD_REFRESH = MAKE_LOAD_TYPE(nsIDocShell::LOAD_CMD_NORMAL, nsIWebNavigation::LOAD_FLAGS_IS_REFRESH),
|
||||
LOAD_RELOAD_CHARSET_CHANGE = MAKE_LOAD_TYPE(nsIDocShell::LOAD_CMD_RELOAD, nsIWebNavigation::LOAD_FLAGS_CHARSET_CHANGE),
|
||||
LOAD_RELOAD_CHARSET_CHANGE_BYPASS_PROXY_AND_CACHE = MAKE_LOAD_TYPE(nsIDocShell::LOAD_CMD_RELOAD, nsIWebNavigation::LOAD_FLAGS_CHARSET_CHANGE | nsIWebNavigation::LOAD_FLAGS_BYPASS_CACHE | nsIWebNavigation::LOAD_FLAGS_BYPASS_PROXY),
|
||||
LOAD_RELOAD_CHARSET_CHANGE_BYPASS_CACHE = MAKE_LOAD_TYPE(nsIDocShell::LOAD_CMD_RELOAD, nsIWebNavigation::LOAD_FLAGS_CHARSET_CHANGE | nsIWebNavigation::LOAD_FLAGS_BYPASS_CACHE),
|
||||
LOAD_BYPASS_HISTORY = MAKE_LOAD_TYPE(nsIDocShell::LOAD_CMD_NORMAL, nsIWebNavigation::LOAD_FLAGS_BYPASS_HISTORY),
|
||||
LOAD_STOP_CONTENT = MAKE_LOAD_TYPE(nsIDocShell::LOAD_CMD_NORMAL, nsIWebNavigation::LOAD_FLAGS_STOP_CONTENT),
|
||||
LOAD_STOP_CONTENT_AND_REPLACE = MAKE_LOAD_TYPE(nsIDocShell::LOAD_CMD_NORMAL, nsIWebNavigation::LOAD_FLAGS_STOP_CONTENT | nsIWebNavigation::LOAD_FLAGS_REPLACE_HISTORY),
|
||||
@ -90,6 +92,8 @@ IsValidLoadType(uint32_t aLoadType)
|
||||
case LOAD_LINK:
|
||||
case LOAD_REFRESH:
|
||||
case LOAD_RELOAD_CHARSET_CHANGE:
|
||||
case LOAD_RELOAD_CHARSET_CHANGE_BYPASS_PROXY_AND_CACHE:
|
||||
case LOAD_RELOAD_CHARSET_CHANGE_BYPASS_CACHE:
|
||||
case LOAD_BYPASS_HISTORY:
|
||||
case LOAD_STOP_CONTENT:
|
||||
case LOAD_STOP_CONTENT_AND_REPLACE:
|
||||
|
@ -87,6 +87,8 @@ interface nsIDocShellLoadInfo : nsISupports
|
||||
const long loadReplaceBypassCache = 18;
|
||||
const long loadReloadMixedContent = 19;
|
||||
const long loadNormalAllowMixedContent = 20;
|
||||
const long loadReloadCharsetChangeBypassCache = 21;
|
||||
const long loadReloadCharsetChangeBypassProxyAndCache = 22;
|
||||
|
||||
/** Contains a load type as specified by the load* constants */
|
||||
attribute nsDocShellInfoLoadType loadType;
|
||||
|
Loading…
x
Reference in New Issue
Block a user