diff --git a/mozilla/content/html/document/src/nsHTMLContentSink.cpp b/mozilla/content/html/document/src/nsHTMLContentSink.cpp
index 3adfd7ee65c..4e65c32b47f 100644
--- a/mozilla/content/html/document/src/nsHTMLContentSink.cpp
+++ b/mozilla/content/html/document/src/nsHTMLContentSink.cpp
@@ -2112,13 +2112,41 @@ HTMLContentSink::ProcessMETATag(const nsIParserNode& aNode)
#define SCRIPT_BUF_SIZE 1024
+// Returns PR_TRUE if the language name is a version of JavaScript and
+// PR_FALSE otherwise
+static PRBool
+IsJavaScriptLanguage(const nsString& aName)
+{
+ if (aName.EqualsIgnoreCase("JavaScript") ||
+ aName.EqualsIgnoreCase("LiveScript") ||
+ aName.EqualsIgnoreCase("Mocha")) {
+ return PR_TRUE;
+ }
+ else if (aName.EqualsIgnoreCase("JavaScript1.1")) {
+ return PR_TRUE;
+ }
+ else if (aName.EqualsIgnoreCase("JavaScript1.2")) {
+ return PR_TRUE;
+ }
+ else if (aName.EqualsIgnoreCase("JavaScript1.3")) {
+ return PR_TRUE;
+ }
+ else if (aName.EqualsIgnoreCase("JavaScript1.4")) {
+ return PR_TRUE;
+ }
+ else {
+ return PR_FALSE;
+ }
+}
+
nsresult
HTMLContentSink::ProcessSCRIPTTag(const nsIParserNode& aNode)
{
nsresult rv = NS_OK;
+ PRBool isJavaScript = PR_TRUE;
PRInt32 i, ac = aNode.GetAttributeCount();
- // Look for SRC attribute
+ // Look for SRC attribute and look for a LANGUAGE attribute
nsAutoString src;
for (i = 0; i < ac; i++) {
const nsString& key = aNode.GetKeyAt(i);
@@ -2126,83 +2154,98 @@ HTMLContentSink::ProcessSCRIPTTag(const nsIParserNode& aNode)
src = aNode.GetValueAt(i);
src.Trim("\"", PR_TRUE, PR_TRUE);
}
+ else if (key.EqualsIgnoreCase("type")) {
+ nsAutoString type;
+
+ GetAttributeValueAt(aNode, i, type, nsnull);
+ isJavaScript = type.EqualsIgnoreCase("text/javascript");
+ }
+ else if (key.EqualsIgnoreCase("language")) {
+ nsAutoString lang;
+
+ GetAttributeValueAt(aNode, i, lang, nsnull);
+ isJavaScript = IsJavaScriptLanguage(lang);
+ }
}
- nsAutoString script;
-
- // If there is a SRC attribute, (for now) read from the
- // stream synchronously and hold the data in a string.
- if (src != "") {
- // Use the SRC attribute value to open a blocking stream
- nsIURL* url = nsnull;
- nsAutoString absURL;
- nsIURL* docURL = mDocument->GetDocumentURL();
- rv = NS_MakeAbsoluteURL(docURL, mBaseHREF, src, absURL);
- if (NS_OK != rv) {
- return rv;
- }
- NS_RELEASE(docURL);
- rv = NS_NewURL(&url, nsnull, absURL);
- if (NS_OK != rv) {
- return rv;
- }
- PRInt32 ec;
- nsIInputStream* iin = url->Open(&ec);
- if (nsnull == iin) {
- NS_RELEASE(url);
- return (nsresult) ec;/* XXX fix url->Open */
- }
-
- // Drain the stream by reading from it a chunk at a time
- PRInt32 nb;
- nsresult err;
- do {
- char buf[SCRIPT_BUF_SIZE];
-
- err = iin->Read(buf, 0, SCRIPT_BUF_SIZE, &nb);
- if (NS_OK == err) {
- script.Append((const char *)buf, nb);
- }
- } while (err == NS_OK);
-
- if (NS_BASE_STREAM_EOF != err) {
- rv = NS_ERROR_FAILURE;
- }
-
- NS_RELEASE(iin);
- NS_RELEASE(url);
- }
- else {
- // Otherwise, get the text content of the script tag
- script = aNode.GetSkippedContent();
- }
-
- if (script != "") {
- nsIScriptContextOwner *owner;
- nsIScriptContext *context;
- owner = mDocument->GetScriptContextOwner();
- if (nsnull != owner) {
-
- rv = owner->GetScriptContext(&context);
- if (rv != NS_OK) {
- NS_RELEASE(owner);
+ // Don't process scripts that aren't JavaScript
+ if (isJavaScript) {
+ nsAutoString script;
+
+ // If there is a SRC attribute, (for now) read from the
+ // stream synchronously and hold the data in a string.
+ if (src != "") {
+ // Use the SRC attribute value to open a blocking stream
+ nsIURL* url = nsnull;
+ nsAutoString absURL;
+ nsIURL* docURL = mDocument->GetDocumentURL();
+ rv = NS_MakeAbsoluteURL(docURL, mBaseHREF, src, absURL);
+ if (NS_OK != rv) {
return rv;
}
-
- jsval val;
- nsIURL* mDocURL = mDocument->GetDocumentURL();
- const char* mURL;
- if (mDocURL) {
- mURL = mDocURL->GetSpec();
+ NS_RELEASE(docURL);
+ rv = NS_NewURL(&url, nsnull, absURL);
+ if (NS_OK != rv) {
+ return rv;
}
- PRUint32 mLineNo = (PRUint32)aNode.GetSourceLineNumber();
-
- PRBool result = context->EvaluateString(script, mURL, mLineNo, &val);
+ PRInt32 ec;
+ nsIInputStream* iin = url->Open(&ec);
+ if (nsnull == iin) {
+ NS_RELEASE(url);
+ return (nsresult) ec;/* XXX fix url->Open */
+ }
+
+ // Drain the stream by reading from it a chunk at a time
+ PRInt32 nb;
+ nsresult err;
+ do {
+ char buf[SCRIPT_BUF_SIZE];
+
+ err = iin->Read(buf, 0, SCRIPT_BUF_SIZE, &nb);
+ if (NS_OK == err) {
+ script.Append((const char *)buf, nb);
+ }
+ } while (err == NS_OK);
+
+ if (NS_BASE_STREAM_EOF != err) {
+ rv = NS_ERROR_FAILURE;
+ }
+
+ NS_RELEASE(iin);
+ NS_RELEASE(url);
+ }
+ else {
+ // Otherwise, get the text content of the script tag
+ script = aNode.GetSkippedContent();
+ }
+
+ if (script != "") {
+ nsIScriptContextOwner *owner;
+ nsIScriptContext *context;
+ owner = mDocument->GetScriptContextOwner();
+ if (nsnull != owner) {
- NS_IF_RELEASE(mDocURL);
-
- NS_RELEASE(context);
- NS_RELEASE(owner);
+ rv = owner->GetScriptContext(&context);
+ if (rv != NS_OK) {
+ NS_RELEASE(owner);
+ return rv;
+ }
+
+ jsval val;
+ nsIURL* mDocURL = mDocument->GetDocumentURL();
+ const char* mURL;
+ if (mDocURL) {
+ mURL = mDocURL->GetSpec();
+ }
+ PRUint32 mLineNo = (PRUint32)aNode.GetSourceLineNumber();
+
+ PRBool result = context->EvaluateString(script, mURL, mLineNo, &val);
+
+ NS_IF_RELEASE(mDocURL);
+
+ NS_RELEASE(context);
+ NS_RELEASE(owner);
+ }
}
}
diff --git a/mozilla/layout/html/document/src/nsHTMLContentSink.cpp b/mozilla/layout/html/document/src/nsHTMLContentSink.cpp
index 3adfd7ee65c..4e65c32b47f 100644
--- a/mozilla/layout/html/document/src/nsHTMLContentSink.cpp
+++ b/mozilla/layout/html/document/src/nsHTMLContentSink.cpp
@@ -2112,13 +2112,41 @@ HTMLContentSink::ProcessMETATag(const nsIParserNode& aNode)
#define SCRIPT_BUF_SIZE 1024
+// Returns PR_TRUE if the language name is a version of JavaScript and
+// PR_FALSE otherwise
+static PRBool
+IsJavaScriptLanguage(const nsString& aName)
+{
+ if (aName.EqualsIgnoreCase("JavaScript") ||
+ aName.EqualsIgnoreCase("LiveScript") ||
+ aName.EqualsIgnoreCase("Mocha")) {
+ return PR_TRUE;
+ }
+ else if (aName.EqualsIgnoreCase("JavaScript1.1")) {
+ return PR_TRUE;
+ }
+ else if (aName.EqualsIgnoreCase("JavaScript1.2")) {
+ return PR_TRUE;
+ }
+ else if (aName.EqualsIgnoreCase("JavaScript1.3")) {
+ return PR_TRUE;
+ }
+ else if (aName.EqualsIgnoreCase("JavaScript1.4")) {
+ return PR_TRUE;
+ }
+ else {
+ return PR_FALSE;
+ }
+}
+
nsresult
HTMLContentSink::ProcessSCRIPTTag(const nsIParserNode& aNode)
{
nsresult rv = NS_OK;
+ PRBool isJavaScript = PR_TRUE;
PRInt32 i, ac = aNode.GetAttributeCount();
- // Look for SRC attribute
+ // Look for SRC attribute and look for a LANGUAGE attribute
nsAutoString src;
for (i = 0; i < ac; i++) {
const nsString& key = aNode.GetKeyAt(i);
@@ -2126,83 +2154,98 @@ HTMLContentSink::ProcessSCRIPTTag(const nsIParserNode& aNode)
src = aNode.GetValueAt(i);
src.Trim("\"", PR_TRUE, PR_TRUE);
}
+ else if (key.EqualsIgnoreCase("type")) {
+ nsAutoString type;
+
+ GetAttributeValueAt(aNode, i, type, nsnull);
+ isJavaScript = type.EqualsIgnoreCase("text/javascript");
+ }
+ else if (key.EqualsIgnoreCase("language")) {
+ nsAutoString lang;
+
+ GetAttributeValueAt(aNode, i, lang, nsnull);
+ isJavaScript = IsJavaScriptLanguage(lang);
+ }
}
- nsAutoString script;
-
- // If there is a SRC attribute, (for now) read from the
- // stream synchronously and hold the data in a string.
- if (src != "") {
- // Use the SRC attribute value to open a blocking stream
- nsIURL* url = nsnull;
- nsAutoString absURL;
- nsIURL* docURL = mDocument->GetDocumentURL();
- rv = NS_MakeAbsoluteURL(docURL, mBaseHREF, src, absURL);
- if (NS_OK != rv) {
- return rv;
- }
- NS_RELEASE(docURL);
- rv = NS_NewURL(&url, nsnull, absURL);
- if (NS_OK != rv) {
- return rv;
- }
- PRInt32 ec;
- nsIInputStream* iin = url->Open(&ec);
- if (nsnull == iin) {
- NS_RELEASE(url);
- return (nsresult) ec;/* XXX fix url->Open */
- }
-
- // Drain the stream by reading from it a chunk at a time
- PRInt32 nb;
- nsresult err;
- do {
- char buf[SCRIPT_BUF_SIZE];
-
- err = iin->Read(buf, 0, SCRIPT_BUF_SIZE, &nb);
- if (NS_OK == err) {
- script.Append((const char *)buf, nb);
- }
- } while (err == NS_OK);
-
- if (NS_BASE_STREAM_EOF != err) {
- rv = NS_ERROR_FAILURE;
- }
-
- NS_RELEASE(iin);
- NS_RELEASE(url);
- }
- else {
- // Otherwise, get the text content of the script tag
- script = aNode.GetSkippedContent();
- }
-
- if (script != "") {
- nsIScriptContextOwner *owner;
- nsIScriptContext *context;
- owner = mDocument->GetScriptContextOwner();
- if (nsnull != owner) {
-
- rv = owner->GetScriptContext(&context);
- if (rv != NS_OK) {
- NS_RELEASE(owner);
+ // Don't process scripts that aren't JavaScript
+ if (isJavaScript) {
+ nsAutoString script;
+
+ // If there is a SRC attribute, (for now) read from the
+ // stream synchronously and hold the data in a string.
+ if (src != "") {
+ // Use the SRC attribute value to open a blocking stream
+ nsIURL* url = nsnull;
+ nsAutoString absURL;
+ nsIURL* docURL = mDocument->GetDocumentURL();
+ rv = NS_MakeAbsoluteURL(docURL, mBaseHREF, src, absURL);
+ if (NS_OK != rv) {
return rv;
}
-
- jsval val;
- nsIURL* mDocURL = mDocument->GetDocumentURL();
- const char* mURL;
- if (mDocURL) {
- mURL = mDocURL->GetSpec();
+ NS_RELEASE(docURL);
+ rv = NS_NewURL(&url, nsnull, absURL);
+ if (NS_OK != rv) {
+ return rv;
}
- PRUint32 mLineNo = (PRUint32)aNode.GetSourceLineNumber();
-
- PRBool result = context->EvaluateString(script, mURL, mLineNo, &val);
+ PRInt32 ec;
+ nsIInputStream* iin = url->Open(&ec);
+ if (nsnull == iin) {
+ NS_RELEASE(url);
+ return (nsresult) ec;/* XXX fix url->Open */
+ }
+
+ // Drain the stream by reading from it a chunk at a time
+ PRInt32 nb;
+ nsresult err;
+ do {
+ char buf[SCRIPT_BUF_SIZE];
+
+ err = iin->Read(buf, 0, SCRIPT_BUF_SIZE, &nb);
+ if (NS_OK == err) {
+ script.Append((const char *)buf, nb);
+ }
+ } while (err == NS_OK);
+
+ if (NS_BASE_STREAM_EOF != err) {
+ rv = NS_ERROR_FAILURE;
+ }
+
+ NS_RELEASE(iin);
+ NS_RELEASE(url);
+ }
+ else {
+ // Otherwise, get the text content of the script tag
+ script = aNode.GetSkippedContent();
+ }
+
+ if (script != "") {
+ nsIScriptContextOwner *owner;
+ nsIScriptContext *context;
+ owner = mDocument->GetScriptContextOwner();
+ if (nsnull != owner) {
- NS_IF_RELEASE(mDocURL);
-
- NS_RELEASE(context);
- NS_RELEASE(owner);
+ rv = owner->GetScriptContext(&context);
+ if (rv != NS_OK) {
+ NS_RELEASE(owner);
+ return rv;
+ }
+
+ jsval val;
+ nsIURL* mDocURL = mDocument->GetDocumentURL();
+ const char* mURL;
+ if (mDocURL) {
+ mURL = mDocURL->GetSpec();
+ }
+ PRUint32 mLineNo = (PRUint32)aNode.GetSourceLineNumber();
+
+ PRBool result = context->EvaluateString(script, mURL, mLineNo, &val);
+
+ NS_IF_RELEASE(mDocURL);
+
+ NS_RELEASE(context);
+ NS_RELEASE(owner);
+ }
}
}