From 64343d86062da934c4b34ef7aead3ff98e30612c Mon Sep 17 00:00:00 2001 From: Boris Zbarsky Date: Thu, 9 Mar 2017 14:44:06 -0500 Subject: [PATCH] Bug 1343037 part 15. Implement nsTextEditorState::GetSelectionDirection. r=ehsan MozReview-Commit-ID: 1bLLYhjmlff --- dom/html/HTMLInputElement.cpp | 22 +--------------------- dom/html/HTMLTextAreaElement.cpp | 21 +-------------------- dom/html/nsTextEditorState.cpp | 26 ++++++++++++++++++++++++++ dom/html/nsTextEditorState.h | 6 ++++++ 4 files changed, 34 insertions(+), 41 deletions(-) diff --git a/dom/html/HTMLInputElement.cpp b/dom/html/HTMLInputElement.cpp index eb234c061bdf..cbfa2555d04a 100644 --- a/dom/html/HTMLInputElement.cpp +++ b/dom/html/HTMLInputElement.cpp @@ -6497,20 +6497,6 @@ HTMLInputElement::GetSelectionRange(int32_t* aSelectionStart, state->GetSelectionRange(aSelectionStart, aSelectionEnd, aRv); } -static void -DirectionToName(nsITextControlFrame::SelectionDirection dir, nsAString& aDirection) -{ - if (dir == nsITextControlFrame::eNone) { - aDirection.AssignLiteral("none"); - } else if (dir == nsITextControlFrame::eForward) { - aDirection.AssignLiteral("forward"); - } else if (dir == nsITextControlFrame::eBackward) { - aDirection.AssignLiteral("backward"); - } else { - NS_NOTREACHED("Invalid SelectionDirection value"); - } -} - void HTMLInputElement::GetSelectionDirection(nsAString& aDirection, ErrorResult& aRv) { @@ -6521,13 +6507,7 @@ HTMLInputElement::GetSelectionDirection(nsAString& aDirection, ErrorResult& aRv) nsTextEditorState* state = GetEditorState(); MOZ_ASSERT(state, "SupportsTextSelection came back true!"); - nsITextControlFrame::SelectionDirection dir = - state->GetSelectionDirection(aRv); - if (aRv.Failed()) { - return; - } - - DirectionToName(dir, aDirection); + state->GetSelectionDirectionString(aDirection, aRv); } void diff --git a/dom/html/HTMLTextAreaElement.cpp b/dom/html/HTMLTextAreaElement.cpp index c00d3507f63d..839596025b46 100644 --- a/dom/html/HTMLTextAreaElement.cpp +++ b/dom/html/HTMLTextAreaElement.cpp @@ -736,29 +736,10 @@ HTMLTextAreaElement::GetSelectionRange(int32_t* aSelectionStart, return mState.GetSelectionRange(aSelectionStart, aSelectionEnd, aRv); } -static void -DirectionToName(nsITextControlFrame::SelectionDirection dir, nsAString& aDirection) -{ - if (dir == nsITextControlFrame::eNone) { - aDirection.AssignLiteral("none"); - } else if (dir == nsITextControlFrame::eForward) { - aDirection.AssignLiteral("forward"); - } else if (dir == nsITextControlFrame::eBackward) { - aDirection.AssignLiteral("backward"); - } else { - NS_NOTREACHED("Invalid SelectionDirection value"); - } -} - void HTMLTextAreaElement::GetSelectionDirection(nsAString& aDirection, ErrorResult& aError) { - nsITextControlFrame::SelectionDirection dir = - mState.GetSelectionDirection(aError); - if (aError.Failed()) { - return; - } - DirectionToName(dir, aDirection); + mState.GetSelectionDirectionString(aDirection, aError); } void diff --git a/dom/html/nsTextEditorState.cpp b/dom/html/nsTextEditorState.cpp index 6bbd2e0c12bd..c28e9a3966bd 100644 --- a/dom/html/nsTextEditorState.cpp +++ b/dom/html/nsTextEditorState.cpp @@ -1762,6 +1762,32 @@ nsTextEditorState::SetSelectionEnd(const mozilla::dom::Nullable& aEnd, SetSelectionRange(start, end, dir, aRv); } +static void +DirectionToName(nsITextControlFrame::SelectionDirection dir, nsAString& aDirection) +{ + if (dir == nsITextControlFrame::eNone) { + NS_WARNING("We don't actually support this... how did we get it?"); + aDirection.AssignLiteral("none"); + } else if (dir == nsITextControlFrame::eForward) { + aDirection.AssignLiteral("forward"); + } else if (dir == nsITextControlFrame::eBackward) { + aDirection.AssignLiteral("backward"); + } else { + NS_NOTREACHED("Invalid SelectionDirection value"); + } +} + +void +nsTextEditorState::GetSelectionDirectionString(nsAString& aDirection, + ErrorResult& aRv) +{ + nsITextControlFrame::SelectionDirection dir = GetSelectionDirection(aRv); + if (aRv.Failed()) { + return; + } + DirectionToName(dir, aDirection); +} + static nsITextControlFrame::SelectionDirection DirectionStringToSelectionDirection(const nsAString& aDirection) { diff --git a/dom/html/nsTextEditorState.h b/dom/html/nsTextEditorState.h index 0dd36458ff16..12d2ace8be84 100644 --- a/dom/html/nsTextEditorState.h +++ b/dom/html/nsTextEditorState.h @@ -310,6 +310,12 @@ public: void SetSelectionEnd(const mozilla::dom::Nullable& aEnd, mozilla::ErrorResult& aRv); + // Get the selection direction as a string. This implements the + // https://html.spec.whatwg.org/multipage/forms.html#dom-textarea/input-selectiondirection + // getter. + void GetSelectionDirectionString(nsAString& aDirection, + mozilla::ErrorResult& aRv); + // Set the selection direction. This basically implements the // https://html.spec.whatwg.org/multipage/forms.html#dom-textarea/input-selectiondirection // setter.