Revert "Reland "[IME] Remove IME UIL flags.""

This reverts commit b7ab664da791fa343cd657634d210034cd3116d0.

Reason for revert: The inputs.VirtualKeyboard are failing again (right after this CL was relanded. 
https://ci.chromium.org/p/chrome/builders/ci/chromeos-betty-pi-arc-cfi-thin-lto-chrome/12767
(see the overview and blamelist tabs)

Original change's description:
> Reland "[IME] Remove IME UIL flags."
>
> This reverts commit 583caa18f537ed1029fd80c98bc7d8fda3cc23c1.
>
> Reason for revert: The failed tast tests have been fixed in crrev.com/c/2509530. So reland the flags updates now.
>
> Original change's description:
> > Revert "[IME] Remove IME UIL flags."
> >
> > This reverts commit 20fb36e3013a858109ecbf871d059e32edae1816.
> >
> > Reason for revert: speculative revert for chrome_all_tast_tests
> > failures affecting inputs.VirtualKeyboard* tests, for example
> > https://ci.chromium.org/p/chrome/builders/ci/chromeos-betty-pi-arc-chrome/9751
> >
> > Original change's description:
> > > [IME] Remove IME UIL flags.
> > >
> > > Simplify the UIL/IME service dev/testing.
> > >
> > > TEST=simple chrome
> > > BUG=b/171846787
> > >
> > > Change-Id: Ibeef37bc89b848cffd5a4a08d5619d41a5c35b33
> > > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2507236
> > > Reviewed-by: Darren Shen <[email protected]>
> > > Commit-Queue: Leo Zhang <[email protected]>
> > > Cr-Commit-Position: refs/heads/master@{#822479}
> >
> > [email protected],[email protected],[email protected]
> >
> > Change-Id: I2c2a4ccda60320dd7099afcfc28a12122b11e982
> > No-Presubmit: true
> > No-Tree-Checks: true
> > No-Try: true
> > Bug: b/171846787
> > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2509749
> > Reviewed-by: Mikel Astiz <[email protected]>
> > Commit-Queue: Mikel Astiz <[email protected]>
> > Cr-Commit-Position: refs/heads/master@{#822582}
>
> [email protected],[email protected],[email protected],[email protected]
>
> # Not skipping CQ checks because original CL landed > 1 day ago.
>
> Bug: b/171846787
> Change-Id: Ia120b5b89fba677cf3f9ecc592ebc1bd5db14804
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2512630
> Reviewed-by: Leo Zhang <[email protected]>
> Commit-Queue: Leo Zhang <[email protected]>
> Cr-Commit-Position: refs/heads/master@{#823077}

[email protected],[email protected],[email protected],[email protected]

Change-Id: I8f8cb41509b168d5e3dbc0e77f51f48077330d9f
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: b/171846787
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2513647
Reviewed-by: Michael Ershov <[email protected]>
Commit-Queue: Michael Ershov <[email protected]>
Cr-Commit-Position: refs/heads/master@{#823097}
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 1e28ecb3..2084664 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -3581,6 +3581,18 @@
      flag_descriptions::kImeEmojiSuggestAdditionName,
      flag_descriptions::kImeEmojiSuggestAdditionDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(chromeos::features::kEmojiSuggestAddition)},
+    {"enable-cros-ime-input-logic-fst",
+     flag_descriptions::kImeInputLogicFstName,
+     flag_descriptions::kImeInputLogicFstDescription, kOsCrOS,
+     FEATURE_VALUE_TYPE(chromeos::features::kImeInputLogicFst)},
+    {"enable-cros-ime-input-logic-hmm",
+     flag_descriptions::kImeInputLogicHmmName,
+     flag_descriptions::kImeInputLogicHmmDescription, kOsCrOS,
+     FEATURE_VALUE_TYPE(chromeos::features::kImeInputLogicHmm)},
+    {"enable-cros-ime-input-logic-mozc",
+     flag_descriptions::kImeInputLogicMozcName,
+     flag_descriptions::kImeInputLogicMozcDescription, kOsCrOS,
+     FEATURE_VALUE_TYPE(chromeos::features::kImeInputLogicMozc)},
     {"enable-cros-ime-mozc-proto", flag_descriptions::kImeMozcProtoName,
      flag_descriptions::kImeMozcProtoDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(chromeos::features::kImeMozcProto)},
diff --git a/chrome/browser/extensions/api/virtual_keyboard_private/chrome_virtual_keyboard_delegate.cc b/chrome/browser/extensions/api/virtual_keyboard_private/chrome_virtual_keyboard_delegate.cc
index 97d57a44..19f5426 100644
--- a/chrome/browser/extensions/api/virtual_keyboard_private/chrome_virtual_keyboard_delegate.cc
+++ b/chrome/browser/extensions/api/virtual_keyboard_private/chrome_virtual_keyboard_delegate.cc
@@ -410,21 +410,23 @@
       "floatingkeyboarddefault",
       base::FeatureList::IsEnabled(
           chromeos::features::kVirtualKeyboardFloatingDefault)));
-
-  // Flag used to enable system built-in IME decoder instead of NaCl.
-  bool mojoDecoder =
-      base::FeatureList::IsEnabled(chromeos::features::kImeMojoDecoder);
-  features->AppendString(GenerateFeatureFlag("usemojodecoder", mojoDecoder));
-  // Enabling MojoDecoder implies the 2 previous flags are auto-enabled.
-  //   * fstinputlogic
-  //   * hmminputlogic
-  // TODO(b/171846787): Remove the 3 flags after they are removed from clients.
-  features->AppendString(GenerateFeatureFlag("fstinputlogic", mojoDecoder));
-  features->AppendString(GenerateFeatureFlag("hmminputlogic", mojoDecoder));
   features->AppendString(GenerateFeatureFlag(
       "imemozcproto",
       base::FeatureList::IsEnabled(chromeos::features::kImeMozcProto)));
-
+  // 3 flags below are used to enable IME new APIs on each decoder.
+  features->AppendString(GenerateFeatureFlag(
+      "fstinputlogic",
+      base::FeatureList::IsEnabled(chromeos::features::kImeInputLogicFst)));
+  features->AppendString(GenerateFeatureFlag(
+      "hmminputlogic",
+      base::FeatureList::IsEnabled(chromeos::features::kImeInputLogicHmm)));
+  features->AppendString(GenerateFeatureFlag(
+      "mozcinputlogic",
+      base::FeatureList::IsEnabled(chromeos::features::kImeInputLogicMozc)));
+  // Flag used to enable system built-in IME decoder instead of NaCl.
+  features->AppendString(GenerateFeatureFlag(
+      "usemojodecoder",
+      base::FeatureList::IsEnabled(chromeos::features::kImeMojoDecoder)));
   features->AppendString(GenerateFeatureFlag(
       "borderedkey", base::FeatureList::IsEnabled(
                          chromeos::features::kVirtualKeyboardBorderedKey)));
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 779d83c..535be313 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -1350,6 +1350,21 @@
     "expiry_milestone": 90
   },
   {
+    "name": "enable-cros-ime-input-logic-fst",
+    "owners": [ "[email protected]" ],
+    "expiry_milestone": 90
+  },
+  {
+    "name": "enable-cros-ime-input-logic-hmm",
+    "owners": [ "[email protected]" ],
+    "expiry_milestone": 90
+  },
+  {
+    "name": "enable-cros-ime-input-logic-mozc",
+    "owners": [ "[email protected]" ],
+    "expiry_milestone": 90
+  },
+  {
     "name": "enable-cros-ime-mozc-proto",
     "owners": [ "[email protected]" ],
     "expiry_milestone": 90
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 7c995b3..4e3cf562 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -4221,6 +4221,18 @@
 const char kImeEmojiSuggestAdditionDescription[] =
     "Enable emoji suggestion as addition to the text written for native IME.";
 
+const char kImeInputLogicFstName[] = "Enable FST Input Logic on IME";
+const char kImeInputLogicFstDescription[] =
+    "Enable FST Input Logic to replace the IME legacy input logic on NaCl";
+
+const char kImeInputLogicHmmName[] = "Enable HMM Input Logic on IME";
+const char kImeInputLogicHmmDescription[] =
+    "Enable HMM Input Logic to replace the IME legacy input logic on NaCl";
+
+const char kImeInputLogicMozcName[] = "Enable MOZC Input Logic on IME";
+const char kImeInputLogicMozcDescription[] =
+    "Enable MOZC Input Logic to replace the IME legacy input logic on NaCl";
+
 const char kImeMozcProtoName[] = "Enable protobuf on Japanese IME";
 const char kImeMozcProtoDescription[] =
     "Enable Japanese IME to use protobuf as interactive message format to "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index d108a1c..17a957b 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -2460,6 +2460,15 @@
 extern const char kImeEmojiSuggestAdditionName[];
 extern const char kImeEmojiSuggestAdditionDescription[];
 
+extern const char kImeInputLogicFstName[];
+extern const char kImeInputLogicFstDescription[];
+
+extern const char kImeInputLogicHmmName[];
+extern const char kImeInputLogicHmmDescription[];
+
+extern const char kImeInputLogicMozcName[];
+extern const char kImeInputLogicMozcDescription[];
+
 extern const char kImeMozcProtoName[];
 extern const char kImeMozcProtoDescription[];
 
diff --git a/chromeos/constants/chromeos_features.cc b/chromeos/constants/chromeos_features.cc
index f8c959bb..cc7a3a9 100644
--- a/chromeos/constants/chromeos_features.cc
+++ b/chromeos/constants/chromeos_features.cc
@@ -367,6 +367,21 @@
 const base::Feature kHelpAppSearchServiceIntegration{
     "HelpAppSearchServiceIntegration", base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Enable or disable Unified Input Logic for HMM decoder in the IME extension
+// on Chrome OS.
+const base::Feature kImeInputLogicHmm{"ImeInputLogicHmm",
+                                      base::FEATURE_DISABLED_BY_DEFAULT};
+
+// Enable or disable Unified Input Logic for FST decoder in the IME extension
+// on Chrome OS.
+const base::Feature kImeInputLogicFst{"ImeInputLogicFst",
+                                      base::FEATURE_ENABLED_BY_DEFAULT};
+
+// Enable or disable Unified Input Logic for Mozc decoder in the IME extension
+// on Chrome OS.
+const base::Feature kImeInputLogicMozc{"ImeInputLogicMozc",
+                                       base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Enable or disable IME decoder via Mojo connection on Chrome OS.
 const base::Feature kImeMojoDecoder{"ImeMojoDecoder",
                                     base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chromeos/constants/chromeos_features.h b/chromeos/constants/chromeos_features.h
index b93d23c..5a1cbf5 100644
--- a/chromeos/constants/chromeos_features.h
+++ b/chromeos/constants/chromeos_features.h
@@ -170,6 +170,12 @@
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 extern const base::Feature kHelpAppSearchServiceIntegration;
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
+extern const base::Feature kImeInputLogicHmm;
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
+extern const base::Feature kImeInputLogicFst;
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
+extern const base::Feature kImeInputLogicMozc;
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 extern const base::Feature kImeMojoDecoder;
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 extern const base::Feature kImeOptionsInSettings;