Bug 1593362 - Bail out from nsFrame::HandleDrag if the corresponding nsFrameSelection has been already destroyed. r=masayuki

Differential Revision: https://phabricator.services.mozilla.com/D56109

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Hiroyuki Ikezoe 2019-12-06 05:43:03 +00:00
Родитель 0815480479
Коммит c93ea7f424
3 изменённых файлов: 41 добавлений и 0 удалений

Просмотреть файл

@ -4820,6 +4820,10 @@ NS_IMETHODIMP nsFrame::HandleDrag(nsPresContext* aPresContext,
"HandleDrag can only handle mouse event");
RefPtr<nsFrameSelection> frameselection = GetFrameSelection();
if (!frameselection) {
return NS_OK;
}
bool mouseDown = frameselection->GetDragState();
if (!mouseDown) {
return NS_OK;

Просмотреть файл

@ -104,6 +104,7 @@ support-files = file_bug1307853.html
support-files = file_bug1566783.html
[test_contained_plugin_transplant.html]
skip-if = os=='win'
[test_crash_on_mouse_move.html]
[test_dynamic_reflow_root_disallowal.html]
[test_flex_interrupt.html]
[test_image_selection.html]

Просмотреть файл

@ -0,0 +1,36 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>
This is a crash test to make sure handling mouse move events on an input
element doesn't crash even if the input type has been changed during the
events
</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<script src="/tests/SimpleTest/EventUtils.js"></script>
<link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<p id="display"></p>
<div id="content" style="display: none"></div>
<input style="width:1000px;height:300px"
onmousemove="this.setAttribute('type','text')"
id="formPassword" type="password" disabled/>
<pre id="test"></pre>
</body>
<script>
SimpleTest.waitForExplicitFinish();
window.onload = () => {
const position = formPassword.getBoundingClientRect();
for (let i = 0; i < 100; i++) {
synthesizeMouseAtPoint(position.x + i, position.y + i,
{ type: "mousemove" });
}
ok(true, "mouse movement on a input element whose type is going to be " +
"changed by the mouse movement doesn't crash");
SimpleTest.finish();
}
</script>
</html>