diff --git a/content/html/content/src/HTMLInputElement.cpp b/content/html/content/src/HTMLInputElement.cpp
index 9fe0d3c21c57..ae788c6bbd6b 100644
--- a/content/html/content/src/HTMLInputElement.cpp
+++ b/content/html/content/src/HTMLInputElement.cpp
@@ -4523,12 +4523,10 @@ 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();
}
-
- nsContentUtils::DispatchTrustedEvent(OwnerDoc(),
- static_cast(this),
- NS_LITERAL_STRING("select"), true,
- false);
}
}
}
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 8ba01587f518..39d83da225c5 100644
--- a/content/html/content/test/forms/test_set_range_text.html
+++ b/content/html/content/test/forms/test_set_range_text.html
@@ -61,7 +61,8 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=850364
}
ok(opThrows, msg + " should throw NotSupportedError");
}
-
+
+ var numOfSelectCalls = 0, expectedNumOfSelectCalls = 0;
//Supported types should not throw
for (i = 0; i < SupportedTypes.length; ++i) {
opThrows = false;
@@ -73,14 +74,17 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=850364
} catch (ex) {
opThrows = true;
}
- is(opThrows, false, msg + " should not throw NotSupportedError");
+ is(opThrows, false, msg + " should not throw NotSupportedError");
elem.addEventListener("select", function (aEvent) {
- ok(true, "select event should be fired for "+ msg);
+ ok(true, "select event should be fired for " + aEvent.target.id);
+ if (++numOfSelectCalls == expectedNumOfSelectCalls) {
+ SimpleTest.finish();
+ }
}, false);
elem.addEventListener("input", function (aEvent) {
- ok(false, "input event should NOT be fired for " + msg);
+ ok(false, "input event should NOT be fired for " + aEvent.target.id);
}, false);
//test setRange(replacement)
@@ -91,7 +95,8 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=850364
is(elem.selectionStart, 1, msg + ".selectionStart == 1");
is(elem.selectionEnd, 4, msg + ".selectionEnd == 4");
elem.setRangeText("mnk");
- is(elem.value, "0mnk6789ABCDEF", msg + ".value == \"0mnk6789ABCDEF\"");
+ is(elem.value, "0mnk6789ABCDEF", msg + ".value == \"0mnk6789ABCDEF\"");
+ expectedNumOfSelectCalls += 3;
//test SetRange(replacement, start, end, mode) with start > end
try {
@@ -99,43 +104,50 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=850364
} catch (ex) {
opThrows = (ex.name == "IndexSizeError" && ex.code == DOMException.INDEX_SIZE_ERR);
}
- is(opThrows, true, msg + " should throw IndexSizeError");
+ is(opThrows, true, msg + " should throw IndexSizeError");
+ expectedNumOfSelectCalls += 1;
//test SelectionMode 'select'
elem.value = "0123456789ABCDEF";
elem.setRangeText("xyz", 4, 9, "select");
is(elem.value, "0123xyz9ABCDEF", msg + ".value == \"0123xyz9ABCDEF\"");
is(elem.selectionStart, 4, msg + ".selectionStart == 4, with \"select\"");
- is(elem.selectionEnd, 7, msg + ".selectionEnd == 7, with \"select\"");
+ is(elem.selectionEnd, 7, msg + ".selectionEnd == 7, with \"select\"");
+ expectedNumOfSelectCalls += 1;
elem.setRangeText("pqm", 6, 25, "select");
is(elem.value, "0123xypqm", msg + ".value == \"0123xypqm\"");
is(elem.selectionStart, 6, msg + ".selectionStart == 6, with \"select\"");
- is(elem.selectionEnd, 9, msg + ".selectionEnd == 9, with \"select\"");
+ is(elem.selectionEnd, 9, msg + ".selectionEnd == 9, with \"select\"");
+ expectedNumOfSelectCalls += 1;
//test SelectionMode 'start'
elem.value = "0123456789ABCDEF";
elem.setRangeText("xyz", 4, 9, "start");
is(elem.value, "0123xyz9ABCDEF", msg + ".value == \"0123xyz9ABCDEF\"");
is(elem.selectionStart, 4, msg + ".selectionStart == 4, with \"start\"");
- is(elem.selectionEnd, 4, msg + ".selectionEnd == 4, with \"start\"");
+ is(elem.selectionEnd, 4, msg + ".selectionEnd == 4, with \"start\"");
+ expectedNumOfSelectCalls += 1;
elem.setRangeText("pqm", 6, 25, "start");
is(elem.value, "0123xypqm", msg + ".value == \"0123xypqm\"");
is(elem.selectionStart, 6, msg + ".selectionStart == 6, with \"start\"");
- is(elem.selectionEnd, 6, msg + ".selectionEnd == 6, with \"start\"");
+ is(elem.selectionEnd, 6, msg + ".selectionEnd == 6, with \"start\"");
+ expectedNumOfSelectCalls += 1;
//test SelectionMode 'end'
elem.value = "0123456789ABCDEF";
elem.setRangeText("xyz", 4, 9, "end");
is(elem.value, "0123xyz9ABCDEF", msg + ".value == \"0123xyz9ABCDEF\"");
is(elem.selectionStart, 7, msg + ".selectionStart == 7, with \"end\"");
- is(elem.selectionEnd, 7, msg + ".selectionEnd == 7, with \"end\"");
+ is(elem.selectionEnd, 7, msg + ".selectionEnd == 7, with \"end\"");
+ expectedNumOfSelectCalls += 1;
elem.setRangeText("pqm", 6, 25, "end");
is(elem.value, "0123xypqm", msg + ".value == \"0123xypqm\"");
is(elem.selectionStart, 9, msg + ".selectionStart == 9, with \"end\"");
- is(elem.selectionEnd, 9, msg + ".selectionEnd == 9, with \"end\"");
+ is(elem.selectionEnd, 9, msg + ".selectionEnd == 9, with \"end\"");
+ expectedNumOfSelectCalls += 1;
//test SelectionMode 'preserve' (default)
@@ -145,7 +157,8 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=850364
elem.setRangeText("Z", 1, 2, "preserve");
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\"");
+ is(elem.selectionEnd, 9, msg + ".selectionEnd == 9, with \"preserve\"");
+ expectedNumOfSelectCalls += 2;
//subcase: selection{Start|End} < end
elem.value = "0123456789";
@@ -153,7 +166,8 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=850364
elem.setRangeText("QRST", 2, 9, "preserve");
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\"");
+ is(elem.selectionEnd, 6, msg + ".selectionEnd == 6, with \"preserve\"");
+ expectedNumOfSelectCalls += 2;
//subcase: selectionStart > end, selectionEnd < end
elem.value = "0123456789";
@@ -161,7 +175,8 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=850364
elem.setRangeText("QRST", 1, 5);
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\"");
+ is(elem.selectionEnd, 5, msg + ".selectionEnd == 5, with \"default\"");
+ expectedNumOfSelectCalls += 2;
//subcase: selectionStart < end, selectionEnd > end
elem.value = "0123456789";
@@ -169,10 +184,9 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=850364
elem.setRangeText("QRST", 2, 6);
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\"");
+ is(elem.selectionEnd, 9, msg + ".selectionEnd == 9, with \"default\"");
+ expectedNumOfSelectCalls += 2;
}
-
- SimpleTest.finish();
}
addLoadEvent(TestInputs);