ensure parentid is cut when cookie context is changing

This commit is contained in:
Fabian Freund
2026-02-11 12:05:17 +01:00
parent f7496ff3e3
commit c0153b9f38
@@ -54,6 +54,25 @@ class TabRepository extends _$TabRepository {
return _tabFromIntent.contains(tabId); return _tabFromIntent.contains(tabId);
} }
Future<String?> _resolveParentIdForContext({
required String? parentId,
required String? targetContextId,
}) async {
if (parentId == null) {
return null;
}
final parentContainerData = await ref
.read(tabDatabaseProvider)
.tabDao
.getTabContainerData(parentId)
.getSingleOrNull();
final parentContextId = parentContainerData?.metadata.contextualIdentity;
return (parentContextId == targetContextId) ? parentId : null;
}
Future<String> addTab({ Future<String> addTab({
Uri? url, Uri? url,
required bool selectTab, required bool selectTab,
@@ -76,13 +95,18 @@ class TabRepository extends _$TabRepository {
await ref.read(selectedContainerProvider.notifier).fetchData(), await ref.read(selectedContainerProvider.notifier).fetchData(),
); );
final validatedParentId = await _resolveParentIdForContext(
parentId: parentId,
targetContextId: assingedContainer.value?.metadata.contextualIdentity,
);
final newTabId = await tabDao.upsertTabTransactional( final newTabId = await tabDao.upsertTabTransactional(
() { () {
return _tabsService.addTab( return _tabsService.addTab(
url: url, url: url,
selectTab: selectTab, selectTab: selectTab,
startLoading: startLoading, startLoading: startLoading,
parentId: parentId, parentId: validatedParentId,
flags: flags, flags: flags,
contextId: assingedContainer.value?.metadata.contextualIdentity, contextId: assingedContainer.value?.metadata.contextualIdentity,
source: source, source: source,
@@ -91,7 +115,7 @@ class TabRepository extends _$TabRepository {
additionalHeaders: additionalHeaders, additionalHeaders: additionalHeaders,
); );
}, },
parentId: Value(parentId), parentId: Value(validatedParentId),
containerId: Value(assingedContainer.value?.id), containerId: Value(assingedContainer.value?.id),
isPrivate: Value(private), isPrivate: Value(private),
url: Value(url), url: Value(url),
@@ -463,22 +487,11 @@ class TabRepository extends _$TabRepository {
tabState.historyState.items.isEmpty; tabState.historyState.items.isEmpty;
if (event.blocked || tabIsEmpty) { if (event.blocked || tabIsEmpty) {
// Check if contextual identity is changing
final currentContainerData = await ref
.read(tabDataRepositoryProvider.notifier)
.getTabContainerData(tabState.id);
final contextChanging =
containerData.metadata.contextualIdentity !=
currentContainerData?.metadata.contextualIdentity;
await addTab( await addTab(
url: uri, url: uri,
private: tabState.isPrivate, private: tabState.isPrivate,
container: Value(containerData), container: Value(containerData),
parentId: contextChanging parentId: tabState.id,
? null
: tabState.id, // Break parent chain if context changes
selectTab: true, selectTab: true,
); );