diff --git a/editor/libeditor/EditAction.h b/editor/libeditor/EditAction.h index c7fce713d0c4..c5d6a4da4d58 100644 --- a/editor/libeditor/EditAction.h +++ b/editor/libeditor/EditAction.h @@ -170,14 +170,17 @@ enum class EditAction // href attribute. eInsertLinkElement, - // eInsertUnorderedListElement, eInsertOrderedListElement and - // eInsertDefinitionListLElement indicate to insert
element. diff --git a/editor/libeditor/HTMLEditUtils.cpp b/editor/libeditor/HTMLEditUtils.cpp index fe48c70e83bb..6e3ce9feafc1 100644 --- a/editor/libeditor/HTMLEditUtils.cpp +++ b/editor/libeditor/HTMLEditUtils.cpp @@ -720,6 +720,22 @@ HTMLEditUtils::GetEditActionForInsert(const nsAtom& aTagName) return EditAction::eInsertNode; } +EditAction +HTMLEditUtils::GetEditActionForRemoveList(const nsAtom& aTagName) +{ + // This method may be in a hot path. So, return only necessary + // EditAction::eRemove*Element. + if (&aTagName == nsGkAtoms::ul) { + // For InputEvent.inputType, "insertUnorderedList". + return EditAction::eRemoveUnorderedListElement; + } + if (&aTagName == nsGkAtoms::ol) { + // For InputEvent.inputType, "insertOrderedList". + return EditAction::eRemoveOrderedListElement; + } + return EditAction::eRemoveListElement; +} + EditAction HTMLEditUtils::GetEditActionForInsert(const Element& aElement) { diff --git a/editor/libeditor/HTMLEditUtils.h b/editor/libeditor/HTMLEditUtils.h index 978b4aeaa57d..0534b6eb2f8d 100644 --- a/editor/libeditor/HTMLEditUtils.h +++ b/editor/libeditor/HTMLEditUtils.h @@ -48,6 +48,7 @@ public: static bool IsSingleLineContainer(nsINode& aNode); static EditAction GetEditActionForInsert(const nsAtom& aTagName); + static EditAction GetEditActionForRemoveList(const nsAtom& aTagName); static EditAction GetEditActionForInsert(const Element& aElement); static EditAction GetEditActionForFormatText(const nsAtom& aProperty, const nsAtom* aAttribute, diff --git a/editor/libeditor/HTMLEditor.cpp b/editor/libeditor/HTMLEditor.cpp index 5c01d1791299..1dfb1d4a9cd4 100644 --- a/editor/libeditor/HTMLEditor.cpp +++ b/editor/libeditor/HTMLEditor.cpp @@ -2377,14 +2377,26 @@ HTMLEditor::MakeOrChangeList(const nsAString& aListType, } NS_IMETHODIMP -HTMLEditor::RemoveList(const nsAString&) +HTMLEditor::RemoveList(const nsAString& aListType) { if (!mRules) { return NS_ERROR_NOT_INITIALIZED; } - AutoEditActionDataSetter editActionData(*this, - EditAction::eRemoveListElement); + // Note that we ignore aListType when we actually remove parent list elements. + // However, we need to set InputEvent.inputType to "insertOrderedList" or + // "insertedUnorderedList" when this is called for + // execCommand("insertorderedlist") or execCommand("insertunorderedlist"). + // Otherwise, comm-central UI may call this methods with "dl" or "". + // So, it's okay to use mismatched EditAction here if this is called in + // comm-central. + + RefPtrlistAtom = NS_Atomize(aListType); + if (NS_WARN_IF(!listAtom)) { + return NS_ERROR_INVALID_ARG; + } + AutoEditActionDataSetter editActionData( + *this, HTMLEditUtils::GetEditActionForRemoveList(*listAtom)); if (NS_WARN_IF(!editActionData.CanHandle())) { return NS_ERROR_NOT_INITIALIZED; }