ensure parentid is cut when cookie context is changing
This commit is contained in:
@@ -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,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user