forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			65 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| function test() {
 | |
|   /** Test for Bug 447951 **/
 | |
| 
 | |
|   waitForExplicitFinish();
 | |
|   const baseURL = "http://mochi.test:8888/browser/" +
 | |
|     "browser/components/sessionstore/test/browser_447951_sample.html#";
 | |
| 
 | |
|   // Make sure the functionality added in bug 943339 doesn't affect the results
 | |
|   Services.prefs.setIntPref("browser.sessionstore.max_serialize_back", -1);
 | |
|   Services.prefs.setIntPref("browser.sessionstore.max_serialize_forward", -1);
 | |
|   registerCleanupFunction(function() {
 | |
|     Services.prefs.clearUserPref("browser.sessionstore.max_serialize_back");
 | |
|     Services.prefs.clearUserPref("browser.sessionstore.max_serialize_forward");
 | |
|   });
 | |
| 
 | |
|   let tab = BrowserTestUtils.addTab(gBrowser);
 | |
|   promiseBrowserLoaded(tab.linkedBrowser).then(() => {
 | |
|     let tabState = { entries: [] };
 | |
|     let max_entries = Services.prefs.getIntPref("browser.sessionhistory.max_entries");
 | |
|     for (let i = 0; i < max_entries; i++)
 | |
|       tabState.entries.push({ url: baseURL + i, triggeringPrincipal_base64});
 | |
| 
 | |
|     promiseTabState(tab, tabState).then(() => {
 | |
|       return TabStateFlusher.flush(tab.linkedBrowser);
 | |
|     }).then(() => {
 | |
|       tabState = JSON.parse(ss.getTabState(tab));
 | |
|       is(tabState.entries.length, max_entries, "session history filled to the limit");
 | |
|       is(tabState.entries[0].url, baseURL + 0, "... but not more");
 | |
| 
 | |
|       // visit yet another anchor (appending it to session history)
 | |
|       ContentTask.spawn(tab.linkedBrowser, null, function() {
 | |
|         content.window.document.querySelector("a").click();
 | |
|       }).then(flushAndCheck);
 | |
| 
 | |
|       function flushAndCheck() {
 | |
|         TabStateFlusher.flush(tab.linkedBrowser).then(check);
 | |
|       }
 | |
| 
 | |
|       function check() {
 | |
|         tabState = JSON.parse(ss.getTabState(tab));
 | |
|         if (tab.linkedBrowser.currentURI.spec != baseURL + "end") {
 | |
|           // It may take a few passes through the event loop before we
 | |
|           // get the right URL.
 | |
|           executeSoon(flushAndCheck);
 | |
|           return;
 | |
|         }
 | |
| 
 | |
|         is(tab.linkedBrowser.currentURI.spec, baseURL + "end",
 | |
|            "the new anchor was loaded");
 | |
|         is(tabState.entries[tabState.entries.length - 1].url, baseURL + "end",
 | |
|            "... and ignored");
 | |
|         is(tabState.entries[0].url, baseURL + 1,
 | |
|            "... and the first item was removed");
 | |
| 
 | |
|         // clean up
 | |
|         gBrowser.removeTab(tab);
 | |
|         finish();
 | |
|       }
 | |
|     });
 | |
|   });
 | |
| }
 | 
