import from UXP: Bug 1334247 - Remove nsIAnonymousContentCreator::CreateFrameFor (499252b8)

This commit is contained in:
2022-04-12 13:03:20 +08:00
parent 10744c0618
commit 61efccddda
6 changed files with 19 additions and 60 deletions
+11 -16
View File
@@ -47,6 +47,7 @@
#include "nsContainerFrame.h" #include "nsContainerFrame.h"
#include "nsNameSpaceManager.h" #include "nsNameSpaceManager.h"
#include "nsIComboboxControlFrame.h" #include "nsIComboboxControlFrame.h"
#include "nsComboboxControlFrame.h"
#include "nsIListControlFrame.h" #include "nsIListControlFrame.h"
#include "nsIDOMCharacterData.h" #include "nsIDOMCharacterData.h"
#include "nsPlaceholderFrame.h" #include "nsPlaceholderFrame.h"
@@ -4128,9 +4129,7 @@ nsCSSFrameConstructor::CreateAnonymousFrames(nsFrameConstructorState& aState,
ancestorPusher.PushStyleScope(aParent->AsElement()); ancestorPusher.PushStyleScope(aParent->AsElement());
} }
nsIAnonymousContentCreator* creator = do_QueryFrame(aParentFrame); nsComboboxControlFrame* comboboxFrame = do_QueryFrame(aParentFrame);
NS_ASSERTION(creator,
"How can that happen if we have nodes to construct frames for?");
InsertionPoint insertion(aParentFrame, aParent); InsertionPoint insertion(aParentFrame, aParent);
for (uint32_t i=0; i < count; i++) { for (uint32_t i=0; i < count; i++) {
@@ -4142,12 +4141,15 @@ nsCSSFrameConstructor::CreateAnonymousFrames(nsFrameConstructorState& aState,
"nsIAnonymousContentCreator::CreateAnonymousContent to " "nsIAnonymousContentCreator::CreateAnonymousContent to "
"output a list where the items have their own children"); "output a list where the items have their own children");
nsIFrame* newFrame = creator->CreateFrameFor(content); if (comboboxFrame && comboboxFrame->GetDisplayNode() == content) {
if (newFrame) { // Combo box frames have a custom hook to create frames for the anonymous
NS_ASSERTION(content->GetPrimaryFrame(), // text node. This is the last vestigial trace of an old custom hook that
"Content must have a primary frame now"); // allowed arbitrary custom frame creation by any nsIAnonymousContentCreator
newFrame->AddStateBits(NS_FRAME_ANONYMOUSCONTENTCREATOR_CONTENT); // implementation. It's possible that this could all be refactored away.
aChildItems.AddChild(newFrame); nsIFrame* customFrame = comboboxFrame->CreateFrameForDisplayNode();
MOZ_ASSERT(customFrame);
customFrame->AddStateBits(NS_FRAME_ANONYMOUSCONTENTCREATOR_CONTENT);
aChildItems.AddChild(customFrame);
} else { } else {
FrameConstructionItemList items; FrameConstructionItemList items;
{ {
@@ -10724,13 +10726,6 @@ nsCSSFrameConstructor::AddFCItemsForAnonymousContent(
{ {
for (uint32_t i = 0; i < aAnonymousItems.Length(); ++i) { for (uint32_t i = 0; i < aAnonymousItems.Length(); ++i) {
nsIContent* content = aAnonymousItems[i].mContent; nsIContent* content = aAnonymousItems[i].mContent;
#ifdef DEBUG
nsIAnonymousContentCreator* creator = do_QueryFrame(aFrame);
NS_ASSERTION(!creator || !creator->CreateFrameFor(content),
"If you need to use CreateFrameFor, you need to call "
"CreateAnonymousFrames manually and not follow the standard "
"ProcessChildren() codepath for this frame");
#endif
// Gecko-styled nodes should have no pending restyle flags. // Gecko-styled nodes should have no pending restyle flags.
MOZ_ASSERT_IF(!content->IsStyledByServo(), MOZ_ASSERT_IF(!content->IsStyledByServo(),
!content->IsElement() || !content->IsElement() ||
+4 -10
View File
@@ -249,6 +249,7 @@ nsComboboxControlFrame::~nsComboboxControlFrame()
//-------------------------------------------------------------- //--------------------------------------------------------------
NS_QUERYFRAME_HEAD(nsComboboxControlFrame) NS_QUERYFRAME_HEAD(nsComboboxControlFrame)
NS_QUERYFRAME_ENTRY(nsComboboxControlFrame)
NS_QUERYFRAME_ENTRY(nsIComboboxControlFrame) NS_QUERYFRAME_ENTRY(nsIComboboxControlFrame)
NS_QUERYFRAME_ENTRY(nsIFormControlFrame) NS_QUERYFRAME_ENTRY(nsIFormControlFrame)
NS_QUERYFRAME_ENTRY(nsIAnonymousContentCreator) NS_QUERYFRAME_ENTRY(nsIAnonymousContentCreator)
@@ -1350,16 +1351,9 @@ nsComboboxDisplayFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
} }
nsIFrame* nsIFrame*
nsComboboxControlFrame::CreateFrameFor(nsIContent* aContent) nsComboboxControlFrame::CreateFrameForDisplayNode()
{ {
NS_PRECONDITION(nullptr != aContent, "null ptr"); MOZ_ASSERT(mDisplayContent);
NS_ASSERTION(mDisplayContent, "mDisplayContent can't be null!");
if (mDisplayContent != aContent) {
// We only handle the frames for mDisplayContent here
return nullptr;
}
// Get PresShell // Get PresShell
nsIPresShell *shell = PresContext()->PresShell(); nsIPresShell *shell = PresContext()->PresShell();
@@ -1384,7 +1378,7 @@ nsComboboxControlFrame::CreateFrameFor(nsIContent* aContent)
nsIFrame* textFrame = NS_NewTextFrame(shell, textStyleContext); nsIFrame* textFrame = NS_NewTextFrame(shell, textStyleContext);
// initialize the text frame // initialize the text frame
textFrame->Init(aContent, mDisplayFrame, nullptr); textFrame->Init(mDisplayContent, mDisplayFrame, nullptr);
mDisplayContent->SetPrimaryFrame(textFrame); mDisplayContent->SetPrimaryFrame(textFrame);
nsFrameList textList(textFrame, textFrame); nsFrameList textList(textFrame, textFrame);
+4 -1
View File
@@ -54,6 +54,7 @@ class nsComboboxControlFrame final : public nsBlockFrame,
typedef mozilla::gfx::DrawTarget DrawTarget; typedef mozilla::gfx::DrawTarget DrawTarget;
public: public:
NS_DECL_QUERYFRAME_TARGET(nsComboboxControlFrame)
friend nsContainerFrame* NS_NewComboboxControlFrame(nsIPresShell* aPresShell, friend nsContainerFrame* NS_NewComboboxControlFrame(nsIPresShell* aPresShell,
nsStyleContext* aContext, nsStyleContext* aContext,
nsFrameState aFlags); nsFrameState aFlags);
@@ -69,7 +70,9 @@ public:
virtual nsresult CreateAnonymousContent(nsTArray<ContentInfo>& aElements) override; virtual nsresult CreateAnonymousContent(nsTArray<ContentInfo>& aElements) override;
virtual void AppendAnonymousContentTo(nsTArray<nsIContent*>& aElements, virtual void AppendAnonymousContentTo(nsTArray<nsIContent*>& aElements,
uint32_t aFilter) override; uint32_t aFilter) override;
virtual nsIFrame* CreateFrameFor(nsIContent* aContent) override;
nsIContent* GetDisplayNode() { return mDisplayContent; }
nsIFrame* CreateFrameForDisplayNode();
#ifdef ACCESSIBILITY #ifdef ACCESSIBILITY
virtual mozilla::a11y::AccType AccessibleType() override; virtual mozilla::a11y::AccType AccessibleType() override;
-24
View File
@@ -78,30 +78,6 @@ nsGfxButtonControlFrame::AppendAnonymousContentTo(nsTArray<nsIContent*>& aElemen
} }
} }
// Create the text content used as label for the button.
// The frame will be generated by the frame constructor.
nsIFrame*
nsGfxButtonControlFrame::CreateFrameFor(nsIContent* aContent)
{
nsIFrame * newFrame = nullptr;
if (aContent == mTextContent) {
nsContainerFrame* parentFrame = do_QueryFrame(mFrames.FirstChild());
nsPresContext* presContext = PresContext();
RefPtr<nsStyleContext> textStyleContext;
textStyleContext = presContext->StyleSet()->
ResolveStyleForText(mTextContent, mStyleContext);
newFrame = NS_NewTextFrame(presContext->PresShell(), textStyleContext);
// initialize the text frame
newFrame->Init(mTextContent, parentFrame, nullptr);
mTextContent->SetPrimaryFrame(newFrame);
}
return newFrame;
}
NS_QUERYFRAME_HEAD(nsGfxButtonControlFrame) NS_QUERYFRAME_HEAD(nsGfxButtonControlFrame)
NS_QUERYFRAME_ENTRY(nsIAnonymousContentCreator) NS_QUERYFRAME_ENTRY(nsIAnonymousContentCreator)
NS_QUERYFRAME_TAIL_INHERITING(nsHTMLButtonControlFrame) NS_QUERYFRAME_TAIL_INHERITING(nsHTMLButtonControlFrame)
-1
View File
@@ -42,7 +42,6 @@ public:
virtual nsresult CreateAnonymousContent(nsTArray<ContentInfo>& aElements) override; virtual nsresult CreateAnonymousContent(nsTArray<ContentInfo>& aElements) override;
virtual void AppendAnonymousContentTo(nsTArray<nsIContent*>& aElements, virtual void AppendAnonymousContentTo(nsTArray<nsIContent*>& aElements,
uint32_t aFilter) override; uint32_t aFilter) override;
virtual nsIFrame* CreateFrameFor(nsIContent* aContent) override;
virtual nsresult AttributeChanged(int32_t aNameSpaceID, virtual nsresult AttributeChanged(int32_t aNameSpaceID,
nsIAtom* aAttribute, nsIAtom* aAttribute,
@@ -72,14 +72,6 @@ public:
*/ */
virtual void AppendAnonymousContentTo(nsTArray<nsIContent*>& aElements, virtual void AppendAnonymousContentTo(nsTArray<nsIContent*>& aElements,
uint32_t aFilter) = 0; uint32_t aFilter) = 0;
/**
* Implementations can override this method to create special frames for the
* anonymous content returned from CreateAnonymousContent.
* By default this method returns nullptr, which means the default frame
* is created.
*/
virtual nsIFrame* CreateFrameFor(nsIContent* aContent) { return nullptr; }
}; };
#endif #endif