Bug 1290218 Part 10: Add asserts to ServoStyleSets. draft
authorBrad Werth <bwerth@mozilla.com>
Wed, 15 Feb 2017 12:25:21 -0800
changeset 488928 3356f9cb981f3bdb5a00f55158e9af1a809c8522
parent 488927 0b6f97472279b108b9193050ef73c0d697347bfd
child 488929 7bfcd25dee4f9a484b68b96fbe6eaef53674bcb1
push id46687
push userbwerth@mozilla.com
push dateFri, 24 Feb 2017 01:52:48 +0000
bugs1290218
milestone54.0a1
Bug 1290218 Part 10: Add asserts to ServoStyleSets. MozReview-Commit-ID: ATTI9X6CEKr
layout/style/ServoStyleSet.cpp
--- 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;