Bug 1366721: Switch all the APIs in ServoStyleSet to use ServoStyleContext. r?heycam
MozReview-Commit-ID: 8oMwu45tlaJ
--- a/layout/style/ServoStyleSet.cpp
+++ b/layout/style/ServoStyleSet.cpp
@@ -165,17 +165,17 @@ ServoStyleSet::BeginUpdate()
}
nsresult
ServoStyleSet::EndUpdate()
{
return NS_OK;
}
-already_AddRefed<nsStyleContext>
+already_AddRefed<ServoStyleContext>
ServoStyleSet::ResolveStyleFor(Element* aElement,
ServoStyleContext* aParentContext,
LazyComputeBehavior aMayCompute)
{
return GetContext(aElement, aParentContext, nullptr,
CSSPseudoElementType::NotPseudo, aMayCompute);
}
@@ -362,17 +362,17 @@ ServoStyleSet::PrepareAndTraverseSubtree
postTraversalRequired = true;
}
}
}
return postTraversalRequired;
}
-already_AddRefed<nsStyleContext>
+already_AddRefed<ServoStyleContext>
ServoStyleSet::ResolveStyleForText(nsIContent* aTextNode,
ServoStyleContext* aParentContext)
{
MOZ_ASSERT(aTextNode && aTextNode->IsNodeOfType(nsINode::eTEXT));
MOZ_ASSERT(aTextNode->GetParent());
MOZ_ASSERT(aParentContext);
// Gecko expects text node style contexts to be like elements that match no
@@ -383,55 +383,55 @@ ServoStyleSet::ResolveStyleForText(nsICo
Servo_ComputedValues_Inherit(mRawSet.get(),
nsCSSAnonBoxes::mozText,
aParentContext,
InheritTarget::Text).Consume();
computedValues->UpdateWithElementState(nullptr);
return computedValues.forget();
}
-already_AddRefed<nsStyleContext>
+already_AddRefed<ServoStyleContext>
ServoStyleSet::ResolveStyleForFirstLetterContinuation(ServoStyleContext* aParentContext)
{
RefPtr<ServoStyleContext> computedValues =
Servo_ComputedValues_Inherit(mRawSet.get(),
nsCSSAnonBoxes::firstLetterContinuation,
aParentContext,
InheritTarget::FirstLetterContinuation)
.Consume();
MOZ_ASSERT(computedValues);
computedValues->UpdateWithElementState(nullptr);
return computedValues.forget();
}
-already_AddRefed<nsStyleContext>
+already_AddRefed<ServoStyleContext>
ServoStyleSet::ResolveStyleForPlaceholder()
{
- RefPtr<nsStyleContext>& cache =
+ RefPtr<ServoStyleContext>& cache =
mNonInheritingStyleContexts[nsCSSAnonBoxes::NonInheriting::oofPlaceholder];
if (cache) {
- RefPtr<nsStyleContext> retval = cache;
+ RefPtr<ServoStyleContext> retval = cache;
return retval.forget();
}
RefPtr<ServoStyleContext> computedValues =
Servo_ComputedValues_Inherit(mRawSet.get(),
nsCSSAnonBoxes::oofPlaceholder,
nullptr,
InheritTarget::PlaceholderFrame)
.Consume();
MOZ_ASSERT(computedValues);
computedValues->UpdateWithElementState(nullptr);
cache = computedValues;
return computedValues.forget();
}
-already_AddRefed<nsStyleContext>
+already_AddRefed<ServoStyleContext>
ServoStyleSet::ResolvePseudoElementStyle(Element* aOriginatingElement,
CSSPseudoElementType aType,
ServoStyleContext* aParentContext,
Element* aPseudoElement)
{
UpdateStylistIfNeeded();
MOZ_ASSERT(aType < CSSPseudoElementType::Count);
@@ -456,17 +456,17 @@ ServoStyleSet::ResolvePseudoElementStyle
MOZ_ASSERT(computedValues);
bool isBeforeOrAfter = aType == CSSPseudoElementType::before ||
aType == CSSPseudoElementType::after;
computedValues->UpdateWithElementState(isBeforeOrAfter ? aOriginatingElement : nullptr);
return computedValues.forget();
}
-already_AddRefed<nsStyleContext>
+already_AddRefed<ServoStyleContext>
ServoStyleSet::ResolveTransientStyle(Element* aElement,
CSSPseudoElementType aPseudoType,
nsIAtom* aPseudoTag,
StyleRuleInclusion aRuleInclusion)
{
RefPtr<ServoStyleContext> result =
ResolveTransientServoStyle(aElement, aPseudoType, aPseudoTag, aRuleInclusion);
result->UpdateWithElementState(nullptr);
@@ -506,32 +506,32 @@ ServoStyleSet::ResolveInheritingAnonymou
MOZ_CRASH();
}
#endif
computedValues->UpdateWithElementState(nullptr);
return computedValues.forget();
}
-already_AddRefed<nsStyleContext>
+already_AddRefed<ServoStyleContext>
ServoStyleSet::ResolveNonInheritingAnonymousBoxStyle(nsIAtom* aPseudoTag)
{
MOZ_ASSERT(nsCSSAnonBoxes::IsAnonBox(aPseudoTag) &&
nsCSSAnonBoxes::IsNonInheritingAnonBox(aPseudoTag));
MOZ_ASSERT(aPseudoTag != nsCSSAnonBoxes::pageContent,
"If nsCSSAnonBoxes::pageContent ends up non-inheriting, check "
"whether we need to do anything to move the "
"@page handling from ResolveInheritingAnonymousBoxStyle to "
"ResolveNonInheritingAnonymousBoxStyle");
nsCSSAnonBoxes::NonInheriting type =
nsCSSAnonBoxes::NonInheritingTypeForPseudoTag(aPseudoTag);
- RefPtr<nsStyleContext>& cache = mNonInheritingStyleContexts[type];
+ RefPtr<ServoStyleContext>& cache = mNonInheritingStyleContexts[type];
if (cache) {
- RefPtr<nsStyleContext> retval = cache;
+ RefPtr<ServoStyleContext> retval = cache;
return retval.forget();
}
UpdateStylistIfNeeded();
// We always want to skip parent-based display fixup here. It never makes
// sense for non-inheriting anonymous boxes. (Static assertions in
// nsCSSAnonBoxes.cpp ensure that all non-inheriting non-anonymous boxes
@@ -749,17 +749,17 @@ ServoStyleSet::AddDocStyleSheet(ServoSty
Servo_StyleSet_AppendStyleSheet(mRawSet.get(), aSheet);
SetStylistStyleSheetsDirty();
}
}
return NS_OK;
}
-already_AddRefed<nsStyleContext>
+already_AddRefed<ServoStyleContext>
ServoStyleSet::ProbePseudoElementStyle(Element* aOriginatingElement,
CSSPseudoElementType aType,
ServoStyleContext* aParentContext)
{
UpdateStylistIfNeeded();
// NB: We ignore aParentContext, because in some cases
// (first-line/first-letter on anonymous box blocks) Gecko passes something
@@ -1096,17 +1096,17 @@ ServoStyleSet::ResolveServoStyle(Element
return Servo_ResolveStyle(aElement,
mRawSet.get(),
aRestyleBehavior).Consume();
}
void
ServoStyleSet::ClearNonInheritingStyleContexts()
{
- for (RefPtr<nsStyleContext>& ptr : mNonInheritingStyleContexts) {
+ for (RefPtr<ServoStyleContext>& ptr : mNonInheritingStyleContexts) {
ptr = nullptr;
}
}
already_AddRefed<ServoStyleContext>
ServoStyleSet::ResolveStyleLazily(Element* aElement,
CSSPseudoElementType aPseudoType,
nsIAtom* aPseudoTag,
--- a/layout/style/ServoStyleSet.h
+++ b/layout/style/ServoStyleSet.h
@@ -34,17 +34,16 @@ class ServoStyleSheet;
struct Keyframe;
class ServoElementSnapshotTable;
class ServoStyleContext;
class ServoStyleRuleMap;
} // namespace mozilla
class nsCSSCounterStyleRule;
class nsIContent;
class nsIDocument;
-class nsStyleContext;
class nsPresContext;
struct nsTimingFunction;
struct RawServoRuleNode;
struct TreeMatchContext;
namespace mozilla {
/**
@@ -126,72 +125,72 @@ public:
}
bool GetAuthorStyleDisabled() const;
nsresult SetAuthorStyleDisabled(bool aStyleDisabled);
void BeginUpdate();
nsresult EndUpdate();
- already_AddRefed<nsStyleContext>
+ already_AddRefed<ServoStyleContext>
ResolveStyleFor(dom::Element* aElement,
ServoStyleContext* aParentContext,
LazyComputeBehavior aMayCompute);
// Get a style context for a text node (which no rules will match).
//
// The returned style context will have nsCSSAnonBoxes::mozText as its pseudo.
//
// (Perhaps mozText should go away and we shouldn't even create style
// contexts for such content nodes, when text-combine-upright is not
// present. However, not doing any rule matching for them is a first step.)
- already_AddRefed<nsStyleContext>
+ already_AddRefed<ServoStyleContext>
ResolveStyleForText(nsIContent* aTextNode,
ServoStyleContext* aParentContext);
// Get a style context for a first-letter continuation (which no rules will
// match).
//
// The returned style context will have
// nsCSSAnonBoxes::firstLetterContinuation as its pseudo.
//
// (Perhaps nsCSSAnonBoxes::firstLetterContinuation should go away and we
// shouldn't even create style contexts for such frames. However, not doing
// any rule matching for them is a first step. And right now we do use this
// style context for some things)
- already_AddRefed<nsStyleContext>
+ already_AddRefed<ServoStyleContext>
ResolveStyleForFirstLetterContinuation(ServoStyleContext* aParentContext);
// Get a style context for a placeholder frame (which no rules will match).
//
// The returned style context will have nsCSSAnonBoxes::oofPlaceholder as
// its pseudo.
//
// (Perhaps nsCSSAnonBoxes::oofPaceholder should go away and we shouldn't even
// create style contexts for placeholders. However, not doing any rule
// matching for them is a first step.)
- already_AddRefed<nsStyleContext>
+ already_AddRefed<ServoStyleContext>
ResolveStyleForPlaceholder();
// Get a style context for a pseudo-element. aParentElement must be
// non-null. aPseudoID is the CSSPseudoElementType for the
// pseudo-element. aPseudoElement must be non-null if the pseudo-element
// type is one that allows user action pseudo-classes after it or allows
// style attributes; otherwise, it is ignored.
- already_AddRefed<nsStyleContext>
+ already_AddRefed<ServoStyleContext>
ResolvePseudoElementStyle(dom::Element* aOriginatingElement,
CSSPseudoElementType aType,
ServoStyleContext* aParentContext,
dom::Element* aPseudoElement);
// Resolves style for a (possibly-pseudo) Element without assuming that the
// style has been resolved, and without worrying about setting the style
// context up to live in the style context tree (a null parent is used).
// |aPeudoTag| and |aPseudoType| must match.
- already_AddRefed<nsStyleContext>
+ already_AddRefed<ServoStyleContext>
ResolveTransientStyle(dom::Element* aElement,
CSSPseudoElementType aPseudoType,
nsIAtom* aPseudoTag,
StyleRuleInclusion aRules =
StyleRuleInclusion::All);
// Similar to ResolveTransientStyle() but returns ServoComputedValues.
// Unlike ResolveServoStyle() this function calls PreTraverseSync().
@@ -207,17 +206,17 @@ public:
// inherits style from the given aParentContext.
already_AddRefed<ServoStyleContext>
ResolveInheritingAnonymousBoxStyle(nsIAtom* aPseudoTag,
ServoStyleContext* aParentContext);
// Get a style context for an anonymous box that does not inherit style from
// anything. aPseudoTag is the pseudo-tag to use and must be non-null. It
// must be an anon box, and must be a non-inheriting one.
- already_AddRefed<nsStyleContext>
+ already_AddRefed<ServoStyleContext>
ResolveNonInheritingAnonymousBoxStyle(nsIAtom* aPseudoTag);
// manage the set of style sheets in the style set
nsresult AppendStyleSheet(SheetType aType, ServoStyleSheet* aSheet);
nsresult PrependStyleSheet(SheetType aType, ServoStyleSheet* aSheet);
nsresult RemoveStyleSheet(SheetType aType, ServoStyleSheet* aSheet);
nsresult ReplaceSheets(SheetType aType,
const nsTArray<RefPtr<ServoStyleSheet>>& aNewSheets);
@@ -241,17 +240,17 @@ public:
aCallback(sheetArray);
}
}
nsresult RemoveDocStyleSheet(ServoStyleSheet* aSheet);
nsresult AddDocStyleSheet(ServoStyleSheet* aSheet, nsIDocument* aDocument);
// check whether there is ::before/::after style for an element
- already_AddRefed<nsStyleContext>
+ already_AddRefed<ServoStyleContext>
ProbePseudoElementStyle(dom::Element* aOriginatingElement,
mozilla::CSSPseudoElementType aType,
ServoStyleContext* aParentContext);
// Test if style is dependent on content state
nsRestyleHint HasStateDependentStyle(dom::Element* aElement,
EventStates aStateMask);
nsRestyleHint HasStateDependentStyle(
@@ -355,17 +354,19 @@ public:
/**
* Notifies the Servo stylesheet that the document's compatibility mode has changed.
*/
void CompatibilityModeChanged();
/**
* Resolve style for the given element, and return it as a
- * ServoComputedValues, not an nsStyleContext.
+ * ServoStyleContext.
+ *
+ * FIXME(emilio): Is there a point in this after bug 1367904?
*/
already_AddRefed<ServoStyleContext>
ResolveServoStyle(dom::Element* aElement,
TraversalRestyleBehavior aRestyleBehavior);
bool GetKeyframesForName(const nsString& aName,
const nsTimingFunction& aTimingFunction,
nsTArray<Keyframe>& aKeyframes);
@@ -589,17 +590,17 @@ private:
uint32_t mUserFontCacheUpdateGeneration;
bool mNeedsRestyleAfterEnsureUniqueInner;
// Stores pointers to our cached style contexts for non-inheriting anonymous
// boxes.
EnumeratedArray<nsCSSAnonBoxes::NonInheriting,
nsCSSAnonBoxes::NonInheriting::_Count,
- RefPtr<nsStyleContext>> mNonInheritingStyleContexts;
+ RefPtr<ServoStyleContext>> mNonInheritingStyleContexts;
// Tasks to perform after a traversal, back on the main thread.
//
// These are similar to Servo's SequentialTasks, except that they are
// posted by C++ code running on style worker threads.
nsTArray<PostTraversalTask> mPostTraversalTasks;
// Map from raw Servo style rule to Gecko's wrapper object.