diff options
Diffstat (limited to 'mobile/android/tests/browser/chrome/test_session_zombification.html')
-rw-r--r-- | mobile/android/tests/browser/chrome/test_session_zombification.html | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/mobile/android/tests/browser/chrome/test_session_zombification.html b/mobile/android/tests/browser/chrome/test_session_zombification.html new file mode 100644 index 000000000..eba255ff6 --- /dev/null +++ b/mobile/android/tests/browser/chrome/test_session_zombification.html @@ -0,0 +1,185 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1044556 +--> +<head> + <meta charset="utf-8"> + <title>Test for Bug 1044556</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SpawnTask.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://global/skin"/> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> + <script type="application/javascript" src="head.js"></script> + <script type="application/javascript"> + + /** Test for Bug 1044556 **/ + + "use strict"; + + const { classes: Cc, interfaces: Ci, utils: Cu } = Components; + + Cu.import("resource://gre/modules/XPCOMUtils.jsm"); + Cu.import("resource://gre/modules/Services.jsm"); + Cu.import("resource://gre/modules/Messaging.jsm"); + Cu.import("resource://gre/modules/Task.jsm"); + + // Import the MemoryObserver + Cu.import("resource://gre/modules/PrivateBrowsingUtils.jsm"); + XPCOMUtils.defineLazyGetter(this, "MemoryObserver", function() { + let sandbox = {}; + Services.scriptloader.loadSubScript("chrome://browser/content/MemoryObserver.js", sandbox); + return sandbox["MemoryObserver"]; + }); + + // The chrome window + let chromeWin; + + // Track the tabs where the tests are happening + let tabBlank; + let tabTest; + + const url1 = "data:text/html;charset=utf-8,It%20was%20a%20dark%20and%20stormy%20night."; + const url2 = "data:text/html;charset=utf-8,Suddenly%2C%20a%20tab%20was%20zombified."; + + add_task(function* test_sessionStoreZombify() { + chromeWin = Services.wm.getMostRecentWindow("navigator:browser"); + let BrowserApp = chromeWin.BrowserApp; + + SimpleTest.registerCleanupFunction(function() { + BrowserApp.closeTab(tabBlank); + BrowserApp.closeTab(tabTest); + }); + + // Add a new tab with some content + tabTest = BrowserApp.addTab(url1 , { selected: true, parentId: BrowserApp.selectedTab.id }); + yield promiseBrowserEvent(tabTest.browser, "DOMContentLoaded"); + + // Add a new tab with a blank page + tabBlank = BrowserApp.addTab("about:blank", { selected: true, parentId: BrowserApp.selectedTab.id }); + is(BrowserApp.selectedTab, tabBlank, "Test tab is in background."); + + // Zombify the backgrounded test tab + MemoryObserver.zombify(tabTest); + + // Check that the test tab is actually zombified + ok(tabTest.browser.__SS_restore, "Test tab is set for delay loading."); + + // Switch back to the test tab and wait for it to reload + BrowserApp.selectTab(tabTest); + yield promiseBrowserEvent(tabTest.browser, "DOMContentLoaded"); + + // Check that the test tab has loaded the correct url + is(tabTest.browser.currentURI.spec, url1, "Test tab is showing the first URL."); + + // Navigate to some other content + BrowserApp.loadURI(url2, tabTest.browser); + yield promiseBrowserEvent(tabTest.browser, "DOMContentLoaded"); + is(tabTest.browser.currentURI.spec, url2, "Test tab is showing the second URL."); + + // Switch to the other tab + BrowserApp.selectTab(tabBlank); + yield promiseTabEvent(BrowserApp.deck, "TabSelect"); + is(BrowserApp.selectedTab, tabBlank, "Test tab is in background."); + + // Zombify the backgrounded test tab again + MemoryObserver.zombify(tabTest); + + // Check that the test tab is actually zombified + ok(tabTest.browser.__SS_restore, "Test tab is set for delay loading."); + + // Switch back to the test tab and wait for it to reload + BrowserApp.selectTab(tabTest); + yield promiseBrowserEvent(tabTest.browser, "DOMContentLoaded"); + + // Check that the test tab has loaded the correct url + is(tabTest.browser.currentURI.spec, url2, "Test tab is showing the second URL."); + }); + + add_task(function* test_sessionStoreKeepAsZombie() { + chromeWin = Services.wm.getMostRecentWindow("navigator:browser"); + let BrowserApp = chromeWin.BrowserApp; + let observerService = Services.obs; + + SimpleTest.registerCleanupFunction(function() { + BrowserApp.closeTab(tabBlank); + BrowserApp.closeTab(tabTest); + }); + + // Add a new tab with some content + tabTest = BrowserApp.addTab(url1 , { selected: true, parentId: BrowserApp.selectedTab.id }); + yield promiseBrowserEvent(tabTest.browser, "DOMContentLoaded"); + + // Add a new tab with a blank page + tabBlank = BrowserApp.addTab("about:blank", { selected: true, parentId: BrowserApp.selectedTab.id }); + yield promiseTabEvent(BrowserApp.deck, "TabSelect"); + is(BrowserApp.selectedTab, tabBlank, "Test tab is in background."); + + // Zombify the backgrounded test tab + MemoryObserver.zombify(tabTest); + + // Check that the test tab is actually zombified + ok(tabTest.browser.__SS_restore, "Test tab is set for delay loading."); + is(tabTest.browser.currentURI.spec, "about:blank", "Test tab is zombified."); + + // Tell the session store that it shouldn't restore that tab on selecting + observerService.notifyObservers(null, "Tab:KeepZombified", tabTest.id); + + // Switch back to the test tab and check that it remains zombified + BrowserApp.selectTab(tabTest); + yield promiseTabEvent(BrowserApp.deck, "TabSelect"); + is(BrowserApp.selectedTab, tabTest, "Test tab is selected."); + ok(tabTest.browser.__SS_restore, "Test tab is still set for delay loading."); + + // Switch to the other tab and back again + BrowserApp.selectTab(tabBlank); + yield promiseTabEvent(BrowserApp.deck, "TabSelect"); + is(BrowserApp.selectedTab, tabBlank, "Test tab is in background."); + BrowserApp.selectTab(tabTest); + + // "Tab:KeepZombified should be good for one TabSelect only + yield promiseBrowserEvent(tabTest.browser, "DOMContentLoaded"); + is(BrowserApp.selectedTab, tabTest, "Test tab is selected."); + + // Check that the test tab is no longer a zombie and has loaded the correct url + ok(!tabTest.browser.__SS_restore, "Test tab is no longer set for delay loading."); + is(tabTest.browser.currentURI.spec, url1, "Test tab is showing the test URL."); + + // Zombify the test tab again + BrowserApp.selectTab(tabBlank); + yield promiseTabEvent(BrowserApp.deck, "TabSelect"); + is(BrowserApp.selectedTab, tabBlank, "Test tab is in background."); + MemoryObserver.zombify(tabTest); + ok(tabTest.browser.__SS_restore, "Test tab is set for delay loading."); + is(tabTest.browser.currentURI.spec, "about:blank", "Test tab is zombified."); + + // Tell the session store that it shouldn't restore that tab on selecting + observerService.notifyObservers(null, "Tab:KeepZombified", tabTest.id); + + // Switch back to the test tab and check that it remains zombified + BrowserApp.selectTab(tabTest); + yield promiseTabEvent(BrowserApp.deck, "TabSelect"); + is(BrowserApp.selectedTab, tabTest, "Test tab is selected."); + ok(tabTest.browser.__SS_restore, "Test tab is still set for delay loading."); + + // Fake an "application-foreground" notification + observerService.notifyObservers(null, "application-foreground", null); + + // The test tab should now start reloading + yield promiseBrowserEvent(tabTest.browser, "DOMContentLoaded"); + ok(!tabTest.browser.__SS_restore, "Test tab is no longer set for delay loading."); + is(tabTest.browser.currentURI.spec, url1, "Test tab is showing the test URL."); + }); + + </script> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1044556">Mozilla Bug 1044556</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +</pre> +</body> +</html> |