Skip to content

Commit 8337af6

Browse files
authored
Refactor FXIOS-14061 [Tabs Optimization] Remove each tab without persisting changes (#30949)
* Remove each tab without persisting changes * Attempt #2, make this nicer
1 parent 5d7f6d8 commit 8337af6

File tree

2 files changed

+48
-8
lines changed

2 files changed

+48
-8
lines changed

firefox-ios/Client/TabManagement/TabManagerImplementation.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -211,13 +211,6 @@ class TabManagerImplementation: NSObject,
211211
guard let index = tabs.firstIndex(where: { $0.tabUUID == tabUUID }) else { return }
212212

213213
let tab = tabs[index]
214-
tab.cancelDocumentDownload()
215-
216-
backupCloseTab = BackupCloseTab(
217-
tab: tab,
218-
restorePosition: index,
219-
isSelected: selectedTab?.tabUUID == tab.tabUUID)
220-
221214
self.removeTab(tab, flushToDisk: true)
222215
self.updateSelectedTabAfterRemovalOf(tab, deletedIndex: index)
223216
}
@@ -296,6 +289,7 @@ class TabManagerImplementation: NSObject,
296289
saveSessionData(forTab: tab)
297290
}
298291

292+
tab.cancelDocumentDownload()
299293
backupCloseTab = BackupCloseTab(tab: tab,
300294
restorePosition: removalIndex,
301295
isSelected: selectedTab?.tabUUID == tab.tabUUID)
@@ -345,9 +339,15 @@ class TabManagerImplementation: NSObject,
345339

346340
guard !tabsToRemove.isEmpty else { return }
347341

342+
let selectedTab = selectedTab
348343
for tab in tabsToRemove {
349-
removeTab(tab.tabUUID)
344+
// Remove each tab without persisting changes
345+
removeTab(tab, flushToDisk: false)
350346
}
347+
// We need to reselect the tab and adjust the selected index after tabs removal.
348+
// The selected tab will not be removed with `removeNormalTabsOlderThan` since it's
349+
// `lastExecutedTime` won't be less than the `cutoffDate`.
350+
selectTab(selectedTab)
351351
commitChanges()
352352
}
353353

firefox-ios/firefox-ios-tests/Tests/ClientTests/TabManagement/TabManagerTests.swift

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1620,6 +1620,46 @@ class TabManagerTests: XCTestCase {
16201620
XCTAssertEqual(tabManager.normalTabs.count, numberTabs)
16211621
}
16221622

1623+
@MainActor
1624+
func testRemoveNormalsTabsOlderThan_whenSelectedTabIsInTheMiddle_thenOrderIsProper() {
1625+
let inactiveTabs1 = generateTabs(ofType: .normalInactive2Weeks, count: 10)
1626+
let normalTabs = generateTabs(ofType: .normalActive, count: 3)
1627+
let inactiveTabs2 = generateTabs(ofType: .normalInactive2Weeks, count: 10)
1628+
let tabManager = createSubject(tabs: inactiveTabs1 + normalTabs + inactiveTabs2)
1629+
tabManager.selectTab(normalTabs[safe: 0])
1630+
1631+
tabManager.removeNormalTabsOlderThan(period: .oneDay, currentDate: testDate)
1632+
1633+
XCTAssertEqual(tabManager.normalTabs.count, 3)
1634+
XCTAssertEqual(tabManager.selectedIndex, 0)
1635+
}
1636+
1637+
@MainActor
1638+
func testRemoveNormalsTabsOlderThan_whenSelectedTabIsLast_thenOrderIsProper() {
1639+
let inactiveTabs1 = generateTabs(ofType: .normalInactive2Weeks, count: 10)
1640+
let normalTabs = generateTabs(ofType: .normalActive, count: 3)
1641+
let tabManager = createSubject(tabs: inactiveTabs1 + normalTabs)
1642+
tabManager.selectTab(normalTabs[safe: 2])
1643+
1644+
tabManager.removeNormalTabsOlderThan(period: .oneDay, currentDate: testDate)
1645+
1646+
XCTAssertEqual(tabManager.normalTabs.count, 3)
1647+
XCTAssertEqual(tabManager.selectedIndex, 2)
1648+
}
1649+
1650+
@MainActor
1651+
func testRemoveNormalsTabsOlderThan_whenSelectedTabIsFirst_thenOrderIsProper() {
1652+
let inactiveTabs1 = generateTabs(ofType: .normalInactive2Weeks, count: 10)
1653+
let normalTabs = generateTabs(ofType: .normalActive, count: 3)
1654+
let tabManager = createSubject(tabs: normalTabs + inactiveTabs1)
1655+
tabManager.selectTab(normalTabs[safe: 0])
1656+
1657+
tabManager.removeNormalTabsOlderThan(period: .oneDay, currentDate: testDate)
1658+
1659+
XCTAssertEqual(tabManager.normalTabs.count, 3)
1660+
XCTAssertEqual(tabManager.selectedIndex, 0)
1661+
}
1662+
16231663
// MARK: - removeAllInactiveTabs (removing unselected tabs at array bounds)
16241664

16251665
@MainActor

0 commit comments

Comments
 (0)