forked from mirrors/gecko-dev
		
	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/);
 | 
						|
});
 |