Reland "Add a new component layer to migrate supervised_user features and services."

This is a reland of commit f3a6582ebbf9084f8fa851be6d107faf0c7ff3d4 that keeps the dependency on unscaled resources.

Original change's description:
> Add a new component layer to migrate supervised_user features and services.
>
> This component will allow supervised user protections to be shared
> across platforms and between multiple embedders of content.
>
> Migrates supervised user error page to //components.
>
> See existing source at https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/supervised_user/.
>
> Bug: b:260402896, b:260390510
> Change-Id: Id60a2f32281b3f1044033029ceb92cf188b0b297
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4061626
> Reviewed-by: Demetrios Papadopoulos <[email protected]>
> Reviewed-by: Colin Blundell <[email protected]>
> Reviewed-by: Richard Coles <[email protected]>
> Commit-Queue: Nohemi Fernandez <[email protected]>
> Reviewed-by: Peter Boström <[email protected]>
> Cr-Commit-Position: refs/heads/main@{#1080987}

Bug: b:260402896, b:260390510
Change-Id: Ic9c93407a464820ce189c97f7d1bfe63d2502d8a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4092104
Reviewed-by: Colin Blundell <[email protected]>
Reviewed-by: Peter Boström <[email protected]>
Reviewed-by: Demetrios Papadopoulos <[email protected]>
Commit-Queue: Nohemi Fernandez <[email protected]>
Reviewed-by: Richard Coles <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1084057}
diff --git a/android_webview/BUILD.gn b/android_webview/BUILD.gn
index 7575e4e..6e539cc 100644
--- a/android_webview/BUILD.gn
+++ b/android_webview/BUILD.gn
@@ -16,6 +16,7 @@
 import("//chrome/android/trichrome.gni")
 import("//components/safe_browsing/buildflags.gni")
 import("//components/spellcheck/spellcheck_build_features.gni")
+import("//components/supervised_user/buildflags.gni")
 import("//device/vr/buildflags/buildflags.gni")
 import("//pdf/features.gni")
 import("//printing/buildflags/buildflags.gni")
@@ -1113,6 +1114,7 @@
   defines = [
     "enable_printing=$enable_printing",
     "safe_browsing_mode=$safe_browsing_mode",
+    "enable_supervised_users=$enable_supervised_users",
   ]
 
   # See :generate_webui_resources for an explanation of the allowlist
diff --git a/chrome/app/OWNERS b/chrome/app/OWNERS
index 46750333..e542c3c 100644
--- a/chrome/app/OWNERS
+++ b/chrome/app/OWNERS
@@ -40,8 +40,6 @@
 per-file [email protected]
 per-file [email protected]
 
-per-file supervised_user_error_page_strings.grdp=file://chrome/browser/supervised_user/OWNERS
-
 per-file vr_strings.grdp=file://chrome/browser/vr/OWNERS
 
 per-file password_manager_ui_strings.grdp=file://chrome/browser/password_manager/OWNERS
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 19b282f..b1cc7c3c 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -346,11 +346,6 @@
         <part file="vr_strings.grdp" />
       </if>
 
-      <!-- Supervised user error page -->
-      <if expr="enable_supervised_users">
-        <part file="supervised_user_error_page_strings.grdp" />
-      </if>
-
       <!-- TODO add all of your "string table" messages here.  Remember to
       change nontranslateable parts of the messages into placeholders (using the
       <ph> element).  You can also use the 'grit add' tool to help you identify
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index d7c913b..da4fa38 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -3461,8 +3461,8 @@
       ]
       deps += [
         "//chrome/browser/supervised_user:jni_headers",
-        "//chrome/browser/supervised_user/supervised_user_error_page",
-        "//chrome/browser/supervised_user/supervised_user_features",
+        "//components/supervised_user/core/browser",
+        "//components/supervised_user/core/common",
       ]
     }
 
@@ -5173,7 +5173,6 @@
       "//chrome/browser/nearby_sharing/scheduling",
       "//chrome/browser/policy:onc",
       "//chrome/browser/resources/chromeos:app_icon_resources",
-      "//chrome/browser/supervised_user:supervised_user_unscaled_resources",
       "//chrome/browser/ui/ash/system_web_apps",
       "//chrome/browser/ui/quick_answers",
       "//chrome/browser/ui/webui/ash/add_supervision:mojo_bindings",
@@ -7762,9 +7761,9 @@
     }
     deps += [
       "//chrome/browser/supervised_user/kids_chrome_management:proto",
-      "//chrome/browser/supervised_user/supervised_user_error_page",
-      "//chrome/browser/supervised_user/supervised_user_features",
       "//chrome/common:supervised_user_commands_mojom",
+      "//components/supervised_user/core/browser",
+      "//components/supervised_user/core/common",
     ]
   }
   if (enable_supervised_users && enable_extensions) {
@@ -8072,7 +8071,6 @@
       "//chrome/browser/resources/chromeos/set_time_dialog:html_wrapper_files",
       "//chrome/browser/resources/chromeos/smb_shares:web_components",
       "//chrome/browser/resources/chromeos/vm:web_components",
-      "//chrome/browser/supervised_user:supervised_user_unscaled_resources",
       "//chrome/browser/ui/webui/ash/add_supervision:mojo_bindings_js",
       "//chrome/browser/ui/webui/ash/crostini_installer:mojo_bindings_js",
       "//chrome/browser/ui/webui/ash/crostini_upgrader:mojo_bindings_js",
diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS
index dcd016c..41af8cc 100644
--- a/chrome/browser/DEPS
+++ b/chrome/browser/DEPS
@@ -328,7 +328,8 @@
   "+components/subresource_filter/core/browser",
   "+components/subresource_filter/core/common",
   "+components/subresource_filter/core/mojom",
-  "+components/supervised_user_error_page",
+  "+components/supervised_user/core/browser",
+  "+components/supervised_user/core/common",
   "+components/sync",
   "+components/sync_bookmarks",
   "+components/sync_device_info",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index ff12604..78261653 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -291,7 +291,7 @@
 #endif
 
 #if BUILDFLAG(ENABLE_SUPERVISED_USERS)
-#include "chrome/browser/supervised_user/supervised_user_features/supervised_user_features.h"  // nogncheck
+#include "components/supervised_user/core/common/features.h"  // nogncheck
 #endif  // ENABLE_SUPERVISED_USERS
 
 #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/chrome/browser/apps/app_service/app_service_proxy_ash.cc b/chrome/browser/apps/app_service/app_service_proxy_ash.cc
index 63b6e5d..37fef41 100644
--- a/chrome/browser/apps/app_service/app_service_proxy_ash.cc
+++ b/chrome/browser/apps/app_service/app_service_proxy_ash.cc
@@ -26,12 +26,12 @@
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager_factory.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/supervised_user/grit/supervised_user_unscaled_resources.h"
 #include "chrome/browser/web_applications/web_app_utils.h"
 #include "components/account_id/account_id.h"
 #include "components/app_constants/constants.h"
 #include "components/app_restore/full_restore_save_handler.h"
 #include "components/app_restore/full_restore_utils.h"
+#include "components/grit/components_resources.h"
 #include "components/services/app_service/app_service_mojom_impl.h"
 #include "components/services/app_service/public/cpp/app_capability_access_cache_wrapper.h"
 #include "components/services/app_service/public/cpp/app_registry_cache_wrapper.h"
diff --git a/chrome/browser/ash/BUILD.gn b/chrome/browser/ash/BUILD.gn
index 99d19c2..a4ee918e 100644
--- a/chrome/browser/ash/BUILD.gn
+++ b/chrome/browser/ash/BUILD.gn
@@ -3584,7 +3584,6 @@
     "//chrome/browser/resources:component_extension_resources",
     "//chrome/browser/resources/chromeos:app_icon_resources",
     "//chrome/browser/resources/settings/chromeos:resources",
-    "//chrome/browser/supervised_user/supervised_user_features",
     "//chrome/browser/ui/ash/system_web_apps",
     "//chrome/browser/ui/webui/ash/cloud_upload:mojo_bindings",
     "//chrome/browser/ui/webui/ash/crostini_upgrader:mojo_bindings",
@@ -3737,6 +3736,7 @@
     "//components/spellcheck/browser",
     "//components/startup_metric_utils/browser",
     "//components/strings:components_strings",
+    "//components/supervised_user/core/common",
     "//components/sync/base",
     "//components/sync/chromeos",
     "//components/sync/engine",
diff --git a/chrome/browser/ash/login/screens/parental_handoff_screen.cc b/chrome/browser/ash/login/screens/parental_handoff_screen.cc
index 2082829..632a04e 100644
--- a/chrome/browser/ash/login/screens/parental_handoff_screen.cc
+++ b/chrome/browser/ash/login/screens/parental_handoff_screen.cc
@@ -11,10 +11,10 @@
 #include "chrome/browser/ash/login/wizard_context.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/browser/supervised_user/supervised_user_features/supervised_user_features.h"
 #include "chrome/browser/ui/webui/ash/login/parental_handoff_screen_handler.h"
 #include "chrome/grit/chromium_strings.h"
 #include "chrome/grit/generated_resources.h"
+#include "components/supervised_user/core/common/features.h"
 #include "components/user_manager/user.h"
 #include "components/user_manager/user_manager.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd
index c4de49b..7741559 100644
--- a/chrome/browser/browser_resources.grd
+++ b/chrome/browser/browser_resources.grd
@@ -62,10 +62,6 @@
         <include name="IDR_VIDEO_PLAYER_JS" file="resources\video_tutorials\video_player.js" type="BINDATA" />
       </if>
 
-      <if expr="enable_supervised_users">
-        <part file="resources/supervised_user_error_page_resources.grdp" />
-      </if>
-
       <if expr="enable_hangout_services_extension">
         <!-- Hangout Services extension, included in Google Chrome builds only. -->
         <include name="IDR_HANGOUT_SERVICES_MANIFEST" file="resources\hangout_services\manifest.json" type="BINDATA" />
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index 3d4e42d..4755474c 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -176,7 +176,6 @@
     "//chrome/browser/resources/chromeos:app_icon_resources",
     "//chrome/browser/resources/chromeos/cloud_upload:resources_grit",
     "//chrome/browser/resources/settings:resources_grit",
-    "//chrome/browser/supervised_user/supervised_user_features",
     "//chrome/browser/ui/ash/system_web_apps",
     "//chrome/browser/ui/webui/ash/crostini_upgrader:mojo_bindings",
     "//chrome/browser/ui/webui/bluetooth_internals:mojo_bindings",
@@ -467,6 +466,7 @@
     "//components/spellcheck/common:spellcheck_result",
     "//components/storage_monitor",
     "//components/strings",
+    "//components/supervised_user/core/common",
     "//components/sync",
     "//components/sync_device_info",
     "//components/sync_preferences",
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
index d090c1a..6751305f 100644
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -24,7 +24,6 @@
 #include "chrome/browser/push_messaging/push_messaging_features.h"
 #include "chrome/browser/share/share_features.h"
 #include "chrome/browser/signin/signin_features.h"
-#include "chrome/browser/supervised_user/supervised_user_features/supervised_user_features.h"
 #include "chrome/browser/ui/ui_features.h"
 #include "chrome/browser/video_tutorials/switches.h"
 #include "chrome/common/chrome_features.h"
@@ -64,6 +63,7 @@
 #include "components/shared_highlighting/core/common/shared_highlighting_features.h"
 #include "components/signin/public/base/signin_switches.h"
 #include "components/subresource_filter/core/browser/subresource_filter_features.h"
+#include "components/supervised_user/core/common/features.h"
 #include "components/sync/base/features.h"
 #include "components/webapps/browser/features.h"
 #include "content/public/common/content_features.h"
diff --git a/chrome/browser/resources/supervised_user_error_page_resources.grdp b/chrome/browser/resources/supervised_user_error_page_resources.grdp
deleted file mode 100644
index da3164e0..0000000
--- a/chrome/browser/resources/supervised_user_error_page_resources.grdp
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<grit-part>
-  <include name="IDR_SUPERVISED_USER_BLOCK_INTERSTITIAL_HTML" file="supervised_user/supervised_user_error_page/resources/supervised_user_block_interstitial.html" flattenhtml="true" type="BINDATA" compress="brotli" />
-  <include name="IDR_SUPERVISED_USER_BLOCK_INTERSTITIAL_V2_HTML" file="supervised_user/supervised_user_error_page/resources/supervised_user_block_interstitial_v2.html" flattenhtml="true" type="BINDATA" compress="brotli" />
-</grit-part>
diff --git a/chrome/browser/supervised_user/OWNERS b/chrome/browser/supervised_user/OWNERS
index a8ae8ed..faa42f3a 100644
--- a/chrome/browser/supervised_user/OWNERS
+++ b/chrome/browser/supervised_user/OWNERS
@@ -1,19 +1 @@
-# Note: Unless you want a specific reviewer's expertise, please send CLs to
-# [email protected] rather than to specific individuals.
-#
-# These CLs will be automatically reassigned to a reviewer within
-# about 5 minutes. This approach helps our team to load-balance incoming
-# reviews. Googlers can read more about this at go/gwsq-gerrit.
-
-# ChromeOS
[email protected]
[email protected]
[email protected]
-
-# Chrome Browser
[email protected]
[email protected]
[email protected]
-
-# Previous owner, feel free to add for any questions or historical context:
-# [email protected]
+file://components/supervised_user/OWNERS
diff --git a/chrome/browser/supervised_user/child_accounts/child_account_service_impl.cc b/chrome/browser/supervised_user/child_accounts/child_account_service_impl.cc
index 09ea57c..5a65bcd 100644
--- a/chrome/browser/supervised_user/child_accounts/child_account_service_impl.cc
+++ b/chrome/browser/supervised_user/child_accounts/child_account_service_impl.cc
@@ -24,7 +24,6 @@
 #include "chrome/browser/supervised_user/kids_chrome_management/kids_profile_manager.h"
 #include "chrome/browser/supervised_user/kids_chrome_management/kidschromemanagement_messages.pb.h"
 #include "chrome/browser/supervised_user/supervised_user_constants.h"
-#include "chrome/browser/supervised_user/supervised_user_features/supervised_user_features.h"
 #include "chrome/browser/supervised_user/supervised_user_service.h"
 #include "chrome/browser/supervised_user/supervised_user_service_factory.h"
 #include "chrome/browser/supervised_user/supervised_user_settings_service.h"
@@ -37,6 +36,7 @@
 #include "components/signin/public/identity_manager/account_info.h"
 #include "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h"
 #include "components/signin/public/identity_manager/tribool.h"
+#include "components/supervised_user/core/common/features.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/storage_partition.h"
 
diff --git a/chrome/browser/supervised_user/supervised_user_error_page/BUILD.gn b/chrome/browser/supervised_user/supervised_user_error_page/BUILD.gn
deleted file mode 100644
index 0dd9626..0000000
--- a/chrome/browser/supervised_user/supervised_user_error_page/BUILD.gn
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright 2014 The Chromium Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-if (is_android) {
-  import("//build/config/android/rules.gni")
-}
-
-static_library("supervised_user_error_page") {
-  sources = [
-    "supervised_user_error_page.cc",
-    "supervised_user_error_page.h",
-  ]
-
-  deps = [
-    "//base",
-    "//chrome/app:generated_resources",
-    "//chrome/browser:resources_grit",
-    "//chrome/browser/supervised_user/supervised_user_features",
-    "//components/signin/public/base",
-    "//ui/base",
-    "//url",
-  ]
-}
-
-source_set("unit_tests") {
-  testonly = true
-  sources = [ "supervised_user_error_page_unittest.cc" ]
-  deps = [
-    ":supervised_user_error_page",
-    "//base",
-    "//base/test:test_support",
-    "//chrome/app:generated_resources",
-    "//chrome/browser:resources_grit",
-    "//chrome/browser/supervised_user/supervised_user_features",
-    "//testing/gmock",
-    "//testing/gtest",
-    "//ui/base",
-  ]
-}
diff --git a/chrome/browser/supervised_user/supervised_user_error_page/DEPS b/chrome/browser/supervised_user/supervised_user_error_page/DEPS
deleted file mode 100644
index 2b85ef17a..0000000
--- a/chrome/browser/supervised_user/supervised_user_error_page/DEPS
+++ /dev/null
@@ -1,8 +0,0 @@
-include_rules = [
-  "+chrome/app:generated_resources",
-  "+chrome/browser:resources_grit",
-  "+content/public/renderer",
-  "+third_party/blink",
-  "+url",
-  "+v8",
-]
diff --git a/chrome/browser/supervised_user/supervised_user_features/BUILD.gn b/chrome/browser/supervised_user/supervised_user_features/BUILD.gn
deleted file mode 100644
index 4c4f99a..0000000
--- a/chrome/browser/supervised_user/supervised_user_features/BUILD.gn
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright 2021 The Chromium Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-static_library("supervised_user_features") {
-  sources = [
-    "supervised_user_features.cc",
-    "supervised_user_features.h",
-  ]
-
-  deps = [ "//base" ]
-}
-
-source_set("unit_tests") {
-  testonly = true
-  sources = [ "supervised_user_features_unittest.cc" ]
-  deps = [
-    ":supervised_user_features",
-    "//base",
-    "//base/test:test_support",
-    "//testing/gtest",
-  ]
-}
diff --git a/chrome/browser/supervised_user/supervised_user_interstitial.cc b/chrome/browser/supervised_user/supervised_user_interstitial.cc
index abbd20c..e8b9a22 100644
--- a/chrome/browser/supervised_user/supervised_user_interstitial.cc
+++ b/chrome/browser/supervised_user/supervised_user_interstitial.cc
@@ -18,7 +18,6 @@
 #include "build/build_config.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/supervised_user/supervised_user_features/supervised_user_features.h"
 #include "chrome/browser/supervised_user/supervised_user_navigation_observer.h"
 #include "chrome/browser/supervised_user/supervised_user_service.h"
 #include "chrome/browser/supervised_user/supervised_user_service_factory.h"
@@ -29,6 +28,7 @@
 #include "components/infobars/core/infobar.h"
 #include "components/infobars/core/infobar_delegate.h"
 #include "components/prefs/pref_service.h"
+#include "components/supervised_user/core/common/features.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/navigation_controller.h"
diff --git a/chrome/browser/supervised_user/supervised_user_interstitial.h b/chrome/browser/supervised_user/supervised_user_interstitial.h
index 158d12be..d64d2d9 100644
--- a/chrome/browser/supervised_user/supervised_user_interstitial.h
+++ b/chrome/browser/supervised_user/supervised_user_interstitial.h
@@ -11,7 +11,7 @@
 #include "base/callback_forward.h"
 #include "base/memory/raw_ptr.h"
 #include "build/chromeos_buildflags.h"
-#include "chrome/browser/supervised_user/supervised_user_error_page/supervised_user_error_page.h"
+#include "components/supervised_user/core/browser/supervised_user_error_page.h"
 #include "url/gurl.h"
 
 namespace content {
diff --git a/chrome/browser/supervised_user/supervised_user_navigation_observer.h b/chrome/browser/supervised_user/supervised_user_navigation_observer.h
index d0dccaa1..ac4045a 100644
--- a/chrome/browser/supervised_user/supervised_user_navigation_observer.h
+++ b/chrome/browser/supervised_user/supervised_user_navigation_observer.h
@@ -11,13 +11,13 @@
 #include <vector>
 
 #include "base/memory/raw_ptr.h"
-#include "chrome/browser/supervised_user/supervised_user_error_page/supervised_user_error_page.h"
 #include "chrome/browser/supervised_user/supervised_user_navigation_throttle.h"
 #include "chrome/browser/supervised_user/supervised_user_service_observer.h"
 #include "chrome/browser/supervised_user/supervised_user_url_filter.h"
 #include "chrome/browser/supervised_user/supervised_users.h"
 #include "chrome/common/supervised_user_commands.mojom.h"
 #include "components/sessions/core/serialized_navigation_entry.h"
+#include "components/supervised_user/core/browser/supervised_user_error_page.h"
 #include "content/public/browser/render_frame_host_receiver_set.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_user_data.h"
diff --git a/chrome/browser/supervised_user/supervised_user_navigation_throttle.h b/chrome/browser/supervised_user/supervised_user_navigation_throttle.h
index bfd722d..f85b819 100644
--- a/chrome/browser/supervised_user/supervised_user_navigation_throttle.h
+++ b/chrome/browser/supervised_user/supervised_user_navigation_throttle.h
@@ -9,9 +9,9 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
-#include "chrome/browser/supervised_user/supervised_user_error_page/supervised_user_error_page.h"
 #include "chrome/browser/supervised_user/supervised_user_url_filter.h"
 #include "chrome/browser/supervised_user/supervised_users.h"
+#include "components/supervised_user/core/browser/supervised_user_error_page.h"
 #include "content/public/browser/navigation_throttle.h"
 
 class SupervisedUserNavigationThrottle : public content::NavigationThrottle {
diff --git a/chrome/browser/supervised_user/supervised_user_navigation_throttle_browsertest.cc b/chrome/browser/supervised_user/supervised_user_navigation_throttle_browsertest.cc
index 0375a28..5c4f013 100644
--- a/chrome/browser/supervised_user/supervised_user_navigation_throttle_browsertest.cc
+++ b/chrome/browser/supervised_user/supervised_user_navigation_throttle_browsertest.cc
@@ -24,7 +24,6 @@
 #include "chrome/browser/profiles/profile_key.h"
 #include "chrome/browser/supervised_user/permission_request_creator_mock.h"
 #include "chrome/browser/supervised_user/supervised_user_constants.h"
-#include "chrome/browser/supervised_user/supervised_user_features/supervised_user_features.h"
 #include "chrome/browser/supervised_user/supervised_user_interstitial.h"
 #include "chrome/browser/supervised_user/supervised_user_navigation_observer.h"
 #include "chrome/browser/supervised_user/supervised_user_service.h"
@@ -36,6 +35,7 @@
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/common/webui_url_constants.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/supervised_user/core/common/features.h"
 #include "content/public/browser/navigation_controller.h"
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/navigation_handle.h"
diff --git a/chrome/browser/supervised_user/supervised_user_pref_store.cc b/chrome/browser/supervised_user/supervised_user_pref_store.cc
index e586a84..f9d188e 100644
--- a/chrome/browser/supervised_user/supervised_user_pref_store.cc
+++ b/chrome/browser/supervised_user/supervised_user_pref_store.cc
@@ -19,7 +19,6 @@
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/prefs/incognito_mode_prefs.h"
 #include "chrome/browser/supervised_user/supervised_user_constants.h"
-#include "chrome/browser/supervised_user/supervised_user_features/supervised_user_features.h"
 #include "chrome/browser/supervised_user/supervised_user_settings_service.h"
 #include "chrome/browser/supervised_user/supervised_user_url_filter.h"
 #include "chrome/common/chrome_switches.h"
@@ -29,6 +28,7 @@
 #include "components/prefs/pref_value_map.h"
 #include "components/signin/public/base/signin_pref_names.h"
 #include "components/signin/public/base/signin_switches.h"
+#include "components/supervised_user/core/common/features.h"
 #include "extensions/buildflags/buildflags.h"
 
 namespace {
diff --git a/chrome/browser/supervised_user/supervised_user_pref_store_unittest.cc b/chrome/browser/supervised_user/supervised_user_pref_store_unittest.cc
index e86e186..3ef30d4 100644
--- a/chrome/browser/supervised_user/supervised_user_pref_store_unittest.cc
+++ b/chrome/browser/supervised_user/supervised_user_pref_store_unittest.cc
@@ -11,12 +11,12 @@
 #include "base/values.h"
 #include "chrome/browser/prefs/incognito_mode_prefs.h"
 #include "chrome/browser/supervised_user/supervised_user_constants.h"
-#include "chrome/browser/supervised_user/supervised_user_features/supervised_user_features.h"
 #include "chrome/browser/supervised_user/supervised_user_pref_store.h"
 #include "chrome/browser/supervised_user/supervised_user_settings_service.h"
 #include "chrome/common/net/safe_search_util.h"
 #include "chrome/common/pref_names.h"
 #include "components/prefs/testing_pref_store.h"
+#include "components/supervised_user/core/common/features.h"
 #include "extensions/buildflags/buildflags.h"
 #include "testing/gmock/include/gmock/gmock-matchers.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/supervised_user/supervised_user_service.cc b/chrome/browser/supervised_user/supervised_user_service.cc
index 3cb99ba..182c23d 100644
--- a/chrome/browser/supervised_user/supervised_user_service.cc
+++ b/chrome/browser/supervised_user/supervised_user_service.cc
@@ -31,7 +31,6 @@
 #include "chrome/browser/profiles/profile_key.h"
 #include "chrome/browser/supervised_user/permission_request_creator.h"
 #include "chrome/browser/supervised_user/supervised_user_constants.h"
-#include "chrome/browser/supervised_user/supervised_user_features/supervised_user_features.h"
 #include "chrome/browser/supervised_user/supervised_user_service_factory.h"
 #include "chrome/browser/supervised_user/supervised_user_service_observer.h"
 #include "chrome/browser/supervised_user/supervised_user_settings_service.h"
@@ -43,6 +42,7 @@
 #include "chrome/grit/generated_resources.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/pref_service.h"
+#include "components/supervised_user/core/common/features.h"
 #include "components/sync/driver/sync_service.h"
 #include "components/sync/driver/sync_user_settings.h"
 #include "content/public/browser/browser_context.h"
diff --git a/chrome/browser/supervised_user/supervised_user_unscaled_resources.grd b/chrome/browser/supervised_user/supervised_user_unscaled_resources.grd
index ac16af79..6fa6fb6 100644
--- a/chrome/browser/supervised_user/supervised_user_unscaled_resources.grd
+++ b/chrome/browser/supervised_user/supervised_user_unscaled_resources.grd
@@ -1,4 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+This file is deprecated following the move of supervised user resources to //components.
+TODO(b/262703607): Remove the file once the resource ID conflicts from Grit settings
+have been resolved.
+-->
 <grit latest_public_release="0" current_release="1" output_all_resource_defines="false">
   <outputs>
     <output filename="grit/supervised_user_unscaled_resources.h" type="rc_header" >
@@ -6,9 +11,4 @@
     </output>
     <output filename="supervised_user_unscaled_resources.pak" type="data_package" />
   </outputs>
-  <release seq="1">
-    <includes>
-        <include name="IDR_SUPERVISED_USER_ICON" file="resources/supervised_user_icon.png" type="BINDATA" />
-    </includes>
-  </release>
 </grit>
diff --git a/chrome/browser/supervised_user/supervised_user_url_filter.h b/chrome/browser/supervised_user/supervised_user_url_filter.h
index 749b2be..1cbf4ae 100644
--- a/chrome/browser/supervised_user/supervised_user_url_filter.h
+++ b/chrome/browser/supervised_user/supervised_user_url_filter.h
@@ -15,9 +15,9 @@
 #include "base/observer_list.h"
 #include "base/sequence_checker.h"
 #include "build/chromeos_buildflags.h"
-#include "chrome/browser/supervised_user/supervised_user_error_page/supervised_user_error_page.h"
 #include "chrome/browser/supervised_user/supervised_users.h"
 #include "components/safe_search_api/url_checker.h"
+#include "components/supervised_user/core/browser/supervised_user_error_page.h"
 
 class GURL;
 class SupervisedUserDenylist;
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 932388c..52066213 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -1925,8 +1925,8 @@
       "webui/family_link_user_internals/family_link_user_internals_ui.h",
     ]
     deps += [
-      "//chrome/browser/supervised_user/supervised_user_error_page",
-      "//chrome/browser/supervised_user/supervised_user_features",
+      "//components/supervised_user/core/browser",
+      "//components/supervised_user/core/common",
     ]
   }
 
diff --git a/chrome/browser/ui/webui/family_link_user_internals/family_link_user_internals_message_handler.cc b/chrome/browser/ui/webui/family_link_user_internals/family_link_user_internals_message_handler.cc
index 7903f5d..a5d13f8 100644
--- a/chrome/browser/ui/webui/family_link_user_internals/family_link_user_internals_message_handler.cc
+++ b/chrome/browser/ui/webui/family_link_user_internals/family_link_user_internals_message_handler.cc
@@ -15,7 +15,6 @@
 #include "chrome/browser/profiles/profile_key.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/browser/supervised_user/child_accounts/child_account_service.h"
-#include "chrome/browser/supervised_user/supervised_user_error_page/supervised_user_error_page.h"
 #include "chrome/browser/supervised_user/supervised_user_service_factory.h"
 #include "chrome/browser/supervised_user/supervised_user_settings_service.h"
 #include "chrome/browser/supervised_user/supervised_user_settings_service_factory.h"
@@ -23,6 +22,7 @@
 #include "chrome/common/channel_info.h"
 #include "components/signin/public/identity_manager/identity_manager.h"
 #include "components/signin/public/identity_manager/tribool.h"
+#include "components/supervised_user/core/browser/supervised_user_error_page.h"
 #include "components/url_formatter/url_fixer.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/storage_partition.h"
diff --git a/chrome/browser/ui/webui/family_link_user_internals/family_link_user_internals_message_handler.h b/chrome/browser/ui/webui/family_link_user_internals/family_link_user_internals_message_handler.h
index df72d37..073be2b 100644
--- a/chrome/browser/ui/webui/family_link_user_internals/family_link_user_internals_message_handler.h
+++ b/chrome/browser/ui/webui/family_link_user_internals/family_link_user_internals_message_handler.h
@@ -8,10 +8,10 @@
 #include "base/callback_list.h"
 #include "base/memory/weak_ptr.h"
 #include "base/scoped_observation.h"
-#include "chrome/browser/supervised_user/supervised_user_error_page/supervised_user_error_page.h"
 #include "chrome/browser/supervised_user/supervised_user_service.h"
 #include "chrome/browser/supervised_user/supervised_user_service_observer.h"
 #include "chrome/browser/supervised_user/supervised_user_url_filter.h"
+#include "components/supervised_user/core/browser/supervised_user_error_page.h"
 #include "content/public/browser/web_ui_message_handler.h"
 
 // The implementation for the chrome://family-link-user-internals page.
diff --git a/chrome/browser/ui/webui/interstitials/interstitial_ui.cc b/chrome/browser/ui/webui/interstitials/interstitial_ui.cc
index 8a25a75..010554f 100644
--- a/chrome/browser/ui/webui/interstitials/interstitial_ui.cc
+++ b/chrome/browser/ui/webui/interstitials/interstitial_ui.cc
@@ -67,8 +67,8 @@
 #endif
 
 #if BUILDFLAG(ENABLE_SUPERVISED_USERS)
-#include "chrome/browser/supervised_user/supervised_user_error_page/supervised_user_error_page.h"  // nogncheck
 #include "chrome/browser/supervised_user/supervised_user_interstitial.h"
+#include "components/supervised_user/core/browser/supervised_user_error_page.h"  // nogncheck
 #endif
 
 using security_interstitials::TestSafeBrowsingBlockingPageQuiet;
diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni
index 6b478cb..35fe22a6 100644
--- a/chrome/chrome_paks.gni
+++ b/chrome/chrome_paks.gni
@@ -262,7 +262,6 @@
         "$root_gen_dir/chrome/assistant_optin_resources.pak",
         "$root_gen_dir/chrome/audio_resources.pak",
         "$root_gen_dir/chrome/bluetooth_pairing_dialog_resources.pak",
-        "$root_gen_dir/chrome/browser/supervised_user/supervised_user_unscaled_resources.pak",
         "$root_gen_dir/chrome/cloud_upload_resources.pak",
         "$root_gen_dir/chrome/desk_api_resources.pak",
         "$root_gen_dir/chrome/emoji_picker_resources.pak",
@@ -354,7 +353,6 @@
         "//chrome/browser/resources/nearby_internals:resources",
         "//chrome/browser/resources/nearby_share:resources",
         "//chrome/browser/resources/settings/chromeos:resources",
-        "//chrome/browser/supervised_user:supervised_user_unscaled_resources",
         "//chromeos/ash/resources",
         "//chromeos/resources",
         "//ui/file_manager:file_manager_gen_resources",
diff --git a/chrome/common/features.gni b/chrome/common/features.gni
index 7aa0949..d2036b2 100644
--- a/chrome/common/features.gni
+++ b/chrome/common/features.gni
@@ -11,6 +11,7 @@
 import("//components/nacl/features.gni")
 import("//components/safe_browsing/buildflags.gni")
 import("//components/signin/features.gni")
+import("//components/supervised_user/buildflags.gni")
 import("//crypto/features.gni")
 import("//device/vr/buildflags/buildflags.gni")
 import("//extensions/buildflags/buildflags.gni")
@@ -85,10 +86,6 @@
 assert(!chrome_enable_logging_by_default || !is_official_build,
        "Logging must be disabled by default in Official builds")
 
-# Enables supervision for Family Link users.
-# Supervision is only supported on Chrome OS and Android.
-enable_supervised_users = is_chromeos || is_android
-
 # Use brlapi from brltty for braille display support.
 use_brlapi = is_chromeos_ash
 
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index c4ce03f..f3ce22c 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -3618,9 +3618,9 @@
         ]
       }
       deps += [
+        "//components/supervised_user/core/common",
         "//chrome/browser/supervised_user:test_support",
         "//chrome/browser/supervised_user/kids_chrome_management:proto",
-        "//chrome/browser/supervised_user/supervised_user_features",
       ]
     }
 
@@ -9073,9 +9073,7 @@
     deps += [
       "//chrome/browser/supervised_user:test_support",
       "//chrome/browser/supervised_user/kids_chrome_management:proto",
-      "//chrome/browser/supervised_user/supervised_user_error_page:unit_tests",
-      "//chrome/browser/supervised_user/supervised_user_features",
-      "//chrome/browser/supervised_user/supervised_user_features:unit_tests",
+      "//components/supervised_user/core/common",
     ]
   }
   if (safe_browsing_mode == 1 && enable_extensions) {
diff --git a/components/BUILD.gn b/components/BUILD.gn
index 5bddc33..c0838c7 100644
--- a/components/BUILD.gn
+++ b/components/BUILD.gn
@@ -10,6 +10,7 @@
 import("//components/optimization_guide/features.gni")
 import("//components/safe_browsing/buildflags.gni")
 import("//components/services/screen_ai/buildflags/features.gni")
+import("//components/supervised_user/buildflags.gni")
 import("//extensions/buildflags/buildflags.gni")
 import("//media/media_options.gni")
 import("//pdf/features.gni")
@@ -230,6 +231,7 @@
     "//components/subresource_filter/core/browser:unit_tests",
     "//components/subresource_filter/core/common:unit_tests",
     "//components/subresource_filter/tools:unit_tests",
+    "//components/supervised_user/core/common:unit_tests",
     "//components/sync:unit_tests",
     "//components/sync_bookmarks:unit_tests",
     "//components/sync_device_info:unit_tests",
@@ -258,6 +260,10 @@
     "//components/webdata_services:unit_tests",
   ]
 
+  if (enable_supervised_users) {
+    deps += [ "//components/supervised_user/core/browser:unit_tests" ]
+  }
+
   if (!is_ios) {
     deps += [ "//components/file_access:unit_tests" ]
   }
diff --git a/components/components_strings.grd b/components/components_strings.grd
index e3e64ee..21a34cf 100644
--- a/components/components_strings.grd
+++ b/components/components_strings.grd
@@ -329,6 +329,7 @@
       <part file="soda_strings.grdp" />
       <part file="ssl_errors_strings.grdp" />
       <part file="subresource_filter_strings.grdp" />
+      <part file="supervised_user_strings.grdp" />
       <part file="sync_ui_strings.grdp" />
       <part file="translate_strings.grdp" />
       <part file="tab_groups_strings.grdp" />
diff --git a/components/resources/BUILD.gn b/components/resources/BUILD.gn
index 2a80cbf..a5e43ac 100644
--- a/components/resources/BUILD.gn
+++ b/components/resources/BUILD.gn
@@ -4,6 +4,7 @@
 
 import("//build/config/android/config.gni")
 import("//components/safe_browsing/buildflags.gni")
+import("//components/supervised_user/buildflags.gni")
 import("//printing/buildflags/buildflags.gni")
 import("//tools/grit/grit_rule.gni")
 
@@ -42,6 +43,7 @@
   defines = [
     "enable_printing=$enable_printing",
     "enable_print_preview=$enable_print_preview",
+    "enable_supervised_users=$enable_supervised_users",
     "safe_browsing_mode=$safe_browsing_mode",
     "is_fuchsia=$is_fuchsia",
   ]
diff --git a/components/resources/components_resources.grd b/components/resources/components_resources.grd
index 03e7665..0e9f7458 100644
--- a/components/resources/components_resources.grd
+++ b/components/resources/components_resources.grd
@@ -30,6 +30,9 @@
       <if expr="is_android">
         <part file="android_system_error_page_resources.grdp" />
       </if>
+      <if expr="enable_supervised_users">
+        <part file="supervised_user_resources.grdp" />
+      </if>
     </includes>
   </release>
 </grit>
diff --git a/components/resources/supervised_user_resources.grdp b/components/resources/supervised_user_resources.grdp
new file mode 100644
index 0000000..cc8c8aa
--- /dev/null
+++ b/components/resources/supervised_user_resources.grdp
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
+  <include name="IDR_SUPERVISED_USER_BLOCK_INTERSTITIAL_HTML" file="../supervised_user/core/browser/resources/supervised_user_block_interstitial.html" flattenhtml="true" type="BINDATA" compress="brotli" />
+  <include name="IDR_SUPERVISED_USER_BLOCK_INTERSTITIAL_V2_HTML" file="../supervised_user/core/browser/resources/supervised_user_block_interstitial_v2.html" flattenhtml="true" type="BINDATA" compress="brotli" />
+  <include name="IDR_SUPERVISED_USER_ICON" file="../supervised_user/core/browser/resources/supervised_user_icon.png" type="BINDATA" />
+</grit-part>
diff --git a/components/supervised_user/COMMON_METADATA b/components/supervised_user/COMMON_METADATA
new file mode 100644
index 0000000..b2bd8d8
--- /dev/null
+++ b/components/supervised_user/COMMON_METADATA
@@ -0,0 +1,5 @@
+# Chrome Kids team
+monorail {
+  component: "FamilyExperiences > Browser"
+}
+team_email: "[email protected]"
diff --git a/components/supervised_user/DEPS b/components/supervised_user/DEPS
new file mode 100644
index 0000000..d3410bb
--- /dev/null
+++ b/components/supervised_user/DEPS
@@ -0,0 +1,6 @@
+include_rules = [
+  "+components/grit",
+  "+components/strings/grit",
+  "+components/signin",
+  "+ui/base",
+]
diff --git a/components/supervised_user/OWNERS b/components/supervised_user/OWNERS
new file mode 100644
index 0000000..a8ae8ed
--- /dev/null
+++ b/components/supervised_user/OWNERS
@@ -0,0 +1,19 @@
+# Note: Unless you want a specific reviewer's expertise, please send CLs to
+# [email protected] rather than to specific individuals.
+#
+# These CLs will be automatically reassigned to a reviewer within
+# about 5 minutes. This approach helps our team to load-balance incoming
+# reviews. Googlers can read more about this at go/gwsq-gerrit.
+
+# ChromeOS
[email protected]
[email protected]
[email protected]
+
+# Chrome Browser
[email protected]
[email protected]
[email protected]
+
+# Previous owner, feel free to add for any questions or historical context:
+# [email protected]
diff --git a/components/supervised_user/README.md b/components/supervised_user/README.md
new file mode 100644
index 0000000..1fe7bcb8
--- /dev/null
+++ b/components/supervised_user/README.md
@@ -0,0 +1,10 @@
+Supervised User is a multiprocess [layered
+component](https://sites.google.com/a/chromium.org/dev/developers/design-documents/layered-components-design) that supports cross-platform access to services and
+features that target supervised users in Chrome, including metrics
+collection, application of parental controls, and the enforcement of browser
+protections.
+
+It has the following structure:
+- [`core/`](https://source.chromium.org/chromium/chromium/src/+/main:components/supervised_user/core): Code shared by `content/` and `ios/`.
+  - [`browser/`](https://source.chromium.org/chromium/chromium/src/+/main:components/supervised_user/core/browser): Browser process code.
+  - [`common/`](https://source.chromium.org/chromium/chromium/src/+/main:components/supervised_user/core/common): Code shared by the browser and the renderer.
diff --git a/components/supervised_user/buildflags.gni b/components/supervised_user/buildflags.gni
new file mode 100644
index 0000000..d672775
--- /dev/null
+++ b/components/supervised_user/buildflags.gni
@@ -0,0 +1,9 @@
+# Copyright 2022 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+declare_args() {
+  # Enables supervision for Family Link users.
+  # Supervision is only supported on Chrome OS and Android.
+  enable_supervised_users = is_chromeos || is_android
+}
diff --git a/components/supervised_user/core/browser/BUILD.gn b/components/supervised_user/core/browser/BUILD.gn
new file mode 100644
index 0000000..1fbd454
--- /dev/null
+++ b/components/supervised_user/core/browser/BUILD.gn
@@ -0,0 +1,36 @@
+# Copyright 2022 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+static_library("browser") {
+  sources = [
+    "supervised_user_error_page.cc",
+    "supervised_user_error_page.h",
+  ]
+
+  deps = [
+    "//base",
+    "//components/resources:components_resources",
+    "//components/signin/public/base",
+    "//components/strings:components_strings_grit",
+    "//components/supervised_user/core/common",
+    "//ui/base",
+    "//url",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [ "supervised_user_error_page_unittest.cc" ]
+  deps = [
+    ":browser",
+    "//base",
+    "//base/test:test_support",
+    "//components/resources:components_resources",
+    "//components/strings:components_strings_grit",
+    "//components/supervised_user/core/common",
+    "//testing/gmock",
+    "//testing/gtest",
+    "//ui/base",
+  ]
+}
diff --git a/chrome/browser/supervised_user/supervised_user_error_page/resources/OWNERS b/components/supervised_user/core/browser/resources/OWNERS
similarity index 100%
rename from chrome/browser/supervised_user/supervised_user_error_page/resources/OWNERS
rename to components/supervised_user/core/browser/resources/OWNERS
diff --git a/chrome/browser/supervised_user/supervised_user_error_page/resources/default_100_percent/logo_avatar_circle_blue_color.png b/components/supervised_user/core/browser/resources/default_100_percent/logo_avatar_circle_blue_color.png
similarity index 100%
rename from chrome/browser/supervised_user/supervised_user_error_page/resources/default_100_percent/logo_avatar_circle_blue_color.png
rename to components/supervised_user/core/browser/resources/default_100_percent/logo_avatar_circle_blue_color.png
Binary files differ
diff --git a/chrome/browser/supervised_user/supervised_user_error_page/resources/default_200_percent/logo_avatar_circle_blue_color.png b/components/supervised_user/core/browser/resources/default_200_percent/logo_avatar_circle_blue_color.png
similarity index 100%
rename from chrome/browser/supervised_user/supervised_user_error_page/resources/default_200_percent/logo_avatar_circle_blue_color.png
rename to components/supervised_user/core/browser/resources/default_200_percent/logo_avatar_circle_blue_color.png
Binary files differ
diff --git a/chrome/browser/supervised_user/supervised_user_error_page/resources/error_page_illustration_dark_theme.svg b/components/supervised_user/core/browser/resources/error_page_illustration_dark_theme.svg
similarity index 100%
rename from chrome/browser/supervised_user/supervised_user_error_page/resources/error_page_illustration_dark_theme.svg
rename to components/supervised_user/core/browser/resources/error_page_illustration_dark_theme.svg
diff --git a/chrome/browser/supervised_user/supervised_user_error_page/resources/error_page_illustration_light_theme.svg b/components/supervised_user/core/browser/resources/error_page_illustration_light_theme.svg
similarity index 100%
rename from chrome/browser/supervised_user/supervised_user_error_page/resources/error_page_illustration_light_theme.svg
rename to components/supervised_user/core/browser/resources/error_page_illustration_light_theme.svg
diff --git a/chrome/browser/supervised_user/supervised_user_error_page/resources/supervised_user_block_interstitial.css b/components/supervised_user/core/browser/resources/supervised_user_block_interstitial.css
similarity index 97%
rename from chrome/browser/supervised_user/supervised_user_error_page/resources/supervised_user_block_interstitial.css
rename to components/supervised_user/core/browser/resources/supervised_user_block_interstitial.css
index ae76a42..4c308b9a 100644
--- a/chrome/browser/supervised_user/supervised_user_error_page/resources/supervised_user_block_interstitial.css
+++ b/components/supervised_user/core/browser/resources/supervised_user_block_interstitial.css
@@ -106,7 +106,7 @@
 }
 
 #family-link-kite {
-  content: -webkit-image-set(url(../../resources/supervised_user_icon.png) 1x);
+  content: -webkit-image-set(url(../resources/supervised_user_icon.png) 1x);
   height: 72px;
   width: 72px;
 }
diff --git a/chrome/browser/supervised_user/supervised_user_error_page/resources/supervised_user_block_interstitial.html b/components/supervised_user/core/browser/resources/supervised_user_block_interstitial.html
similarity index 100%
rename from chrome/browser/supervised_user/supervised_user_error_page/resources/supervised_user_block_interstitial.html
rename to components/supervised_user/core/browser/resources/supervised_user_block_interstitial.html
diff --git a/chrome/browser/supervised_user/supervised_user_error_page/resources/supervised_user_block_interstitial.js b/components/supervised_user/core/browser/resources/supervised_user_block_interstitial.js
similarity index 98%
rename from chrome/browser/supervised_user/supervised_user_error_page/resources/supervised_user_block_interstitial.js
rename to components/supervised_user/core/browser/resources/supervised_user_block_interstitial.js
index 64bcdf9..13b92ee 100644
--- a/chrome/browser/supervised_user/supervised_user_error_page/resources/supervised_user_block_interstitial.js
+++ b/components/supervised_user/core/browser/resources/supervised_user_block_interstitial.js
@@ -124,7 +124,6 @@
  *     frame.
  */
 function setRequestStatus(isSuccessful, isMainFrame) {
-  console.log('setRequestStatus(' + isSuccessful + ')');
   requestCreated(isSuccessful, isMainFrame);
 }
 
diff --git a/chrome/browser/supervised_user/supervised_user_error_page/resources/supervised_user_block_interstitial_v2.css b/components/supervised_user/core/browser/resources/supervised_user_block_interstitial_v2.css
similarity index 100%
rename from chrome/browser/supervised_user/supervised_user_error_page/resources/supervised_user_block_interstitial_v2.css
rename to components/supervised_user/core/browser/resources/supervised_user_block_interstitial_v2.css
diff --git a/chrome/browser/supervised_user/supervised_user_error_page/resources/supervised_user_block_interstitial_v2.html b/components/supervised_user/core/browser/resources/supervised_user_block_interstitial_v2.html
similarity index 100%
rename from chrome/browser/supervised_user/supervised_user_error_page/resources/supervised_user_block_interstitial_v2.html
rename to components/supervised_user/core/browser/resources/supervised_user_block_interstitial_v2.html
diff --git a/chrome/browser/supervised_user/supervised_user_error_page/resources/supervised_user_block_interstitial_v2.js b/components/supervised_user/core/browser/resources/supervised_user_block_interstitial_v2.js
similarity index 98%
rename from chrome/browser/supervised_user/supervised_user_error_page/resources/supervised_user_block_interstitial_v2.js
rename to components/supervised_user/core/browser/resources/supervised_user_block_interstitial_v2.js
index 2d3cdfb..5d8c416 100644
--- a/chrome/browser/supervised_user/supervised_user_error_page/resources/supervised_user_block_interstitial_v2.js
+++ b/components/supervised_user/core/browser/resources/supervised_user_block_interstitial_v2.js
@@ -140,7 +140,6 @@
  *     frame.
  */
 function setRequestStatus(isSuccessful, isMainFrame) {
-  console.log('setRequestStatus(' + isSuccessful + ')');
   requestCreated(isSuccessful, isMainFrame);
 }
 
diff --git a/chrome/browser/supervised_user/resources/supervised_user_icon.png b/components/supervised_user/core/browser/resources/supervised_user_icon.png
similarity index 100%
rename from chrome/browser/supervised_user/resources/supervised_user_icon.png
rename to components/supervised_user/core/browser/resources/supervised_user_icon.png
Binary files differ
diff --git a/chrome/browser/supervised_user/supervised_user_error_page/resources/waiting_for_approval_dark_theme.svg b/components/supervised_user/core/browser/resources/waiting_for_approval_dark_theme.svg
similarity index 100%
rename from chrome/browser/supervised_user/supervised_user_error_page/resources/waiting_for_approval_dark_theme.svg
rename to components/supervised_user/core/browser/resources/waiting_for_approval_dark_theme.svg
diff --git a/chrome/browser/supervised_user/supervised_user_error_page/resources/waiting_for_approval_light_theme.svg b/components/supervised_user/core/browser/resources/waiting_for_approval_light_theme.svg
similarity index 100%
rename from chrome/browser/supervised_user/supervised_user_error_page/resources/waiting_for_approval_light_theme.svg
rename to components/supervised_user/core/browser/resources/waiting_for_approval_light_theme.svg
diff --git a/chrome/browser/supervised_user/supervised_user_error_page/supervised_user_error_page.cc b/components/supervised_user/core/browser/supervised_user_error_page.cc
similarity index 96%
rename from chrome/browser/supervised_user/supervised_user_error_page/supervised_user_error_page.cc
rename to components/supervised_user/core/browser/supervised_user_error_page.cc
index 68b6ab9..54482757 100644
--- a/chrome/browser/supervised_user/supervised_user_error_page/supervised_user_error_page.cc
+++ b/components/supervised_user/core/browser/supervised_user_error_page.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/supervised_user/supervised_user_error_page/supervised_user_error_page.h"
+#include "components/supervised_user/core/browser/supervised_user_error_page.h"
 
 #include <string>
 
@@ -11,10 +11,10 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
-#include "chrome/browser/supervised_user/supervised_user_features/supervised_user_features.h"
-#include "chrome/grit/browser_resources.h"
-#include "chrome/grit/generated_resources.h"
+#include "components/grit/components_resources.h"
 #include "components/signin/public/base/avatar_icon_util.h"
+#include "components/strings/grit/components_strings.h"
+#include "components/supervised_user/core/common/features.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/base/webui/jstemplate_builder.h"
diff --git a/chrome/browser/supervised_user/supervised_user_error_page/supervised_user_error_page.h b/components/supervised_user/core/browser/supervised_user_error_page.h
similarity index 78%
rename from chrome/browser/supervised_user/supervised_user_error_page/supervised_user_error_page.h
rename to components/supervised_user/core/browser/supervised_user_error_page.h
index d236aa1..88b8128 100644
--- a/chrome/browser/supervised_user/supervised_user_error_page/supervised_user_error_page.h
+++ b/components/supervised_user/core/browser/supervised_user_error_page.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_SUPERVISED_USER_SUPERVISED_USER_ERROR_PAGE_SUPERVISED_USER_ERROR_PAGE_H_
-#define CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_ERROR_PAGE_SUPERVISED_USER_ERROR_PAGE_H_
+#ifndef COMPONENTS_SUPERVISED_USER_CORE_BROWSER_SUPERVISED_USER_ERROR_PAGE_H_
+#define COMPONENTS_SUPERVISED_USER_CORE_BROWSER_SUPERVISED_USER_ERROR_PAGE_H_
 
 #include <string>
 
@@ -36,4 +36,4 @@
 
 }  //  namespace supervised_user_error_page
 
-#endif  // CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_ERROR_PAGE_SUPERVISED_USER_ERROR_PAGE_H_
+#endif  // COMPONENTS_SUPERVISED_USER_CORE_BROWSER_SUPERVISED_USER_ERROR_PAGE_H_
diff --git a/chrome/browser/supervised_user/supervised_user_error_page/supervised_user_error_page_unittest.cc b/components/supervised_user/core/browser/supervised_user_error_page_unittest.cc
similarity index 97%
rename from chrome/browser/supervised_user/supervised_user_error_page/supervised_user_error_page_unittest.cc
rename to components/supervised_user/core/browser/supervised_user_error_page_unittest.cc
index a534019..43655ed 100644
--- a/chrome/browser/supervised_user/supervised_user_error_page/supervised_user_error_page_unittest.cc
+++ b/components/supervised_user/core/browser/supervised_user_error_page_unittest.cc
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/supervised_user/supervised_user_error_page/supervised_user_error_page.h"
+#include "components/supervised_user/core/browser/supervised_user_error_page.h"
 
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_feature_list.h"
-#include "chrome/browser/supervised_user/supervised_user_features/supervised_user_features.h"
-#include "chrome/grit/browser_resources.h"
-#include "chrome/grit/generated_resources.h"
+#include "components/grit/components_resources.h"
+#include "components/strings/grit/components_strings.h"
+#include "components/supervised_user/core/common/features.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest-param-test.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/supervised_user/core/common/BUILD.gn b/components/supervised_user/core/common/BUILD.gn
new file mode 100644
index 0000000..eefeda45
--- /dev/null
+++ b/components/supervised_user/core/common/BUILD.gn
@@ -0,0 +1,22 @@
+# Copyright 2022 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+static_library("common") {
+  sources = [
+    "features.cc",
+    "features.h",
+  ]
+  deps = [ "//base" ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [ "features_unittest.cc" ]
+  deps = [
+    ":common",
+    "//base",
+    "//base/test:test_support",
+    "//testing/gtest",
+  ]
+}
diff --git a/chrome/browser/supervised_user/supervised_user_features/supervised_user_features.cc b/components/supervised_user/core/common/features.cc
similarity index 96%
rename from chrome/browser/supervised_user/supervised_user_features/supervised_user_features.cc
rename to components/supervised_user/core/common/features.cc
index 1c165a8..27b4247 100644
--- a/chrome/browser/supervised_user/supervised_user_features/supervised_user_features.cc
+++ b/components/supervised_user/core/common/features.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/supervised_user/supervised_user_features/supervised_user_features.h"
+#include "components/supervised_user/core/common/features.h"
 #include <string>
 
 #include "base/check.h"
diff --git a/chrome/browser/supervised_user/supervised_user_features/supervised_user_features.h b/components/supervised_user/core/common/features.h
similarity index 80%
rename from chrome/browser/supervised_user/supervised_user_features/supervised_user_features.h
rename to components/supervised_user/core/common/features.h
index f4ccdce..b3b11a1 100644
--- a/chrome/browser/supervised_user/supervised_user_features/supervised_user_features.h
+++ b/components/supervised_user/core/common/features.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_SUPERVISED_USER_SUPERVISED_USER_FEATURES_SUPERVISED_USER_FEATURES_H_
-#define CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_FEATURES_SUPERVISED_USER_FEATURES_H_
+#ifndef COMPONENTS_SUPERVISED_USER_CORE_COMMON_FEATURES_H_
+#define COMPONENTS_SUPERVISED_USER_CORE_COMMON_FEATURES_H_
 
 #include "base/feature_list.h"
 
@@ -37,4 +37,4 @@
 
 }  // namespace supervised_users
 
-#endif  // CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_FEATURES_SUPERVISED_USER_FEATURES_H_
+#endif  // COMPONENTS_SUPERVISED_USER_CORE_COMMON_FEATURES_H_
diff --git a/chrome/browser/supervised_user/supervised_user_features/supervised_user_features_unittest.cc b/components/supervised_user/core/common/features_unittest.cc
similarity index 82%
rename from chrome/browser/supervised_user/supervised_user_features/supervised_user_features_unittest.cc
rename to components/supervised_user/core/common/features_unittest.cc
index 699b2b6..3777b187 100644
--- a/chrome/browser/supervised_user/supervised_user_features/supervised_user_features_unittest.cc
+++ b/components/supervised_user/core/common/features_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/supervised_user/supervised_user_features/supervised_user_features.h"
+#include "components/supervised_user/core/common/features.h"
 
 #include "base/dcheck_is_on.h"
 #include "base/feature_list.h"
@@ -12,20 +12,19 @@
 namespace supervised_users {
 
 // Tests supervised user features configurations.
-class SupervisedUserFeaturesTest : public testing::Test {
+class FeaturesTest : public testing::Test {
  protected:
-  SupervisedUserFeaturesTest() = default;
-  SupervisedUserFeaturesTest(const SupervisedUserFeaturesTest&) = delete;
-  SupervisedUserFeaturesTest& operator=(const SupervisedUserFeaturesTest&) =
-      delete;
-  ~SupervisedUserFeaturesTest() override = default;
+  FeaturesTest() = default;
+  FeaturesTest(const FeaturesTest&) = delete;
+  FeaturesTest& operator=(const FeaturesTest&) = delete;
+  ~FeaturesTest() override = default;
 
   base::test::ScopedFeatureList scoped_feature_list_;
 };
 
 // Tests `kWebFilterInterstitialRefresh` and `kLocalWebApproval`features
 // configuration.
-using LocalWebApprovalsFeatureTest = SupervisedUserFeaturesTest;
+using LocalWebApprovalsFeatureTest = FeaturesTest;
 
 TEST_F(LocalWebApprovalsFeatureTest,
        InterstitialRefreshDisabledAndLocalApprovalsDisabled) {
diff --git a/chrome/app/supervised_user_error_page_strings.grdp b/components/supervised_user_strings.grdp
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings.grdp
rename to components/supervised_user_strings.grdp
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_BACK_BUTTON.png.sha1 b/components/supervised_user_strings_grdp/IDS_BACK_BUTTON.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_BACK_BUTTON.png.sha1
rename to components/supervised_user_strings_grdp/IDS_BACK_BUTTON.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_BLOCK_INTERSTITIAL_ASK_IN_PERSON_BUTTON.png.sha1 b/components/supervised_user_strings_grdp/IDS_BLOCK_INTERSTITIAL_ASK_IN_PERSON_BUTTON.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_BLOCK_INTERSTITIAL_ASK_IN_PERSON_BUTTON.png.sha1
rename to components/supervised_user_strings_grdp/IDS_BLOCK_INTERSTITIAL_ASK_IN_PERSON_BUTTON.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_BLOCK_INTERSTITIAL_ASK_IN_PERSON_INSTEAD_BUTTON.png.sha1 b/components/supervised_user_strings_grdp/IDS_BLOCK_INTERSTITIAL_ASK_IN_PERSON_INSTEAD_BUTTON.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_BLOCK_INTERSTITIAL_ASK_IN_PERSON_INSTEAD_BUTTON.png.sha1
rename to components/supervised_user_strings_grdp/IDS_BLOCK_INTERSTITIAL_ASK_IN_PERSON_INSTEAD_BUTTON.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_BLOCK_INTERSTITIAL_HEADER_ACCESS_REQUESTS_DISABLED.png.sha1 b/components/supervised_user_strings_grdp/IDS_BLOCK_INTERSTITIAL_HEADER_ACCESS_REQUESTS_DISABLED.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_BLOCK_INTERSTITIAL_HEADER_ACCESS_REQUESTS_DISABLED.png.sha1
rename to components/supervised_user_strings_grdp/IDS_BLOCK_INTERSTITIAL_HEADER_ACCESS_REQUESTS_DISABLED.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_BLOCK_INTERSTITIAL_HEADER_NOT_SIGNED_IN.png.sha1 b/components/supervised_user_strings_grdp/IDS_BLOCK_INTERSTITIAL_HEADER_NOT_SIGNED_IN.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_BLOCK_INTERSTITIAL_HEADER_NOT_SIGNED_IN.png.sha1
rename to components/supervised_user_strings_grdp/IDS_BLOCK_INTERSTITIAL_HEADER_NOT_SIGNED_IN.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_BLOCK_INTERSTITIAL_HIDE_DETAILS.png.sha1 b/components/supervised_user_strings_grdp/IDS_BLOCK_INTERSTITIAL_HIDE_DETAILS.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_BLOCK_INTERSTITIAL_HIDE_DETAILS.png.sha1
rename to components/supervised_user_strings_grdp/IDS_BLOCK_INTERSTITIAL_HIDE_DETAILS.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_BLOCK_INTERSTITIAL_REQUEST_ACCESS_BUTTON.png.sha1 b/components/supervised_user_strings_grdp/IDS_BLOCK_INTERSTITIAL_REQUEST_ACCESS_BUTTON.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_BLOCK_INTERSTITIAL_REQUEST_ACCESS_BUTTON.png.sha1
rename to components/supervised_user_strings_grdp/IDS_BLOCK_INTERSTITIAL_REQUEST_ACCESS_BUTTON.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_BLOCK_INTERSTITIAL_SEND_FEEDBACK.png.sha1 b/components/supervised_user_strings_grdp/IDS_BLOCK_INTERSTITIAL_SEND_FEEDBACK.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_BLOCK_INTERSTITIAL_SEND_FEEDBACK.png.sha1
rename to components/supervised_user_strings_grdp/IDS_BLOCK_INTERSTITIAL_SEND_FEEDBACK.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_BLOCK_INTERSTITIAL_SEND_MESSAGE_BUTTON.png.sha1 b/components/supervised_user_strings_grdp/IDS_BLOCK_INTERSTITIAL_SEND_MESSAGE_BUTTON.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_BLOCK_INTERSTITIAL_SEND_MESSAGE_BUTTON.png.sha1
rename to components/supervised_user_strings_grdp/IDS_BLOCK_INTERSTITIAL_SEND_MESSAGE_BUTTON.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_BLOCK_INTERSTITIAL_SHOW_DETAILS.png.sha1 b/components/supervised_user_strings_grdp/IDS_BLOCK_INTERSTITIAL_SHOW_DETAILS.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_BLOCK_INTERSTITIAL_SHOW_DETAILS.png.sha1
rename to components/supervised_user_strings_grdp/IDS_BLOCK_INTERSTITIAL_SHOW_DETAILS.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_BLOCK_INTERSTITIAL_TITLE.png.sha1 b/components/supervised_user_strings_grdp/IDS_BLOCK_INTERSTITIAL_TITLE.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_BLOCK_INTERSTITIAL_TITLE.png.sha1
rename to components/supervised_user_strings_grdp/IDS_BLOCK_INTERSTITIAL_TITLE.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_HEADER.png.sha1 b/components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_HEADER.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_HEADER.png.sha1
rename to components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_HEADER.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_MESSAGE.png.sha1 b/components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_MESSAGE.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_MESSAGE.png.sha1
rename to components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_MESSAGE.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_MESSAGE_V2.png.sha1 b/components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_MESSAGE_V2.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_MESSAGE_V2.png.sha1
rename to components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_MESSAGE_V2.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_REQUEST_FAILED_MESSAGE_MULTI_PARENT.png.sha1 b/components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_REQUEST_FAILED_MESSAGE_MULTI_PARENT.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_REQUEST_FAILED_MESSAGE_MULTI_PARENT.png.sha1
rename to components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_REQUEST_FAILED_MESSAGE_MULTI_PARENT.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_REQUEST_FAILED_MESSAGE_SINGLE_PARENT.png.sha1 b/components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_REQUEST_FAILED_MESSAGE_SINGLE_PARENT.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_REQUEST_FAILED_MESSAGE_SINGLE_PARENT.png.sha1
rename to components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_REQUEST_FAILED_MESSAGE_SINGLE_PARENT.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_REQUEST_SENT_MESSAGE_MULTI_PARENT.png.sha1 b/components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_REQUEST_SENT_MESSAGE_MULTI_PARENT.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_REQUEST_SENT_MESSAGE_MULTI_PARENT.png.sha1
rename to components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_REQUEST_SENT_MESSAGE_MULTI_PARENT.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_REQUEST_SENT_MESSAGE_SINGLE_PARENT.png.sha1 b/components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_REQUEST_SENT_MESSAGE_SINGLE_PARENT.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_REQUEST_SENT_MESSAGE_SINGLE_PARENT.png.sha1
rename to components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_REQUEST_SENT_MESSAGE_SINGLE_PARENT.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_WAITING_APPROVAL_DESCRIPTION_MULTI_PARENT.png.sha1 b/components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_WAITING_APPROVAL_DESCRIPTION_MULTI_PARENT.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_WAITING_APPROVAL_DESCRIPTION_MULTI_PARENT.png.sha1
rename to components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_WAITING_APPROVAL_DESCRIPTION_MULTI_PARENT.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_WAITING_APPROVAL_DESCRIPTION_SINGLE_PARENT.png.sha1 b/components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_WAITING_APPROVAL_DESCRIPTION_SINGLE_PARENT.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_WAITING_APPROVAL_DESCRIPTION_SINGLE_PARENT.png.sha1
rename to components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_WAITING_APPROVAL_DESCRIPTION_SINGLE_PARENT.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_WAITING_APPROVAL_MESSAGE.png.sha1 b/components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_WAITING_APPROVAL_MESSAGE.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_WAITING_APPROVAL_MESSAGE.png.sha1
rename to components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_INTERSTITIAL_WAITING_APPROVAL_MESSAGE.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_MESSAGE_DEFAULT_MULTI_PARENT.png.sha1 b/components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_MESSAGE_DEFAULT_MULTI_PARENT.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_MESSAGE_DEFAULT_MULTI_PARENT.png.sha1
rename to components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_MESSAGE_DEFAULT_MULTI_PARENT.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_MESSAGE_DEFAULT_SINGLE_PARENT.png.sha1 b/components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_MESSAGE_DEFAULT_SINGLE_PARENT.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_MESSAGE_DEFAULT_SINGLE_PARENT.png.sha1
rename to components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_MESSAGE_DEFAULT_SINGLE_PARENT.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_MESSAGE_MANUAL_MULTI_PARENT.png.sha1 b/components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_MESSAGE_MANUAL_MULTI_PARENT.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_MESSAGE_MANUAL_MULTI_PARENT.png.sha1
rename to components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_MESSAGE_MANUAL_MULTI_PARENT.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_MESSAGE_MANUAL_SINGLE_PARENT.png.sha1 b/components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_MESSAGE_MANUAL_SINGLE_PARENT.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_CHILD_BLOCK_MESSAGE_MANUAL_SINGLE_PARENT.png.sha1
rename to components/supervised_user_strings_grdp/IDS_CHILD_BLOCK_MESSAGE_MANUAL_SINGLE_PARENT.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_GENERIC_SITE_BLOCK_HEADER.png.sha1 b/components/supervised_user_strings_grdp/IDS_GENERIC_SITE_BLOCK_HEADER.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_GENERIC_SITE_BLOCK_HEADER.png.sha1
rename to components/supervised_user_strings_grdp/IDS_GENERIC_SITE_BLOCK_HEADER.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_REQUEST_SENT_OK.png.sha1 b/components/supervised_user_strings_grdp/IDS_REQUEST_SENT_OK.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_REQUEST_SENT_OK.png.sha1
rename to components/supervised_user_strings_grdp/IDS_REQUEST_SENT_OK.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_SUPERVISED_USER_BLOCK_HEADER.png.sha1 b/components/supervised_user_strings_grdp/IDS_SUPERVISED_USER_BLOCK_HEADER.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_SUPERVISED_USER_BLOCK_HEADER.png.sha1
rename to components/supervised_user_strings_grdp/IDS_SUPERVISED_USER_BLOCK_HEADER.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_SUPERVISED_USER_BLOCK_MESSAGE_SAFE_SITES.png.sha1 b/components/supervised_user_strings_grdp/IDS_SUPERVISED_USER_BLOCK_MESSAGE_SAFE_SITES.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_SUPERVISED_USER_BLOCK_MESSAGE_SAFE_SITES.png.sha1
rename to components/supervised_user_strings_grdp/IDS_SUPERVISED_USER_BLOCK_MESSAGE_SAFE_SITES.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/IDS_SUPERVISED_USER_NOT_SIGNED_IN.png.sha1 b/components/supervised_user_strings_grdp/IDS_SUPERVISED_USER_NOT_SIGNED_IN.png.sha1
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/IDS_SUPERVISED_USER_NOT_SIGNED_IN.png.sha1
rename to components/supervised_user_strings_grdp/IDS_SUPERVISED_USER_NOT_SIGNED_IN.png.sha1
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/OWNERS b/components/supervised_user_strings_grdp/OWNERS
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/OWNERS
rename to components/supervised_user_strings_grdp/OWNERS
diff --git a/chrome/app/supervised_user_error_page_strings_grdp/README.md b/components/supervised_user_strings_grdp/README.md
similarity index 100%
rename from chrome/app/supervised_user_error_page_strings_grdp/README.md
rename to components/supervised_user_strings_grdp/README.md