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