/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; // Tests that the list of grids does refresh when an iframe containing a grid is removed // and re-created. // See bug 1378306 where this happened with jsfiddle. const TEST_URI = URL_ROOT + "doc_iframe_reloaded.html"; add_task(async function () { await addTab(TEST_URI); const { gridInspector, inspector } = await openLayoutView(); const { document: doc } = gridInspector; const { highlighters, store } = inspector; const gridList = doc.getElementById("grid-list"); const checkbox = gridList.children[0].querySelector("input"); info("Clicking on the first checkbox to highlight the grid"); const onHighlighterShown = highlighters.once("grid-highlighter-shown"); const onCheckboxChange = waitUntilState( store, state => state.grids.length == 1 && state.grids[0].highlighted ); checkbox.click(); await onHighlighterShown; await onCheckboxChange; ok(checkbox.checked, "The checkbox is checked"); is(gridList.childNodes.length, 1, "There's one grid in the list"); is(highlighters.gridHighlighters.size, 1, "There's a highlighter shown"); is( highlighters.state.grids.size, 1, "There's a saved grid state to be restored." ); info("Reload the iframe in content and expect the grid list to update"); const oldGrid = store.getState().grids[0]; const onNewListUnchecked = waitUntilState( store, state => state.grids.length == 1 && state.grids[0].actorID !== oldGrid.actorID && !state.grids[0].highlighted ); const onHighlighterHidden = highlighters.once("grid-highlighter-hidden"); SpecialPowers.spawn(gBrowser.selectedBrowser, [], () => content.wrappedJSObject.reloadIFrame() ); await onNewListUnchecked; await onHighlighterHidden; is(gridList.childNodes.length, 1, "There's still one grid in the list"); ok(!highlighters.state.grids.size, "No grids to be restored on page reload."); });