diff --git a/mozilla/content/html/content/src/nsHTMLScriptElement.cpp b/mozilla/content/html/content/src/nsHTMLScriptElement.cpp
index 11c4406fe2c..8463a8a7537 100644
--- a/mozilla/content/html/content/src/nsHTMLScriptElement.cpp
+++ b/mozilla/content/html/content/src/nsHTMLScriptElement.cpp
@@ -30,6 +30,7 @@
#include "nsIMutableStyleContext.h"
#include "nsStyleConsts.h"
#include "nsIPresContext.h"
+#include "nsITextContent.h"
static NS_DEFINE_IID(kIDOMHTMLScriptElementIID, NS_IDOMHTMLSCRIPTELEMENT_IID);
@@ -80,7 +81,6 @@ public:
protected:
nsGenericHTMLContainerElement mInner;
- nsString mText;
};
nsresult
@@ -139,17 +139,65 @@ nsHTMLScriptElement::CloneNode(PRBool aDeep, nsIDOMNode** aReturn)
NS_IMETHODIMP
nsHTMLScriptElement::GetText(nsString& aValue)
{
- // XXX out of memory errors
- aValue = mText;
+ PRInt32 i, count = 0;
+ nsresult rv = NS_OK;
+
+ aValue.Truncate();
+
+ ChildCount(count);
+
+ for (i = 0; i < count; i++) {
+ nsCOMPtr child;
+
+ rv = ChildAt(i, *getter_AddRefs(child));
+ NS_ENSURE_SUCCESS(rv, rv);
+
+ nsCOMPtr node(do_QueryInterface(child));
+
+ if (node) {
+ nsAutoString tmp;
+ node->GetNodeValue(tmp);
+
+ aValue.Append(tmp);
+ }
+ }
+
return NS_OK;
}
NS_IMETHODIMP
nsHTMLScriptElement::SetText(const nsString& aValue)
{
- // XXX out of memory errors
- mText = aValue;
- return NS_OK;
+ nsCOMPtr content;
+ PRInt32 i, count = 0;
+ nsresult rv = NS_OK;
+
+ ChildCount(count);
+
+ if (count) {
+ for (i = count-1; i > 1; i--) {
+ RemoveChildAt(i, PR_FALSE);
+ }
+
+ rv = ChildAt(0, *getter_AddRefs(content));
+ NS_ENSURE_SUCCESS(rv, rv);
+ } else {
+ rv = NS_NewTextNode(getter_AddRefs(content));
+ NS_ENSURE_SUCCESS(rv, rv);
+
+ rv = InsertChildAt(content, 0, PR_FALSE);
+ NS_ENSURE_SUCCESS(rv, rv);
+ }
+
+ if (content) {
+ nsCOMPtr node(do_QueryInterface(content));
+
+ if (node) {
+ rv = node->SetNodeValue(aValue);
+ }
+ }
+
+ return rv;
}
NS_IMETHODIMP
@@ -251,12 +299,7 @@ nsHTMLScriptElement::SizeOf(nsISizeOfHandler* aSizer, PRUint32* aResult) const
{
if (!aResult) return NS_ERROR_NULL_POINTER;
#ifdef DEBUG
- PRUint32 sum;
- mInner.SizeOf(aSizer, &sum, sizeof(*this));
- PRUint32 ssize;
- mText.SizeOf(aSizer, &ssize);
- sum = sum - sizeof(mText) + ssize;
- *aResult = sum;
+ mInner.SizeOf(aSizer, aResult, sizeof(*this));
#endif
return NS_OK;
}
diff --git a/mozilla/layout/html/content/src/nsHTMLScriptElement.cpp b/mozilla/layout/html/content/src/nsHTMLScriptElement.cpp
index 11c4406fe2c..8463a8a7537 100644
--- a/mozilla/layout/html/content/src/nsHTMLScriptElement.cpp
+++ b/mozilla/layout/html/content/src/nsHTMLScriptElement.cpp
@@ -30,6 +30,7 @@
#include "nsIMutableStyleContext.h"
#include "nsStyleConsts.h"
#include "nsIPresContext.h"
+#include "nsITextContent.h"
static NS_DEFINE_IID(kIDOMHTMLScriptElementIID, NS_IDOMHTMLSCRIPTELEMENT_IID);
@@ -80,7 +81,6 @@ public:
protected:
nsGenericHTMLContainerElement mInner;
- nsString mText;
};
nsresult
@@ -139,17 +139,65 @@ nsHTMLScriptElement::CloneNode(PRBool aDeep, nsIDOMNode** aReturn)
NS_IMETHODIMP
nsHTMLScriptElement::GetText(nsString& aValue)
{
- // XXX out of memory errors
- aValue = mText;
+ PRInt32 i, count = 0;
+ nsresult rv = NS_OK;
+
+ aValue.Truncate();
+
+ ChildCount(count);
+
+ for (i = 0; i < count; i++) {
+ nsCOMPtr child;
+
+ rv = ChildAt(i, *getter_AddRefs(child));
+ NS_ENSURE_SUCCESS(rv, rv);
+
+ nsCOMPtr node(do_QueryInterface(child));
+
+ if (node) {
+ nsAutoString tmp;
+ node->GetNodeValue(tmp);
+
+ aValue.Append(tmp);
+ }
+ }
+
return NS_OK;
}
NS_IMETHODIMP
nsHTMLScriptElement::SetText(const nsString& aValue)
{
- // XXX out of memory errors
- mText = aValue;
- return NS_OK;
+ nsCOMPtr content;
+ PRInt32 i, count = 0;
+ nsresult rv = NS_OK;
+
+ ChildCount(count);
+
+ if (count) {
+ for (i = count-1; i > 1; i--) {
+ RemoveChildAt(i, PR_FALSE);
+ }
+
+ rv = ChildAt(0, *getter_AddRefs(content));
+ NS_ENSURE_SUCCESS(rv, rv);
+ } else {
+ rv = NS_NewTextNode(getter_AddRefs(content));
+ NS_ENSURE_SUCCESS(rv, rv);
+
+ rv = InsertChildAt(content, 0, PR_FALSE);
+ NS_ENSURE_SUCCESS(rv, rv);
+ }
+
+ if (content) {
+ nsCOMPtr node(do_QueryInterface(content));
+
+ if (node) {
+ rv = node->SetNodeValue(aValue);
+ }
+ }
+
+ return rv;
}
NS_IMETHODIMP
@@ -251,12 +299,7 @@ nsHTMLScriptElement::SizeOf(nsISizeOfHandler* aSizer, PRUint32* aResult) const
{
if (!aResult) return NS_ERROR_NULL_POINTER;
#ifdef DEBUG
- PRUint32 sum;
- mInner.SizeOf(aSizer, &sum, sizeof(*this));
- PRUint32 ssize;
- mText.SizeOf(aSizer, &ssize);
- sum = sum - sizeof(mText) + ssize;
- *aResult = sum;
+ mInner.SizeOf(aSizer, aResult, sizeof(*this));
#endif
return NS_OK;
}