--- a/layout/style/ServoStyleSet.cpp
+++ b/layout/style/ServoStyleSet.cpp
@@ -39,16 +39,17 @@ ServoStyleSet::Init(nsPresContext* aPres
// we have so far.
for (auto& sheetArray : mSheets) {
for (auto& sheet : sheetArray) {
// There's no guarantee this will create a list on the servo side whose
// ordering matches the list that would have been created had all those
// sheets been appended/prepended/etc after we had mRawSet. But hopefully
// that's OK (e.g. because servo doesn't care about the relative ordering
// of sheets from different cascade levels in the list?).
+ MOZ_ASSERT(sheet->RawSheet(), "We should only append non-null raw sheets.");
Servo_StyleSet_AppendStyleSheet(mRawSet.get(), sheet->RawSheet(), false);
}
}
// No need to Servo_StyleSet_FlushStyleSheets because we just created the
// mRawSet, so there was nothing to flush.
}
@@ -335,16 +336,17 @@ ServoStyleSet::ResolveAnonymousBoxStyle(
nsresult
ServoStyleSet::AppendStyleSheet(SheetType aType,
ServoStyleSheet* aSheet)
{
MOZ_ASSERT(aSheet);
MOZ_ASSERT(aSheet->IsApplicable());
MOZ_ASSERT(nsStyleSet::IsCSSSheetType(aType));
+ MOZ_ASSERT(aSheet->RawSheet(), "Raw sheet should be in place before insertion.");
mSheets[aType].RemoveElement(aSheet);
mSheets[aType].AppendElement(aSheet);
if (mRawSet) {
// Maintain a mirrored list of sheets on the servo side.
Servo_StyleSet_AppendStyleSheet(mRawSet.get(), aSheet->RawSheet(), !mBatching);
}
@@ -354,16 +356,17 @@ ServoStyleSet::AppendStyleSheet(SheetTyp
nsresult
ServoStyleSet::PrependStyleSheet(SheetType aType,
ServoStyleSheet* aSheet)
{
MOZ_ASSERT(aSheet);
MOZ_ASSERT(aSheet->IsApplicable());
MOZ_ASSERT(nsStyleSet::IsCSSSheetType(aType));
+ MOZ_ASSERT(aSheet->RawSheet(), "Raw sheet should be in place before insertion.");
mSheets[aType].RemoveElement(aSheet);
mSheets[aType].InsertElementAt(0, aSheet);
if (mRawSet) {
// Maintain a mirrored list of sheets on the servo side.
Servo_StyleSet_PrependStyleSheet(mRawSet.get(), aSheet->RawSheet(), !mBatching);
}
@@ -402,16 +405,17 @@ ServoStyleSet::ReplaceSheets(SheetType a
}
}
mSheets[aType].Clear();
mSheets[aType].AppendElements(aNewSheets);
if (mRawSet) {
for (ServoStyleSheet* sheet : mSheets[aType]) {
+ MOZ_ASSERT(sheet->RawSheet(), "Raw sheet should be in place before replacement.");
Servo_StyleSet_AppendStyleSheet(mRawSet.get(), sheet->RawSheet(), false);
}
}
if (!mBatching) {
Servo_StyleSet_FlushStyleSheets(mRawSet.get());
}
@@ -427,17 +431,19 @@ ServoStyleSet::InsertStyleSheetBefore(Sh
MOZ_ASSERT(aReferenceSheet);
MOZ_ASSERT(aNewSheet->IsApplicable());
mSheets[aType].RemoveElement(aNewSheet);
size_t idx = mSheets[aType].IndexOf(aReferenceSheet);
if (idx == mSheets[aType].NoIndex) {
return NS_ERROR_INVALID_ARG;
}
+ MOZ_ASSERT(aReferenceSheet->RawSheet(), "Reference sheet should have a raw sheet.");
+ MOZ_ASSERT(aNewSheet->RawSheet(), "Raw sheet should be in place before insertion.");
mSheets[aType].InsertElementAt(idx, aNewSheet);
if (mRawSet) {
// Maintain a mirrored list of sheets on the servo side.
Servo_StyleSet_InsertStyleSheetBefore(mRawSet.get(), aNewSheet->RawSheet(),
aReferenceSheet->RawSheet(), !mBatching);
}
@@ -465,30 +471,33 @@ ServoStyleSet::RemoveDocStyleSheet(Servo
return RemoveStyleSheet(SheetType::Doc, aSheet);
}
nsresult
ServoStyleSet::AddDocStyleSheet(ServoStyleSheet* aSheet,
nsIDocument* aDocument)
{
MOZ_ASSERT(aSheet->IsApplicable());
+ MOZ_ASSERT(aSheet->RawSheet(), "Raw sheet should be in place by this point.");
RefPtr<StyleSheet> strong(aSheet);
- mSheets[SheetType::Doc].RemoveElement(aSheet);
+ nsTArray<RefPtr<ServoStyleSheet>>& sheetsArray = mSheets[SheetType::Doc];
+
+ sheetsArray.RemoveElement(aSheet);
size_t index =
- aDocument->FindDocStyleSheetInsertionPoint(mSheets[SheetType::Doc], aSheet);
- mSheets[SheetType::Doc].InsertElementAt(index, aSheet);
+ aDocument->FindDocStyleSheetInsertionPoint(sheetsArray, aSheet);
+ sheetsArray.InsertElementAt(index, aSheet);
if (mRawSet) {
// Maintain a mirrored list of sheets on the servo side.
- ServoStyleSheet* followingSheet =
- mSheets[SheetType::Doc].SafeElementAt(index + 1);
+ ServoStyleSheet* followingSheet = sheetsArray.SafeElementAt(index + 1);
if (followingSheet) {
+ MOZ_ASSERT(followingSheet->RawSheet(), "Every mSheets element should have a raw sheet");
Servo_StyleSet_InsertStyleSheetBefore(mRawSet.get(), aSheet->RawSheet(),
followingSheet->RawSheet(), !mBatching);
} else {
Servo_StyleSet_AppendStyleSheet(mRawSet.get(), aSheet->RawSheet(), !mBatching);
}
}
return NS_OK;