diff --git a/content/html/document/src/nsHTMLFragmentContentSink.cpp b/content/html/document/src/nsHTMLFragmentContentSink.cpp
index b47eb478c18..859ff9d0189 100644
--- a/content/html/document/src/nsHTMLFragmentContentSink.cpp
+++ b/content/html/document/src/nsHTMLFragmentContentSink.cpp
@@ -1167,9 +1167,9 @@ nsHTMLParanoidFragmentSink::CloseContainer(const nsHTMLTag aTag)
sheet->SetPrincipal(mTargetDocument->NodePrincipal());
// Create the CSS parser, and parse the CSS text.
nsCSSParser parser(nsnull, sheet);
- rv = parser.Parse(uin, mTargetDocument->GetDocumentURI(),
- baseURI, mTargetDocument->NodePrincipal(),
- 0, PR_FALSE);
+ rv = parser.ParseSheet(*uin, mTargetDocument->GetDocumentURI(),
+ baseURI, mTargetDocument->NodePrincipal(),
+ 0, PR_FALSE);
// Mark the sheet as complete.
if (NS_SUCCEEDED(rv)) {
NS_ABORT_IF_FALSE(!sheet->IsModified(),
diff --git a/layout/style/Loader.cpp b/layout/style/Loader.cpp
index 2ea02b261e2..5fb6ee4655f 100644
--- a/layout/style/Loader.cpp
+++ b/layout/style/Loader.cpp
@@ -1579,10 +1579,10 @@ Loader::ParseSheet(nsIUnicharInputStream* aStream,
mParsingDatas.AppendElement(aLoadData);
nsIURI* sheetURI = aLoadData->mSheet->GetSheetURI();
nsIURI* baseURI = aLoadData->mSheet->GetBaseURI();
- nsresult rv = parser.Parse(aStream, sheetURI, baseURI,
- aLoadData->mSheet->Principal(),
- aLoadData->mLineNumber,
- aLoadData->mAllowUnsafeRules);
+ nsresult rv = parser.ParseSheet(*aStream, sheetURI, baseURI,
+ aLoadData->mSheet->Principal(),
+ aLoadData->mLineNumber,
+ aLoadData->mAllowUnsafeRules);
mParsingDatas.RemoveElementAt(mParsingDatas.Length() - 1);
if (NS_FAILED(rv)) {
diff --git a/layout/style/nsCSSParser.cpp b/layout/style/nsCSSParser.cpp
index 4fe0f2f55c9..be005ba6b6d 100644
--- a/layout/style/nsCSSParser.cpp
+++ b/layout/style/nsCSSParser.cpp
@@ -203,12 +203,13 @@ public:
// Clears everything set by the above Set*() functions.
void Reset();
- nsresult Parse(nsIUnicharInputStream* aInput,
- nsIURI* aSheetURI,
- nsIURI* aBaseURI,
- nsIPrincipal* aSheetPrincipal,
- PRUint32 aLineNumber,
- PRBool aAllowUnsafeRules);
+ template
+ nsresult ParseSheet(T& aInput,
+ nsIURI* aSheetURI,
+ nsIURI* aBaseURI,
+ nsIPrincipal* aSheetPrincipal,
+ PRUint32 aLineNumber,
+ PRBool aAllowUnsafeRules);
nsresult ParseStyleAttribute(const nsAString& aAttributeValue,
nsIURI* aDocURL,
@@ -295,10 +296,10 @@ protected:
CSSParserImpl* mParser;
};
- void InitScanner(nsIUnicharInputStream* aInput, nsIURI* aSheetURI,
+ void InitScanner(nsIUnicharInputStream& aInput, nsIURI* aSheetURI,
PRUint32 aLineNumber, nsIURI* aBaseURI,
nsIPrincipal* aSheetPrincipal);
- // the caller must hold on to aBuffer until parsing is done
+ // the caller must hold on to aString until parsing is done
void InitScanner(const nsSubstring& aString, nsIURI* aSheetURI,
PRUint32 aLineNumber, nsIURI* aBaseURI,
nsIPrincipal* aSheetPrincipal);
@@ -836,13 +837,13 @@ CSSParserImpl::Reset()
}
void
-CSSParserImpl::InitScanner(nsIUnicharInputStream* aInput, nsIURI* aSheetURI,
+CSSParserImpl::InitScanner(nsIUnicharInputStream& aInput, nsIURI* aSheetURI,
PRUint32 aLineNumber, nsIURI* aBaseURI,
nsIPrincipal* aSheetPrincipal)
{
NS_ASSERTION(! mScannerInited, "already have scanner");
- mScanner.Init(aInput, nsnull, 0, aSheetURI, aLineNumber, mSheet,
+ mScanner.Init(&aInput, nsnull, 0, aSheetURI, aLineNumber, mSheet,
mChildLoader);
#ifdef DEBUG
mScannerInited = PR_TRUE;
@@ -888,14 +889,14 @@ CSSParserImpl::ReleaseScanner(void)
mSheetPrincipal = nsnull;
}
-
+template
nsresult
-CSSParserImpl::Parse(nsIUnicharInputStream* aInput,
- nsIURI* aSheetURI,
- nsIURI* aBaseURI,
- nsIPrincipal* aSheetPrincipal,
- PRUint32 aLineNumber,
- PRBool aAllowUnsafeRules)
+CSSParserImpl::ParseSheet(T& aInput,
+ nsIURI* aSheetURI,
+ nsIURI* aBaseURI,
+ nsIPrincipal* aSheetPrincipal,
+ PRUint32 aLineNumber,
+ PRBool aAllowUnsafeRules)
{
NS_PRECONDITION(aSheetPrincipal, "Must have principal here!");
@@ -8758,16 +8759,29 @@ nsCSSParser::SetChildLoader(mozilla::css::Loader* aChildLoader)
}
nsresult
-nsCSSParser::Parse(nsIUnicharInputStream* aInput,
- nsIURI* aSheetURI,
- nsIURI* aBaseURI,
- nsIPrincipal* aSheetPrincipal,
- PRUint32 aLineNumber,
- PRBool aAllowUnsafeRules)
+nsCSSParser::ParseSheet(nsIUnicharInputStream& aInput,
+ nsIURI* aSheetURI,
+ nsIURI* aBaseURI,
+ nsIPrincipal* aSheetPrincipal,
+ PRUint32 aLineNumber,
+ PRBool aAllowUnsafeRules)
{
return static_cast(mImpl)->
- Parse(aInput, aSheetURI, aBaseURI, aSheetPrincipal, aLineNumber,
- aAllowUnsafeRules);
+ ParseSheet(aInput, aSheetURI, aBaseURI, aSheetPrincipal, aLineNumber,
+ aAllowUnsafeRules);
+}
+
+nsresult
+nsCSSParser::ParseSheet(const nsAString& aInput,
+ nsIURI* aSheetURI,
+ nsIURI* aBaseURI,
+ nsIPrincipal* aSheetPrincipal,
+ PRUint32 aLineNumber,
+ PRBool aAllowUnsafeRules)
+{
+ return static_cast(mImpl)->
+ ParseSheet(aInput, aSheetURI, aBaseURI, aSheetPrincipal, aLineNumber,
+ aAllowUnsafeRules);
}
nsresult
diff --git a/layout/style/nsCSSParser.h b/layout/style/nsCSSParser.h
index 93d472294d7..af61fbb05a1 100644
--- a/layout/style/nsCSSParser.h
+++ b/layout/style/nsCSSParser.h
@@ -113,12 +113,18 @@ public:
* @param aAllowUnsafeRules see aEnableUnsafeRules in
* mozilla::css::Loader::LoadSheetSync
*/
- nsresult Parse(nsIUnicharInputStream* aInput,
- nsIURI* aSheetURL,
- nsIURI* aBaseURI,
- nsIPrincipal* aSheetPrincipal,
- PRUint32 aLineNumber,
- PRBool aAllowUnsafeRules);
+ nsresult ParseSheet(nsIUnicharInputStream& aInput,
+ nsIURI* aSheetURL,
+ nsIURI* aBaseURI,
+ nsIPrincipal* aSheetPrincipal,
+ PRUint32 aLineNumber,
+ PRBool aAllowUnsafeRules);
+ nsresult ParseSheet(const nsAString& aInput,
+ nsIURI* aSheetURL,
+ nsIURI* aBaseURI,
+ nsIPrincipal* aSheetPrincipal,
+ PRUint32 aLineNumber,
+ PRBool aAllowUnsafeRules);
// Parse HTML style attribute or its equivalent in other markup
// languages. aBaseURL is the base url to use for relative links in