browser_bug1347823.js (2673B)
1 /** 2 * Test that session history's expiration tracker would remove bfcache on 3 * expiration. 4 */ 5 6 // With bfcache not expired. 7 add_task(async function testValidCache() { 8 // Make an unrealistic large timeout. 9 await SpecialPowers.pushPrefEnv({ 10 set: [ 11 ["browser.sessionhistory.contentViewerTimeout", 86400], 12 // If Fission is disabled, the pref is no-op. 13 ["fission.bfcacheInParent", true], 14 ], 15 }); 16 17 await BrowserTestUtils.withNewTab( 18 { gBrowser, url: "data:text/html;charset=utf-8,pageA1" }, 19 async function (browser) { 20 // Make a simple modification for bfcache testing. 21 await SpecialPowers.spawn(browser, [], () => { 22 content.document.body.textContent = "modified"; 23 }); 24 25 // Load a random page. 26 BrowserTestUtils.startLoadingURIString( 27 browser, 28 "data:text/html;charset=utf-8,pageA2" 29 ); 30 await BrowserTestUtils.browserLoaded(browser); 31 32 // Go back and verify text content. 33 let awaitPageShow = BrowserTestUtils.waitForContentEvent( 34 browser, 35 "pageshow" 36 ); 37 browser.goBack(); 38 await awaitPageShow; 39 await SpecialPowers.spawn(browser, [], () => { 40 is(content.document.body.textContent, "modified"); 41 }); 42 } 43 ); 44 }); 45 46 // With bfcache expired. 47 add_task(async function testExpiredCache() { 48 // Make bfcache timeout in 1 sec. 49 await SpecialPowers.pushPrefEnv({ 50 set: [ 51 ["browser.sessionhistory.contentViewerTimeout", 1], 52 // If Fission is disabled, the pref is no-op. 53 ["fission.bfcacheInParent", true], 54 ], 55 }); 56 57 await BrowserTestUtils.withNewTab( 58 { gBrowser, url: "data:text/html;charset=utf-8,pageB1" }, 59 async function (browser) { 60 // Make a simple modification for bfcache testing. 61 await SpecialPowers.spawn(browser, [], () => { 62 content.document.body.textContent = "modified"; 63 }); 64 65 // Load a random page. 66 BrowserTestUtils.startLoadingURIString( 67 browser, 68 "data:text/html;charset=utf-8,pageB2" 69 ); 70 await BrowserTestUtils.browserLoaded(browser); 71 72 // Wait for 3 times of expiration timeout, hopefully it's evicted... 73 await SpecialPowers.spawn(browser, [], () => { 74 return new Promise(resolve => { 75 content.setTimeout(resolve, 5000); 76 }); 77 }); 78 79 // Go back and verify text content. 80 let awaitPageShow = BrowserTestUtils.waitForContentEvent( 81 browser, 82 "pageshow" 83 ); 84 browser.goBack(); 85 await awaitPageShow; 86 await SpecialPowers.spawn(browser, [], () => { 87 is(content.document.body.textContent, "pageB1"); 88 }); 89 } 90 ); 91 });