mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-04 23:08:39 +09:00
Bug 1331322 - Allow tagging of pseudo-implementing native anonymous content with the pseudo type at creation time
* Stop using a node bit for HasExplicitBaseURI * Move MAY_HAVE_CLASS to mBoolFlags * Add a flag to indicate that a node is native anonymous content * Allow tagging of pseudo-implementing native anonymous content with the pseudo type at creation time, and eliminate explicit style contexts in nsIAnonymousContentCreator::ContentInfo Tag #1375
This commit is contained in:
parent
31048968fd
commit
b723a5c8c4
25 changed files with 267 additions and 128 deletions
|
|
@ -8905,6 +8905,8 @@ GetIBSplitSiblingForAnonymousBlock(const nsIFrame* aFrame)
|
|||
*
|
||||
* Also skip anonymous scrolled-content parents; inherit directly from the
|
||||
* outer scroll frame.
|
||||
*
|
||||
* Also skip NAC parents if the child frame is NAC.
|
||||
*/
|
||||
static nsIFrame*
|
||||
GetCorrectedParent(const nsIFrame* aFrame)
|
||||
|
|
@ -8930,6 +8932,31 @@ GetCorrectedParent(const nsIFrame* aFrame)
|
|||
if (pseudo == nsCSSAnonBoxes::tableWrapper) {
|
||||
pseudo = aFrame->PrincipalChildList().FirstChild()->StyleContext()->GetPseudo();
|
||||
}
|
||||
|
||||
// Prevent NAC from inheriting NAC. This partially duplicates the logic
|
||||
// implemented in nsCSSFrameConstructor::AddFCItemsForAnonymousContent, and is
|
||||
// necessary so that restyle inherits style contexts in the same way as the
|
||||
// initial styling performed in frame construction.
|
||||
//
|
||||
// It would be nice to put it in CorrectStyleParentFrame and therefore share
|
||||
// it, but that would lose the information of whether the _child_ is NAC,
|
||||
// since CorrectStyleParentFrame only knows about the prospective _parent_.
|
||||
// This duplication and complexity will go away when we fully switch to the
|
||||
// Servo style system, where all this can be handled much more naturally.
|
||||
//
|
||||
// We need to take special care not to disrupt the style inheritance of frames
|
||||
// whose content is NAC but who implement a pseudo (like an anonymous
|
||||
// box, or a non-NAC-backed pseudo like ::first-line) that does not match the
|
||||
// one that the NAC implements, if any.
|
||||
nsIContent* content = aFrame->GetContent();
|
||||
Element* element = content->IsElement() ? content->AsElement() : nullptr;
|
||||
if (element && element->IsNativeAnonymous() &&
|
||||
element->GetPseudoElementType() == aFrame->StyleContext()->GetPseudoType()) {
|
||||
while (parent->GetContent() && parent->GetContent()->IsNativeAnonymous()) {
|
||||
parent = parent->GetParent();
|
||||
}
|
||||
}
|
||||
|
||||
return nsFrame::CorrectStyleParentFrame(parent, pseudo);
|
||||
}
|
||||
|
||||
|
|
@ -9000,6 +9027,9 @@ nsFrame::DoGetParentStyleContext(nsIFrame** aProviderFrame) const
|
|||
{
|
||||
*aProviderFrame = nullptr;
|
||||
nsFrameManager* fm = PresContext()->FrameManager();
|
||||
|
||||
// Handle display:contents and the root frame, when there's no parent frame
|
||||
// to inherit from.
|
||||
if (MOZ_LIKELY(mContent)) {
|
||||
nsIContent* parentContent = mContent->GetFlattenedTreeParent();
|
||||
if (MOZ_LIKELY(parentContent)) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue