kiosk: Move KioskVision to chromeos/ash/components/kiosk

Bug: b:332685823
Test: testing/xvfb.py tools/autotest.py -C out_/Default chromeos/ash/components/kiosk/vision/kiosk_vision_unittest.cc
Change-Id: Ife5e87934456a674c3b66afb5bb3e4a073ed3e82
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5424733
Reviewed-by: Hidehiko Abe <hidehiko@chromium.org>
Reviewed-by: Jeroen Dhollander <jeroendh@google.com>
Commit-Queue: Edman Anjos <edman@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1283201}
diff --git a/chrome/browser/ash/BUILD.gn b/chrome/browser/ash/BUILD.gn
index 4f71a1a..f87d8b76 100644
--- a/chrome/browser/ash/BUILD.gn
+++ b/chrome/browser/ash/BUILD.gn
@@ -3722,7 +3722,6 @@
     "//chrome/app/vector_icons",
     "//chrome/browser:browser_process",
     "//chrome/browser/apps/almanac_api_client",
-    "//chrome/browser/ash/app_mode/vision",
     "//chrome/browser/ash/arc/input_overlay/db/proto",
     "//chrome/browser/ash/borealis:borealis_installer_types_mojom",
     "//chrome/browser/ash/crosapi",
@@ -4238,6 +4237,7 @@
     "//chromeos/ash/components/game_mode",
     "//chromeos/ash/components/growth",
     "//chromeos/ash/components/growth:config_provider",
+    "//chromeos/ash/components/kiosk/vision",
     "//chromeos/ash/components/language_packs",
     "//chromeos/ash/components/local_search_service/public/cpp",
     "//chromeos/ash/components/mojo_service_manager",
@@ -6305,7 +6305,6 @@
     "//chrome/browser/ash/app_list/search/ranking:proto",
     "//chrome/browser/ash/app_list/search/util:proto",
     "//chrome/browser/ash/app_list/vector_icons",
-    "//chrome/browser/ash/app_mode/vision:unit_test_sources",
     "//chrome/browser/ash/arc/input_overlay/db/proto",
     "//chrome/browser/ash/borealis:borealis_installer_types_mojom",
     "//chrome/browser/ash/crosapi",
diff --git a/chrome/browser/ash/app_mode/kiosk_system_session.cc b/chrome/browser/ash/app_mode/kiosk_system_session.cc
index 3b159cb6..bd9f5fb6d 100644
--- a/chrome/browser/ash/app_mode/kiosk_system_session.cc
+++ b/chrome/browser/ash/app_mode/kiosk_system_session.cc
@@ -20,8 +20,6 @@
 #include "chrome/browser/ash/app_mode/kiosk_mode_idle_app_name_notification.h"
 #include "chrome/browser/ash/app_mode/metrics/network_connectivity_metrics_service.h"
 #include "chrome/browser/ash/app_mode/metrics/periodic_metrics_service.h"
-#include "chrome/browser/ash/app_mode/vision/kiosk_vision.h"
-#include "chrome/browser/ash/app_mode/vision/pref_names.h"
 #include "chrome/browser/ash/crosapi/browser_manager.h"
 #include "chrome/browser/ash/crosapi/browser_manager_observer.h"
 #include "chrome/browser/ash/crosapi/browser_util.h"
@@ -31,6 +29,7 @@
 #include "chrome/browser/browser_process_platform_part.h"
 #include "chrome/browser/lifetime/application_lifetime.h"
 #include "chrome/common/pref_names.h"
+#include "chromeos/ash/components/kiosk/vision/kiosk_vision.h"
 #include "components/prefs/pref_service.h"
 #include "components/user_manager/user.h"
 #include "extensions/browser/extension_registry.h"
@@ -155,8 +154,7 @@
 
 // static
 void KioskSystemSession::RegisterLocalStatePrefs(PrefRegistrySimple* registry) {
-  registry->RegisterBooleanPref(prefs::kKioskVisionTelemetryEnabled,
-                                /*default_value=*/false);
+  kiosk_vision::RegisterLocalStatePrefs(registry);
   policy::DeviceWeeklyScheduledSuspendPolicyHandler::RegisterLocalStatePrefs(
       registry);
 }
diff --git a/chrome/browser/ash/app_mode/kiosk_system_session.h b/chrome/browser/ash/app_mode/kiosk_system_session.h
index 07bf4181..6b221bd5 100644
--- a/chrome/browser/ash/app_mode/kiosk_system_session.h
+++ b/chrome/browser/ash/app_mode/kiosk_system_session.h
@@ -12,8 +12,8 @@
 #include "chrome/browser/ash/app_mode/kiosk_app_types.h"
 #include "chrome/browser/ash/app_mode/metrics/low_disk_metrics_service.h"
 #include "chrome/browser/ash/app_mode/metrics/periodic_metrics_service.h"
-#include "chrome/browser/ash/app_mode/vision/kiosk_vision.h"
 #include "chrome/browser/chromeos/app_mode/kiosk_browser_session.h"
+#include "chromeos/ash/components/kiosk/vision/kiosk_vision.h"
 
 class PrefRegistrySimple;
 
diff --git a/chromeos/ash/components/BUILD.gn b/chromeos/ash/components/BUILD.gn
index d520d7fd..f495149 100644
--- a/chromeos/ash/components/BUILD.gn
+++ b/chromeos/ash/components/BUILD.gn
@@ -30,6 +30,7 @@
     "//chromeos/ash/components/hid_detection:unit_tests",
     "//chromeos/ash/components/human_presence:unit_tests",
     "//chromeos/ash/components/install_attributes:unit_tests",
+    "//chromeos/ash/components/kiosk/vision:unit_tests",
     "//chromeos/ash/components/language_packs:unit_tests",
     "//chromeos/ash/components/local_search_service:unit_tests",
     "//chromeos/ash/components/local_search_service/public/mojom:unit_tests",
diff --git a/chromeos/ash/components/kiosk/OWNERS b/chromeos/ash/components/kiosk/OWNERS
new file mode 100644
index 0000000..f782149
--- /dev/null
+++ b/chromeos/ash/components/kiosk/OWNERS
@@ -0,0 +1 @@
+file://chromeos/components/kiosk/OWNERS
diff --git a/chrome/browser/ash/app_mode/vision/BUILD.gn b/chromeos/ash/components/kiosk/vision/BUILD.gn
similarity index 65%
rename from chrome/browser/ash/app_mode/vision/BUILD.gn
rename to chromeos/ash/components/kiosk/vision/BUILD.gn
index d6c8397..c7359422 100644
--- a/chrome/browser/ash/app_mode/vision/BUILD.gn
+++ b/chromeos/ash/components/kiosk/vision/BUILD.gn
@@ -6,7 +6,8 @@
 
 assert(is_chromeos_ash)
 
-source_set("vision") {
+component("vision") {
+  defines = [ "IS_KIOSK_VISION_IMPL" ]
   sources = [
     "kiosk_vision.cc",
     "kiosk_vision.h",
@@ -15,8 +16,8 @@
   deps = [
     ":internal",
     "//base",
-    "//chrome/browser:browser_process",
     "//chromeos/ash/components/dbus/dlcservice",
+    "//chromeos/ash/components/dbus/dlcservice:dlcservice_proto",
     "//components/prefs:prefs",
   ]
 }
@@ -38,24 +39,31 @@
   ]
 }
 
-source_set("unit_test_sources") {
+source_set("unit_tests") {
   testonly = true
   sources = [ "kiosk_vision_unittest.cc" ]
   deps = [
     ":vision",
     "//base",
-    "//chrome/test:test_support",
+    "//base/test:test_support",
     "//chromeos/ash/components/dbus/dlcservice",
+    "//chromeos/ash/components/dbus/dlcservice:dlcservice_proto",
+    "//components/prefs:prefs",
+    "//components/prefs:test_support",
     "//testing/gtest",
   ]
 }
 
 test("kiosk_vision_unit_tests") {
   testonly = true
+  sources = [ "//chromeos/test/run_all_unittests.cc" ]
   deps = [
-    ":unit_test_sources",
+    ":unit_tests",
     ":vision",
-    "//chrome/test:test_support_unit",
+    "//base",
+    "//base/test:test_support",
+    "//chromeos/ash/components:test_support",
+    "//mojo/core/embedder",
     "//testing/gtest",
   ]
 }
diff --git a/chromeos/ash/components/kiosk/vision/DEPS b/chromeos/ash/components/kiosk/vision/DEPS
new file mode 100644
index 0000000..d171346
--- /dev/null
+++ b/chromeos/ash/components/kiosk/vision/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+  "+chromeos/ash/components/dbus/dlcservice",
+]
diff --git a/chrome/browser/ash/app_mode/vision/internal/pref_observer.cc b/chromeos/ash/components/kiosk/vision/internal/pref_observer.cc
similarity index 90%
rename from chrome/browser/ash/app_mode/vision/internal/pref_observer.cc
rename to chromeos/ash/components/kiosk/vision/internal/pref_observer.cc
index 139df109..75187cd 100644
--- a/chrome/browser/ash/app_mode/vision/internal/pref_observer.cc
+++ b/chromeos/ash/components/kiosk/vision/internal/pref_observer.cc
@@ -2,14 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/ash/app_mode/vision/internal/pref_observer.h"
+#include "chromeos/ash/components/kiosk/vision/internal/pref_observer.h"
 
 #include <utility>
 
 #include "base/check_deref.h"
 #include "base/functional/bind.h"
 #include "base/functional/callback.h"
-#include "chrome/browser/ash/app_mode/vision/pref_names.h"
+#include "chromeos/ash/components/kiosk/vision/pref_names.h"
 #include "components/prefs/pref_service.h"
 
 namespace ash::kiosk_vision {
diff --git a/chrome/browser/ash/app_mode/vision/internal/pref_observer.h b/chromeos/ash/components/kiosk/vision/internal/pref_observer.h
similarity index 81%
rename from chrome/browser/ash/app_mode/vision/internal/pref_observer.h
rename to chromeos/ash/components/kiosk/vision/internal/pref_observer.h
index 0e2532d9..8dd0b1bc 100644
--- a/chrome/browser/ash/app_mode/vision/internal/pref_observer.h
+++ b/chromeos/ash/components/kiosk/vision/internal/pref_observer.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_ASH_APP_MODE_VISION_INTERNAL_PREF_OBSERVER_H_
-#define CHROME_BROWSER_ASH_APP_MODE_VISION_INTERNAL_PREF_OBSERVER_H_
+#ifndef CHROMEOS_ASH_COMPONENTS_KIOSK_VISION_INTERNAL_PREF_OBSERVER_H_
+#define CHROMEOS_ASH_COMPONENTS_KIOSK_VISION_INTERNAL_PREF_OBSERVER_H_
 
 #include "base/functional/callback_forward.h"
 #include "components/prefs/pref_change_registrar.h"
@@ -35,4 +35,4 @@
 
 }  // namespace ash::kiosk_vision
 
-#endif  // CHROME_BROWSER_ASH_APP_MODE_VISION_INTERNAL_PREF_OBSERVER_H_
+#endif  // CHROMEOS_ASH_COMPONENTS_KIOSK_VISION_INTERNAL_PREF_OBSERVER_H_
diff --git a/chrome/browser/ash/app_mode/vision/kiosk_vision.cc b/chromeos/ash/components/kiosk/vision/kiosk_vision.cc
similarity index 84%
rename from chrome/browser/ash/app_mode/vision/kiosk_vision.cc
rename to chromeos/ash/components/kiosk/vision/kiosk_vision.cc
index 6abc705..9e51f28a 100644
--- a/chrome/browser/ash/app_mode/vision/kiosk_vision.cc
+++ b/chromeos/ash/components/kiosk/vision/kiosk_vision.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/ash/app_mode/vision/kiosk_vision.h"
+#include "chromeos/ash/components/kiosk/vision/kiosk_vision.h"
 
 #include <string>
 #include <utility>
@@ -12,10 +12,11 @@
 #include "base/functional/callback.h"
 #include "base/functional/callback_helpers.h"
 #include "base/logging.h"
-#include "chrome/browser/ash/app_mode/vision/internal/pref_observer.h"
-#include "chrome/browser/browser_process.h"
 #include "chromeos/ash/components/dbus/dlcservice/dlcservice.pb.h"
 #include "chromeos/ash/components/dbus/dlcservice/dlcservice_client.h"
+#include "chromeos/ash/components/kiosk/vision/internal/pref_observer.h"
+#include "chromeos/ash/components/kiosk/vision/pref_names.h"
+#include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
 #include "third_party/cros_system_api/dbus/dlcservice/dbus-constants.h"
 #include "third_party/cros_system_api/mojo/service_constants.h"
@@ -67,6 +68,8 @@
   }
 }
 
+KioskVision::~KioskVision() = default;
+
 void KioskVision::Enable() {
   InstallDlc(base::BindOnce([](std::string dlc_path) {
     // TODO(b/320450634) Subscribe to CrOSCameraService detections.
@@ -77,4 +80,9 @@
   // TODO(b/320450634) Unsubscribe to CrOSCameraService.
 }
 
+void RegisterLocalStatePrefs(PrefRegistrySimple* registry) {
+  registry->RegisterBooleanPref(prefs::kKioskVisionTelemetryEnabled,
+                                /*default_value=*/false);
+}
+
 }  // namespace ash::kiosk_vision
diff --git a/chrome/browser/ash/app_mode/vision/kiosk_vision.h b/chromeos/ash/components/kiosk/vision/kiosk_vision.h
similarity index 63%
rename from chrome/browser/ash/app_mode/vision/kiosk_vision.h
rename to chromeos/ash/components/kiosk/vision/kiosk_vision.h
index f9cb83a..570fb606 100644
--- a/chrome/browser/ash/app_mode/vision/kiosk_vision.h
+++ b/chromeos/ash/components/kiosk/vision/kiosk_vision.h
@@ -2,11 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_ASH_APP_MODE_VISION_KIOSK_VISION_H_
-#define CHROME_BROWSER_ASH_APP_MODE_VISION_KIOSK_VISION_H_
+#ifndef CHROMEOS_ASH_COMPONENTS_KIOSK_VISION_KIOSK_VISION_H_
+#define CHROMEOS_ASH_COMPONENTS_KIOSK_VISION_KIOSK_VISION_H_
 
-#include "chrome/browser/ash/app_mode/vision/internal/pref_observer.h"
+#include "base/component_export.h"
+#include "chromeos/ash/components/kiosk/vision/internal/pref_observer.h"
 #include "components/prefs/pref_change_registrar.h"
+#include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
 
 namespace ash::kiosk_vision {
@@ -17,12 +19,12 @@
 // prefs; communicating with the CrOS camera service to retrieve ML model
 // detections; and processing and forwarding detections to the backend telemetry
 // API and the Kiosk web app.
-class KioskVision {
+class COMPONENT_EXPORT(KIOSK_VISION) KioskVision {
  public:
   explicit KioskVision(PrefService* pref_service);
   KioskVision(const KioskVision&) = delete;
   KioskVision& operator=(const KioskVision&) = delete;
-  ~KioskVision() = default;
+  ~KioskVision();
 
  private:
   void Enable();
@@ -33,6 +35,10 @@
 
 inline constexpr char kKioskVisionDlcId[] = "kiosk-vision";
 
+// Registers prefs used in Kiosk Vision.
+COMPONENT_EXPORT(KIOSK_VISION)
+void RegisterLocalStatePrefs(PrefRegistrySimple* registry);
+
 }  // namespace ash::kiosk_vision
 
-#endif  // CHROME_BROWSER_ASH_APP_MODE_VISION_KIOSK_VISION_H_
+#endif  // CHROMEOS_ASH_COMPONENTS_KIOSK_VISION_KIOSK_VISION_H_
diff --git a/chrome/browser/ash/app_mode/vision/kiosk_vision_unittest.cc b/chromeos/ash/components/kiosk/vision/kiosk_vision_unittest.cc
similarity index 84%
rename from chrome/browser/ash/app_mode/vision/kiosk_vision_unittest.cc
rename to chromeos/ash/components/kiosk/vision/kiosk_vision_unittest.cc
index 81752690..281415d 100644
--- a/chrome/browser/ash/app_mode/vision/kiosk_vision_unittest.cc
+++ b/chromeos/ash/components/kiosk/vision/kiosk_vision_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/ash/app_mode/vision/kiosk_vision.h"
+#include "chromeos/ash/components/kiosk/vision/kiosk_vision.h"
 
 #include <string>
 
@@ -10,15 +10,13 @@
 #include "base/functional/callback.h"
 #include "base/functional/callback_helpers.h"
 #include "base/ranges/algorithm.h"
+#include "base/test/task_environment.h"
 #include "base/test/test_future.h"
-#include "chrome/browser/ash/app_mode/kiosk_system_session.h"
-#include "chrome/browser/ash/app_mode/vision/pref_names.h"
 #include "chromeos/ash/components/dbus/dlcservice/dlcservice.pb.h"
 #include "chromeos/ash/components/dbus/dlcservice/fake_dlcservice_client.h"
+#include "chromeos/ash/components/kiosk/vision/pref_names.h"
 #include "components/prefs/pref_service.h"
 #include "components/prefs/testing_pref_service.h"
-#include "components/sync_preferences/testing_pref_service_syncable.h"
-#include "content/public/test/browser_task_environment.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/cros_system_api/dbus/dlcservice/dbus-constants.h"
@@ -27,8 +25,8 @@
 
 namespace {
 
-void RegisterKioskVisionPrefs(TestingPrefServiceSimple& pref_service) {
-  KioskSystemSession::RegisterLocalStatePrefs(pref_service.registry());
+void RegisterKioskVisionPrefs(TestingPrefServiceSimple& local_state) {
+  RegisterLocalStatePrefs(local_state.registry());
 }
 
 void EnableKioskVisionTelemetryPref(PrefService& pref_service) {
@@ -68,7 +66,7 @@
   void SetUp() override { RegisterKioskVisionPrefs(local_state_); }
 
  protected:
-  content::BrowserTaskEnvironment task_environment_;
+  base::test::TaskEnvironment task_environment_;
   TestingPrefServiceSimple local_state_;
   FakeDlcserviceClient fake_dlcservice_;
 };
diff --git a/chrome/browser/ash/app_mode/vision/pref_names.h b/chromeos/ash/components/kiosk/vision/pref_names.h
similarity index 65%
rename from chrome/browser/ash/app_mode/vision/pref_names.h
rename to chromeos/ash/components/kiosk/vision/pref_names.h
index 97849c7..9ec2ded 100644
--- a/chrome/browser/ash/app_mode/vision/pref_names.h
+++ b/chromeos/ash/components/kiosk/vision/pref_names.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_ASH_APP_MODE_VISION_PREF_NAMES_H_
-#define CHROME_BROWSER_ASH_APP_MODE_VISION_PREF_NAMES_H_
+#ifndef CHROMEOS_ASH_COMPONENTS_KIOSK_VISION_PREF_NAMES_H_
+#define CHROMEOS_ASH_COMPONENTS_KIOSK_VISION_PREF_NAMES_H_
 
 namespace ash::prefs {
 
@@ -13,4 +13,4 @@
 
 }  // namespace ash::prefs
 
-#endif  // CHROME_BROWSER_ASH_APP_MODE_VISION_PREF_NAMES_H_
+#endif  // CHROMEOS_ASH_COMPONENTS_KIOSK_VISION_PREF_NAMES_H_