mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 19:04:45 +00:00
a29afe9b5a
We still reframe for additions / removals of the attribute because that makes us create the placeholder <div>. We could avoid it if we created it independently of the presence of the attribute but that seems like it could regress perf for the case where there's no placeholder attribute, which is probably common enough. Differential Revision: https://phabricator.services.mozilla.com/D88724
49 lines
1.5 KiB
HTML
49 lines
1.5 KiB
HTML
<!doctype html>
|
|
<meta charset="utf-8">
|
|
<title>Test for bug 1658302: We don't reframe for placeholder attribute value changes.</title>
|
|
<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
|
|
<script src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<input id="input">
|
|
<textarea id="textarea"></textarea>
|
|
<script>
|
|
SimpleTest.waitForExplicitFinish();
|
|
const utils = SpecialPowers.DOMWindowUtils;
|
|
|
|
function expectReframe(shouldHaveReframed, callback) {
|
|
document.documentElement.offsetTop;
|
|
const previousConstructCount = utils.framesConstructed;
|
|
const previousReflowCount = utils.framesReflowed;
|
|
|
|
callback();
|
|
|
|
document.documentElement.offsetTop;
|
|
isnot(previousReflowCount, utils.framesReflowed, "We should have reflowed");
|
|
(shouldHaveReframed ? isnot : is)(previousConstructCount,
|
|
utils.framesConstructed,
|
|
`We should ${shouldHaveReframed ? "" : "not"} have reframed`);
|
|
}
|
|
|
|
for (const control of document.querySelectorAll("input, textarea")) {
|
|
// Creating the placeholder attribute reframes right now.
|
|
//
|
|
// TODO: Could be avoided with some more work.
|
|
expectReframe(true, () => {
|
|
control.placeholder = "foo";
|
|
});
|
|
|
|
// Incrementally changing it should not reframe, just reflow.
|
|
expectReframe(false, () => {
|
|
control.placeholder = "bar";
|
|
});
|
|
|
|
// Removing the placeholder attribute reframes right now.
|
|
//
|
|
// TODO: Could maybe be avoided with some more work.
|
|
expectReframe(true, () => {
|
|
control.removeAttribute("placeholder");
|
|
});
|
|
}
|
|
|
|
SimpleTest.finish();
|
|
</script>
|