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