forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			95 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* Any copyright is dedicated to the Public Domain.
 | |
|    http://creativecommons.org/publicdomain/zero/1.0/ */
 | |
| /* eslint-disable mozilla/no-arbitrary-setTimeout */
 | |
| 
 | |
| var tabState = {
 | |
|   entries: [
 | |
|     {
 | |
|       url: "about:robots",
 | |
|       triggeringPrincipal_base64,
 | |
|       children: [{ url: "about:mozilla", triggeringPrincipal_base64 }],
 | |
|     },
 | |
|   ],
 | |
| };
 | |
| 
 | |
| function test() {
 | |
|   waitForExplicitFinish();
 | |
|   requestLongerTimeout(2);
 | |
| 
 | |
|   Services.prefs.setIntPref("browser.sessionstore.interval", 4000);
 | |
|   registerCleanupFunction(function () {
 | |
|     Services.prefs.clearUserPref("browser.sessionstore.interval");
 | |
|   });
 | |
| 
 | |
|   let tab = BrowserTestUtils.addTab(gBrowser, "about:blank");
 | |
| 
 | |
|   let browser = tab.linkedBrowser;
 | |
| 
 | |
|   promiseTabState(tab, tabState).then(() => {
 | |
|     let entry;
 | |
|     if (!Services.appinfo.sessionHistoryInParent) {
 | |
|       let sessionHistory = browser.sessionHistory;
 | |
|       entry = sessionHistory.legacySHistory.getEntryAtIndex(0);
 | |
|     } else {
 | |
|       let sessionHistory = browser.browsingContext.sessionHistory;
 | |
|       entry = sessionHistory.getEntryAtIndex(0);
 | |
|     }
 | |
| 
 | |
|     whenChildCount(entry, 1, function () {
 | |
|       whenChildCount(entry, 2, function () {
 | |
|         promiseBrowserLoaded(browser).then(() => {
 | |
|           let newEntry;
 | |
|           if (!Services.appinfo.sessionHistoryInParent) {
 | |
|             let newSessionHistory = browser.sessionHistory;
 | |
|             newEntry = newSessionHistory.legacySHistory.getEntryAtIndex(0);
 | |
|           } else {
 | |
|             let newSessionHistory = browser.browsingContext.sessionHistory;
 | |
|             newEntry = newSessionHistory.getEntryAtIndex(0);
 | |
|           }
 | |
| 
 | |
|           whenChildCount(newEntry, 0, function () {
 | |
|             // Make sure that we reset the state.
 | |
|             let blankState = {
 | |
|               windows: [
 | |
|                 {
 | |
|                   tabs: [
 | |
|                     {
 | |
|                       entries: [
 | |
|                         { url: "about:blank", triggeringPrincipal_base64 },
 | |
|                       ],
 | |
|                     },
 | |
|                   ],
 | |
|                 },
 | |
|               ],
 | |
|             };
 | |
|             waitForBrowserState(blankState, finish);
 | |
|           });
 | |
|         });
 | |
| 
 | |
|         // Force reload the browser to deprecate the subframes.
 | |
|         browser.reloadWithFlags(Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE);
 | |
|       });
 | |
| 
 | |
|       // Create a dynamic subframe.
 | |
|       let doc = browser.contentDocument;
 | |
|       let iframe = doc.createElement("iframe");
 | |
|       doc.body.appendChild(iframe);
 | |
|       iframe.setAttribute("src", "about:mozilla");
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   // This test relies on the test timing out in order to indicate failure so
 | |
|   // let's add a dummy pass.
 | |
|   ok(
 | |
|     true,
 | |
|     "Each test requires at least one pass, fail or todo so here is a pass."
 | |
|   );
 | |
| }
 | |
| 
 | |
| function whenChildCount(aEntry, aChildCount, aCallback) {
 | |
|   if (aEntry.childCount == aChildCount) {
 | |
|     aCallback();
 | |
|   } else {
 | |
|     setTimeout(() => whenChildCount(aEntry, aChildCount, aCallback), 100);
 | |
|   }
 | |
| }
 | 
