diff --git a/editor/libeditor/HTMLEditRules.cpp b/editor/libeditor/HTMLEditRules.cpp index 0045d856703e..72fa8a4f26c5 100644 --- a/editor/libeditor/HTMLEditRules.cpp +++ b/editor/libeditor/HTMLEditRules.cpp @@ -754,12 +754,6 @@ nsresult HTMLEditRules::WillDoAction(EditSubActionInfo& aInfo, bool* aCancel, *aCancel = false; *aHandled = false; - // Deal with actions for which we don't need to check whether the selection is - // editable. - if (aInfo.mEditSubAction == EditSubAction::eComputeTextToOutput) { - return TextEditRules::WillDoAction(aInfo, aCancel, aHandled); - } - AutoSafeEditorData setData(*this, *mHTMLEditor); EditActionResult result = HTMLEditorRef().CanHandleHTMLEditSubAction(); @@ -786,6 +780,7 @@ nsresult HTMLEditRules::WillDoAction(EditSubActionInfo& aInfo, bool* aCancel, NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), "WillInsert() failed"); return NS_OK; } + case EditSubAction::eComputeTextToOutput: case EditSubAction::eCreateOrChangeDefinitionListItem: case EditSubAction::eCreateOrChangeList: case EditSubAction::eCreateOrRemoveBlock: @@ -825,6 +820,7 @@ nsresult HTMLEditRules::DidDoAction(EditSubActionInfo& aInfo, case EditSubAction::eInsertElement: case EditSubAction::eInsertQuotedText: return NS_OK; + case EditSubAction::eComputeTextToOutput: case EditSubAction::eCreateOrChangeDefinitionListItem: case EditSubAction::eCreateOrChangeList: case EditSubAction::eCreateOrRemoveBlock: diff --git a/editor/libeditor/TextEditRules.cpp b/editor/libeditor/TextEditRules.cpp index 6bbae2fa4d19..913a8eab6bd5 100644 --- a/editor/libeditor/TextEditRules.cpp +++ b/editor/libeditor/TextEditRules.cpp @@ -205,9 +205,6 @@ nsresult TextEditRules::WillDoAction(EditSubActionInfo& aInfo, bool* aCancel, case EditSubAction::eSetText: TextEditorRef().UndefineCaretBidiLevel(); return WillSetText(aCancel, aHandled, aInfo.inString, aInfo.maxLength); - case EditSubAction::eComputeTextToOutput: - return WillOutputText(aInfo.outputFormat, aInfo.outString, aInfo.flags, - aCancel, aHandled); case EditSubAction::eInsertQuotedText: { CANCEL_OPERATION_IF_READONLY_OR_DISABLED @@ -221,6 +218,7 @@ nsresult TextEditRules::WillDoAction(EditSubActionInfo& aInfo, bool* aCancel, "Failed to remove padding
element"); return rv; } + case EditSubAction::eComputeTextToOutput: case EditSubAction::eDeleteSelectedContent: case EditSubAction::eInsertElement: case EditSubAction::eInsertLineBreak: @@ -242,6 +240,7 @@ nsresult TextEditRules::DidDoAction(EditSubActionInfo& aInfo, } switch (aInfo.mEditSubAction) { + case EditSubAction::eComputeTextToOutput: case EditSubAction::eDeleteSelectedContent: case EditSubAction::eInsertElement: case EditSubAction::eInsertLineBreak: @@ -900,61 +899,35 @@ EditActionResult TextEditor::HandleDeleteSelectionInternal( return EditActionHandled(rv); } -nsresult TextEditRules::WillOutputText(const nsAString* aOutputFormat, - nsAString* aOutString, uint32_t aFlags, - bool* aCancel, bool* aHandled) { - MOZ_ASSERT(IsEditorDataAvailable()); - - // null selection ok - if (NS_WARN_IF(!aOutString) || NS_WARN_IF(!aOutputFormat) || - NS_WARN_IF(!aCancel) || NS_WARN_IF(!aHandled)) { - return NS_ERROR_NULL_POINTER; - } - - // initialize out param - *aCancel = false; - *aHandled = false; - - if (!aOutputFormat->LowerCaseEqualsLiteral("text/plain")) { - return NS_OK; - } +EditActionResult TextEditor::ComputeValueFromTextNodeAndPaddingBRElement( + nsAString& aValue) const { + MOZ_ASSERT(IsEditActionDataAvailable()); // If there is a padding
element, there's no content. So output empty // string. - if (TextEditorRef().HasPaddingBRElementForEmptyEditor()) { - aOutString->Truncate(); - *aHandled = true; - return NS_OK; - } - - // If it's necessary to check selection range or the editor wraps hard, - // we need some complicated handling. In such case, we need to use the - // expensive path. - // XXX Anything else what we cannot return plain text simply? - if (aFlags & nsIDocumentEncoder::OutputSelectionOnly || - aFlags & nsIDocumentEncoder::OutputWrap) { - return NS_OK; + if (HasPaddingBRElementForEmptyEditor()) { + aValue.Truncate(); + return EditActionHandled(); } // If it's neither nor