Files
firefox/layout/forms/test/test_select_reframe.html
Emilio Cobos Álvarez 0d72a453f1 Bug 1440506 - Do not destroy dropdowns on reframe. r=dholbert
We switch the open state storage to the element rather than the frame,
to be able to preserve it across reframes.

The code is loosely based on nsHideViewer in nsSubDocument.cpp, but it's
simpler because we don't need to do restoration shenanigans.

Differential Revision: https://phabricator.services.mozilla.com/D138689
2022-02-15 22:00:27 +00:00

53 lines
1.4 KiB
HTML

<!doctype html>
<meta charset="utf-8">
<title>Test for page up/down in collapsed select (bug 1488828)</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<script src="/tests/SimpleTest/EventUtils.js"></script>
<link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
<style>
.reframe {
display: flex;
}
</style>
<div id="container">
<select>
<option>ABC</option>
<option>DEF</option>
</select>
</div>
<script>
(async function() {
SimpleTest.waitForExplicitFinish();
const utils = SpecialPowers.DOMWindowUtils;
const select = document.querySelector("select");
await SimpleTest.promiseFocus(window);
ok(!select.openInParentProcess, "Should not be open")
select.focus();
synthesizeKey("VK_SPACE");
ok(SpecialPowers.wrap(select).openInParentProcess, "Should open");
const container = document.getElementById("container");
container.getBoundingClientRect(); // flush layout
const frameCountBeforeReframe = utils.framesConstructed;
container.classList.add("reframe");
container.getBoundingClientRect(); // flush layout
ok(utils.framesConstructed > frameCountBeforeReframe, "Should have reframed");
ok(SpecialPowers.wrap(select).openInParentProcess, "Should remain open");
select.remove();
container.getBoundingClientRect(); // flush layout
ok(!SpecialPowers.wrap(select).openInParentProcess, "Should close after removal");
SimpleTest.finish();
}());
</script>