From f42beb99b89f6fa143a80ef6a5024132af674c04 Mon Sep 17 00:00:00 2001 From: "dbaron%fas.harvard.edu" Date: Thu, 15 Jun 2000 02:22:09 +0000 Subject: [PATCH] Fix bug 38766 (JS errors given wrong for linked scripts in XML documents), nsbeta2+. r=harishd@netscape.com git-svn-id: svn://10.0.0.236/trunk@72277 18797224-902f-48f8-a5cc-f745e15eee43 --- .../xml/document/src/nsXMLContentSink.cpp | 27 ++++++++++++------- .../xml/document/src/nsXMLContentSink.cpp | 27 ++++++++++++------- 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/mozilla/content/xml/document/src/nsXMLContentSink.cpp b/mozilla/content/xml/document/src/nsXMLContentSink.cpp index 16b61b3263a..c4c7a4c898e 100644 --- a/mozilla/content/xml/document/src/nsXMLContentSink.cpp +++ b/mozilla/content/xml/document/src/nsXMLContentSink.cpp @@ -1596,7 +1596,7 @@ nsXMLContentSink::ResumeParsing() } NS_IMETHODIMP -nsXMLContentSink::EvaluateScript(nsString& aScript, PRUint32 aLineNo, const char* aVersion) +nsXMLContentSink::EvaluateScript(nsString& aScript, nsIURI *aScriptURI, PRUint32 aLineNo, const char* aVersion) { nsresult rv = NS_OK; @@ -1608,10 +1608,9 @@ nsXMLContentSink::EvaluateScript(nsString& aScript, PRUint32 aLineNo, const char NS_ENSURE_SUCCESS(scriptGlobal->GetContext(getter_AddRefs(context)), NS_ERROR_FAILURE); - nsIURI* docURL = mDocument->GetDocumentURL(); - char* url; - if (docURL) { - rv = docURL->GetSpec(&url); + char* url = nsnull; + if (aScriptURI) { + rv = aScriptURI->GetSpec(&url); } nsCOMPtr principal; @@ -1626,9 +1625,8 @@ nsXMLContentSink::EvaluateScript(nsString& aScript, PRUint32 aLineNo, const char (void) context->EvaluateString(aScript, nsnull, principal, url, aLineNo, aVersion, val, &isUndefined); - - NS_IF_RELEASE(docURL); - + } + if (url) { nsCRT::free(url); } } @@ -1644,7 +1642,8 @@ nsXMLContentSink::ProcessEndSCRIPTTag(const nsIParserNode& aNode) if (mInScript) { nsAutoString script; script.Assign(mText, mTextLength); - result = EvaluateScript(script, mScriptLineNo, mScriptLanguageVersion); + nsCOMPtr docURI( dont_AddRef( mDocument->GetDocumentURL() ) ); + result = EvaluateScript(script, docURI, mScriptLineNo, mScriptLanguageVersion); FlushText(PR_FALSE); mInScript = PR_FALSE; } @@ -1700,7 +1699,15 @@ nsXMLContentSink::OnStreamComplete(nsIStreamLoader* aLoader, nsString aData; aData.AssignWithConversion(string, stringLen); if (NS_OK == aStatus) { - rv = EvaluateScript(aData, 0, mScriptLanguageVersion); + { // scope in block so nsCOMPtr released at one point + nsCOMPtr channel; + aLoader->GetChannel(getter_AddRefs(channel)); + nsCOMPtr url; + if (channel) { + channel->GetURI(getter_AddRefs(url)); + } + rv = EvaluateScript(aData, url, 1, mScriptLanguageVersion); + } if (NS_FAILED(rv)) return rv; } diff --git a/mozilla/layout/xml/document/src/nsXMLContentSink.cpp b/mozilla/layout/xml/document/src/nsXMLContentSink.cpp index 16b61b3263a..c4c7a4c898e 100644 --- a/mozilla/layout/xml/document/src/nsXMLContentSink.cpp +++ b/mozilla/layout/xml/document/src/nsXMLContentSink.cpp @@ -1596,7 +1596,7 @@ nsXMLContentSink::ResumeParsing() } NS_IMETHODIMP -nsXMLContentSink::EvaluateScript(nsString& aScript, PRUint32 aLineNo, const char* aVersion) +nsXMLContentSink::EvaluateScript(nsString& aScript, nsIURI *aScriptURI, PRUint32 aLineNo, const char* aVersion) { nsresult rv = NS_OK; @@ -1608,10 +1608,9 @@ nsXMLContentSink::EvaluateScript(nsString& aScript, PRUint32 aLineNo, const char NS_ENSURE_SUCCESS(scriptGlobal->GetContext(getter_AddRefs(context)), NS_ERROR_FAILURE); - nsIURI* docURL = mDocument->GetDocumentURL(); - char* url; - if (docURL) { - rv = docURL->GetSpec(&url); + char* url = nsnull; + if (aScriptURI) { + rv = aScriptURI->GetSpec(&url); } nsCOMPtr principal; @@ -1626,9 +1625,8 @@ nsXMLContentSink::EvaluateScript(nsString& aScript, PRUint32 aLineNo, const char (void) context->EvaluateString(aScript, nsnull, principal, url, aLineNo, aVersion, val, &isUndefined); - - NS_IF_RELEASE(docURL); - + } + if (url) { nsCRT::free(url); } } @@ -1644,7 +1642,8 @@ nsXMLContentSink::ProcessEndSCRIPTTag(const nsIParserNode& aNode) if (mInScript) { nsAutoString script; script.Assign(mText, mTextLength); - result = EvaluateScript(script, mScriptLineNo, mScriptLanguageVersion); + nsCOMPtr docURI( dont_AddRef( mDocument->GetDocumentURL() ) ); + result = EvaluateScript(script, docURI, mScriptLineNo, mScriptLanguageVersion); FlushText(PR_FALSE); mInScript = PR_FALSE; } @@ -1700,7 +1699,15 @@ nsXMLContentSink::OnStreamComplete(nsIStreamLoader* aLoader, nsString aData; aData.AssignWithConversion(string, stringLen); if (NS_OK == aStatus) { - rv = EvaluateScript(aData, 0, mScriptLanguageVersion); + { // scope in block so nsCOMPtr released at one point + nsCOMPtr channel; + aLoader->GetChannel(getter_AddRefs(channel)); + nsCOMPtr url; + if (channel) { + channel->GetURI(getter_AddRefs(url)); + } + rv = EvaluateScript(aData, url, 1, mScriptLanguageVersion); + } if (NS_FAILED(rv)) return rv; }