- Edited
What
- Tapping the "x" button on last two tabs simultaneously while in Grid View on iOS causes a consistent crash.
How
- Open Orion.
- Enable Grid View (Settings > Tabs > Tab View Style > Grid).
- Create or have two active tabs.
- Open Grid Overview.
- Press two "x" icons on independent tabs simultaneously.
- Both tabs should close, followed by an app crash.
Why
- Potentially, the app attempts to switch to non-existent previous tab index and/or default tab.
Additional Details
- Safari does not encounter the same issue in their grid overview.
- I was unable to replicate the bug in with the Sidebar Tab View Style.
- No extensions installed.
Debug Log
[2025-03-08 07:34:09] AppDelegate: didFinishLaunchingWithOptions
[2025-03-08 07:34:09] BrowserContainerVC: addTab: configuration: Optional(Orion.TabConfiguration(url: Optional(orion://newtab/), webContextView: nil, index: nil, openerTabId: nil, startLoading: false, successorId: nil, tabId: nil, isPinned: false, isDiscarded: false, isSelected: false, isPrivate: false, title: nil, cookieStoreId: nil, sessionState: nil, navigationType: nil, referer: nil, isRestoring: false, childrenTabId: nil, isExpanded: false, lastAccessed: Optional(1741419245.9187388), interactionState: Optional(0 bytes), iCloudTabIdentifier: nil, parentICloudTabIdentifier: nil, localTabIdentifier: nil, parentLocalTabIdentifier: nil))
[2025-03-08 07:34:09] NewTabViewController ID 2: init w/ config Optional(Orion.TabConfiguration(url: Optional(orion://newtab/), webContextView: nil, index: nil, openerTabId: nil, startLoading: false, successorId: nil, tabId: nil, isPinned: false, isDiscarded: false, isSelected: false, isPrivate: false, title: nil, cookieStoreId: nil, sessionState: nil, navigationType: nil, referer: nil, isRestoring: false, childrenTabId: nil, isExpanded: false, lastAccessed: Optional(1741419245.9187388), interactionState: Optional(0 bytes), iCloudTabIdentifier: nil, parentICloudTabIdentifier: nil, localTabIdentifier: nil, parentLocalTabIdentifier: nil))
[2025-03-08 07:34:09] BrowserContainerVC: selectTab: index: 0, tabsCount: 1
[2025-03-08 07:34:09] TabViewModel: processAction action: updateTabCount
[2025-03-08 07:34:09] NewTabViewController ID 2: processViewModel w/ state: updateTabCount(1)
[2025-03-08 07:34:09] NewTabRootView ID 2: hideToolbarOnScrollSettingChanged
[2025-03-08 07:34:09] TabViewModel: commonInit configuration: TabConfiguration(url: nil, webContextView: nil, index: nil, openerTabId: nil, startLoading: false, successorId: nil, tabId: nil, isPinned: false, isDiscarded: false, isSelected: false, isPrivate: false, title: nil, cookieStoreId: nil, sessionState: nil, navigationType: nil, referer: nil, isRestoring: false, childrenTabId: nil, isExpanded: false, lastAccessed: nil, interactionState: nil, iCloudTabIdentifier: nil, parentICloudTabIdentifier: nil, localTabIdentifier: nil, parentLocalTabIdentifier: nil), internalPageType: Optional(Orion.NewInternalPageType.newTab), tabCreatedWithStartPage: true, browserTab.url: Optional("orion://newtab/")
[2025-03-08 07:34:09] NewTabViewController ID 2: processViewModel w/ state: pageLoadingProgressChanged(progress: 0.1, animated: false)
[2025-03-08 07:34:09] TabViewModel: WebPageDelegate: urlUpdated: orion://newtab/, webPage: Orion.WebPageModel
[2025-03-08 07:34:09] NewTabViewController ID 2: processViewModel w/ state: urlDidChange
[2025-03-08 07:34:09] TabViewModel: processAction action: updateWebsiteAddress
[2025-03-08 07:34:09] NewTabViewController ID 2: processViewModel w/ state: updateWebsiteAddress(text: "")
[2025-03-08 07:34:09] UIView.showHideAnimated: <UIButton: 0x103e39b00; frame = (0 0; 0 0); opaque = NO; tintColor = <UIDynamicCatalogSystemColor: 0x300f6a340; name = secondaryLabelColor>; gestureRecognizers = <NSArray: 0x301a03d40>; layer = <CALayer: 0x301a03cc0>> configuration=<UIButtonConfiguration: 0x11b498b40> baseStyle=plain macStyle=automatic buttonSize=medium cornerStyle=dynamic image=<UIImage:0x3028993b0 symbol(system: arrow.clockwise)> contentInsets={0, 0, 0, 0} imagePlacement=leading imagePadding=0 titlePadding=1 titleAlignment=automatic automaticallyUpdateForSelection background=<UIBackgroundConfiguration: 0x3021bf9b0; Base Style = Custom; cornerRadius = 5.95>, show: false, checkCurrent: false
[2025-03-08 07:34:09] UIView.showHideAnimated: <UIButton: 0x103e38600; frame = (27.3333 0; 17.3333 44); opaque = NO; tintColor = <UIDynamicCatalogSystemColor: 0x300f6a340; name = secondaryLabelColor>; gestureRecognizers = <NSArray: 0x301ad91e0>; layer = <CALayer: 0x301ad9820>> configuration=<UIButtonConfiguration: 0x103fd2580> baseStyle=plain macStyle=automatic buttonSize=medium cornerStyle=dynamic image=<UIImage:0x3028993b0 symbol(system: arrow.clockwise)> contentInsets={0, 0, 0, 0} imagePlacement=leading imagePadding=0 titlePadding=1 titleAlignment=automatic automaticallyUpdateForSelection background=<UIBackgroundConfiguration: 0x302181040; Base Style = Custom; cornerRadius = 5.95>, show: false, checkCurrent: false
[2025-03-08 07:34:09] NewTabViewController ID 2: processViewModel w/ state: updateWebsiteAddress(text: "orion://newtab/")
[2025-03-08 07:34:09] TabViewModel: WebPageDelegate: isLoading: true, webPage: Orion.WebPageModel
[2025-03-08 07:34:09] NewTabViewController ID 2: processViewModel w/ state: pageLoadingStatusChanged
[2025-03-08 07:34:09] NewTabViewController ID 2: updateBarsItems
[2025-03-08 07:34:09] TabViewModel: processAction action: updateWebsiteAddress
[2025-03-08 07:34:09] NewTabViewController ID 2: processViewModel w/ state: updateWebsiteAddress(text: "")
[2025-03-08 07:34:09] TabViewModel: processAction action: updateLocationBar
[2025-03-08 07:34:09] NewTabViewController ID 2: processViewModel w/ state: updateLocationBar(viewModel: Orion.WebPageModel, tabsCount: 1)
[2025-03-08 07:34:09] TabViewModel: processAction action: updateToolsbar
[2025-03-08 07:34:09] NewTabViewController ID 2: processViewModel w/ state: updateToolsbar(tabHasURL: false, backNavigation: Orion.NewTabViewModel.BackNavigation.forbidden)
[2025-03-08 07:34:09] NewTabViewController ID 2: processViewModel w/ state: faviconUpdated(image: nil)
[2025-03-08 07:34:09] NewTabViewController ID 2: processViewModel w/ state: restoreToolbars
[2025-03-08 07:34:09] NewTabViewController ID 2: processViewModel w/ state: removeReaderModeHighlightFromURLBar
[2025-03-08 07:34:09] NewTabViewController ID 2: processViewModel w/ state: pageLoadingProgressChanged(progress: 0.15, animated: false)
[2025-03-08 07:34:09] NewTabRootView ID 2: hideToolbarOnScrollSettingChanged
[2025-03-08 07:34:09] NewTabViewController ID 2: processViewModel w/ state: faviconUpdated(image: Optional(<UIImage:0x3028e1b00 named(main: orion.toolbar.startpage) {16, 16} renderingMode=alwaysTemplate>))
[2025-03-08 07:34:09] NewTabViewController ID 2: updateBarsItems
[2025-03-08 07:34:09] TabViewModel: processAction action: updateWebsiteAddress
[2025-03-08 07:34:09] NewTabViewController ID 2: processViewModel w/ state: updateWebsiteAddress(text: "")
[2025-03-08 07:34:09] TabViewModel: processAction action: updateLocationBar
[2025-03-08 07:34:09] NewTabViewController ID 2: processViewModel w/ state: updateLocationBar(viewModel: Orion.WebPageModel, tabsCount: 1)
[2025-03-08 07:34:09] TabViewModel: processAction action: updateToolsbar
[2025-03-08 07:34:09] NewTabViewController ID 2: processViewModel w/ state: updateToolsbar(tabHasURL: false, backNavigation: Orion.NewTabViewModel.BackNavigation.forbidden)
[2025-03-08 07:34:09] BrowserContainerVC: commonInit: regularTabURLs: [""], privateTabURLs: []
[2025-03-08 07:34:10] SceneDelegate: sceneWillEnterForeground
[2025-03-08 07:34:10] TabViewModel: openStartURLIfNeeded: webPageModel: Orion.WebPageModel, hasURL: false, configuration: TabConfiguration(url: nil, webContextView: nil, index: nil, openerTabId: nil, startLoading: false, successorId: nil, tabId: nil, isPinned: false, isDiscarded: false, isSelected: false, isPrivate: false, title: nil, cookieStoreId: nil, sessionState: nil, navigationType: nil, referer: nil, isRestoring: false, childrenTabId: nil, isExpanded: false, lastAccessed: nil, interactionState: nil, iCloudTabIdentifier: nil, parentICloudTabIdentifier: nil, localTabIdentifier: nil, parentLocalTabIdentifier: nil)
[2025-03-08 07:34:10] TabViewModel: processAction action: configureContentBlocker(enabled: true)
[2025-03-08 07:34:10] NewTabViewController ID 2: processViewModel w/ state: pageLoadingProgressChanged(progress: 0.5, animated: true)
[2025-03-08 07:34:10] NewTabViewController ID 2: processViewModel w/ state: pageLoadingProgressChanged(progress: 1.0, animated: true)
[2025-03-08 07:34:10] TabViewModel: WebPageDelegate: isLoading: false, webPage: Orion.WebPageModel
[2025-03-08 07:34:10] NewTabViewController ID 2: processViewModel w/ state: pageLoadingStatusChanged
[2025-03-08 07:34:10] NewTabViewController ID 2: updateBarsItems
[2025-03-08 07:34:10] TabViewModel: processAction action: updateWebsiteAddress
[2025-03-08 07:34:10] NewTabViewController ID 2: processViewModel w/ state: updateWebsiteAddress(text: "")
[2025-03-08 07:34:10] TabViewModel: processAction action: updateLocationBar
[2025-03-08 07:34:10] NewTabViewController ID 2: processViewModel w/ state: updateLocationBar(viewModel: Orion.WebPageModel, tabsCount: 1)
[2025-03-08 07:34:10] TabViewModel: processAction action: updateToolsbar
[2025-03-08 07:34:10] NewTabViewController ID 2: processViewModel w/ state: updateToolsbar(tabHasURL: false, backNavigation: Orion.NewTabViewModel.BackNavigation.forbidden)
[2025-03-08 07:34:10] NewTabViewController ID 2: processViewModel w/ state: faviconUpdated(image: nil)
[2025-03-08 07:34:10] NewTabViewController ID 2: processViewModel w/ state: removeReaderModeHighlightFromURLBar
[2025-03-08 07:34:10] BrowserContainerVC: storeSessionURLs
[2025-03-08 07:34:10] NewTabViewController ID 2: processViewModel w/ state: updateWebsiteTitle
[2025-03-08 07:34:10] NewTabViewController ID 2: processViewModel w/ state: pageLoadingProgressChanged(progress: 0.0, animated: false)
[2025-03-08 07:34:10] BrowserContainerVC: openOptionsPopover, hasURL: false
[2025-03-08 07:34:10] NewTabViewController ID 2: updatePopoverSourceView
[2025-03-08 07:34:11] TabViewModel: processAction action: takeScreenshot(tabRootView: Optional(<Orion.NewTabRootView: 0x11b4a5200; frame = (0 0; 393 659); backgroundColor = <UIDynamicSystemColor: 0x300f71600; name = systemGray6Color>; layer = <CALayer: 0x301a09b00>>))
Expected Behavior
I would expect the app to not crash.
Desired behavior would follow the same behavior as closing a single last tab.
System Details
1.3.18 (6) (WebKit 8620.2.4.10.7)
18