From f902ad97fddefa1dae750e6ea9b4116f35203d55 Mon Sep 17 00:00:00 2001 From: Fabian Freund Date: Tue, 7 Jul 2026 17:45:10 +0200 Subject: [PATCH] logic improvements --- .../geckoview/domain/repositories/tab.dart | 52 ++++++++----------- .../tabs/domain/repositories/tab.dart | 8 +++ 2 files changed, 29 insertions(+), 31 deletions(-) diff --git a/apps/weblibre/lib/features/geckoview/domain/repositories/tab.dart b/apps/weblibre/lib/features/geckoview/domain/repositories/tab.dart index be6dc5fe..231e707a 100644 --- a/apps/weblibre/lib/features/geckoview/domain/repositories/tab.dart +++ b/apps/weblibre/lib/features/geckoview/domain/repositories/tab.dart @@ -984,43 +984,33 @@ class TabRepository extends _$TabRepository { await selectTab(newTabId); } } else { - final tabContainerId = await ref - .read(tabDataRepositoryProvider.notifier) - .getTabContainerId(currentTabState.id); - - if (!ref.mounted) { - return; - } - final latestTabState = ref.read(tabStatesProvider)[tabId]; if (latestTabState == null) { logger.w('Could not get tab for assignement ${event.url}'); return; } - if (targetContainerId != tabContainerId) { - if (originUri == null) { - await ref - .read(tabDataRepositoryProvider.notifier) - .assignContainer( - latestTabState.id, - containerData, - replacementUrl: uri, - ); - } else if (latestTabState.url == originUri) { - await ref - .read(tabDataRepositoryProvider.notifier) - .assignContainer( - latestTabState.id, - containerData, - closeOldTab: false, - replacementUrl: uri, - ); - } else { - logger.w( - 'Could not match origin url for assignment ${latestTabState.url} to request ${event.originUrl}', - ); - } + if (originUri == null) { + await ref + .read(tabDataRepositoryProvider.notifier) + .assignContainer( + latestTabState.id, + containerData, + replacementUrl: uri, + ); + } else if (latestTabState.url == originUri) { + await ref + .read(tabDataRepositoryProvider.notifier) + .assignContainer( + latestTabState.id, + containerData, + closeOldTab: false, + replacementUrl: uri, + ); + } else { + logger.w( + 'Could not match origin url for assignment ${latestTabState.url} to request ${event.originUrl}', + ); } } } diff --git a/apps/weblibre/lib/features/geckoview/features/tabs/domain/repositories/tab.dart b/apps/weblibre/lib/features/geckoview/features/tabs/domain/repositories/tab.dart index 99432979..91560a5e 100644 --- a/apps/weblibre/lib/features/geckoview/features/tabs/domain/repositories/tab.dart +++ b/apps/weblibre/lib/features/geckoview/features/tabs/domain/repositories/tab.dart @@ -61,6 +61,14 @@ class TabDataRepository extends _$TabDataRepository { final currentContainerData = await getTabContainerData(tabId); + // The tab is already in the target container, so there is nothing to + // reconcile. This guards against churn when an async assignment races a + // move that already landed the tab in [targetContainer] (recreating it + // here would spawn a redundant tab and re-trigger its load). + if (currentContainerData?.id == targetContainer.id) { + return; + } + final sameContext = targetContainer.metadata.contextualIdentity == currentContainerData?.metadata.contextualIdentity;