forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			337 lines
		
	
	
	
		
			9.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			337 lines
		
	
	
	
		
			9.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const ORIG_STATE = ss.getBrowserState();
 | |
| 
 | |
| const multiWindowState = {
 | |
|   windows: [
 | |
|     {
 | |
|       tabs: [
 | |
|         {
 | |
|           entries: [
 | |
|             {
 | |
|               url: "https://example.com#win-0-tab-0",
 | |
|               triggeringPrincipal_base64,
 | |
|             },
 | |
|           ],
 | |
|         },
 | |
|       ],
 | |
|       _closedTabs: [
 | |
|         {
 | |
|           state: {
 | |
|             entries: [
 | |
|               {
 | |
|                 url: "https://example.com#win-0-closed-0",
 | |
|                 triggeringPrincipal_base64,
 | |
|               },
 | |
|             ],
 | |
|           },
 | |
|         },
 | |
|         {
 | |
|           state: {
 | |
|             entries: [
 | |
|               {
 | |
|                 url: "https://example.com#win-0-closed-1",
 | |
|                 triggeringPrincipal_base64,
 | |
|               },
 | |
|             ],
 | |
|           },
 | |
|         },
 | |
|       ],
 | |
|       selected: 1,
 | |
|     },
 | |
|     {
 | |
|       tabs: [
 | |
|         {
 | |
|           entries: [
 | |
|             {
 | |
|               url: "https://example.org#win-1-tab-0",
 | |
|               triggeringPrincipal_base64,
 | |
|             },
 | |
|           ],
 | |
|         },
 | |
|         {
 | |
|           entries: [
 | |
|             {
 | |
|               url: "https://example.org#win-1-tab-1",
 | |
|               triggeringPrincipal_base64,
 | |
|             },
 | |
|           ],
 | |
|         },
 | |
|       ],
 | |
|       _closedTabs: [
 | |
|         {
 | |
|           state: {
 | |
|             entries: [
 | |
|               {
 | |
|                 url: "https://example.org#win-1-closed-0",
 | |
|                 triggeringPrincipal_base64,
 | |
|               },
 | |
|             ],
 | |
|           },
 | |
|         },
 | |
|       ],
 | |
|       selected: 1,
 | |
|     },
 | |
|   ],
 | |
|   _closedWindows: [
 | |
|     {
 | |
|       tabs: [
 | |
|         {
 | |
|           entries: [
 | |
|             {
 | |
|               url: "https://example.org#closedWin-0-tab-0",
 | |
|               triggeringPrincipal_base64,
 | |
|             },
 | |
|           ],
 | |
|         },
 | |
|       ],
 | |
|       _closedTabs: [
 | |
|         {
 | |
|           state: {
 | |
|             entries: [
 | |
|               {
 | |
|                 url: "https://example.org##closedWin-0-closed-0",
 | |
|                 triggeringPrincipal_base64,
 | |
|               },
 | |
|             ],
 | |
|           },
 | |
|         },
 | |
|       ],
 | |
|     },
 | |
|   ],
 | |
| };
 | |
| 
 | |
| add_setup(async function testSetup() {
 | |
|   await SessionStoreTestUtils.promiseBrowserState(multiWindowState);
 | |
| });
 | |
| 
 | |
| add_task(async function test_ClosedTabMethods() {
 | |
|   let sessionStoreUpdated;
 | |
|   const browserWindows = BrowserWindowTracker.orderedWindows;
 | |
|   Assert.equal(
 | |
|     browserWindows.length,
 | |
|     multiWindowState.windows.length,
 | |
|     `We expect ${multiWindowState.windows} open browser windows`
 | |
|   );
 | |
|   info(
 | |
|     `After setup, current tab URI: ${browserWindows[0].gBrowser.currentURI.spec}`
 | |
|   );
 | |
|   Assert.equal(
 | |
|     browserWindows[0].gBrowser.currentURI.spec,
 | |
|     "https://example.com/#win-0-tab-0",
 | |
|     "The first tab of the first window we restored is current"
 | |
|   );
 | |
| 
 | |
|   for (let idx = 0; idx < browserWindows.length; idx++) {
 | |
|     const win = browserWindows[idx];
 | |
|     const winData = multiWindowState.windows[idx];
 | |
|     info(`window ${idx}: ${win.gBrowser.selectedBrowser.currentURI.spec}`);
 | |
|     Assert.equal(
 | |
|       winData._closedTabs.length,
 | |
|       SessionStore.getClosedTabDataForWindow(win).length,
 | |
|       `getClosedTabDataForWindow() for open window ${idx} returned the expected number of objects`
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   let closedCount;
 | |
|   closedCount = SessionStore.getClosedTabCountForWindow(browserWindows[0]);
 | |
|   Assert.equal(2, closedCount, "2 closed tab for this window");
 | |
| 
 | |
|   closedCount = SessionStore.getClosedTabCountForWindow(browserWindows[1]);
 | |
|   Assert.equal(1, closedCount, "1 closed tab for this window");
 | |
| 
 | |
|   closedCount = SessionStore.getClosedTabCount();
 | |
|   // 3 closed tabs from open windows, 1 closed tab from the closed window
 | |
|   Assert.equal(4, closedCount, "4 closed tab for all windows");
 | |
| 
 | |
|   let allWindowsClosedTabs = SessionStore.getClosedTabData();
 | |
|   Assert.equal(
 | |
|     SessionStore.getClosedTabCount({ closedTabsFromClosedWindows: false }),
 | |
|     allWindowsClosedTabs.length,
 | |
|     "getClosedTabData returned the correct number of entries"
 | |
|   );
 | |
|   for (let tabData of allWindowsClosedTabs) {
 | |
|     Assert.ok(tabData.sourceWindowId, "each tab has a sourceWindowId property");
 | |
|   }
 | |
| 
 | |
|   closedCount = SessionStore.getClosedTabCountFromClosedWindows();
 | |
|   Assert.equal(1, closedCount, "1 closed tabs from closed windows");
 | |
| 
 | |
|   // ***********************************
 | |
|   info("check with the all-windows pref off");
 | |
|   await SpecialPowers.pushPrefEnv({
 | |
|     set: [["browser.sessionstore.closedTabsFromAllWindows", false]],
 | |
|   });
 | |
| 
 | |
|   info("With this pref off, the closed tab count is that of the top window");
 | |
|   closedCount = SessionStore.getClosedTabCount({
 | |
|     closedTabsFromClosedWindows: false,
 | |
|   }); // Equivalent to SS.getClosedTabCountForWindow(browserWindows[0]),
 | |
|   Assert.equal(closedCount, 2, `2 closed tabs from the top (first) window`);
 | |
|   Assert.equal(
 | |
|     SessionStore.getClosedTabCount(), // includes closed tabs from closed windows, but only the top open window
 | |
|     3,
 | |
|     `3 closed tabs when counting the top window and the closed window`
 | |
|   );
 | |
| 
 | |
|   allWindowsClosedTabs = SessionStore.getClosedTabData(); // Equivalent to SS.getClosedTabDataForWindow(browserWindows[0]),
 | |
|   Assert.equal(
 | |
|     allWindowsClosedTabs.length,
 | |
|     2,
 | |
|     "getClosedTabData returned the number of entries for the top window"
 | |
|   );
 | |
|   SpecialPowers.popPrefEnv();
 | |
|   await TestUtils.waitForTick();
 | |
|   //
 | |
|   // ***********************************
 | |
| 
 | |
|   closedCount = SessionStore.getClosedTabCount();
 | |
|   Assert.equal(
 | |
|     4,
 | |
|     closedCount,
 | |
|     "Sanity-check, with the pref on, we're back to 4 closed tabs"
 | |
|   );
 | |
| 
 | |
|   // ***********************************
 | |
|   info("check with the closed-tabs-from-closed-windows pref off");
 | |
|   await SpecialPowers.pushPrefEnv({
 | |
|     set: [["browser.sessionstore.closedTabsFromClosedWindows", false]],
 | |
|   });
 | |
| 
 | |
|   info(
 | |
|     "With this pref off, the closed tab count is that of only the only windows"
 | |
|   );
 | |
|   closedCount = SessionStore.getClosedTabCount(); // Equivalent to SS.getClosedTabCountForWindow(browserWindows[0]),
 | |
|   Assert.equal(3, closedCount, `3 closed tabs from the open windows`);
 | |
| 
 | |
|   allWindowsClosedTabs = SessionStore.getClosedTabData();
 | |
|   Assert.equal(
 | |
|     allWindowsClosedTabs.length,
 | |
|     3,
 | |
|     "getClosedTabData returned the number of entries for the top window"
 | |
|   );
 | |
|   SpecialPowers.popPrefEnv();
 | |
|   await TestUtils.waitForTick();
 | |
|   //
 | |
|   // ***********************************
 | |
| 
 | |
|   info("forget the closed tab from the closed window");
 | |
|   sessionStoreUpdated = TestUtils.topicObserved(
 | |
|     "sessionstore-closed-objects-changed"
 | |
|   );
 | |
|   SessionStore.forgetClosedTab(
 | |
|     { sourceClosedId: SessionStore.getClosedWindowData()[0].closedId },
 | |
|     0
 | |
|   );
 | |
|   await sessionStoreUpdated;
 | |
| 
 | |
|   closedCount = SessionStore.getClosedTabCountFromClosedWindows();
 | |
|   Assert.equal(
 | |
|     0,
 | |
|     closedCount,
 | |
|     "0 closed tabs from closed windows after forgetting them"
 | |
|   );
 | |
|   closedCount = SessionStore.getClosedTabCount();
 | |
|   Assert.equal(
 | |
|     3,
 | |
|     closedCount,
 | |
|     "3 closed tabs now that the closed tab from the closed window is forgotten"
 | |
|   );
 | |
| 
 | |
|   info("restore one of the closed tabs from an open window");
 | |
|   sessionStoreUpdated = TestUtils.topicObserved(
 | |
|     "sessionstore-closed-objects-changed"
 | |
|   );
 | |
| 
 | |
|   SessionStore.undoCloseTab(browserWindows[0], 0);
 | |
|   await sessionStoreUpdated;
 | |
| 
 | |
|   Assert.equal(
 | |
|     1,
 | |
|     SessionStore.getClosedTabCountForWindow(browserWindows[0]),
 | |
|     "Now theres one closed tab in the first window"
 | |
|   );
 | |
|   Assert.equal(
 | |
|     1,
 | |
|     SessionStore.getClosedTabCountForWindow(browserWindows[1]),
 | |
|     "Theres still one closed tab in the 2nd window"
 | |
|   );
 | |
| 
 | |
|   Assert.equal(
 | |
|     2,
 | |
|     SessionStore.getClosedTabCount(),
 | |
|     "Theres a total for 2 closed tabs"
 | |
|   );
 | |
| 
 | |
|   // Bug 1836198 - sometimes this reports 1 not 2.
 | |
|   Assert.equal(
 | |
|     2,
 | |
|     SessionStore.getClosedTabData().length,
 | |
|     "We get the right number of tab entries from getClosedTabData()"
 | |
|   );
 | |
| 
 | |
|   info("forget the last closed tab in the first window");
 | |
|   sessionStoreUpdated = TestUtils.topicObserved(
 | |
|     "sessionstore-closed-objects-changed"
 | |
|   );
 | |
|   SessionStore.forgetClosedTab(browserWindows[0], 0);
 | |
|   await sessionStoreUpdated;
 | |
| 
 | |
|   Assert.equal(
 | |
|     0,
 | |
|     SessionStore.getClosedTabCountForWindow(browserWindows[0]),
 | |
|     "The first window has 0 closed tabs after forgetting the last tab"
 | |
|   );
 | |
|   Assert.equal(
 | |
|     1,
 | |
|     SessionStore.getClosedTabCountForWindow(browserWindows[1]),
 | |
|     "Theres still one closed tab in the 2nd window"
 | |
|   );
 | |
| 
 | |
|   Assert.equal(
 | |
|     1,
 | |
|     SessionStore.getClosedTabCount(),
 | |
|     "Theres a total of one closed tabs"
 | |
|   );
 | |
|   Assert.equal(
 | |
|     1,
 | |
|     SessionStore.getClosedTabData().length,
 | |
|     "We get the right number of tab entries from getClosedTabData()"
 | |
|   );
 | |
| 
 | |
|   info(
 | |
|     "Close the 2nd window. This makes its 1 closed tab a 'closed tab from closed window'"
 | |
|   );
 | |
|   await promiseAllButPrimaryWindowClosed();
 | |
| 
 | |
|   Assert.equal(
 | |
|     0,
 | |
|     SessionStore.getClosedTabCountForWindow(browserWindows[0]),
 | |
|     "Closed tab count is unchanged after closing the other browser window"
 | |
|   );
 | |
| 
 | |
|   Assert.equal(
 | |
|     0,
 | |
|     SessionStore.getClosedTabCount({ closedTabsFromClosedWindows: false }),
 | |
|     "Theres now 0 closed tabs from open windows after closing the other browser window which had the last one"
 | |
|   );
 | |
| 
 | |
|   Assert.equal(
 | |
|     1,
 | |
|     SessionStore.getClosedTabCount({ closedTabsFromClosedWindows: true }),
 | |
|     "Theres now 1 closed tabs including closed windows after closing the other browser window which had the last one"
 | |
|   );
 | |
| 
 | |
|   Assert.equal(
 | |
|     0,
 | |
|     SessionStore.getClosedTabData().length,
 | |
|     "We get the right number of tab entries from getClosedTabData()"
 | |
|   );
 | |
| 
 | |
|   Assert.equal(
 | |
|     1,
 | |
|     SessionStore.getClosedTabCountFromClosedWindows(),
 | |
|     "There's 1 closed tabs from closed windows"
 | |
|   );
 | |
| 
 | |
|   // Cleanup.
 | |
|   await promiseBrowserState(ORIG_STATE);
 | |
| });
 | 
