From 53e9b7d79fd92b4bb2dd456b424a9e0885431923 Mon Sep 17 00:00:00 2001 From: Ehsan Akhgari Date: Mon, 28 Oct 2013 13:22:38 -0400 Subject: [PATCH] Bug 924069 - Dispatch the "select" event only for HTML{Input,TextArea}Element.setRangeText; r=smaug --- content/html/content/src/HTMLInputElement.cpp | 8 +++++--- content/html/content/src/HTMLTextAreaElement.cpp | 8 +++++--- .../html/content/test/forms/test_set_range_text.html | 12 +++++++----- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/content/html/content/src/HTMLInputElement.cpp b/content/html/content/src/HTMLInputElement.cpp index d8da381dc3a1..c1033db7152b 100644 --- a/content/html/content/src/HTMLInputElement.cpp +++ b/content/html/content/src/HTMLInputElement.cpp @@ -4614,9 +4614,6 @@ HTMLInputElement::SetSelectionRange(int32_t aSelectionStart, aRv = textControlFrame->SetSelectionRange(aSelectionStart, aSelectionEnd, dir); if (!aRv.Failed()) { aRv = textControlFrame->ScrollSelectionIntoView(); - nsRefPtr event = - new nsAsyncDOMEvent(this, NS_LITERAL_STRING("select"), true, false); - event->PostDOMEvent(); } } } @@ -4740,6 +4737,11 @@ HTMLInputElement::SetRangeText(const nsAString& aReplacement, uint32_t aStart, Optional direction; SetSelectionRange(aSelectionStart, aSelectionEnd, direction, aRv); + if (!aRv.Failed()) { + nsRefPtr event = + new nsAsyncDOMEvent(this, NS_LITERAL_STRING("select"), true, false); + event->PostDOMEvent(); + } } int32_t diff --git a/content/html/content/src/HTMLTextAreaElement.cpp b/content/html/content/src/HTMLTextAreaElement.cpp index eef6d6ace684..26188506a5a6 100644 --- a/content/html/content/src/HTMLTextAreaElement.cpp +++ b/content/html/content/src/HTMLTextAreaElement.cpp @@ -888,9 +888,6 @@ HTMLTextAreaElement::SetSelectionRange(uint32_t aSelectionStart, rv = textControlFrame->SetSelectionRange(aSelectionStart, aSelectionEnd, dir); if (NS_SUCCEEDED(rv)) { rv = textControlFrame->ScrollSelectionIntoView(); - nsRefPtr event = - new nsAsyncDOMEvent(this, NS_LITERAL_STRING("select"), true, false); - event->PostDOMEvent(); } } } @@ -995,6 +992,11 @@ HTMLTextAreaElement::SetRangeText(const nsAString& aReplacement, Optional direction; SetSelectionRange(aSelectionStart, aSelectionEnd, direction, aRv); + if (!aRv.Failed()) { + nsRefPtr event = + new nsAsyncDOMEvent(this, NS_LITERAL_STRING("select"), true, false); + event->PostDOMEvent(); + } } nsresult diff --git a/content/html/content/test/forms/test_set_range_text.html b/content/html/content/test/forms/test_set_range_text.html index eb136d918352..9f37f0e79813 100644 --- a/content/html/content/test/forms/test_set_range_text.html +++ b/content/html/content/test/forms/test_set_range_text.html @@ -81,6 +81,8 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=850364 ok(true, "select event should be fired for " + aEvent.target.id); if (++numOfSelectCalls == expectedNumOfSelectCalls) { SimpleTest.finish(); + } else if (numOfSelectCalls > expectedNumOfSelectCalls) { + ok(false, "Too many select events were fired"); } }, false); @@ -97,7 +99,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=850364 is(elem.selectionEnd, 4, msg + ".selectionEnd == 4"); elem.setRangeText("mnk"); is(elem.value, "0mnk6789ABCDEF", msg + ".value == \"0mnk6789ABCDEF\""); - expectedNumOfSelectCalls += 3; + expectedNumOfSelectCalls += 2; //test SetRange(replacement, start, end, mode) with start > end try { @@ -159,7 +161,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=850364 is(elem.value, "0Z23456789", msg + ".value == \"0Z23456789\""); is(elem.selectionStart, 6, msg + ".selectionStart == 6, with \"preserve\""); is(elem.selectionEnd, 9, msg + ".selectionEnd == 9, with \"preserve\""); - expectedNumOfSelectCalls += 2; + expectedNumOfSelectCalls += 1; //subcase: selection{Start|End} < end elem.value = "0123456789"; @@ -168,7 +170,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=850364 is(elem.value, "01QRST9", msg + ".value == \"01QRST9\""); is(elem.selectionStart, 2, msg + ".selectionStart == 2, with \"preserve\""); is(elem.selectionEnd, 6, msg + ".selectionEnd == 6, with \"preserve\""); - expectedNumOfSelectCalls += 2; + expectedNumOfSelectCalls += 1; //subcase: selectionStart > end, selectionEnd < end elem.value = "0123456789"; @@ -177,7 +179,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=850364 is(elem.value, "0QRST56789", msg + ".value == \"0QRST56789\""); is(elem.selectionStart, 1, msg + ".selectionStart == 1, with \"default\""); is(elem.selectionEnd, 5, msg + ".selectionEnd == 5, with \"default\""); - expectedNumOfSelectCalls += 2; + expectedNumOfSelectCalls += 1; //subcase: selectionStart < end, selectionEnd > end elem.value = "0123456789"; @@ -186,7 +188,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=850364 is(elem.value, "01QRST6789", msg + ".value == \"01QRST6789\""); is(elem.selectionStart, 2, msg + ".selectionStart == 2, with \"default\""); is(elem.selectionEnd, 9, msg + ".selectionEnd == 9, with \"default\""); - expectedNumOfSelectCalls += 2; + expectedNumOfSelectCalls += 1; } }