From f88d4daee65388397e81b2de09d469260b838d09 Mon Sep 17 00:00:00 2001 From: Aryeh Gregor Date: Tue, 19 Apr 2016 06:56:00 +0200 Subject: [PATCH] Bug 1190172 part 11 - Clean up nsHTMLEditRules::IsEmptyBlock; r=ehsan --HG-- extra : rebase_source : 43174f4b1874d3ada612683d9c33cc4280e864d8 --- editor/libeditor/nsHTMLEditRules.cpp | 39 ++++++++++++---------------- editor/libeditor/nsHTMLEditRules.h | 8 +++--- 2 files changed, 21 insertions(+), 26 deletions(-) diff --git a/editor/libeditor/nsHTMLEditRules.cpp b/editor/libeditor/nsHTMLEditRules.cpp index 0bd5bf827a26..2a8d420c0c1e 100644 --- a/editor/libeditor/nsHTMLEditRules.cpp +++ b/editor/libeditor/nsHTMLEditRules.cpp @@ -1556,7 +1556,7 @@ nsHTMLEditRules::WillInsertBreak(Selection& aSelection, bool* aCancel, // "Text" is deleted leaving an empty block. We want to put in one br to // make block have a line. Then code further below will put in a second br.) bool isEmpty; - IsEmptyBlock(GetAsDOMNode(blockParent), &isEmpty); + IsEmptyBlock(*blockParent, &isEmpty); if (isEmpty) { nsCOMPtr br = mHTMLEditor->CreateBR(blockParent, blockParent->Length()); @@ -4489,29 +4489,24 @@ nsHTMLEditRules::CreateStyleForInsertText(Selection& aSelection, } -/////////////////////////////////////////////////////////////////////////// -// IsEmptyBlock: figure out if aNode is (or is inside) an empty block. -// A block can have children and still be considered empty, -// if the children are empty or non-editable. -// +/** + * Figure out if aNode is (or is inside) an empty block. A block can have + * children and still be considered empty, if the children are empty or + * non-editable. + */ nsresult -nsHTMLEditRules::IsEmptyBlock(nsIDOMNode *aNode, - bool *outIsEmptyBlock, - bool aMozBRDoesntCount, - bool aListItemsNotEmpty) +nsHTMLEditRules::IsEmptyBlock(Element& aNode, + bool* aOutIsEmptyBlock, + MozBRCounts aMozBRCounts) { - NS_ENSURE_TRUE(aNode && outIsEmptyBlock, NS_ERROR_NULL_POINTER); - *outIsEmptyBlock = true; + MOZ_ASSERT(aOutIsEmptyBlock); + *aOutIsEmptyBlock = true; -// nsresult res = NS_OK; - nsCOMPtr nodeToTest; - if (IsBlockNode(aNode)) nodeToTest = do_QueryInterface(aNode); -// else nsCOMPtr block; -// looks like I forgot to finish this. Wonder what I was going to do? + NS_ENSURE_TRUE(IsBlockNode(aNode.AsDOMNode()), NS_ERROR_NULL_POINTER); - NS_ENSURE_TRUE(nodeToTest, NS_ERROR_NULL_POINTER); - return mHTMLEditor->IsEmptyNode(nodeToTest, outIsEmptyBlock, - aMozBRDoesntCount, aListItemsNotEmpty); + return mHTMLEditor->IsEmptyNode(aNode.AsDOMNode(), aOutIsEmptyBlock, + aMozBRCounts == MozBRCounts::yes ? false + : true); } @@ -6289,7 +6284,7 @@ nsHTMLEditRules::ReturnInHeader(Selection& aSelection, // If the new (righthand) header node is empty, delete it bool isEmpty; - res = IsEmptyBlock(aHeader.AsDOMNode(), &isEmpty, true); + res = IsEmptyBlock(aHeader, &isEmpty, MozBRCounts::no); NS_ENSURE_SUCCESS(res, res); if (isEmpty) { res = mHTMLEditor->DeleteNode(&aHeader); @@ -6542,7 +6537,7 @@ nsHTMLEditRules::ReturnInListItem(Selection& aSelection, // only if prefs say it's okay and if the parent isn't the active editing // host. bool isEmpty; - nsresult res = IsEmptyBlock(aListItem.AsDOMNode(), &isEmpty, true, false); + nsresult res = IsEmptyBlock(aListItem, &isEmpty, MozBRCounts::no); NS_ENSURE_SUCCESS(res, res); if (isEmpty && root != list && mReturnInEmptyLIKillsList) { // Get the list offset now -- before we might eventually split the list diff --git a/editor/libeditor/nsHTMLEditRules.h b/editor/libeditor/nsHTMLEditRules.h index 68548a7935cc..232984a9b441 100644 --- a/editor/libeditor/nsHTMLEditRules.h +++ b/editor/libeditor/nsHTMLEditRules.h @@ -248,10 +248,10 @@ protected: nsresult CreateStyleForInsertText(mozilla::dom::Selection& aSelection, nsIDocument& aDoc); - nsresult IsEmptyBlock(nsIDOMNode *aNode, - bool *outIsEmptyBlock, - bool aMozBRDoesntCount = false, - bool aListItemsNotEmpty = false); + enum class MozBRCounts { yes, no }; + nsresult IsEmptyBlock(mozilla::dom::Element& aNode, + bool* aOutIsEmptyBlock, + MozBRCounts aMozBRCounts = MozBRCounts::yes); nsresult CheckForEmptyBlock(nsINode* aStartNode, mozilla::dom::Element* aBodyNode, mozilla::dom::Selection* aSelection,