What
- Immediately exiting the Orion app after closing the last tab via Grid View, causes the previously closed tab to reappear on re-open.
How
- Open Orion.
- Create a new tab.
- Search something in the new tab to make it distinct from a new tab.
- Open Grid View.
- Close the only visible tab.
- Immediately exit the app.
- Reopen Orion.
- Note that we start in Grid Overview with no tabs shows, bottom bar displays "1 Tab".
- Press "+" to create a new tab.
- Note that the Grid Overview icon shows "2".
- Press the square with the "2" to return to Grid Overview.
- Note that previously closed tab is displayed.
Why
- Potentially there is a race-condition between closing the tab and exiting the app.
- If so, it might make sense to "tag" the app as "closing", so that it can be cleaned up on next open instead of reappearing.
Debug Log
[2025-03-08 19:00:30] TabViewModel: processAction action: takeScreenshot(tabRootView: Optional(<Orion.NewTabRootView: 0x11b4a9200; frame = (0 0; 393 659); backgroundColor = <UIDynamicSystemColor: 0x300e7d840; name = systemGray6Color>; layer = <CALayer: 0x301bd8dc0>>))
[2025-03-08 19:00:30] UIView.showHideAnimated: <Orion.GaussianBlurView: 0x11b7a6800; baseClass = UIVisualEffectView; frame = (0 0; 0 0); layer = <CALayer: 0x301a77360>> effect=<UIBlurEffect: 0x301911ba0> style=UIBlurEffectStyleRegular, show: true, checkCurrent: false
[2025-03-08 19:00:31] PGSideMenu: gestureRecognizerShouldBegin false 2
[2025-03-08 19:00:32] SceneDelegate: sceneDidEnterBackground
[2025-03-08 19:00:32] BrowserContainerVC: storeSessionURLs
[2025-03-08 19:00:32] PGSideMenu: gestureRecognizerShouldBegin false 2
[2025-03-08 19:00:34] SceneDelegate: sceneWillEnterForeground
[2025-03-08 19:00:37] BrowserContainerVC: addTab: configuration: nil
[2025-03-08 19:00:37] NewTabViewController ID 3: init w/ config nil
[2025-03-08 19:00:37] BrowserContainerVC: storeSessionURLs
[2025-03-08 19:00:37] TabViewModel: processAction action: updateToolsbar
[2025-03-08 19:00:37] NewTabViewController ID 2: processViewModel w/ state: updateToolsbar(tabHasURL: true, backNavigation: Orion.NewTabViewModel.BackNavigation.regular)
[2025-03-08 19:00:37] TabViewModel: processAction action: updateLocationBar
[2025-03-08 19:00:37] NewTabViewController ID 2: processViewModel w/ state: updateLocationBar(viewModel: Orion.WebPageModel, tabsCount: 2)
[2025-03-08 19:00:37] TabViewModel: processAction action: updateTabCount
[2025-03-08 19:00:37] NewTabViewController ID 2: processViewModel w/ state: updateTabCount(2)
[2025-03-08 19:00:37] TabViewModel: processAction action: updateTabCount
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: updateTabCount(2)
[2025-03-08 19:00:37] NewTabRootView ID 3: hideToolbarOnScrollSettingChanged
[2025-03-08 19:00:37] 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: nil
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: pageLoadingProgressChanged(progress: 0.1, animated: false)
[2025-03-08 19:00:37] TabViewModel: WebPageDelegate: urlUpdated: orion://newtab/, webPage: Orion.WebPageModel
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: urlDidChange
[2025-03-08 19:00:37] TabViewModel: processAction action: updateWebsiteAddress
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: updateWebsiteAddress(text: "")
[2025-03-08 19:00:37] UIView.showHideAnimated: <UIButton: 0x12baec000; frame = (0 0; 0 0); opaque = NO; tintColor = <UIDynamicCatalogSystemColor: 0x300ebc980; name = secondaryLabelColor>; gestureRecognizers = <NSArray: 0x301a4e5a0>; layer = <CALayer: 0x301a4e640>> configuration=<UIButtonConfiguration: 0x12238c8c0> baseStyle=plain macStyle=automatic buttonSize=medium cornerStyle=dynamic image=<UIImage:0x302969d40 symbol(system: arrow.clockwise)> contentInsets={0, 0, 0, 0} imagePlacement=leading imagePadding=0 titlePadding=1 titleAlignment=automatic automaticallyUpdateForSelection background=<UIBackgroundConfiguration: 0x30202c9c0; Base Style = Custom; cornerRadius = 5.95>, show: false, checkCurrent: false
[2025-03-08 19:00:37] UIView.showHideAnimated: <UIButton: 0x103e1bc00; frame = (-8.33333 0; 17.3333 44); opaque = NO; tintColor = <UIDynamicCatalogSystemColor: 0x300e61c00; name = labelColor>; gestureRecognizers = <NSArray: 0x3015ae310>; layer = <CALayer: 0x301b0bcc0>> configuration=<UIButtonConfiguration: 0x103fe9b80> baseStyle=plain macStyle=automatic buttonSize=medium cornerStyle=dynamic image=<UIImage:0x302969d40 symbol(system: arrow.clockwise)> contentInsets={0, 0, 0, 0} imagePlacement=leading imagePadding=0 titlePadding=1 titleAlignment=automatic automaticallyUpdateForSelection background=<UIBackgroundConfiguration: 0x3020fc000; Base Style = Custom; cornerRadius = 5.95>, show: false, checkCurrent: false
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: updateWebsiteAddress(text: "orion://newtab/")
[2025-03-08 19:00:37] TabViewModel: WebPageDelegate: isLoading: true, webPage: Orion.WebPageModel
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: pageLoadingStatusChanged
[2025-03-08 19:00:37] NewTabViewController ID 3: updateBarsItems
[2025-03-08 19:00:37] TabViewModel: processAction action: updateWebsiteAddress
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: updateWebsiteAddress(text: "")
[2025-03-08 19:00:37] TabViewModel: processAction action: updateLocationBar
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: updateLocationBar(viewModel: Orion.WebPageModel, tabsCount: 2)
[2025-03-08 19:00:37] TabViewModel: processAction action: updateToolsbar
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: updateToolsbar(tabHasURL: false, backNavigation: Orion.NewTabViewModel.BackNavigation.forbidden)
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: faviconUpdated(image: nil)
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: restoreToolbars
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: removeReaderModeHighlightFromURLBar
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: pageLoadingProgressChanged(progress: 0.15, animated: false)
[2025-03-08 19:00:37] NewTabRootView ID 3: hideToolbarOnScrollSettingChanged
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: faviconUpdated(image: Optional(<UIImage:0x302939b90 named(main: orion.toolbar.startpage) {16, 16} renderingMode=alwaysTemplate>))
[2025-03-08 19:00:37] NewTabViewController ID 3: updateBarsItems
[2025-03-08 19:00:37] TabViewModel: processAction action: updateWebsiteAddress
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: updateWebsiteAddress(text: "")
[2025-03-08 19:00:37] TabViewModel: processAction action: updateLocationBar
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: updateLocationBar(viewModel: Orion.WebPageModel, tabsCount: 2)
[2025-03-08 19:00:37] TabViewModel: processAction action: updateToolsbar
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: updateToolsbar(tabHasURL: false, backNavigation: Orion.NewTabViewModel.BackNavigation.forbidden)
[2025-03-08 19:00:37] BrowserContainerVC: storeSessionURLs
[2025-03-08 19:00:37] 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 19:00:37] TabViewModel: processAction action: configureContentBlocker(enabled: true)
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: pageLoadingProgressChanged(progress: 0.5, animated: true)
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: pageLoadingProgressChanged(progress: 1.0, animated: true)
[2025-03-08 19:00:37] TabViewModel: WebPageDelegate: isLoading: false, webPage: Orion.WebPageModel
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: pageLoadingStatusChanged
[2025-03-08 19:00:37] NewTabViewController ID 3: updateBarsItems
[2025-03-08 19:00:37] TabViewModel: processAction action: updateWebsiteAddress
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: updateWebsiteAddress(text: "")
[2025-03-08 19:00:37] TabViewModel: processAction action: updateLocationBar
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: updateLocationBar(viewModel: Orion.WebPageModel, tabsCount: 2)
[2025-03-08 19:00:37] TabViewModel: processAction action: updateToolsbar
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: updateToolsbar(tabHasURL: false, backNavigation: Orion.NewTabViewModel.BackNavigation.forbidden)
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: faviconUpdated(image: nil)
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: removeReaderModeHighlightFromURLBar
[2025-03-08 19:00:37] BrowserContainerVC: storeSessionURLs
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: updateWebsiteTitle
[2025-03-08 19:00:37] NewTabViewController ID 3: processViewModel w/ state: pageLoadingProgressChanged(progress: 0.0, animated: false)
[2025-03-08 19:00:38] TabViewModel: processAction action: takeScreenshot(tabRootView: Optional(<Orion.NewTabRootView: 0x12232d000; frame = (0 0; 393 659); backgroundColor = <UIDynamicSystemColor: 0x300e7d840; name = systemGray6Color>; layer = <CALayer: 0x301a59040>>))
[2025-03-08 19:00:38] TabViewModel: processAction action: takeScreenshot(tabRootView: Optional(<Orion.NewTabRootView: 0x12232d000; frame = (0 0; 393 659); backgroundColor = <UIDynamicSystemColor: 0x300e7d840; name = systemGray6Color>; layer = <CALayer: 0x301a59040>>))
[2025-03-08 19:00:38] UIView.showHideAnimated: <Orion.GaussianBlurView: 0x122350a00; baseClass = UIVisualEffectView; frame = (0 0; 0 0); layer = <CALayer: 0x301ba9980>> effect=<UIBlurEffect: 0x3019217c0> style=UIBlurEffectStyleRegular, show: true, checkCurrent: false
[2025-03-08 19:00:42] BrowserContainerVC: storeSessionURLs
[2025-03-08 19:00:43] BrowserContainerVC: openOptionsPopover, hasURL: false
[2025-03-08 19:00:43] NewTabViewController ID 3: updatePopoverSourceView
Expected behavior
- Last tab closed via Grid View should never reappear.
Additional Details
- No extensions present.
- I was unable to reproduce in Safari.
- FYI, I have not tested on a clean profile as this is my main browser.
- Please let me know if there is a straightforward way to enter a debug mode, enter a separate profile that would allow for quickly testing, or add a secondary "clean" orion for debug purposes.
- Would be happy to regularly provide this information without resetting my personal configuration each time.
- Feel free to reach out to me if you need additional information.
Device Information
- App version: 1.3.18 (6) (WebKit 8620.2.4.10.7)
- System version: 18.3.1