From 893943c05fdc2462e37b525d4414160a005ceb72 Mon Sep 17 00:00:00 2001 From: "jst%netscape.com" Date: Mon, 22 May 2000 23:02:40 +0000 Subject: [PATCH] Fixing nsbeta2+ bug #24958, script.text never contained the actual script source, now it gets the script source from the textnodes inside the script element. r=vidur@netscape.com git-svn-id: svn://10.0.0.236/trunk@70629 18797224-902f-48f8-a5cc-f745e15eee43 --- .../html/content/src/nsHTMLScriptElement.cpp | 67 +++++++++++++++---- .../html/content/src/nsHTMLScriptElement.cpp | 67 +++++++++++++++---- 2 files changed, 110 insertions(+), 24 deletions(-) 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; }