Bug 1344914 - stylo: Stop pretending to handle style fixups on the C++ side. r=bz
MozReview-Commit-ID: FBM2NOlXIe5
--- a/layout/style/ServoStyleSet.cpp
+++ b/layout/style/ServoStyleSet.cpp
@@ -207,23 +207,18 @@ already_AddRefed<nsStyleContext>
ServoStyleSet::GetContext(already_AddRefed<ServoComputedValues> aComputedValues,
nsStyleContext* aParentContext,
nsIAtom* aPseudoTag,
CSSPseudoElementType aPseudoType,
Element* aElementForAnimation)
{
// XXXbholley: nsStyleSet does visited handling here.
- // XXXbholley: Figure out the correct thing to pass here. Does this fixup
- // duplicate something that servo already does?
- // See bug 1344914.
- bool skipFixup = false;
-
RefPtr<nsStyleContext> result = NS_NewStyleContext(aParentContext, mPresContext, aPseudoTag,
- aPseudoType, Move(aComputedValues), skipFixup);
+ aPseudoType, Move(aComputedValues));
// Set the body color on the pres context. See nsStyleSet::GetContext
if (aElementForAnimation &&
aElementForAnimation->IsHTMLElement(nsGkAtoms::body) &&
aPseudoType == CSSPseudoElementType::NotPseudo &&
mPresContext->CompatibilityMode() == eCompatibility_NavQuirks) {
nsIDocument* doc = aElementForAnimation->GetUncomposedDoc();
if (doc && doc->GetBodyElement() == aElementForAnimation) {
@@ -481,22 +476,18 @@ ServoStyleSet::ResolveInheritingAnonymou
nsString pseudo;
aPseudoTag->ToString(pseudo);
NS_ERROR(nsPrintfCString("stylo: could not get anon-box: %s",
NS_ConvertUTF16toUTF8(pseudo).get()).get());
MOZ_CRASH();
}
#endif
- // FIXME(bz, bug 1344914) We should really GetContext here.
- // FIXME(heycam) We pass in false for the "skip fixup" argument, since it
- // does nothing for nsStyleContexts backed by ServoComputedValues.
- return NS_NewStyleContext(aParentContext, mPresContext, aPseudoTag,
- CSSPseudoElementType::InheritingAnonBox,
- computedValues.forget(), false);
+ return GetContext(computedValues.forget(), aParentContext, aPseudoTag,
+ CSSPseudoElementType::InheritingAnonBox, nullptr);
}
already_AddRefed<nsStyleContext>
ServoStyleSet::ResolveNonInheritingAnonymousBoxStyle(nsIAtom* aPseudoTag)
{
MOZ_ASSERT(nsCSSAnonBoxes::IsAnonBox(aPseudoTag) &&
nsCSSAnonBoxes::IsNonInheritingAnonBox(aPseudoTag));
MOZ_ASSERT(aPseudoTag != nsCSSAnonBoxes::pageContent,
--- a/layout/style/nsStyleContext.cpp
+++ b/layout/style/nsStyleContext.cpp
@@ -121,37 +121,40 @@ nsStyleContext::nsStyleContext(nsStyleCo
r2 = r2->GetParent();
NS_ASSERTION(r1 == r2, "must be in the same rule tree as parent");
#endif
} else {
PresContext()->PresShell()->StyleSet()->RootStyleContextAdded();
}
mSource.AsGeckoRuleNode()->SetUsedDirectly(); // before ApplyStyleFixups()!
- FinishConstruction(aSkipParentDisplayBasedStyleFixup);
+ FinishConstruction();
+ ApplyStyleFixups(aSkipParentDisplayBasedStyleFixup);
}
nsStyleContext::nsStyleContext(nsStyleContext* aParent,
nsPresContext* aPresContext,
nsIAtom* aPseudoTag,
CSSPseudoElementType aPseudoType,
- already_AddRefed<ServoComputedValues> aComputedValues,
- bool aSkipParentDisplayBasedStyleFixup)
+ already_AddRefed<ServoComputedValues> aComputedValues)
: nsStyleContext(aParent, OwningStyleContextSource(Move(aComputedValues)),
aPseudoTag, aPseudoType)
{
#ifdef MOZ_STYLO
mPresContext = aPresContext;
#endif
- FinishConstruction(aSkipParentDisplayBasedStyleFixup);
+ FinishConstruction();
+
+ // No need to call ApplyStyleFixups here, since fixups are handled by Servo when
+ // producing the ServoComputedValues.
}
void
-nsStyleContext::FinishConstruction(bool aSkipParentDisplayBasedStyleFixup)
+nsStyleContext::FinishConstruction()
{
// This check has to be done "backward", because if it were written the
// more natural way it wouldn't fail even when it needed to.
static_assert((UINT64_MAX >> NS_STYLE_CONTEXT_TYPE_SHIFT) >=
static_cast<CSSPseudoElementTypeBase>(
CSSPseudoElementType::MAX),
"pseudo element bits no longer fit in a uint64_t");
MOZ_ASSERT(!mSource.IsNull());
@@ -164,23 +167,20 @@ nsStyleContext::FinishConstruction(bool
mNextSibling = this;
mPrevSibling = this;
if (mParent) {
mParent->AddChild(this);
}
SetStyleBits();
- if (!mSource.IsServoComputedValues()) {
- ApplyStyleFixups(aSkipParentDisplayBasedStyleFixup);
- }
#define eStyleStruct_LastItem (nsStyleStructID_Length - 1)
- NS_ASSERTION(NS_STYLE_INHERIT_MASK & NS_STYLE_INHERIT_BIT(LastItem),
- "NS_STYLE_INHERIT_MASK must be bigger, and other bits shifted");
+ static_assert(NS_STYLE_INHERIT_MASK & NS_STYLE_INHERIT_BIT(LastItem),
+ "NS_STYLE_INHERIT_MASK must be bigger, and other bits shifted");
#undef eStyleStruct_LastItem
}
nsStyleContext::~nsStyleContext()
{
NS_ASSERTION((nullptr == mChild) && (nullptr == mEmptyChild), "destructing context with children");
MOZ_ASSERT_IF(mSource.IsServoComputedValues(), !mCachedResetData);
@@ -1384,23 +1384,22 @@ NS_NewStyleContext(nsStyleContext* aPare
return context.forget();
}
already_AddRefed<nsStyleContext>
NS_NewStyleContext(nsStyleContext* aParentContext,
nsPresContext* aPresContext,
nsIAtom* aPseudoTag,
CSSPseudoElementType aPseudoType,
- already_AddRefed<ServoComputedValues> aComputedValues,
- bool aSkipParentDisplayBasedStyleFixup)
+ already_AddRefed<ServoComputedValues> aComputedValues)
{
RefPtr<nsStyleContext> context =
new (aPresContext)
nsStyleContext(aParentContext, aPresContext, aPseudoTag, aPseudoType,
- Move(aComputedValues), aSkipParentDisplayBasedStyleFixup);
+ Move(aComputedValues));
return context.forget();
}
nsIPresShell*
nsStyleContext::Arena()
{
return PresContext()->PresShell();
}
--- a/layout/style/nsStyleContext.h
+++ b/layout/style/nsStyleContext.h
@@ -85,18 +85,17 @@ public:
bool aSkipParentDisplayBasedStyleFixup);
// Version of the above that takes a ServoComputedValues instead of a Gecko
// nsRuleNode.
nsStyleContext(nsStyleContext* aParent,
nsPresContext* aPresContext,
nsIAtom* aPseudoTag,
mozilla::CSSPseudoElementType aPseudoType,
- already_AddRefed<ServoComputedValues> aComputedValues,
- bool aSkipParentDisplayBasedStyleFixup);
+ already_AddRefed<ServoComputedValues> aComputedValues);
void* operator new(size_t sz, nsPresContext* aPresContext);
void Destroy();
// These two methods are for use by ArenaRefPtr.
static mozilla::ArenaObjectID ArenaObjectID()
{
return mozilla::eArenaObjectID_nsStyleContext;
@@ -546,25 +545,27 @@ private:
// Delegated Helper constructor.
nsStyleContext(nsStyleContext* aParent,
mozilla::OwningStyleContextSource&& aSource,
nsIAtom* aPseudoTag,
mozilla::CSSPseudoElementType aPseudoType);
// Helper post-contruct hook.
- void FinishConstruction(bool aSkipParentDisplayBasedStyleFixup);
+ void FinishConstruction();
void AddChild(nsStyleContext* aChild);
void RemoveChild(nsStyleContext* aChild);
void* GetUniqueStyleData(const nsStyleStructID& aSID);
void* CreateEmptyStyleData(const nsStyleStructID& aSID);
void SetStyleBits();
+
+ // Only called for Gecko-backed nsStyleContexts.
void ApplyStyleFixups(bool aSkipParentDisplayBasedStyleFixup);
const void* StyleStructFromServoComputedValues(nsStyleStructID aSID) {
switch (aSID) {
#define STYLE_STRUCT(name_, checkdata_cb_) \
case eStyleStruct_##name_: \
return Servo_GetStyle##name_(mSource.AsServoComputedValues());
#include "nsStyleStructList.h"
@@ -824,12 +825,11 @@ NS_NewStyleContext(nsStyleContext* aPare
nsRuleNode* aRuleNode,
bool aSkipParentDisplayBasedStyleFixup);
already_AddRefed<nsStyleContext>
NS_NewStyleContext(nsStyleContext* aParentContext,
nsPresContext* aPresContext,
nsIAtom* aPseudoTag,
mozilla::CSSPseudoElementType aPseudoType,
- already_AddRefed<ServoComputedValues> aComputedValues,
- bool aSkipParentDisplayBasedStyleFixup);
+ already_AddRefed<ServoComputedValues> aComputedValues);
#endif