[Tab Group Sync] Conversion methods for stable ID to root ID
This CL introduces conversion methods in TabGroupModelFilter to
convert between root ID and stable ID. This is a prerequisite
for the tab group sync work to be able to use stable IDs
since most of the public methods of TabGroupModelFilter
currently use the root ID. Hence, for short term we will be
converting between the two types of IDs as needed.
Bug: b/336663675
Change-Id: Ied728d92e50548796b1088b9c59c272f84c468fd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5480004
Commit-Queue: Shakti Sahu <shaktisahu@chromium.org>
Reviewed-by: Calder Kitagawa <ckitagawa@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1292131}
diff --git a/chrome/browser/tab_group/java/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupModelFilter.java b/chrome/browser/tab_group/java/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupModelFilter.java
index cb92c8c..7cabd9c 100644
--- a/chrome/browser/tab_group/java/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupModelFilter.java
+++ b/chrome/browser/tab_group/java/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupModelFilter.java
@@ -1404,6 +1404,39 @@
TabGroupSyncIdUtils.putTabGroupSyncId(rootId, syncId);
}
+ /**
+ * Given a tab group's stable ID, finds out the root ID, or {@link Tab.INVALID_TAB_ID} if the
+ * tab group doesn't exist in the model.
+ *
+ * @param stableId The stable ID of the tab group.
+ * @return The root ID of the tab group or {@link Tab.INVALID_TAB_ID} if the group isn't found
+ * in the tab model.
+ */
+ public int getRootIdFromStableId(@NonNull Token stableId) {
+ for (int i = 0; i < getTabModel().getCount(); i++) {
+ Tab tab = getTabModel().getTabAt(i);
+ if (stableId.equals(tab.getTabGroupId())) return tab.getRootId();
+ }
+ return Tab.INVALID_TAB_ID;
+ }
+
+ /**
+ * Given a tab group's root ID, finds out the stable ID, or null if the tab group doesn't exist
+ * in the model.
+ *
+ * @param rootId The root ID of the tab group.
+ * @return The stable ID of the tab group or null if the group isn't found in the tab model.
+ */
+ public @Nullable Token getStableIdFromRootId(int rootId) {
+ TabGroup tabGroup = mRootIdToGroupMap.get(rootId);
+ if (tabGroup == null) return null;
+
+ Tab tab = TabModelUtils.getTabById(getTabModel(), tabGroup.getLastShownTabId());
+ if (tab == null) return null;
+
+ return tab.getTabGroupId();
+ }
+
private static Token getOrCreateTabGroupId(@NonNull Tab tab) {
return getOrCreateTabGroupIdWithDefault(tab, null);
}
diff --git a/chrome/browser/tab_group/junit/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupModelFilterUnitTest.java b/chrome/browser/tab_group/junit/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupModelFilterUnitTest.java
index a945bd4..bdac944f 100644
--- a/chrome/browser/tab_group/junit/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupModelFilterUnitTest.java
+++ b/chrome/browser/tab_group/junit/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupModelFilterUnitTest.java
@@ -504,6 +504,21 @@
}
@Test
+ public void rootIdToStableIdAndBackConversion() {
+ // Test existing IDs.
+ assertEquals(TAB2_ROOT_ID, mTabGroupModelFilter.getRootIdFromStableId(TAB2_TAB_GROUP_ID));
+ assertEquals(TAB2_TAB_GROUP_ID, mTabGroupModelFilter.getStableIdFromRootId(TAB2_ROOT_ID));
+
+ assertEquals(null, mTabGroupModelFilter.getStableIdFromRootId(TAB1_ROOT_ID));
+
+ // Test non-existing IDs.
+ assertEquals(
+ Tab.INVALID_TAB_ID,
+ mTabGroupModelFilter.getRootIdFromStableId(new Token(93L, 42L)));
+ assertEquals(null, mTabGroupModelFilter.getStableIdFromRootId(1000));
+ }
+
+ @Test
public void addTab_TabLaunchedFromTabGroupUi() {
Tab newTab = prepareTab(NEW_TAB_ID_0, NEW_TAB_ID_0, null, TAB1_ID);
doReturn(TabLaunchType.FROM_TAB_GROUP_UI).when(newTab).getLaunchType();