browser_bug1184989_prevent_scrolling_when_preferences_flipped.js (3644B)
1 const triggeringPrincipal_base64 = E10SUtils.SERIALIZED_SYSTEMPRINCIPAL; 2 3 add_setup(async function () { 4 await SpecialPowers.pushPrefEnv({ 5 set: [["test.wait300msAfterTabSwitch", true]], 6 }); 7 }); 8 9 add_task(async function () { 10 waitForExplicitFinish(); 11 12 const tabURL = 13 getRootDirectory(gTestPath) + 14 "browser_bug1184989_prevent_scrolling_when_preferences_flipped.xhtml"; 15 16 await BrowserTestUtils.withNewTab( 17 { gBrowser, url: tabURL }, 18 async function (browser) { 19 let doc = browser.contentDocument; 20 let container = doc.getElementById("container"); 21 22 // Test button 23 let button = doc.getElementById("button"); 24 button.focus(); 25 let initialScrollTop = container.scrollTop; 26 EventUtils.sendString(" "); 27 await checkPageScrolling(container, "button", initialScrollTop); 28 29 // Test checkbox 30 let checkbox = doc.getElementById("checkbox"); 31 checkbox.focus(); 32 initialScrollTop = container.scrollTop; 33 EventUtils.sendString(" "); 34 ok(checkbox.checked, "Checkbox is checked"); 35 await checkPageScrolling(container, "checkbox", initialScrollTop); 36 37 // Test radio 38 let radiogroup = doc.getElementById("radiogroup"); 39 radiogroup.focus(); 40 initialScrollTop = container.scrollTop; 41 EventUtils.sendString(" "); 42 await checkPageScrolling(container, "radio", initialScrollTop); 43 } 44 ); 45 46 await BrowserTestUtils.withNewTab( 47 { gBrowser, url: "about:preferences#search" }, 48 async function (browser) { 49 let doc = browser.contentDocument; 50 let container = doc.getElementsByClassName("main-content")[0]; 51 52 // Test search 53 let engineList = doc.getElementById("engineList"); 54 engineList.focus(); 55 let initialScrollTop = container.scrollTop; 56 EventUtils.sendString(" "); 57 is( 58 engineList.view.selection.currentIndex, 59 0, 60 "Search engineList is selected" 61 ); 62 EventUtils.sendString(" "); 63 await checkPageScrolling( 64 container, 65 "search engineList", 66 initialScrollTop 67 ); 68 } 69 ); 70 71 // Test session restore 72 const CRASH_URL = "about:mozilla"; 73 const CRASH_FAVICON = "chrome://branding/content/icon32.png"; 74 const CRASH_SHENTRY = { url: CRASH_URL }; 75 const CRASH_TAB = { entries: [CRASH_SHENTRY], image: CRASH_FAVICON }; 76 const CRASH_STATE = { windows: [{ tabs: [CRASH_TAB] }] }; 77 78 const TAB_URL = "about:sessionrestore"; 79 const TAB_FORMDATA = { url: TAB_URL, id: { sessionData: CRASH_STATE } }; 80 const TAB_SHENTRY = { url: TAB_URL, triggeringPrincipal_base64 }; 81 const TAB_STATE = { entries: [TAB_SHENTRY], formdata: TAB_FORMDATA }; 82 83 let tab = await BrowserTestUtils.openNewForegroundTab( 84 gBrowser, 85 "about:blank" 86 ); 87 88 // Fake a post-crash tab 89 SessionStore.setTabState(tab, JSON.stringify(TAB_STATE)); 90 91 await BrowserTestUtils.browserLoaded(tab.linkedBrowser); 92 let doc = tab.linkedBrowser.contentDocument; 93 94 // Make body scrollable 95 doc.body.style.height = doc.body.clientHeight + 100 + "px"; 96 97 let tabsToggle = doc.getElementById("tabsToggle"); 98 tabsToggle.focus(); 99 let initialScrollTop = doc.documentElement.scrollTop; 100 EventUtils.sendString(" "); 101 await checkPageScrolling( 102 doc.documentElement, 103 "session restore", 104 initialScrollTop 105 ); 106 107 gBrowser.removeCurrentTab(); 108 finish(); 109 }); 110 111 function checkPageScrolling(container, type, initialScrollTop = 0) { 112 return new Promise(resolve => { 113 setTimeout(() => { 114 is( 115 container.scrollTop, 116 initialScrollTop, 117 "Page should not scroll when " + type + " flipped" 118 ); 119 resolve(); 120 }, 0); 121 }); 122 }