[XForms] Fixed regression of upload, filename and mediatype. Bug 345865, r=doronr+allan

This commit is contained in:
aaronr%us.ibm.com 2006-07-26 22:09:25 +00:00
parent b311d9b102
commit 3de3debe4a
3 changed files with 38 additions and 9 deletions

View File

@ -378,12 +378,12 @@ nsXFormsUploadElement::HandleChildElements(nsILocalFile *aFile,
nsAutoString filename;
rv = aFile->GetLeafName(filename);
if (!filename.IsEmpty()) {
rv = mModel->SetNodeValue(filenameElem, filename, PR_FALSE,
&filenameChanged);
rv = nsXFormsUtils::SetSingleNodeBindingValue(filenameElem, filename,
&filenameChanged);
}
} else {
rv = mModel->SetNodeValue(filenameElem, EmptyString(),
PR_FALSE, &filenameChanged);
rv = nsXFormsUtils::SetSingleNodeBindingValue(filenameElem, EmptyString(),
&filenameChanged);
}
NS_ENSURE_SUCCESS(rv, rv);
}
@ -401,13 +401,12 @@ nsXFormsUploadElement::HandleChildElements(nsILocalFile *aFile,
if (NS_FAILED(rv)) {
contentType.AssignLiteral("application/octet-stream");
}
rv = mModel->SetNodeValue(mediatypeElem,
NS_ConvertUTF8toUTF16(contentType),
PR_FALSE, &mediatypechanged);
rv = nsXFormsUtils::SetSingleNodeBindingValue(mediatypeElem,
NS_ConvertUTF8toUTF16(contentType), &mediatypechanged);
}
} else {
rv = mModel->SetNodeValue(mediatypeElem, EmptyString(),
PR_FALSE, &mediatypechanged);
rv = nsXFormsUtils::SetSingleNodeBindingValue(mediatypeElem,
EmptyString(), &mediatypechanged);
}
}

View File

@ -2625,3 +2625,22 @@ nsXFormsUtils::GetDaysFromDateTime(const nsAString & aValue, PRInt32 * aDays)
return NS_OK;
}
/* static */ PRBool
nsXFormsUtils::SetSingleNodeBindingValue(nsIDOMElement *aElement,
const nsAString &aValue,
PRBool *aChanged)
{
*aChanged = PR_FALSE;
nsCOMPtr<nsIDOMNode> node;
nsCOMPtr<nsIModelElementPrivate> model;
if (GetSingleNodeBinding(aElement, getter_AddRefs(node),
getter_AddRefs(model)))
{
nsresult rv = model->SetNodeValue(node, aValue, PR_FALSE, aChanged);
if (NS_SUCCEEDED(rv))
return PR_TRUE;
}
return PR_FALSE;
}

View File

@ -318,6 +318,17 @@ public:
static NS_HIDDEN_(PRBool)
GetSingleNodeBindingValue(nsIDOMElement* aElement, nsString& aValue);
/**
* Convenience method. Evaluates the single node binding expression for the
* given xforms element and then sets the resulting single node to aValue.
* This allows elements like xf:filename and xf:mediatype to function
* properly without needing the overhead of being nsIXFormsControls.
*
* Returns PR_TRUE if the evaluation and node value setting both succeeded.
*/
static NS_HIDDEN_(PRBool)
SetSingleNodeBindingValue(nsIDOMElement *aElement, const nsAString &aValue,
PRBool *aChanged);
/**
* Dispatch an XForms event. aDefaultActionEnabled is returned indicating
* if the default action of the dispatched event was enabled. aSrcElement