From 5a74b67fdf37e0f89e23b70d38cbbe825af027aa Mon Sep 17 00:00:00 2001 From: "gavin%gavinsharp.com" Date: Sat, 8 Jul 2006 21:25:08 +0000 Subject: [PATCH] Bug 341112: LOAD_FLAGS_BYPASS_CACHE flag of nsIWebNavigation::loadURI doesn't work, patch by Nickolay Ponomarev , r=biesi, sr=darin --- docshell/base/nsDocShell.cpp | 58 +++++++++++++------ docshell/base/nsDocShellLoadTypes.h | 6 ++ docshell/base/nsIDocShellLoadInfo.idl | 3 + .../viewsource/content/viewPartialSource.js | 2 +- 4 files changed, 51 insertions(+), 18 deletions(-) diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp index 66fb25dfb40..97f5f61ff22 100644 --- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -538,6 +538,15 @@ ConvertDocShellLoadInfoToLoadType(nsDocShellInfoLoadType aDocShellLoadType) case nsIDocShellLoadInfo::loadHistory: loadType = LOAD_HISTORY; break; + case nsIDocShellLoadInfo::loadNormalBypassCache: + loadType = LOAD_NORMAL_BYPASS_CACHE; + break; + case nsIDocShellLoadInfo::loadNormalBypassProxy: + loadType = LOAD_NORMAL_BYPASS_PROXY; + break; + case nsIDocShellLoadInfo::loadNormalBypassProxyAndCache: + loadType = LOAD_NORMAL_BYPASS_PROXY_AND_CACHE; + break; case nsIDocShellLoadInfo::loadReloadNormal: loadType = LOAD_RELOAD_NORMAL; break; @@ -568,6 +577,8 @@ ConvertDocShellLoadInfoToLoadType(nsDocShellInfoLoadType aDocShellLoadType) case nsIDocShellLoadInfo::loadStopContentAndReplace: loadType = LOAD_STOP_CONTENT_AND_REPLACE; break; + default: + NS_NOTREACHED("Unexpected nsDocShellInfoLoadType value"); } return loadType; @@ -588,6 +599,15 @@ nsDocShell::ConvertLoadTypeToDocShellLoadInfo(PRUint32 aLoadType) case LOAD_NORMAL_EXTERNAL: docShellLoadType = nsIDocShellLoadInfo::loadNormalExternal; break; + case LOAD_NORMAL_BYPASS_CACHE: + docShellLoadType = nsIDocShellLoadInfo::loadNormalBypassCache; + break; + case LOAD_NORMAL_BYPASS_PROXY: + docShellLoadType = nsIDocShellLoadInfo::loadNormalBypassProxy; + break; + case LOAD_NORMAL_BYPASS_PROXY_AND_CACHE: + docShellLoadType = nsIDocShellLoadInfo::loadNormalBypassProxyAndCache; + break; case LOAD_HISTORY: docShellLoadType = nsIDocShellLoadInfo::loadHistory; break; @@ -622,6 +642,8 @@ nsDocShell::ConvertLoadTypeToDocShellLoadInfo(PRUint32 aLoadType) case LOAD_STOP_CONTENT_AND_REPLACE: docShellLoadType = nsIDocShellLoadInfo::loadStopContentAndReplace; break; + default: + NS_NOTREACHED("Unexpected load type value"); } return docShellLoadType; @@ -2630,7 +2652,7 @@ nsDocShell::GetChildSHEntry(PRInt32 aChildOffset, nsISHEntry ** aResult) PRUint32 loadType = nsIDocShellLoadInfo::loadHistory; mLSHE->GetLoadType(&loadType); // If the user did a shift-reload on this frameset page, - // we don't want to load the subframes from history. + // we don't want to load the subframes from history. if (loadType == nsIDocShellLoadInfo::loadReloadBypassCache || loadType == nsIDocShellLoadInfo::loadReloadBypassProxy || loadType == nsIDocShellLoadInfo::loadReloadBypassProxyAndCache || @@ -2940,7 +2962,7 @@ nsDocShell::LoadURI(const PRUnichar * aURI, rv = CreateLoadInfo(getter_AddRefs(loadInfo)); if (NS_FAILED(rv)) return rv; - PRUint32 loadType = MAKE_LOAD_TYPE(LOAD_NORMAL, aLoadFlags); + PRUint32 loadType = MAKE_LOAD_TYPE(LOAD_NORMAL, aLoadFlags); loadInfo->SetLoadType(ConvertLoadTypeToDocShellLoadInfo(loadType)); loadInfo->SetPostDataStream(aPostStream); loadInfo->SetReferrer(aReferringURI); @@ -3245,13 +3267,9 @@ nsDocShell::Reload(PRUint32 aReloadFlags) NS_ASSERTION(((aReloadFlags & 0xf) == 0), "Reload command not updated to use load flags!"); - // XXXTAB Convert reload type to our type - LoadType type = LOAD_RELOAD_NORMAL; - if (aReloadFlags & LOAD_FLAGS_BYPASS_CACHE && - aReloadFlags & LOAD_FLAGS_BYPASS_PROXY) - type = LOAD_RELOAD_BYPASS_PROXY_AND_CACHE; - else if (aReloadFlags & LOAD_FLAGS_CHARSET_CHANGE) - type = LOAD_RELOAD_CHARSET_CHANGE; + PRUint32 loadType = MAKE_LOAD_TYPE(LOAD_RELOAD_NORMAL, aReloadFlags); + NS_ENSURE_TRUE(IsValidLoadType(loadType), NS_ERROR_INVALID_ARG); + // Send notifications to the HistoryListener if any, about the impending reload nsCOMPtr rootSH; rv = GetRootSessionHistory(getter_AddRefs(rootSH)); @@ -3270,10 +3288,10 @@ nsDocShell::Reload(PRUint32 aReloadFlags) /* If you change this part of code, make sure bug 45297 does not re-occur */ if (mOSHE) { - rv = LoadHistoryEntry(mOSHE, type); + rv = LoadHistoryEntry(mOSHE, loadType); } else if (mLSHE) { // In case a reload happened before the current load is done - rv = LoadHistoryEntry(mLSHE, type); + rv = LoadHistoryEntry(mLSHE, loadType); } else { nsAutoString contentTypeHint; @@ -3295,7 +3313,7 @@ nsDocShell::Reload(PRUint32 aReloadFlags) NS_LossyConvertUTF16toASCII(contentTypeHint).get(), nsnull, // No post data nsnull, // No headers data - type, // Load type + loadType, // Load type nsnull, // No SHEntry PR_TRUE, nsnull, // No nsIDocShell @@ -4692,9 +4710,9 @@ nsDocShell::Embed(nsIContentViewer * aContentViewer, PRBool updateHistory = PR_TRUE; - // Determine if this type of load should update history + // Determine if this type of load should update history switch (mLoadType) { - case LOAD_RELOAD_CHARSET_CHANGE: //don't perserve history in charset reload + case LOAD_RELOAD_CHARSET_CHANGE: // don't preserve history in charset reload case LOAD_NORMAL_REPLACE: case LOAD_STOP_CONTENT_AND_REPLACE: case LOAD_RELOAD_BYPASS_CACHE: @@ -7084,6 +7102,11 @@ nsresult nsDocShell::DoChannelLoad(nsIChannel * aChannel, loadFlags |= nsIRequest::VALIDATE_ALWAYS; break; + case LOAD_NORMAL_BYPASS_CACHE: + case LOAD_NORMAL_BYPASS_PROXY: + case LOAD_NORMAL_BYPASS_PROXY_AND_CACHE: + case LOAD_RELOAD_BYPASS_CACHE: + case LOAD_RELOAD_BYPASS_PROXY: case LOAD_RELOAD_BYPASS_PROXY_AND_CACHE: loadFlags |= nsIRequest::LOAD_BYPASS_CACHE; break; @@ -7441,9 +7464,10 @@ nsDocShell::OnNewURI(nsIURI * aURI, nsIChannel * aChannel, * for the page. Save the new cacheKey in Session History. * see bug 90098 */ - if (aChannel && aLoadType == LOAD_RELOAD_BYPASS_CACHE || - aLoadType == LOAD_RELOAD_BYPASS_PROXY || - aLoadType == LOAD_RELOAD_BYPASS_PROXY_AND_CACHE) { + if (aChannel && + (aLoadType == LOAD_RELOAD_BYPASS_CACHE || + aLoadType == LOAD_RELOAD_BYPASS_PROXY || + aLoadType == LOAD_RELOAD_BYPASS_PROXY_AND_CACHE)) { NS_ASSERTION(!updateHistory, "We shouldn't be updating history for forced reloads!"); diff --git a/docshell/base/nsDocShellLoadTypes.h b/docshell/base/nsDocShellLoadTypes.h index a48d23b3e6c..f236b61df40 100644 --- a/docshell/base/nsDocShellLoadTypes.h +++ b/docshell/base/nsDocShellLoadTypes.h @@ -66,6 +66,9 @@ enum LoadType { LOAD_NORMAL_REPLACE = MAKE_LOAD_TYPE(nsIDocShell::LOAD_CMD_NORMAL, nsIWebNavigation::LOAD_FLAGS_REPLACE_HISTORY), LOAD_NORMAL_EXTERNAL = MAKE_LOAD_TYPE(nsIDocShell::LOAD_CMD_NORMAL, nsIWebNavigation::LOAD_FLAGS_FROM_EXTERNAL), LOAD_HISTORY = MAKE_LOAD_TYPE(nsIDocShell::LOAD_CMD_HISTORY, nsIWebNavigation::LOAD_FLAGS_NONE), + LOAD_NORMAL_BYPASS_CACHE = MAKE_LOAD_TYPE(nsIDocShell::LOAD_CMD_NORMAL, nsIWebNavigation::LOAD_FLAGS_BYPASS_CACHE), + LOAD_NORMAL_BYPASS_PROXY = MAKE_LOAD_TYPE(nsIDocShell::LOAD_CMD_NORMAL, nsIWebNavigation::LOAD_FLAGS_BYPASS_PROXY), + LOAD_NORMAL_BYPASS_PROXY_AND_CACHE = MAKE_LOAD_TYPE(nsIDocShell::LOAD_CMD_NORMAL, nsIWebNavigation::LOAD_FLAGS_BYPASS_CACHE | nsIWebNavigation::LOAD_FLAGS_BYPASS_PROXY), LOAD_RELOAD_NORMAL = MAKE_LOAD_TYPE(nsIDocShell::LOAD_CMD_RELOAD, nsIWebNavigation::LOAD_FLAGS_NONE), LOAD_RELOAD_BYPASS_CACHE = MAKE_LOAD_TYPE(nsIDocShell::LOAD_CMD_RELOAD, nsIWebNavigation::LOAD_FLAGS_BYPASS_CACHE), LOAD_RELOAD_BYPASS_PROXY = MAKE_LOAD_TYPE(nsIDocShell::LOAD_CMD_RELOAD, nsIWebNavigation::LOAD_FLAGS_BYPASS_PROXY), @@ -92,6 +95,9 @@ static inline PRBool IsValidLoadType(PRUint32 aLoadType) case LOAD_NORMAL: case LOAD_NORMAL_REPLACE: case LOAD_NORMAL_EXTERNAL: + case LOAD_NORMAL_BYPASS_CACHE: + case LOAD_NORMAL_BYPASS_PROXY: + case LOAD_NORMAL_BYPASS_PROXY_AND_CACHE: case LOAD_HISTORY: case LOAD_RELOAD_NORMAL: case LOAD_RELOAD_BYPASS_CACHE: diff --git a/docshell/base/nsIDocShellLoadInfo.idl b/docshell/base/nsIDocShellLoadInfo.idl index dcbf325db11..bf0b30d739a 100644 --- a/docshell/base/nsIDocShellLoadInfo.idl +++ b/docshell/base/nsIDocShellLoadInfo.idl @@ -82,6 +82,9 @@ interface nsIDocShellLoadInfo : nsISupports const long loadStopContent = 11; const long loadStopContentAndReplace = 12; const long loadNormalExternal = 13; + const long loadNormalBypassCache = 14; + const long loadNormalBypassProxy = 15; + const long loadNormalBypassProxyAndCache = 16; /** Contains a load type as specified by the load* constants */ attribute nsDocShellInfoLoadType loadType; diff --git a/toolkit/components/viewsource/content/viewPartialSource.js b/toolkit/components/viewsource/content/viewPartialSource.js index a6176ed7580..f9d332111ab 100644 --- a/toolkit/components/viewsource/content/viewPartialSource.js +++ b/toolkit/components/viewsource/content/viewPartialSource.js @@ -207,7 +207,7 @@ function viewPartialSourceForSelection(selection) } // all our content is held by the data:URI and URIs are internally stored as utf-8 (see nsIURI.idl) - var loadFlags = Components.interfaces.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE; + var loadFlags = Components.interfaces.nsIWebNavigation.LOAD_FLAGS_NONE; getBrowser().webNavigation .loadURI("view-source:data:text/html;charset=utf-8," + encodeURIComponent(tmpNode.innerHTML), loadFlags, null, null, null);