mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-14 22:05:44 +00:00
Bug 1438974 - Add an explicit "being parsed" flag to SheetLoadData and remove mParsingDatas. r=bz
MozReview-Commit-ID: 69fK5VAWrbj
This commit is contained in:
parent
49479de351
commit
096338d19b
@ -162,6 +162,7 @@ SheetLoadData::SheetLoadData(Loader* aLoader,
|
||||
, mSyncLoad(false)
|
||||
, mIsNonDocumentSheet(false)
|
||||
, mIsLoading(false)
|
||||
, mIsBeingParsed(false)
|
||||
, mIsCancelled(false)
|
||||
, mMustNotify(false)
|
||||
, mWasAlternate(aIsAlternate)
|
||||
@ -196,6 +197,7 @@ SheetLoadData::SheetLoadData(Loader* aLoader,
|
||||
, mSyncLoad(false)
|
||||
, mIsNonDocumentSheet(false)
|
||||
, mIsLoading(false)
|
||||
, mIsBeingParsed(false)
|
||||
, mIsCancelled(false)
|
||||
, mMustNotify(false)
|
||||
, mWasAlternate(false)
|
||||
@ -240,6 +242,7 @@ SheetLoadData::SheetLoadData(Loader* aLoader,
|
||||
, mSyncLoad(aSyncLoad)
|
||||
, mIsNonDocumentSheet(true)
|
||||
, mIsLoading(false)
|
||||
, mIsBeingParsed(false)
|
||||
, mIsCancelled(false)
|
||||
, mMustNotify(false)
|
||||
, mWasAlternate(false)
|
||||
@ -1673,10 +1676,7 @@ Loader::LoadSheet(SheetLoadData* aLoadData,
|
||||
}
|
||||
|
||||
/**
|
||||
* ParseSheet handles parsing the data stream. The main idea here is
|
||||
* to push the current load data onto the parse stack before letting
|
||||
* the CSS parser at the data stream. That lets us handle @import
|
||||
* correctly.
|
||||
* ParseSheet handles parsing the data stream.
|
||||
*/
|
||||
nsresult
|
||||
Loader::ParseSheet(const nsAString& aUTF16,
|
||||
@ -1688,10 +1688,9 @@ Loader::ParseSheet(const nsAString& aUTF16,
|
||||
NS_PRECONDITION(aLoadData, "Must have load data");
|
||||
NS_PRECONDITION(aLoadData->mSheet, "Must have sheet to parse into");
|
||||
|
||||
aLoadData->mIsBeingParsed = true;
|
||||
aCompleted = false;
|
||||
|
||||
// Push our load data on the stack so any kids can pick it up
|
||||
mParsingDatas.AppendElement(aLoadData);
|
||||
nsIURI* sheetURI = aLoadData->mSheet->GetSheetURI();
|
||||
nsIURI* baseURI = aLoadData->mSheet->GetBaseURI();
|
||||
|
||||
@ -1721,8 +1720,7 @@ Loader::ParseSheet(const nsAString& aUTF16,
|
||||
GetCompatibilityMode());
|
||||
}
|
||||
|
||||
mParsingDatas.RemoveElementAt(mParsingDatas.Length() - 1);
|
||||
|
||||
aLoadData->mIsBeingParsed = false;
|
||||
if (NS_FAILED(rv)) {
|
||||
LOG_ERROR((" Low-level error in parser!"));
|
||||
SheetComplete(aLoadData, rv);
|
||||
@ -1858,7 +1856,7 @@ Loader::DoSheetComplete(SheetLoadData* aLoadData, nsresult aStatus,
|
||||
// or some such).
|
||||
if (data->mParentData &&
|
||||
--(data->mParentData->mPendingChildren) == 0 &&
|
||||
!mParsingDatas.Contains(data->mParentData)) {
|
||||
!data->mParentData->mIsBeingParsed) {
|
||||
DoSheetComplete(data->mParentData, aStatus, aDatasToNotify);
|
||||
}
|
||||
|
||||
@ -1926,7 +1924,6 @@ Loader::LoadInlineStyle(nsIContent* aElement,
|
||||
bool* aIsAlternate)
|
||||
{
|
||||
LOG(("css::Loader::LoadInlineStyle"));
|
||||
MOZ_ASSERT(mParsingDatas.IsEmpty(), "We're in the middle of a parse?");
|
||||
|
||||
*aCompleted = true;
|
||||
|
||||
@ -2011,10 +2008,8 @@ Loader::LoadStyleLink(nsIContent* aElement,
|
||||
nsICSSLoaderObserver* aObserver,
|
||||
bool* aIsAlternate)
|
||||
{
|
||||
LOG(("css::Loader::LoadStyleLink"));
|
||||
NS_PRECONDITION(aURL, "Must have URL to load");
|
||||
NS_ASSERTION(mParsingDatas.Length() == 0, "We're in the middle of a parse?");
|
||||
|
||||
LOG(("css::Loader::LoadStyleLink"));
|
||||
LOG_URI(" Link uri: '%s'", aURL);
|
||||
LOG((" Link title: '%s'", NS_ConvertUTF16toUTF8(aTitle).get()));
|
||||
LOG((" Link media: '%s'", NS_ConvertUTF16toUTF8(aMedia).get()));
|
||||
@ -2361,7 +2356,6 @@ Loader::InternalLoadNonDocumentSheet(nsIURI* aURL,
|
||||
NS_PRECONDITION(aSheet || aObserver, "Sheet and observer can't both be null");
|
||||
NS_PRECONDITION(!aUseSystemPrincipal || !aObserver,
|
||||
"Shouldn't load system-principal sheets async");
|
||||
NS_ASSERTION(mParsingDatas.Length() == 0, "We're in the middle of a parse?");
|
||||
|
||||
LOG_URI(" Non-document sheet uri: '%s'", aURL);
|
||||
|
||||
@ -2668,7 +2662,6 @@ Loader::SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const
|
||||
// worthwhile:
|
||||
// - mLoadingDatas: transient, and should be small
|
||||
// - mPendingDatas: transient, and should be small
|
||||
// - mParsingDatas: transient, and should be small
|
||||
// - mPostedEvents: transient, and should be small
|
||||
//
|
||||
// The following members aren't measured:
|
||||
|
@ -599,10 +599,6 @@ private:
|
||||
};
|
||||
nsAutoPtr<Sheets> mSheets;
|
||||
|
||||
// We're not likely to have many levels of @import... But likely to have
|
||||
// some. Allocate some storage, what the hell.
|
||||
AutoTArray<SheetLoadData*, 8> mParsingDatas;
|
||||
|
||||
// The array of posted stylesheet loaded events (SheetLoadDatas) we have.
|
||||
// Note that these are rare.
|
||||
LoadDataArray mPostedEvents;
|
||||
|
@ -136,6 +136,9 @@ public:
|
||||
// completing or being cancelled).
|
||||
bool mIsLoading : 1;
|
||||
|
||||
// mIsBeingParsed is true if this stylesheet is currently being parsed.
|
||||
bool mIsBeingParsed : 1;
|
||||
|
||||
// mIsCancelled is set to true when a sheet load is stopped by
|
||||
// Stop() or StopLoadingSheet() (which was removed in Bug 556446).
|
||||
// SheetLoadData::OnStreamComplete() checks this to avoid parsing
|
||||
|
Loading…
Reference in New Issue
Block a user