Bug 436990. Make sure to remove already-fired timers from our refresh URI list. r+sr=jst

This commit is contained in:
Boris Zbarsky
2008-09-08 09:19:49 -04:00
parent b6c8a5ebcb
commit e3901aa27c
5 changed files with 65 additions and 4 deletions

View File

@@ -4435,6 +4435,31 @@ nsDocShell::RefreshURI(nsIURI * aURI, PRInt32 aDelay, PRBool aRepeat,
return NS_OK;
}
nsresult
nsDocShell::ForceRefreshURIFromTimer(nsIURI * aURI,
PRInt32 aDelay,
PRBool aMetaRefresh,
nsITimer* aTimer)
{
NS_PRECONDITION(aTimer, "Must have a timer here");
// Remove aTimer from mRefreshURIList if needed
if (mRefreshURIList) {
PRUint32 n = 0;
mRefreshURIList->Count(&n);
for (PRUint32 i = 0; i < n; ++i) {
nsCOMPtr<nsITimer> timer = do_QueryElementAt(mRefreshURIList, i);
if (timer == aTimer) {
mRefreshURIList->RemoveElementAt(i);
break;
}
}
}
return ForceRefreshURI(aURI, aDelay, aMetaRefresh);
}
NS_IMETHODIMP
nsDocShell::ForceRefreshURI(nsIURI * aURI,
PRInt32 aDelay,
@@ -9303,9 +9328,7 @@ nsRefreshTimer::Notify(nsITimer * aTimer)
// Get the delay count to determine load type
PRUint32 delay = 0;
aTimer->GetDelay(&delay);
nsCOMPtr<nsIRefreshURI> refreshURI = do_QueryInterface(mDocShell);
if (refreshURI)
refreshURI->ForceRefreshURI(mURI, delay, mMetaRefresh);
mDocShell->ForceRefreshURIFromTimer(mURI, delay, mMetaRefresh, aTimer);
}
return NS_OK;
}