forked from mirrors/gecko-dev
		
	 94e3b0bd8d
			
		
	
	
		94e3b0bd8d
		
	
	
	
	
		
			
			This is generally pretty straightforward, and rewrites nearly all calls. It skips the ones that it can detect using frame script globals like `sendAsyncMessage`, though. Differential Revision: https://phabricator.services.mozilla.com/D53740 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			84 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
	
		
			2.8 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)
 | |
|         SpecialPowers.spawn(tab.linkedBrowser, [], 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();
 | |
|         }
 | |
|       });
 | |
|   });
 | |
| }
 |