forked from mirrors/gecko-dev
		
	 70fdad6676
			
		
	
	
		70fdad6676
		
	
	
	
	
		
			
			This should make a bit clearer that it is only starting the load, not waiting for its completion. Differential Revision: https://phabricator.services.mozilla.com/D188213
		
			
				
	
	
		
			93 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| /**
 | |
|  * This test verifies SessionStore.undoCloseById behavior when passed the targetWindow argument
 | |
|  */
 | |
| 
 | |
| async function openWindow(url) {
 | |
|   let win = await promiseNewWindowLoaded();
 | |
|   let flags = Ci.nsIWebNavigation.LOAD_FLAGS_REPLACE_HISTORY;
 | |
|   BrowserTestUtils.startLoadingURIString(win.gBrowser.selectedBrowser, url, {
 | |
|     flags,
 | |
|   });
 | |
|   await promiseBrowserLoaded(win.gBrowser.selectedBrowser, true, url);
 | |
|   return win;
 | |
| }
 | |
| 
 | |
| async function closeWindow(win) {
 | |
|   TestUtils.waitForTick();
 | |
|   let sessionStoreUpdated = TestUtils.topicObserved(
 | |
|     "sessionstore-closed-objects-changed"
 | |
|   );
 | |
|   await BrowserTestUtils.closeWindow(win);
 | |
|   await sessionStoreUpdated;
 | |
| }
 | |
| 
 | |
| function forgetTabsAndWindows() {
 | |
|   // Clear the lists of closed windows and tabs.
 | |
|   forgetClosedWindows();
 | |
|   while (SessionStore.getClosedTabCount(window)) {
 | |
|     SessionStore.forgetClosedTab(window, 0);
 | |
|   }
 | |
| }
 | |
| 
 | |
| add_task(async function test_undoCloseById_with_targetWindow() {
 | |
|   forgetTabsAndWindows();
 | |
|   // Test that a tab closed in (currently open) window B, will correctly be opened in target window A.
 | |
|   // And that the closed record should be correctly removed from window B
 | |
|   const winA = window;
 | |
|   // Open a new window.
 | |
|   const winB = await openWindow("about:robots");
 | |
|   await SimpleTest.promiseFocus(winB);
 | |
|   // Open and close a tab in the 2nd window
 | |
|   await openAndCloseTab(winB, "about:mozilla");
 | |
|   is(
 | |
|     SessionStore.lastClosedObjectType,
 | |
|     "tab",
 | |
|     "The last closed object is a tab"
 | |
|   );
 | |
|   // Record the first closedId created.
 | |
|   const closedId = SessionStore.getClosedTabData(winB)[0].closedId;
 | |
|   let tabRestored = BrowserTestUtils.waitForNewTab(
 | |
|     winA.gBrowser,
 | |
|     "about:mozilla"
 | |
|   );
 | |
| 
 | |
|   // Restore the tab into the first window, not the window it was closed in
 | |
|   SessionStore.undoCloseById(closedId, undefined, winA);
 | |
|   await tabRestored;
 | |
|   is(winA.gBrowser.selectedBrowser.currentURI.spec, "about:mozilla");
 | |
| 
 | |
|   // Verify the closed tab data is removed from the source window
 | |
|   is(
 | |
|     SessionStore.getClosedTabData(winB).length,
 | |
|     0,
 | |
|     "Record removed from the source window's closed tab data"
 | |
|   );
 | |
| 
 | |
|   BrowserTestUtils.removeTab(winA.gBrowser.selectedTab);
 | |
|   await closeWindow(winB);
 | |
| });
 | |
| 
 | |
| add_task(async function test_undoCloseById_with_nonExistent_targetWindow() {
 | |
|   // Test that restoring a tab to a non-existent targetWindow throws
 | |
|   forgetTabsAndWindows();
 | |
|   await openAndCloseTab(window, "about:mozilla");
 | |
|   is(
 | |
|     SessionStore.lastClosedObjectType,
 | |
|     "tab",
 | |
|     "The last closed object is a tab"
 | |
|   );
 | |
|   // Record the first closedId created.
 | |
|   const closedId = SessionStore.getClosedTabData(window)[0].closedId;
 | |
| 
 | |
|   // get a reference to a window that will be closed
 | |
|   const newWin = await BrowserTestUtils.openNewBrowserWindow();
 | |
|   await SimpleTest.promiseFocus(newWin);
 | |
|   await BrowserTestUtils.closeWindow(newWin);
 | |
| 
 | |
|   // Expect an exception trying to restore a tab to a non-existent window
 | |
|   Assert.throws(() => {
 | |
|     SessionStore.undoCloseById(closedId, undefined, newWin);
 | |
|   }, /NS_ERROR_ILLEGAL_VALUE/);
 | |
| });
 |