Bug 541496 part 1: add an overload of nsCSSParser::Parse() that takes a string rather than a stream; rename both methods ParseSheet(); change calling convention of the older overload for the templated implementation's sake. r=bzbarsky

This commit is contained in:
Zack Weinberg 2011-05-18 21:22:59 -04:00
parent 4ada86d2cb
commit 4528c43578
4 changed files with 58 additions and 38 deletions

View File

@ -1167,9 +1167,9 @@ nsHTMLParanoidFragmentSink::CloseContainer(const nsHTMLTag aTag)
sheet->SetPrincipal(mTargetDocument->NodePrincipal()); sheet->SetPrincipal(mTargetDocument->NodePrincipal());
// Create the CSS parser, and parse the CSS text. // Create the CSS parser, and parse the CSS text.
nsCSSParser parser(nsnull, sheet); nsCSSParser parser(nsnull, sheet);
rv = parser.Parse(uin, mTargetDocument->GetDocumentURI(), rv = parser.ParseSheet(*uin, mTargetDocument->GetDocumentURI(),
baseURI, mTargetDocument->NodePrincipal(), baseURI, mTargetDocument->NodePrincipal(),
0, PR_FALSE); 0, PR_FALSE);
// Mark the sheet as complete. // Mark the sheet as complete.
if (NS_SUCCEEDED(rv)) { if (NS_SUCCEEDED(rv)) {
NS_ABORT_IF_FALSE(!sheet->IsModified(), NS_ABORT_IF_FALSE(!sheet->IsModified(),

View File

@ -1579,10 +1579,10 @@ Loader::ParseSheet(nsIUnicharInputStream* aStream,
mParsingDatas.AppendElement(aLoadData); mParsingDatas.AppendElement(aLoadData);
nsIURI* sheetURI = aLoadData->mSheet->GetSheetURI(); nsIURI* sheetURI = aLoadData->mSheet->GetSheetURI();
nsIURI* baseURI = aLoadData->mSheet->GetBaseURI(); nsIURI* baseURI = aLoadData->mSheet->GetBaseURI();
nsresult rv = parser.Parse(aStream, sheetURI, baseURI, nsresult rv = parser.ParseSheet(*aStream, sheetURI, baseURI,
aLoadData->mSheet->Principal(), aLoadData->mSheet->Principal(),
aLoadData->mLineNumber, aLoadData->mLineNumber,
aLoadData->mAllowUnsafeRules); aLoadData->mAllowUnsafeRules);
mParsingDatas.RemoveElementAt(mParsingDatas.Length() - 1); mParsingDatas.RemoveElementAt(mParsingDatas.Length() - 1);
if (NS_FAILED(rv)) { if (NS_FAILED(rv)) {

View File

@ -203,12 +203,13 @@ public:
// Clears everything set by the above Set*() functions. // Clears everything set by the above Set*() functions.
void Reset(); void Reset();
nsresult Parse(nsIUnicharInputStream* aInput, template <typename T>
nsIURI* aSheetURI, nsresult ParseSheet(T& aInput,
nsIURI* aBaseURI, nsIURI* aSheetURI,
nsIPrincipal* aSheetPrincipal, nsIURI* aBaseURI,
PRUint32 aLineNumber, nsIPrincipal* aSheetPrincipal,
PRBool aAllowUnsafeRules); PRUint32 aLineNumber,
PRBool aAllowUnsafeRules);
nsresult ParseStyleAttribute(const nsAString& aAttributeValue, nsresult ParseStyleAttribute(const nsAString& aAttributeValue,
nsIURI* aDocURL, nsIURI* aDocURL,
@ -295,10 +296,10 @@ protected:
CSSParserImpl* mParser; CSSParserImpl* mParser;
}; };
void InitScanner(nsIUnicharInputStream* aInput, nsIURI* aSheetURI, void InitScanner(nsIUnicharInputStream& aInput, nsIURI* aSheetURI,
PRUint32 aLineNumber, nsIURI* aBaseURI, PRUint32 aLineNumber, nsIURI* aBaseURI,
nsIPrincipal* aSheetPrincipal); 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, void InitScanner(const nsSubstring& aString, nsIURI* aSheetURI,
PRUint32 aLineNumber, nsIURI* aBaseURI, PRUint32 aLineNumber, nsIURI* aBaseURI,
nsIPrincipal* aSheetPrincipal); nsIPrincipal* aSheetPrincipal);
@ -836,13 +837,13 @@ CSSParserImpl::Reset()
} }
void void
CSSParserImpl::InitScanner(nsIUnicharInputStream* aInput, nsIURI* aSheetURI, CSSParserImpl::InitScanner(nsIUnicharInputStream& aInput, nsIURI* aSheetURI,
PRUint32 aLineNumber, nsIURI* aBaseURI, PRUint32 aLineNumber, nsIURI* aBaseURI,
nsIPrincipal* aSheetPrincipal) nsIPrincipal* aSheetPrincipal)
{ {
NS_ASSERTION(! mScannerInited, "already have scanner"); NS_ASSERTION(! mScannerInited, "already have scanner");
mScanner.Init(aInput, nsnull, 0, aSheetURI, aLineNumber, mSheet, mScanner.Init(&aInput, nsnull, 0, aSheetURI, aLineNumber, mSheet,
mChildLoader); mChildLoader);
#ifdef DEBUG #ifdef DEBUG
mScannerInited = PR_TRUE; mScannerInited = PR_TRUE;
@ -888,14 +889,14 @@ CSSParserImpl::ReleaseScanner(void)
mSheetPrincipal = nsnull; mSheetPrincipal = nsnull;
} }
template <typename T>
nsresult nsresult
CSSParserImpl::Parse(nsIUnicharInputStream* aInput, CSSParserImpl::ParseSheet(T& aInput,
nsIURI* aSheetURI, nsIURI* aSheetURI,
nsIURI* aBaseURI, nsIURI* aBaseURI,
nsIPrincipal* aSheetPrincipal, nsIPrincipal* aSheetPrincipal,
PRUint32 aLineNumber, PRUint32 aLineNumber,
PRBool aAllowUnsafeRules) PRBool aAllowUnsafeRules)
{ {
NS_PRECONDITION(aSheetPrincipal, "Must have principal here!"); NS_PRECONDITION(aSheetPrincipal, "Must have principal here!");
@ -8758,16 +8759,29 @@ nsCSSParser::SetChildLoader(mozilla::css::Loader* aChildLoader)
} }
nsresult nsresult
nsCSSParser::Parse(nsIUnicharInputStream* aInput, nsCSSParser::ParseSheet(nsIUnicharInputStream& aInput,
nsIURI* aSheetURI, nsIURI* aSheetURI,
nsIURI* aBaseURI, nsIURI* aBaseURI,
nsIPrincipal* aSheetPrincipal, nsIPrincipal* aSheetPrincipal,
PRUint32 aLineNumber, PRUint32 aLineNumber,
PRBool aAllowUnsafeRules) PRBool aAllowUnsafeRules)
{ {
return static_cast<CSSParserImpl*>(mImpl)-> return static_cast<CSSParserImpl*>(mImpl)->
Parse(aInput, aSheetURI, aBaseURI, aSheetPrincipal, aLineNumber, ParseSheet(aInput, aSheetURI, aBaseURI, aSheetPrincipal, aLineNumber,
aAllowUnsafeRules); aAllowUnsafeRules);
}
nsresult
nsCSSParser::ParseSheet(const nsAString& aInput,
nsIURI* aSheetURI,
nsIURI* aBaseURI,
nsIPrincipal* aSheetPrincipal,
PRUint32 aLineNumber,
PRBool aAllowUnsafeRules)
{
return static_cast<CSSParserImpl*>(mImpl)->
ParseSheet(aInput, aSheetURI, aBaseURI, aSheetPrincipal, aLineNumber,
aAllowUnsafeRules);
} }
nsresult nsresult

View File

@ -113,12 +113,18 @@ public:
* @param aAllowUnsafeRules see aEnableUnsafeRules in * @param aAllowUnsafeRules see aEnableUnsafeRules in
* mozilla::css::Loader::LoadSheetSync * mozilla::css::Loader::LoadSheetSync
*/ */
nsresult Parse(nsIUnicharInputStream* aInput, nsresult ParseSheet(nsIUnicharInputStream& aInput,
nsIURI* aSheetURL, nsIURI* aSheetURL,
nsIURI* aBaseURI, nsIURI* aBaseURI,
nsIPrincipal* aSheetPrincipal, nsIPrincipal* aSheetPrincipal,
PRUint32 aLineNumber, PRUint32 aLineNumber,
PRBool aAllowUnsafeRules); 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 // Parse HTML style attribute or its equivalent in other markup
// languages. aBaseURL is the base url to use for relative links in // languages. aBaseURL is the base url to use for relative links in