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());
// 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(),

View File

@ -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)) {

View File

@ -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 <typename T>
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 <typename T>
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<CSSParserImpl*>(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<CSSParserImpl*>(mImpl)->
ParseSheet(aInput, aSheetURI, aBaseURI, aSheetPrincipal, aLineNumber,
aAllowUnsafeRules);
}
nsresult

View File

@ -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