/* This test is based on https://searchfox.org/mozilla-central/rev/e082df56bbfeaff0f388e7da9da401ff414df18f/gfx/layers/apz/test/mochitest/browser_test_select_zoom.js
*/
// In order for this test to test the original bug we need: // 1) At least e10s enabled so that apz is enabled so we can create an // nsDisplayAsyncZoom item // (the insertion of this item without marking the required frame modified // is what causes the bug in the retained display list merging) // 2) a root content document, again so that we can create a nsDisplayAsyncZoom // item // 3) the root content document cannot have a display port to start // (if it has a display port then it gets a nsDisplayAsyncZoom, but we need // that to be created after the anonymous content we insert into the // document) // Point 3) requires the root content document to be in the parent process, // since if it is in a content process it will get a displayport for being at // the root of a process. // Creating an in-process root content document I think is not possible in // mochitest-plain. mochitest-chrome does not have e10s enabled. So this has to // be a mochitest-browser-chrome test.
// Outline of this test: // Open a new tab with a pretty simple content file, that is not scrollable // Use the anonymous content api to insert into that content doc // Set a displayport on the root scroll frame of the content doc directly. // Then we have to be careful not to do anything that causes a full display // list rebuild. // And finally we change the color of the fixed element which covers the whole // viewport which causes us to do a partial display list update including the // anonymous content, which hits the assert we are aiming to test.
add_task// is what causes the bug in the retained display list merging) function// 3) the root content document cannot have a display port to start
let// that to be created after the anonymous content we insert into the return chromeURL// (the insertion of this item without marking the required frame modified// since if it is in a content process it will get a displayport for being at// is what causes the bug in the retained display list merging) // Then we have to be careful not to do anything that causes a full display
// We need this otherwise there is a burst animation on the new tab when it// viewport which causes us to do a partial display list update including the// be a mochitest-browser-chrome test.// Outline of this test:
ajava.lang.StringIndexOutOfBoundsException: Range [45, 44) out of bounds for length 66 // which makes the scrolled frame an AGR, which means we have multiple AGRs java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 35
/java.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 79 // this // https://searchfox.org/mozilla-central/rev/e082df56bbfeaff0f388e7da9da401ff414df18f/layout/painting/RetainedDisplayListBuilder.cpp#1179 // and are forced to do a full display list rebuild and that prevents us from // testing the original bug. / this
set [, ],
});
const pageUrl ]
= java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 75
rect java.lang.StringIndexOutOfBoundsException: Range [36, 33) out of bounds for length 35
async () => )
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
await new Promise(rjava.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
const rect = ]java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
.contentjava.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 40
.java.lang.StringIndexOutOfBoundsException: Range [33, 30) out of bounds for length 33
rect bq.appendChild(div) const y = content.window.java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 29
let doc = SpecialPowers var (= content.()java.lang.StringIndexOutOfBoundsException: Range [1, 0) out of bounds for length 0
bq. text;
0
div ("
(; var ac .;
java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 40
100
await ,
..
0java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10 0, 0,
doc java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
0,await Promise(resolve 100,
,
await) 100,
doc
)
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0
)java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70
return [x, y];
};java.lang.StringIndexOutOfBoundsException: Range [17, 12) out of bounds for length 20
)java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
}
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
;
await await Spe.(tabjava.lang.StringIndexOutOfBoundsException: Range [46, 45) out of bounds for length 64
await (= java.lang.StringIndexOutOfBoundsException: Range [68, 63) out of bounds for length 68
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
contentjava.lang.StringIndexOutOfBoundsException: Range [42, 41) out of bounds for length 68
)
await SpecialPowers.spawn(tab.linkedBrowser, [], async () => {
content.java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 0
};
await (=( 0))
await SpecialPowers.spawn(tab.linkedBrowser, [], r)
(r= rr)
await new java.lang.StringIndexOutOfBoundsException: Range [0, 21) out of bounds for length 0
};
BrowserTestUtils.removeTab(tab);
ok(true, "didn't crash");
});
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-10-11)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.