[ LiveTabContext ] Add function to retrieve saved id from tab group
Adds a function which retrieves a tab group's SavedTabGroupID. This functionality should be used when creating historical groups / tabs for tab restoring.
Bug: 330769406, 324275068
Change-Id: I7be678643a48a41d560497e5a33316424a7b8c76
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5393879
Reviewed-by: Gauthier Ambard <[email protected]>
Reviewed-by: Scott Violet <[email protected]>
Commit-Queue: Darryl James <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1278621}
diff --git a/chrome/browser/sessions/tab_restore_service_unittest.cc b/chrome/browser/sessions/tab_restore_service_unittest.cc
index 395516c..81f49bfe 100644
--- a/chrome/browser/sessions/tab_restore_service_unittest.cc
+++ b/chrome/browser/sessions/tab_restore_service_unittest.cc
@@ -19,6 +19,7 @@
#include "base/strings/utf_string_conversions.h"
#include "base/test/bind.h"
#include "base/time/time.h"
+#include "base/uuid.h"
#include "chrome/browser/sessions/chrome_tab_restore_service_client.h"
#include "chrome/browser/sessions/exit_type_service.h"
#include "chrome/browser/sessions/session_service.h"
@@ -105,6 +106,9 @@
MOCK_CONST_METHOD1(GetVisualDataForGroup,
const tab_groups::TabGroupVisualData*(
const tab_groups::TabGroupId& group));
+ MOCK_CONST_METHOD1(
+ GetSavedTabGroupIdForGroup,
+ const std::optional<base::Uuid>(const tab_groups::TabGroupId& group));
MOCK_CONST_METHOD1(IsTabPinned, bool(int index));
MOCK_METHOD2(SetVisualDataForGroup,
void(const tab_groups::TabGroupId& group,
diff --git a/chrome/browser/ui/android/tab_model/android_live_tab_context.cc b/chrome/browser/ui/android/tab_model/android_live_tab_context.cc
index 41ee2bd..49770978 100644
--- a/chrome/browser/ui/android/tab_model/android_live_tab_context.cc
+++ b/chrome/browser/ui/android/tab_model/android_live_tab_context.cc
@@ -5,7 +5,9 @@
#include "chrome/browser/ui/android/tab_model/android_live_tab_context.h"
#include <memory>
+#include <optional>
+#include "base/uuid.h"
#include "chrome/browser/android/tab_android.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sessions/session_restore.h"
@@ -95,6 +97,14 @@
return nullptr;
}
+const std::optional<base::Uuid>
+AndroidLiveTabContext::GetSavedTabGroupIdForGroup(
+ const tab_groups::TabGroupId& group) const {
+ // Not applicable to android... yet.
+ NOTREACHED();
+ return std::nullopt;
+}
+
bool AndroidLiveTabContext::IsTabPinned(int index) const {
// Not applicable to android.
return false;
diff --git a/chrome/browser/ui/android/tab_model/android_live_tab_context.h b/chrome/browser/ui/android/tab_model/android_live_tab_context.h
index d91155f1..b95cec1 100644
--- a/chrome/browser/ui/android/tab_model/android_live_tab_context.h
+++ b/chrome/browser/ui/android/tab_model/android_live_tab_context.h
@@ -14,6 +14,10 @@
#include "components/tab_groups/tab_group_id.h"
#include "components/tab_groups/tab_group_visual_data.h"
+namespace base {
+class Uuid;
+}
+
namespace content {
class WebContents;
}
@@ -47,6 +51,8 @@
int index) const override;
const tab_groups::TabGroupVisualData* GetVisualDataForGroup(
const tab_groups::TabGroupId& group) const override;
+ const std::optional<base::Uuid> GetSavedTabGroupIdForGroup(
+ const tab_groups::TabGroupId& group) const override;
bool IsTabPinned(int index) const override;
void SetVisualDataForGroup(
const tab_groups::TabGroupId& group,
diff --git a/chrome/browser/ui/browser_live_tab_context.cc b/chrome/browser/ui/browser_live_tab_context.cc
index 10f4df2..71c1dc4 100644
--- a/chrome/browser/ui/browser_live_tab_context.cc
+++ b/chrome/browser/ui/browser_live_tab_context.cc
@@ -5,11 +5,13 @@
#include "chrome/browser/ui/browser_live_tab_context.h"
#include <memory>
+#include <optional>
#include <utility>
#include "base/feature_list.h"
#include "base/metrics/histogram_macros.h"
#include "base/token.h"
+#include "base/uuid.h"
#include "base/values.h"
#include "chrome/browser/apps/app_service/web_contents_app_id_utils.h"
#include "chrome/browser/browser_features.h"
@@ -23,12 +25,15 @@
#include "chrome/browser/ui/browser_tab_strip_model_delegate.h"
#include "chrome/browser/ui/browser_tabrestore.h"
#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_keyed_service.h"
+#include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_service_factory.h"
#include "chrome/browser/ui/tabs/tab_group.h"
#include "chrome/browser/ui/tabs/tab_group_model.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/ui_features.h"
#include "chrome/browser/web_applications/web_app_helpers.h"
#include "chrome/common/buildflags.h"
+#include "components/saved_tab_groups/saved_tab_group.h"
#include "components/sessions/content/content_live_tab.h"
#include "components/sessions/content/content_platform_specific_tab_data.h"
#include "components/sessions/core/session_types.h"
@@ -146,6 +151,27 @@
->visual_data();
}
+const std::optional<base::Uuid>
+BrowserLiveTabContext::GetSavedTabGroupIdForGroup(
+ const tab_groups::TabGroupId& group) const {
+ if (!base::FeatureList::IsEnabled(features::kTabGroupsSaveV2)) {
+ return std::nullopt;
+ }
+
+ Profile* profile = browser_->profile();
+ tab_groups::SavedTabGroupKeyedService* const service =
+ tab_groups::SavedTabGroupServiceFactory::GetForProfile(profile);
+
+ const tab_groups::SavedTabGroup* const saved_group =
+ service->model()->Get(group);
+
+ if (!saved_group) {
+ return std::nullopt;
+ }
+
+ return saved_group->saved_guid();
+}
+
bool BrowserLiveTabContext::IsTabPinned(int index) const {
return browser_->tab_strip_model()->IsTabPinned(index);
}
diff --git a/chrome/browser/ui/browser_live_tab_context.h b/chrome/browser/ui/browser_live_tab_context.h
index 73b5567..522c5fc 100644
--- a/chrome/browser/ui/browser_live_tab_context.h
+++ b/chrome/browser/ui/browser_live_tab_context.h
@@ -18,6 +18,10 @@
class Browser;
class Profile;
+namespace base {
+class Uuid;
+}
+
namespace content {
class WebContents;
}
@@ -54,6 +58,8 @@
int index) const override;
const tab_groups::TabGroupVisualData* GetVisualDataForGroup(
const tab_groups::TabGroupId& group) const override;
+ const std::optional<base::Uuid> GetSavedTabGroupIdForGroup(
+ const tab_groups::TabGroupId& group) const override;
bool IsTabPinned(int index) const override;
void SetVisualDataForGroup(
const tab_groups::TabGroupId& group,
diff --git a/components/sessions/core/live_tab_context.h b/components/sessions/core/live_tab_context.h
index 27d4c3c..1ccb180 100644
--- a/components/sessions/core/live_tab_context.h
+++ b/components/sessions/core/live_tab_context.h
@@ -18,6 +18,10 @@
#include "third_party/skia/include/core/SkColor.h"
#include "ui/base/ui_base_types.h"
+namespace base {
+class Uuid;
+}
+
namespace gfx {
class Rect;
}
@@ -52,6 +56,8 @@
// |group|.
virtual const tab_groups::TabGroupVisualData* GetVisualDataForGroup(
const tab_groups::TabGroupId& group) const = 0;
+ virtual const std::optional<base::Uuid> GetSavedTabGroupIdForGroup(
+ const tab_groups::TabGroupId& group) const = 0;
virtual bool IsTabPinned(int index) const = 0;
// Update |group|'s metadata. Should only be called for |group| if a tab has
// been restored in |group| via AddRestoredTab() or ReplaceRestoredTab().
diff --git a/ios/chrome/browser/sessions/live_tab_context_browser_agent.h b/ios/chrome/browser/sessions/live_tab_context_browser_agent.h
index c0f61ba3..09dcd9c 100644
--- a/ios/chrome/browser/sessions/live_tab_context_browser_agent.h
+++ b/ios/chrome/browser/sessions/live_tab_context_browser_agent.h
@@ -16,6 +16,10 @@
#import "ios/chrome/browser/shared/model/browser/browser_observer.h"
#import "ios/chrome/browser/shared/model/browser/browser_user_data.h"
+namespace base {
+class Uuid;
+}
+
class WebStateList;
// Implementation of sessions::LiveTabContext which uses a WebStateList
@@ -47,6 +51,8 @@
int index) const override;
const tab_groups::TabGroupVisualData* GetVisualDataForGroup(
const tab_groups::TabGroupId& group) const override;
+ const std::optional<base::Uuid> GetSavedTabGroupIdForGroup(
+ const tab_groups::TabGroupId& group) const override;
bool IsTabPinned(int index) const override;
void SetVisualDataForGroup(
const tab_groups::TabGroupId& group,
diff --git a/ios/chrome/browser/sessions/live_tab_context_browser_agent.mm b/ios/chrome/browser/sessions/live_tab_context_browser_agent.mm
index 6831745..4c95115 100644
--- a/ios/chrome/browser/sessions/live_tab_context_browser_agent.mm
+++ b/ios/chrome/browser/sessions/live_tab_context_browser_agent.mm
@@ -10,6 +10,7 @@
#import "base/notreached.h"
#import "base/strings/sys_string_conversions.h"
+#import "base/uuid.h"
#import "components/sessions/core/session_types.h"
#import "components/tab_groups/tab_group_id.h"
#import "components/tab_groups/tab_group_visual_data.h"
@@ -97,6 +98,14 @@
return false;
}
+const std::optional<base::Uuid>
+LiveTabContextBrowserAgent::GetSavedTabGroupIdForGroup(
+ const tab_groups::TabGroupId& group) const {
+ // Not supported by iOS... yet.
+ NOTREACHED();
+ return std::nullopt;
+}
+
void LiveTabContextBrowserAgent::SetVisualDataForGroup(
const tab_groups::TabGroupId& group,
const tab_groups::TabGroupVisualData& visual_data) {