diff --git a/mozilla/content/html/content/src/nsHTMLButtonElement.cpp b/mozilla/content/html/content/src/nsHTMLButtonElement.cpp
index d0c00366e69..0be6f201d1c 100644
--- a/mozilla/content/html/content/src/nsHTMLButtonElement.cpp
+++ b/mozilla/content/html/content/src/nsHTMLButtonElement.cpp
@@ -520,22 +520,28 @@ nsHTMLButtonElement::GetType(PRInt32* aType)
NS_IMETHODIMP
nsHTMLButtonElement::SetForm(nsIDOMHTMLFormElement* aForm)
{
- nsresult result = NS_OK;
+ nsresult result;
+ nsIFormControl *formControl;
+
+ result = QueryInterface(kIFormControlIID, (void**)&formControl);
+ if (NS_FAILED(result))
+ formControl = nsnull;
+
+ if (mForm && formControl)
+ mForm->RemoveElement(formControl, PR_TRUE);
NS_IF_RELEASE(mForm);
- if (nsnull == aForm) {
+
+ if (nsnull == aForm)
mForm = nsnull;
- return NS_OK;
- } else {
- nsIFormControl* formControl = nsnull;
- result = QueryInterface(kIFormControlIID, (void**)&formControl);
- if ((NS_OK == result) && formControl) {
+ else {
+ if (formControl) {
result = aForm->QueryInterface(kIFormIID, (void**)&mForm); // keep the ref
if ((NS_OK == result) && mForm) {
mForm->AddElement(formControl);
}
- NS_RELEASE(formControl);
}
}
+ NS_IF_RELEASE(formControl);
return result;
}
diff --git a/mozilla/content/html/content/src/nsHTMLFieldSetElement.cpp b/mozilla/content/html/content/src/nsHTMLFieldSetElement.cpp
index e53a39ec911..27247697237 100644
--- a/mozilla/content/html/content/src/nsHTMLFieldSetElement.cpp
+++ b/mozilla/content/html/content/src/nsHTMLFieldSetElement.cpp
@@ -204,22 +204,28 @@ nsHTMLFieldSetElement::GetForm(nsIDOMHTMLFormElement** aForm)
NS_IMETHODIMP
nsHTMLFieldSetElement::SetForm(nsIDOMHTMLFormElement* aForm)
{
- nsresult result = NS_OK;
- if (nsnull == aForm) {
+ nsresult result;
+ nsIFormControl *formControl;
+
+ result = QueryInterface(kIFormControlIID, (void**)&formControl);
+ if (NS_FAILED(result))
+ formControl = nsnull;
+
+ if (mForm && formControl)
+ mForm->RemoveElement(formControl, PR_TRUE);
+
+ if (nsnull == aForm)
mForm = nsnull;
- return NS_OK;
- } else {
+ else {
NS_IF_RELEASE(mForm);
- nsIFormControl* formControl = nsnull;
- result = QueryInterface(kIFormControlIID, (void**)&formControl);
- if ((NS_OK == result) && formControl) {
+ if (formControl) {
result = aForm->QueryInterface(kIFormIID, (void**)&mForm); // keep the ref
if ((NS_OK == result) && mForm) {
mForm->AddElement(formControl);
}
- NS_RELEASE(formControl);
}
}
+ NS_IF_RELEASE(formControl);
return result;
}
diff --git a/mozilla/content/html/content/src/nsHTMLFormElement.cpp b/mozilla/content/html/content/src/nsHTMLFormElement.cpp
index ee3a02f3005..a3c0067330c 100644
--- a/mozilla/content/html/content/src/nsHTMLFormElement.cpp
+++ b/mozilla/content/html/content/src/nsHTMLFormElement.cpp
@@ -197,18 +197,19 @@ nsHTMLFormElement::nsHTMLFormElement(nsIAtom* aTag)
nsHTMLFormElement::~nsHTMLFormElement()
{
-
// set the controls to have no form
PRUint32 numControls;
GetElementCount(&numControls);
- for (PRUint32 i = 0; i < numControls; i++) {
+ do {
+ if (numControls-- == 0)
+ break;
// avoid addref to child
- nsIFormControl* control = (nsIFormControl*)mControls->mElements.ElementAt(i);
+ nsIFormControl* control = (nsIFormControl*)mControls->mElements.ElementAt(numControls);
if (control) {
// it is assummed that passing in nsnull will not release formControl's previous form
control->SetForm(nsnull);
}
- }
+ } while(1);
mControls->SetForm(nsnull);
NS_RELEASE(mControls);
diff --git a/mozilla/content/html/content/src/nsHTMLInputElement.cpp b/mozilla/content/html/content/src/nsHTMLInputElement.cpp
index 92039a79266..9f91e8af7f4 100644
--- a/mozilla/content/html/content/src/nsHTMLInputElement.cpp
+++ b/mozilla/content/html/content/src/nsHTMLInputElement.cpp
@@ -1031,22 +1031,28 @@ nsHTMLInputElement::GetAttributeMappingFunctions(nsMapAttributesFunc& aFontMapFu
NS_IMETHODIMP
nsHTMLInputElement::SetForm(nsIDOMHTMLFormElement* aForm)
{
- nsresult result = NS_OK;
- if (nsnull == aForm) {
+ nsresult result;
+ nsIFormControl *formControl;
+
+ result = QueryInterface(kIFormControlIID, (void**)&formControl);
+ if (NS_FAILED(result))
+ formControl = nsnull;
+
+ if (mForm && formControl)
+ mForm->RemoveElement(formControl, PR_TRUE);
+
+ if (nsnull == aForm)
mForm = nsnull;
- return NS_OK;
- } else {
+ else {
NS_IF_RELEASE(mForm);
- nsIFormControl* formControl = nsnull;
- result = QueryInterface(kIFormControlIID, (void**)&formControl);
- if ((NS_OK == result) && formControl) {
+ if (formControl) {
result = aForm->QueryInterface(kIFormIID, (void**)&mForm); // keep the ref
if ((NS_OK == result) && mForm) {
mForm->AddElement(formControl);
}
- NS_RELEASE(formControl);
}
}
+ NS_IF_RELEASE(formControl);
return result;
}
diff --git a/mozilla/content/html/content/src/nsHTMLLabelElement.cpp b/mozilla/content/html/content/src/nsHTMLLabelElement.cpp
index e6272882cae..9c5a226e7be 100644
--- a/mozilla/content/html/content/src/nsHTMLLabelElement.cpp
+++ b/mozilla/content/html/content/src/nsHTMLLabelElement.cpp
@@ -212,22 +212,28 @@ nsHTMLLabelElement::GetForm(nsIDOMHTMLFormElement** aForm)
NS_IMETHODIMP
nsHTMLLabelElement::SetForm(nsIDOMHTMLFormElement* aForm)
{
- nsresult result = NS_OK;
- if (nsnull == aForm) {
+ nsresult result;
+ nsIFormControl *formControl;
+
+ result = QueryInterface(kIFormControlIID, (void**)&formControl);
+ if (NS_FAILED(result))
+ formControl = nsnull;
+
+ if (mForm && formControl)
+ mForm->RemoveElement(formControl, PR_TRUE);
+
+ if (nsnull == aForm)
mForm = nsnull;
- return NS_OK;
- } else {
+ else {
NS_IF_RELEASE(mForm);
- nsIFormControl* formControl = nsnull;
- result = QueryInterface(kIFormControlIID, (void**)&formControl);
- if ((NS_OK == result) && formControl) {
+ if (formControl) {
result = aForm->QueryInterface(kIFormIID, (void**)&mForm); // keep the ref
if ((NS_OK == result) && mForm) {
mForm->AddElement(formControl);
}
- NS_RELEASE(formControl);
}
}
+ NS_IF_RELEASE(formControl);
return result;
}
diff --git a/mozilla/content/html/content/src/nsHTMLSelectElement.cpp b/mozilla/content/html/content/src/nsHTMLSelectElement.cpp
index a1c28383d7d..b33c60939a3 100644
--- a/mozilla/content/html/content/src/nsHTMLSelectElement.cpp
+++ b/mozilla/content/html/content/src/nsHTMLSelectElement.cpp
@@ -859,22 +859,28 @@ nsHTMLSelectElement::GetType(PRInt32* aType)
NS_IMETHODIMP
nsHTMLSelectElement::SetForm(nsIDOMHTMLFormElement* aForm)
{
- nsresult result = NS_OK;
- if (nsnull == aForm) {
+ nsresult result;
+ nsIFormControl *formControl;
+
+ result = QueryInterface(kIFormControlIID, (void**)&formControl);
+ if (NS_FAILED(result))
+ formControl = nsnull;
+
+ if (mForm && formControl)
+ mForm->RemoveElement(formControl, PR_TRUE);
+
+ if (nsnull == aForm)
mForm = nsnull;
- return NS_OK;
- } else {
+ else {
NS_IF_RELEASE(mForm);
- nsIFormControl* formControl = nsnull;
- result = QueryInterface(kIFormControlIID, (void**)&formControl);
- if ((NS_OK == result) && formControl) {
+ if (formControl) {
result = aForm->QueryInterface(kIFormIID, (void**)&mForm); // keep the ref
if ((NS_OK == result) && mForm) {
mForm->AddElement(formControl);
}
- NS_RELEASE(formControl);
}
}
+ NS_IF_RELEASE(formControl);
return result;
}
diff --git a/mozilla/content/html/content/src/nsHTMLTextAreaElement.cpp b/mozilla/content/html/content/src/nsHTMLTextAreaElement.cpp
index 181fca72616..ed97b8d749b 100644
--- a/mozilla/content/html/content/src/nsHTMLTextAreaElement.cpp
+++ b/mozilla/content/html/content/src/nsHTMLTextAreaElement.cpp
@@ -517,22 +517,28 @@ nsHTMLTextAreaElement::GetType(PRInt32* aType)
NS_IMETHODIMP
nsHTMLTextAreaElement::SetForm(nsIDOMHTMLFormElement* aForm)
{
- nsresult result = NS_OK;
- if (nsnull == aForm) {
+ nsresult result;
+ nsIFormControl *formControl;
+
+ result = QueryInterface(kIFormControlIID, (void**)&formControl);
+ if (NS_FAILED(result))
+ formControl = nsnull;
+
+ if (mForm && formControl)
+ mForm->RemoveElement(formControl, PR_TRUE);
+
+ if (nsnull == aForm)
mForm = nsnull;
- return NS_OK;
- } else {
+ else {
NS_IF_RELEASE(mForm);
- nsIFormControl* formControl = nsnull;
- result = QueryInterface(kIFormControlIID, (void**)&formControl);
- if ((NS_OK == result) && formControl) {
+ if (formControl) {
result = aForm->QueryInterface(kIFormIID, (void**)&mForm); // keep the ref
if ((NS_OK == result) && mForm) {
mForm->AddElement(formControl);
}
- NS_RELEASE(formControl);
}
}
+ NS_IF_RELEASE(formControl);
return result;
}
diff --git a/mozilla/layout/html/content/src/nsHTMLButtonElement.cpp b/mozilla/layout/html/content/src/nsHTMLButtonElement.cpp
index d0c00366e69..0be6f201d1c 100644
--- a/mozilla/layout/html/content/src/nsHTMLButtonElement.cpp
+++ b/mozilla/layout/html/content/src/nsHTMLButtonElement.cpp
@@ -520,22 +520,28 @@ nsHTMLButtonElement::GetType(PRInt32* aType)
NS_IMETHODIMP
nsHTMLButtonElement::SetForm(nsIDOMHTMLFormElement* aForm)
{
- nsresult result = NS_OK;
+ nsresult result;
+ nsIFormControl *formControl;
+
+ result = QueryInterface(kIFormControlIID, (void**)&formControl);
+ if (NS_FAILED(result))
+ formControl = nsnull;
+
+ if (mForm && formControl)
+ mForm->RemoveElement(formControl, PR_TRUE);
NS_IF_RELEASE(mForm);
- if (nsnull == aForm) {
+
+ if (nsnull == aForm)
mForm = nsnull;
- return NS_OK;
- } else {
- nsIFormControl* formControl = nsnull;
- result = QueryInterface(kIFormControlIID, (void**)&formControl);
- if ((NS_OK == result) && formControl) {
+ else {
+ if (formControl) {
result = aForm->QueryInterface(kIFormIID, (void**)&mForm); // keep the ref
if ((NS_OK == result) && mForm) {
mForm->AddElement(formControl);
}
- NS_RELEASE(formControl);
}
}
+ NS_IF_RELEASE(formControl);
return result;
}
diff --git a/mozilla/layout/html/content/src/nsHTMLFieldSetElement.cpp b/mozilla/layout/html/content/src/nsHTMLFieldSetElement.cpp
index e53a39ec911..27247697237 100644
--- a/mozilla/layout/html/content/src/nsHTMLFieldSetElement.cpp
+++ b/mozilla/layout/html/content/src/nsHTMLFieldSetElement.cpp
@@ -204,22 +204,28 @@ nsHTMLFieldSetElement::GetForm(nsIDOMHTMLFormElement** aForm)
NS_IMETHODIMP
nsHTMLFieldSetElement::SetForm(nsIDOMHTMLFormElement* aForm)
{
- nsresult result = NS_OK;
- if (nsnull == aForm) {
+ nsresult result;
+ nsIFormControl *formControl;
+
+ result = QueryInterface(kIFormControlIID, (void**)&formControl);
+ if (NS_FAILED(result))
+ formControl = nsnull;
+
+ if (mForm && formControl)
+ mForm->RemoveElement(formControl, PR_TRUE);
+
+ if (nsnull == aForm)
mForm = nsnull;
- return NS_OK;
- } else {
+ else {
NS_IF_RELEASE(mForm);
- nsIFormControl* formControl = nsnull;
- result = QueryInterface(kIFormControlIID, (void**)&formControl);
- if ((NS_OK == result) && formControl) {
+ if (formControl) {
result = aForm->QueryInterface(kIFormIID, (void**)&mForm); // keep the ref
if ((NS_OK == result) && mForm) {
mForm->AddElement(formControl);
}
- NS_RELEASE(formControl);
}
}
+ NS_IF_RELEASE(formControl);
return result;
}
diff --git a/mozilla/layout/html/content/src/nsHTMLFormElement.cpp b/mozilla/layout/html/content/src/nsHTMLFormElement.cpp
index ee3a02f3005..a3c0067330c 100644
--- a/mozilla/layout/html/content/src/nsHTMLFormElement.cpp
+++ b/mozilla/layout/html/content/src/nsHTMLFormElement.cpp
@@ -197,18 +197,19 @@ nsHTMLFormElement::nsHTMLFormElement(nsIAtom* aTag)
nsHTMLFormElement::~nsHTMLFormElement()
{
-
// set the controls to have no form
PRUint32 numControls;
GetElementCount(&numControls);
- for (PRUint32 i = 0; i < numControls; i++) {
+ do {
+ if (numControls-- == 0)
+ break;
// avoid addref to child
- nsIFormControl* control = (nsIFormControl*)mControls->mElements.ElementAt(i);
+ nsIFormControl* control = (nsIFormControl*)mControls->mElements.ElementAt(numControls);
if (control) {
// it is assummed that passing in nsnull will not release formControl's previous form
control->SetForm(nsnull);
}
- }
+ } while(1);
mControls->SetForm(nsnull);
NS_RELEASE(mControls);
diff --git a/mozilla/layout/html/content/src/nsHTMLInputElement.cpp b/mozilla/layout/html/content/src/nsHTMLInputElement.cpp
index 92039a79266..9f91e8af7f4 100644
--- a/mozilla/layout/html/content/src/nsHTMLInputElement.cpp
+++ b/mozilla/layout/html/content/src/nsHTMLInputElement.cpp
@@ -1031,22 +1031,28 @@ nsHTMLInputElement::GetAttributeMappingFunctions(nsMapAttributesFunc& aFontMapFu
NS_IMETHODIMP
nsHTMLInputElement::SetForm(nsIDOMHTMLFormElement* aForm)
{
- nsresult result = NS_OK;
- if (nsnull == aForm) {
+ nsresult result;
+ nsIFormControl *formControl;
+
+ result = QueryInterface(kIFormControlIID, (void**)&formControl);
+ if (NS_FAILED(result))
+ formControl = nsnull;
+
+ if (mForm && formControl)
+ mForm->RemoveElement(formControl, PR_TRUE);
+
+ if (nsnull == aForm)
mForm = nsnull;
- return NS_OK;
- } else {
+ else {
NS_IF_RELEASE(mForm);
- nsIFormControl* formControl = nsnull;
- result = QueryInterface(kIFormControlIID, (void**)&formControl);
- if ((NS_OK == result) && formControl) {
+ if (formControl) {
result = aForm->QueryInterface(kIFormIID, (void**)&mForm); // keep the ref
if ((NS_OK == result) && mForm) {
mForm->AddElement(formControl);
}
- NS_RELEASE(formControl);
}
}
+ NS_IF_RELEASE(formControl);
return result;
}
diff --git a/mozilla/layout/html/content/src/nsHTMLLabelElement.cpp b/mozilla/layout/html/content/src/nsHTMLLabelElement.cpp
index e6272882cae..9c5a226e7be 100644
--- a/mozilla/layout/html/content/src/nsHTMLLabelElement.cpp
+++ b/mozilla/layout/html/content/src/nsHTMLLabelElement.cpp
@@ -212,22 +212,28 @@ nsHTMLLabelElement::GetForm(nsIDOMHTMLFormElement** aForm)
NS_IMETHODIMP
nsHTMLLabelElement::SetForm(nsIDOMHTMLFormElement* aForm)
{
- nsresult result = NS_OK;
- if (nsnull == aForm) {
+ nsresult result;
+ nsIFormControl *formControl;
+
+ result = QueryInterface(kIFormControlIID, (void**)&formControl);
+ if (NS_FAILED(result))
+ formControl = nsnull;
+
+ if (mForm && formControl)
+ mForm->RemoveElement(formControl, PR_TRUE);
+
+ if (nsnull == aForm)
mForm = nsnull;
- return NS_OK;
- } else {
+ else {
NS_IF_RELEASE(mForm);
- nsIFormControl* formControl = nsnull;
- result = QueryInterface(kIFormControlIID, (void**)&formControl);
- if ((NS_OK == result) && formControl) {
+ if (formControl) {
result = aForm->QueryInterface(kIFormIID, (void**)&mForm); // keep the ref
if ((NS_OK == result) && mForm) {
mForm->AddElement(formControl);
}
- NS_RELEASE(formControl);
}
}
+ NS_IF_RELEASE(formControl);
return result;
}
diff --git a/mozilla/layout/html/content/src/nsHTMLSelectElement.cpp b/mozilla/layout/html/content/src/nsHTMLSelectElement.cpp
index a1c28383d7d..b33c60939a3 100644
--- a/mozilla/layout/html/content/src/nsHTMLSelectElement.cpp
+++ b/mozilla/layout/html/content/src/nsHTMLSelectElement.cpp
@@ -859,22 +859,28 @@ nsHTMLSelectElement::GetType(PRInt32* aType)
NS_IMETHODIMP
nsHTMLSelectElement::SetForm(nsIDOMHTMLFormElement* aForm)
{
- nsresult result = NS_OK;
- if (nsnull == aForm) {
+ nsresult result;
+ nsIFormControl *formControl;
+
+ result = QueryInterface(kIFormControlIID, (void**)&formControl);
+ if (NS_FAILED(result))
+ formControl = nsnull;
+
+ if (mForm && formControl)
+ mForm->RemoveElement(formControl, PR_TRUE);
+
+ if (nsnull == aForm)
mForm = nsnull;
- return NS_OK;
- } else {
+ else {
NS_IF_RELEASE(mForm);
- nsIFormControl* formControl = nsnull;
- result = QueryInterface(kIFormControlIID, (void**)&formControl);
- if ((NS_OK == result) && formControl) {
+ if (formControl) {
result = aForm->QueryInterface(kIFormIID, (void**)&mForm); // keep the ref
if ((NS_OK == result) && mForm) {
mForm->AddElement(formControl);
}
- NS_RELEASE(formControl);
}
}
+ NS_IF_RELEASE(formControl);
return result;
}
diff --git a/mozilla/layout/html/content/src/nsHTMLTextAreaElement.cpp b/mozilla/layout/html/content/src/nsHTMLTextAreaElement.cpp
index 181fca72616..ed97b8d749b 100644
--- a/mozilla/layout/html/content/src/nsHTMLTextAreaElement.cpp
+++ b/mozilla/layout/html/content/src/nsHTMLTextAreaElement.cpp
@@ -517,22 +517,28 @@ nsHTMLTextAreaElement::GetType(PRInt32* aType)
NS_IMETHODIMP
nsHTMLTextAreaElement::SetForm(nsIDOMHTMLFormElement* aForm)
{
- nsresult result = NS_OK;
- if (nsnull == aForm) {
+ nsresult result;
+ nsIFormControl *formControl;
+
+ result = QueryInterface(kIFormControlIID, (void**)&formControl);
+ if (NS_FAILED(result))
+ formControl = nsnull;
+
+ if (mForm && formControl)
+ mForm->RemoveElement(formControl, PR_TRUE);
+
+ if (nsnull == aForm)
mForm = nsnull;
- return NS_OK;
- } else {
+ else {
NS_IF_RELEASE(mForm);
- nsIFormControl* formControl = nsnull;
- result = QueryInterface(kIFormControlIID, (void**)&formControl);
- if ((NS_OK == result) && formControl) {
+ if (formControl) {
result = aForm->QueryInterface(kIFormIID, (void**)&mForm); // keep the ref
if ((NS_OK == result) && mForm) {
mForm->AddElement(formControl);
}
- NS_RELEASE(formControl);
}
}
+ NS_IF_RELEASE(formControl);
return result;
}