Bug 1352968 part 5 - Add a param to ctor of ServoCSSRuleList for top level list. r=heycam

@import rules can only exist in top level rule lists, and we need the
stylesheet to construct the import rules.

MozReview-Commit-ID: APCyGW8re8f

--HG--
extra : source : b9b78672249f390d56d71fa46dfa4b4cd49ef182
This commit is contained in:
Xidorn Quan 2017-05-30 11:10:25 +10:00
Родитель 1b312ca843
Коммит a17c79bc30
4 изменённых файлов: 12 добавлений и 6 удалений

Просмотреть файл

@ -79,7 +79,7 @@ struct GeckoGroupRuleRules
struct ServoGroupRuleRules
{
explicit ServoGroupRuleRules(already_AddRefed<ServoCssRules> aRawRules)
: mRuleList(new ServoCSSRuleList(Move(aRawRules))) {}
: mRuleList(new ServoCSSRuleList(Move(aRawRules), nullptr)) {}
ServoGroupRuleRules(ServoGroupRuleRules&& aOther)
: mRuleList(Move(aOther.mRuleList)) {}
ServoGroupRuleRules(const ServoGroupRuleRules& aCopy) {

Просмотреть файл

@ -22,8 +22,10 @@
namespace mozilla {
ServoCSSRuleList::ServoCSSRuleList(already_AddRefed<ServoCssRules> aRawRules)
: mRawRules(aRawRules)
ServoCSSRuleList::ServoCSSRuleList(already_AddRefed<ServoCssRules> aRawRules,
ServoStyleSheet* aDirectOwnerStyleSheet)
: mStyleSheet(aDirectOwnerStyleSheet)
, mRawRules(aRawRules)
{
Servo_CssRules_ListTypes(mRawRules, &mRules);
// XXX We may want to eagerly create object for import rule, so that

Просмотреть файл

@ -25,7 +25,12 @@ class Rule;
class ServoCSSRuleList final : public dom::CSSRuleList
{
public:
explicit ServoCSSRuleList(already_AddRefed<ServoCssRules> aRawRules);
// @param aDirectOwnerStyleSheet should be set to the owner stylesheet
// if this rule list is owned directly by a stylesheet, which means it
// is a top level CSSRuleList. If it's owned by a group rule, nullptr.
// If this param is set, the caller doesn't need to call SetStyleSheet.
ServoCSSRuleList(already_AddRefed<ServoCssRules> aRawRules,
ServoStyleSheet* aDirectOwnerStyleSheet);
css::GroupRule* GetParentRule() const { return mParentRule; }
void SetParentRule(css::GroupRule* aParentRule);
void SetStyleSheet(StyleSheet* aSheet);

Просмотреть файл

@ -221,8 +221,7 @@ ServoStyleSheet::GetCssRulesInternal(ErrorResult& aRv)
RefPtr<ServoCssRules> rawRules =
Servo_StyleSheet_GetRules(Inner()->mSheet).Consume();
MOZ_ASSERT(rawRules);
mRuleList = new ServoCSSRuleList(rawRules.forget());
mRuleList->SetStyleSheet(this);
mRuleList = new ServoCSSRuleList(rawRules.forget(), this);
}
return mRuleList;
}