[Side Search] Window and Tab state restoration logic.

Adds fields to the TabRestoreService's Window and Tab structs to support
storing and restoring optional data that might be present only on
certain platforms. The `extra_data` fields leverage the base::Value type
that can be suitable for different types of data.

Proposal document:
https://docs.google.com/document/d/1vnCNPDGY5MQNND0_q4HxrsGI9SvX47q8S2Bmkv05-Vo/edit?usp=sharing

Bug: 1262614
Change-Id: I52b1423f480c8adcaab6f44ea1c144a9d3a61625
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3242842
Reviewed-by: Rohit Rao <[email protected]>
Reviewed-by: Scott Violet <[email protected]>
Reviewed-by: Thomas Lukaszewicz <[email protected]>
Commit-Queue: Roman Arora <[email protected]>
Cr-Commit-Position: refs/heads/main@{#941003}
diff --git a/chrome/browser/ui/browser_live_tab_context.h b/chrome/browser/ui/browser_live_tab_context.h
index f1b4a51..80b77a37 100644
--- a/chrome/browser/ui/browser_live_tab_context.h
+++ b/chrome/browser/ui/browser_live_tab_context.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_BROWSER_UI_BROWSER_LIVE_TAB_CONTEXT_H_
 #define CHROME_BROWSER_UI_BROWSER_LIVE_TAB_CONTEXT_H_
 
+#include <map>
 #include <string>
 #include <vector>
 
@@ -17,6 +18,10 @@
 class Browser;
 class Profile;
 
+namespace base {
+class Value;
+}
+
 namespace content {
 class WebContents;
 }
@@ -45,18 +50,20 @@
   std::string GetUserTitle() const override;
   sessions::LiveTab* GetLiveTabAt(int index) const override;
   sessions::LiveTab* GetActiveLiveTab() const override;
-  bool IsTabPinned(int index) const override;
+  std::map<std::string, base::Value> GetExtraDataForTab(
+      int index) const override;
+  std::map<std::string, base::Value> GetExtraDataForWindow() const override;
   absl::optional<tab_groups::TabGroupId> GetTabGroupForTab(
       int index) const override;
   const tab_groups::TabGroupVisualData* GetVisualDataForGroup(
       const tab_groups::TabGroupId& group) const override;
+  bool IsTabPinned(int index) const override;
   void SetVisualDataForGroup(
       const tab_groups::TabGroupId& group,
       const tab_groups::TabGroupVisualData& visual_data) override;
   const gfx::Rect GetRestoredBounds() const override;
   ui::WindowShowState GetRestoredState() const override;
   std::string GetWorkspace() const override;
-
   sessions::LiveTab* AddRestoredTab(
       const std::vector<sessions::SerializedNavigationEntry>& navigations,
       int tab_index,
@@ -68,6 +75,7 @@
       bool pin,
       const sessions::PlatformSpecificTabData* storage_namespace,
       const sessions::SerializedUserAgentOverride& user_agent_override,
+      const std::map<std::string, base::Value>& extra_data,
       const SessionID* tab_id) override;
   sessions::LiveTab* ReplaceRestoredTab(
       const std::vector<sessions::SerializedNavigationEntry>& navigations,
@@ -75,17 +83,19 @@
       int selected_navigation,
       const std::string& extension_app_id,
       const sessions::PlatformSpecificTabData* tab_platform_data,
-      const sessions::SerializedUserAgentOverride& user_agent_override)
-      override;
+      const sessions::SerializedUserAgentOverride& user_agent_override,
+      const std::map<std::string, base::Value>& extra_data) override;
   void CloseTab() override;
 
   // see Browser::Create
-  static sessions::LiveTabContext* Create(Profile* profile,
-                                          const std::string& app_name,
-                                          const gfx::Rect& bounds,
-                                          ui::WindowShowState show_state,
-                                          const std::string& workspace,
-                                          const std::string& user_title);
+  static sessions::LiveTabContext* Create(
+      Profile* profile,
+      const std::string& app_name,
+      const gfx::Rect& bounds,
+      ui::WindowShowState show_state,
+      const std::string& workspace,
+      const std::string& user_title,
+      const std::map<std::string, base::Value>& extra_data);
 
   // see browser::FindBrowserForWebContents
   static sessions::LiveTabContext* FindContextForWebContents(