Bug 597315 Part 1 (session history) - Frameset history does not work properly when restoring a tab [r=bz, a=blocking2.0:betaN+]
--- a/docshell/shistory/public/nsISHistory.idl
+++ b/docshell/shistory/public/nsISHistory.idl
@@ -173,8 +173,14 @@ interface nsISHistory: nsISupports
*
* @see nsISimpleEnumerator
* @see nsIHistoryEntry
* @see QueryInterface()
* @see do_QueryInterface()
*/
readonly attribute nsISimpleEnumerator SHistoryEnumerator;
};
+
+[scriptable, uuid(ac8b3eb3-2051-4cce-8303-d6e7938501dd)]
+interface nsISHistory_2_0_BRANCH: nsISHistory
+{
+ void reloadCurrentEntry();
+};
--- a/docshell/shistory/src/nsSHistory.cpp
+++ b/docshell/shistory/src/nsSHistory.cpp
@@ -148,16 +148,17 @@ nsSHistory::~nsSHistory()
NS_IMPL_ADDREF(nsSHistory)
NS_IMPL_RELEASE(nsSHistory)
NS_INTERFACE_MAP_BEGIN(nsSHistory)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISHistory)
NS_INTERFACE_MAP_ENTRY(nsISHistory)
NS_INTERFACE_MAP_ENTRY(nsIWebNavigation)
NS_INTERFACE_MAP_ENTRY(nsISHistoryInternal)
+ NS_INTERFACE_MAP_ENTRY(nsISHistory_2_0_BRANCH)
NS_INTERFACE_MAP_END
//*****************************************************************************
// nsSHistory: nsISHistory
//*****************************************************************************
// static
PRUint32
@@ -791,16 +792,35 @@ nsSHistory::Reload(PRUint32 aReloadFlags
}
}
if (!canNavigate)
return NS_OK;
return LoadEntry(mIndex, loadType, HIST_CMD_RELOAD);
}
+NS_IMETHODIMP
+nsSHistory::ReloadCurrentEntry()
+{
+ // Notify listeners
+ PRBool canNavigate = PR_TRUE;
+ if (mListener) {
+ nsCOMPtr<nsISHistoryListener> listener(do_QueryReferent(mListener));
+ if (listener) {
+ nsCOMPtr<nsIURI> currentURI;
+ GetCurrentURI(getter_AddRefs(currentURI));
+ listener->OnHistoryGotoIndex(mIndex, currentURI, &canNavigate);
+ }
+ }
+ if (!canNavigate)
+ return NS_OK;
+
+ return LoadEntry(mIndex, nsIDocShellLoadInfo::loadHistory, HIST_CMD_RELOAD);
+}
+
void
nsSHistory::EvictWindowContentViewers(PRInt32 aFromIndex, PRInt32 aToIndex)
{
// To enforce the per SHistory object limit on cached content viewers, we
// need to release all of the content viewers that are no longer in the
// "window" that now ends/begins at aToIndex. Existing content viewers
// should be in the window from
// aFromIndex - gHistoryMaxViewers to aFromIndex + gHistoryMaxViewers
--- a/docshell/shistory/src/nsSHistory.h
+++ b/docshell/shistory/src/nsSHistory.h
@@ -57,27 +57,28 @@
// Needed to maintain global list of all SHistory objects
#include "prclist.h"
class nsIDocShell;
class nsSHEnumerator;
class nsSHistoryObserver;
class nsSHistory: public PRCList,
- public nsISHistory,
+ public nsISHistory_2_0_BRANCH,
public nsISHistoryInternal,
public nsIWebNavigation
{
public:
nsSHistory();
NS_DECL_ISUPPORTS
NS_DECL_NSISHISTORY
NS_DECL_NSISHISTORYINTERNAL
NS_DECL_NSIWEBNAVIGATION
+ NS_DECL_NSISHISTORY_2_0_BRANCH
// One time initialization method called upon docshell module construction
static nsresult Startup();
static void UpdatePrefs(nsIPrefBranch *aPrefBranch);
// Max number of total cached content viewers. If the pref
// browser.sessionhistory.max_total_viewers is negative, then
// this value is calculated based on the total amount of memory.