[ios] Move kEnableSessionSerializationOptimizations

The feature flag kEnableSessionSerializationOptimizations is only
used by Chrome on iOS, so move the feature flag definition from
//ios/web/common to //ios/chrome/browser/sessions.

Bug: 1383087
Change-Id: I1a6dfed70d20f70c398e64cc4c52349e14eb09d0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5224163
Reviewed-by: Federica Germinario <fedegermi@google.com>
Auto-Submit: Sylvain Defresne <sdefresne@chromium.org>
Commit-Queue: Sylvain Defresne <sdefresne@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1250730}
diff --git a/ios/chrome/app/BUILD.gn b/ios/chrome/app/BUILD.gn
index cd7a528..c274e95 100644
--- a/ios/chrome/app/BUILD.gn
+++ b/ios/chrome/app/BUILD.gn
@@ -547,6 +547,7 @@
     "//ios/chrome/browser/search_engines/model",
     "//ios/chrome/browser/search_engines/model:extension_search_engine_data_updater",
     "//ios/chrome/browser/search_engines/model:search_engines_util",
+    "//ios/chrome/browser/sessions:features",
     "//ios/chrome/browser/sessions:session_restoration_service",
     "//ios/chrome/browser/sessions:session_restoration_service_factory",
     "//ios/chrome/browser/sessions:session_util",
@@ -594,7 +595,6 @@
     "//ios/public/provider/chrome/browser/ui_utils:ui_utils_api",
     "//ios/public/provider/chrome/browser/user_feedback:user_feedback_api",
     "//ios/third_party/material_components_ios",
-    "//ios/web/common:features",
     "//ios/web/common:uikit",
     "//ios/web/public/webui",
     "//net",
diff --git a/ios/chrome/app/main_controller.mm b/ios/chrome/app/main_controller.mm
index cbd9c65fe..f189cb7 100644
--- a/ios/chrome/app/main_controller.mm
+++ b/ios/chrome/app/main_controller.mm
@@ -91,6 +91,7 @@
 #import "ios/chrome/browser/search_engines/model/extension_search_engine_data_updater.h"
 #import "ios/chrome/browser/search_engines/model/search_engines_util.h"
 #import "ios/chrome/browser/search_engines/model/template_url_service_factory.h"
+#import "ios/chrome/browser/sessions/features.h"
 #import "ios/chrome/browser/sessions/session_restoration_service.h"
 #import "ios/chrome/browser/sessions/session_restoration_service_factory.h"
 #import "ios/chrome/browser/sessions/session_util.h"
@@ -150,10 +151,6 @@
 #import "ios/chrome/app/dump_documents_statistics.h"
 #endif  // BUILDFLAG(IOS_ENABLE_SANDBOX_DUMP)
 
-// To get access to web::features::kEnableSessionSerializationOptimizations.
-// TODO(crbug.com/1504753): remove once the feature is fully launched.
-#import "ios/web/common/features.h"
-
 namespace {
 
 #if BUILDFLAG(FAST_APP_TERMINATE_ENABLED)
@@ -561,7 +558,7 @@
 - (void)performBrowserBackgroundInitialisation:(ProceduralBlock)completion {
   // Migrate the session storage based on the feature.
   const SessionRestorationServiceFactory::StorageFormat requested_format =
-      web::features::UseSessionSerializationOptimizations()
+      session::features::UseSessionSerializationOptimizations()
           ? SessionRestorationServiceFactory::kOptimized
           : SessionRestorationServiceFactory::kLegacy;
 
diff --git a/ios/chrome/browser/flags/BUILD.gn b/ios/chrome/browser/flags/BUILD.gn
index 35c174b..6bab7ae 100644
--- a/ios/chrome/browser/flags/BUILD.gn
+++ b/ios/chrome/browser/flags/BUILD.gn
@@ -72,6 +72,7 @@
     "//ios/chrome/browser/policy/model:policy_util",
     "//ios/chrome/browser/promos_manager:features",
     "//ios/chrome/browser/screen_time/model:buildflags",
+    "//ios/chrome/browser/sessions:features",
     "//ios/chrome/browser/shared/public/features",
     "//ios/chrome/browser/shared/public/features:system_flags",
     "//ios/chrome/browser/tabs/model/inactive_tabs:features",
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm
index 2cc3e077..511bff5 100644
--- a/ios/chrome/browser/flags/about_flags.mm
+++ b/ios/chrome/browser/flags/about_flags.mm
@@ -83,6 +83,7 @@
 #import "ios/chrome/browser/policy/model/policy_util.h"
 #import "ios/chrome/browser/promos_manager/features.h"
 #import "ios/chrome/browser/screen_time/model/screen_time_buildflags.h"
+#import "ios/chrome/browser/sessions/features.h"
 #import "ios/chrome/browser/shared/public/features/features.h"
 #import "ios/chrome/browser/shared/public/features/system_flags.h"
 #import "ios/chrome/browser/tabs/model/inactive_tabs/features.h"
@@ -1307,7 +1308,7 @@
      flag_descriptions::kEnableSessionSerializationOptimizationsDescription,
      flags_ui::kOsIos,
      FEATURE_VALUE_TYPE(
-         web::features::kEnableSessionSerializationOptimizations)},
+         session::features::kEnableSessionSerializationOptimizations)},
     {"bottom-omnibox-steady-state",
      flag_descriptions::kBottomOmniboxSteadyStateName,
      flag_descriptions::kBottomOmniboxSteadyStateDescription, flags_ui::kOsIos,
diff --git a/ios/chrome/browser/sessions/BUILD.gn b/ios/chrome/browser/sessions/BUILD.gn
index abcaa35..c7c5375 100644
--- a/ios/chrome/browser/sessions/BUILD.gn
+++ b/ios/chrome/browser/sessions/BUILD.gn
@@ -30,6 +30,14 @@
   frameworks = [ "UIKit.framework" ]
 }
 
+source_set("features") {
+  sources = [
+    "features.cc",
+    "features.h",
+  ]
+  deps = [ "//base" ]
+}
+
 source_set("restoration_observer") {
   sources = [ "session_restoration_observer.h" ]
   public_deps = [ "//base" ]
@@ -228,6 +236,7 @@
     "session_restoration_service_factory.mm",
   ]
   deps = [
+    ":features",
     ":legacy_session_restoration_service",
     ":session_constants",
     ":session_migration",
@@ -241,7 +250,6 @@
     "//ios/chrome/browser/shared/model/browser_state",
     "//ios/chrome/browser/tabs/model:features",
     "//ios/chrome/browser/web/model/session_state",
-    "//ios/web/common:features",
   ]
 }
 
diff --git a/ios/chrome/browser/sessions/features.cc b/ios/chrome/browser/sessions/features.cc
new file mode 100644
index 0000000..25a01d5d
--- /dev/null
+++ b/ios/chrome/browser/sessions/features.cc
@@ -0,0 +1,17 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ios/chrome/browser/sessions/features.h"
+
+namespace session::features {
+
+BASE_FEATURE(kEnableSessionSerializationOptimizations,
+             "EnableSessionSerializationOptimizations",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
+bool UseSessionSerializationOptimizations() {
+  return base::FeatureList::IsEnabled(kEnableSessionSerializationOptimizations);
+}
+
+}  // namespace session::features
diff --git a/ios/chrome/browser/sessions/features.h b/ios/chrome/browser/sessions/features.h
new file mode 100644
index 0000000..8e96e0a
--- /dev/null
+++ b/ios/chrome/browser/sessions/features.h
@@ -0,0 +1,20 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_SESSIONS_FEATURES_H_
+#define IOS_CHROME_BROWSER_SESSIONS_FEATURES_H_
+
+#include "base/feature_list.h"
+
+namespace session::features {
+
+// Feature flag to enable the session serialization optimizations.
+BASE_DECLARE_FEATURE(kEnableSessionSerializationOptimizations);
+
+// When true, session serialization optimizations should be enabled.
+bool UseSessionSerializationOptimizations();
+
+}  // namespace session::features
+
+#endif  // IOS_CHROME_BROWSER_SESSIONS_FEATURES_H_
diff --git a/ios/chrome/browser/sessions/session_restoration_service_factory.mm b/ios/chrome/browser/sessions/session_restoration_service_factory.mm
index 382a3e0..d7b388f 100644
--- a/ios/chrome/browser/sessions/session_restoration_service_factory.mm
+++ b/ios/chrome/browser/sessions/session_restoration_service_factory.mm
@@ -14,6 +14,7 @@
 #import "components/keyed_service/ios/browser_state_dependency_manager.h"
 #import "components/pref_registry/pref_registry_syncable.h"
 #import "components/prefs/pref_service.h"
+#import "ios/chrome/browser/sessions/features.h"
 #import "ios/chrome/browser/sessions/legacy_session_restoration_service.h"
 #import "ios/chrome/browser/sessions/session_constants.h"
 #import "ios/chrome/browser/sessions/session_migration.h"
@@ -24,9 +25,6 @@
 #import "ios/chrome/browser/tabs/model/features.h"
 #import "ios/chrome/browser/web/model/session_state/web_session_state_cache_factory.h"
 
-// TODO(crbug.com/1504753): Remove once the feature has launched.
-#import "ios/web/common/features.h"
-
 namespace {
 
 // Alias for readability.
@@ -357,7 +355,7 @@
   // will have its default value of `SessionStorageFormat::kUnknown`. Use
   // the feature flag to select which implementation to use.
   if (format == SessionStorageFormat::kUnknown) {
-    format = web::features::UseSessionSerializationOptimizations()
+    format = session::features::UseSessionSerializationOptimizations()
                  ? SessionStorageFormat::kOptimized
                  : SessionStorageFormat::kLegacy;
   }
diff --git a/ios/web/common/features.h b/ios/web/common/features.h
index 502a198..c3871bd8 100644
--- a/ios/web/common/features.h
+++ b/ios/web/common/features.h
@@ -77,9 +77,6 @@
 // viewport adjustment experiment is selected via command line switches.
 BASE_DECLARE_FEATURE(kSmoothScrollingDefault);
 
-// Feature flag to enable the session serialization optimizations.
-BASE_DECLARE_FEATURE(kEnableSessionSerializationOptimizations);
-
 // Feature flag that force the use of the synthesized native WKWebView
 // session instead of the (maybe inexistent) saved native session. The
 // purpose of this flag it to allow to testing this code path.
@@ -98,9 +95,6 @@
 // When true, an option to enable Web Inspector should be present in Settings.
 bool IsWebInspectorSupportEnabled();
 
-// When true, session serialization optimizations should be enabled.
-bool UseSessionSerializationOptimizations();
-
 }  // namespace features
 }  // namespace web
 
diff --git a/ios/web/common/features.mm b/ios/web/common/features.mm
index 2d5b82e9..b764551 100644
--- a/ios/web/common/features.mm
+++ b/ios/web/common/features.mm
@@ -86,10 +86,6 @@
 #endif
 );
 
-BASE_FEATURE(kEnableSessionSerializationOptimizations,
-             "EnableSessionSerializationOptimizations",
-             base::FEATURE_DISABLED_BY_DEFAULT);
-
 // This feature will always be disabled and will only be enabled by tests.
 BASE_FEATURE(kForceSynthesizedRestoreSession,
              "ForceSynthesizedRestoreSession",
@@ -117,9 +113,5 @@
   return false;
 }
 
-bool UseSessionSerializationOptimizations() {
-  return base::FeatureList::IsEnabled(kEnableSessionSerializationOptimizations);
-}
-
 }  // namespace features
 }  // namespace web