Bug 1347823 - Part 3: Add a test case. r?smaug
MozReview-Commit-ID: 9zwD0m1tknN
--- a/docshell/test/browser/browser.ini
+++ b/docshell/test/browser/browser.ini
@@ -44,16 +44,17 @@ support-files =
browser_timelineMarkers-frame-03.js
browser_timelineMarkers-frame-04.js
browser_timelineMarkers-frame-05.js
head.js
frame-head.js
[browser_bug1206879.js]
[browser_bug1309900_crossProcessHistoryNavigation.js]
+[browser_bug1347823.js]
[browser_bug134911.js]
[browser_bug234628-1.js]
[browser_bug234628-10.js]
[browser_bug234628-11.js]
[browser_bug234628-2.js]
[browser_bug234628-3.js]
[browser_bug234628-4.js]
[browser_bug234628-5.js]
new file mode 100644
--- /dev/null
+++ b/docshell/test/browser/browser_bug1347823.js
@@ -0,0 +1,67 @@
+/**
+ * Test that session history's expiration tracker would remove bfcache on
+ * expiration.
+ */
+
+// With bfcache not expired.
+add_task(async function testValidCache() {
+ // Make an unrealistic large timeout.
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.sessionhistory.contentViewerTimeout", 86400]]
+ });
+
+ await BrowserTestUtils.withNewTab(
+ {gBrowser, url: "data:text/html;charset=utf-8,page1"},
+ async function(browser) {
+ // Make a simple modification for bfcache testing.
+ await ContentTask.spawn(browser, null, () => {
+ content.document.body.textContent = "modified";
+ });
+
+ // Load a random page.
+ BrowserTestUtils.loadURI(browser, "data:text/html;charset=utf-8,page2");
+ await BrowserTestUtils.browserLoaded(browser);
+
+ // Go back and verify text content.
+ let awaitPageShow = BrowserTestUtils.waitForContentEvent(browser, "pageshow");
+ browser.goBack();
+ await awaitPageShow;
+ await ContentTask.spawn(browser, null, () => {
+ is(content.document.body.textContent, "modified");
+ });
+ });
+});
+
+// With bfcache expired.
+add_task(async function testExpiredCache() {
+ // Make bfcache timeout in 1 sec.
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.sessionhistory.contentViewerTimeout", 1]]
+ });
+
+ await BrowserTestUtils.withNewTab(
+ {gBrowser, url: "data:text/html;charset=utf-8,page1"},
+ async function(browser) {
+ // Make a simple modification for bfcache testing.
+ await ContentTask.spawn(browser, null, () => {
+ content.document.body.textContent = "modified";
+ });
+
+ // Load a random page.
+ BrowserTestUtils.loadURI(browser, "data:text/html;charset=utf-8,page2");
+ await BrowserTestUtils.browserLoaded(browser);
+
+ // Wait for 3 times of expiration timeout, hopefully it's evicted...
+ await new Promise(resolve => {
+ setTimeout(resolve, 3000);
+ });
+
+ // Go back and verify text content.
+ let awaitPageShow = BrowserTestUtils.waitForContentEvent(browser, "pageshow");
+ browser.goBack();
+ await awaitPageShow;
+ await ContentTask.spawn(browser, null, () => {
+ is(content.document.body.textContent, "page1");
+ });
+ });
+});