Bug 93972: Don't save form control values in session history if they have an autocomplete attribute set to off, or if their containing form has an autocomplete attribute set to off. This is accomplished by returning an empty 'state key' which indicates that the state should not be stored in session history's hash table. r/sr=jst@netscape.com,vidur@netscape.com

This commit is contained in:
pollmann%netscape.com 2001-08-16 07:18:24 +00:00
parent 1d3e6ec608
commit 6bf6b98abb
2 changed files with 38 additions and 0 deletions

View File

@ -67,6 +67,7 @@
#include "nsIDOMHTMLFormElement.h"
#include "nsIForm.h"
#include "nsIContentList.h"
#include "nsReadableUtils.h"
#define NEW_CONTEXT_PARENTAGE_INVARIANT
@ -2298,6 +2299,14 @@ static inline void KeyAppendAtom(nsIAtom* aAtom, nsCString& aKey)
KeyAppendString(nsDependentString(atomString), aKey);
}
static inline PRBool IsAutocompleteOff(nsIDOMElement* aElement)
{
nsAutoString autocomplete;
aElement->GetAttribute(NS_LITERAL_STRING("autocomplete"), autocomplete);
ToLowerCase(autocomplete);
return autocomplete.Equals(NS_LITERAL_STRING("off"));
}
NS_IMETHODIMP
FrameManager::GenerateStateKey(nsIContent* aContent,
nsIStatefulFrame::SpecialStateID aID,
@ -2322,6 +2331,11 @@ FrameManager::GenerateStateKey(nsIContent* aContent,
return NS_OK;
}
nsCOMPtr<nsIDOMElement> element(do_QueryInterface(aContent));
if (element && IsAutocompleteOff(element)) {
return NS_OK;
}
// If we have a dom element, add tag/type/name to hash key
// This is paranoia, but guarantees that we won't restore
// state to the wrong type of control.
@ -2355,6 +2369,11 @@ FrameManager::GenerateStateKey(nsIContent* aContent,
control->GetForm(getter_AddRefs(formElement));
if (formElement) {
if (IsAutocompleteOff(formElement)) {
aKey.Truncate();
return NS_OK;
}
nsAutoString formName;
formElement->GetName(formName);
KeyAppendString(formName, aKey);

View File

@ -67,6 +67,7 @@
#include "nsIDOMHTMLFormElement.h"
#include "nsIForm.h"
#include "nsIContentList.h"
#include "nsReadableUtils.h"
#define NEW_CONTEXT_PARENTAGE_INVARIANT
@ -2298,6 +2299,14 @@ static inline void KeyAppendAtom(nsIAtom* aAtom, nsCString& aKey)
KeyAppendString(nsDependentString(atomString), aKey);
}
static inline PRBool IsAutocompleteOff(nsIDOMElement* aElement)
{
nsAutoString autocomplete;
aElement->GetAttribute(NS_LITERAL_STRING("autocomplete"), autocomplete);
ToLowerCase(autocomplete);
return autocomplete.Equals(NS_LITERAL_STRING("off"));
}
NS_IMETHODIMP
FrameManager::GenerateStateKey(nsIContent* aContent,
nsIStatefulFrame::SpecialStateID aID,
@ -2322,6 +2331,11 @@ FrameManager::GenerateStateKey(nsIContent* aContent,
return NS_OK;
}
nsCOMPtr<nsIDOMElement> element(do_QueryInterface(aContent));
if (element && IsAutocompleteOff(element)) {
return NS_OK;
}
// If we have a dom element, add tag/type/name to hash key
// This is paranoia, but guarantees that we won't restore
// state to the wrong type of control.
@ -2355,6 +2369,11 @@ FrameManager::GenerateStateKey(nsIContent* aContent,
control->GetForm(getter_AddRefs(formElement));
if (formElement) {
if (IsAutocompleteOff(formElement)) {
aKey.Truncate();
return NS_OK;
}
nsAutoString formName;
formElement->GetName(formName);
KeyAppendString(formName, aKey);