[go: nahoru, domu]

Get rid of multiple defines of BrowserControlsState.

Use the cc/input/browser_controls_state.h as the source of truth,
remove the content/public/common variant.

Move mojo definition into cc.

BUG=1097816

Change-Id: I2a9763b8e591a7a1ad970c965d1ed614f239bd2d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2568220
Reviewed-by: Ted Choc <tedchoc@chromium.org>
Reviewed-by: Arthur Sonzogni <arthursonzogni@chromium.org>
Reviewed-by: Bo <boliu@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: danakj <danakj@chromium.org>
Commit-Queue: Dave Tapuska <dtapuska@chromium.org>
Cr-Commit-Position: refs/heads/master@{#832993}
diff --git a/cc/BUILD.gn b/cc/BUILD.gn
index e9c7158..00a7132 100644
--- a/cc/BUILD.gn
+++ b/cc/BUILD.gn
@@ -7,6 +7,10 @@
 
 import("//cc/cc.gni")
 
+if (is_android) {
+  import("//build/config/android/rules.gni")
+}
+
 cc_component("cc") {
   sources = [
     "benchmarks/benchmark_instrumentation.cc",
@@ -33,6 +37,7 @@
     "input/browser_controls_offset_manager.cc",
     "input/browser_controls_offset_manager.h",
     "input/browser_controls_offset_manager_client.h",
+    "input/browser_controls_state.h",
     "input/compositor_input_interfaces.h",
     "input/input_handler.h",
     "input/layer_selection_bound.cc",
@@ -913,3 +918,19 @@
     "//testing:run_perf_test",
   ]
 }
+
+if (is_android) {
+  java_cpp_enum("cc_android_java_enums_srcjar") {
+    sources = [ "//cc/input/browser_controls_state.h" ]
+  }
+
+  android_library("cc_java") {
+    # Right now, this only includes the Java switches. But if we need more Java
+    # files, they should be added here as necessary.
+    srcjar_deps = [ ":cc_android_java_enums_srcjar" ]
+    deps = [
+      "//base:base_java",
+      "//third_party/android_deps:androidx_annotation_annotation_java",
+    ]
+  }
+}
diff --git a/cc/input/browser_controls_state.h b/cc/input/browser_controls_state.h
index 8b2f93f..2e5c537 100644
--- a/cc/input/browser_controls_state.h
+++ b/cc/input/browser_controls_state.h
@@ -7,7 +7,14 @@
 
 namespace cc {
 
-enum class BrowserControlsState { kShown = 1, kHidden = 2, kBoth = 3 };
+// A Java counterpart will be generated for this enum.
+// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.cc.input
+enum class BrowserControlsState {
+  kShown = 1,
+  kHidden = 2,
+  kBoth = 3,
+  kMaxValue = kBoth
+};
 
 }  // namespace cc
 
diff --git a/cc/ipc/cc_param_traits_macros.h b/cc/ipc/cc_param_traits_macros.h
index af561bb..146444c 100644
--- a/cc/ipc/cc_param_traits_macros.h
+++ b/cc/ipc/cc_param_traits_macros.h
@@ -6,6 +6,7 @@
 #define CC_IPC_CC_PARAM_TRAITS_MACROS_H_
 
 #include "base/component_export.h"
+#include "cc/input/browser_controls_state.h"
 #include "cc/input/overscroll_behavior.h"
 #include "cc/input/touch_action.h"
 #include "cc/trees/browser_controls_params.h"
@@ -34,4 +35,7 @@
   IPC_STRUCT_TRAITS_MEMBER(only_expand_top_controls_at_page_top)
 IPC_STRUCT_TRAITS_END()
 
+IPC_ENUM_TRAITS_MAX_VALUE(cc::BrowserControlsState,
+                          cc::BrowserControlsState::kMaxValue)
+
 #endif  // CC_IPC_CC_PARAM_TRAITS_MACROS_H_
diff --git a/cc/mojom/BUILD.gn b/cc/mojom/BUILD.gn
index 1cf5167..fc4ab95 100644
--- a/cc/mojom/BUILD.gn
+++ b/cc/mojom/BUILD.gn
@@ -23,6 +23,7 @@
   generate_java = true
   sources = [
     "browser_controls_params.mojom",
+    "browser_controls_state.mojom",
     "overscroll_behavior.mojom",
     "render_frame_metadata.mojom",
     "touch_action.mojom",
@@ -42,6 +43,16 @@
     {
       types = [
         {
+          mojom = "cc.mojom.BrowserControlsState"
+          cpp = "::cc::BrowserControlsState"
+        },
+      ]
+      traits_headers = [ "//cc/ipc/cc_param_traits_macros.h" ]
+      traits_public_deps = [ "//cc/ipc" ]
+    },
+    {
+      types = [
+        {
           mojom = "cc.mojom.TouchAction"
           cpp = "::cc::TouchAction"
         },
diff --git a/content/public/common/browser_controls_state.mojom b/cc/mojom/browser_controls_state.mojom
similarity index 89%
rename from content/public/common/browser_controls_state.mojom
rename to cc/mojom/browser_controls_state.mojom
index 3ec41b84..d4f396cd 100644
--- a/content/public/common/browser_controls_state.mojom
+++ b/cc/mojom/browser_controls_state.mojom
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-module content.mojom;
+module cc.mojom;
 
 [Native]
 enum BrowserControlsState;
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
index c94bba0d..f036168 100644
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -287,6 +287,7 @@
     "$google_play_services_package:google_play_services_vision_java",
     "//base:base_java",
     "//base:jni_java",
+    "//cc:cc_java",
     "//chrome/android/features/keyboard_accessory:public_java",
     "//chrome/android/modules/cablev2_authenticator/public:java",
     "//chrome/android/modules/image_editor/provider:java",
@@ -786,6 +787,7 @@
     "//base:base_java_test_support",
     "//base:base_junit_test_support",
     "//base:jni_java",
+    "//cc:cc_java",
     "//chrome/android:update_proto_java",
     "//chrome/android:usage_stats_proto_java",
     "//chrome/android/features/keyboard_accessory:internal_java",
@@ -968,6 +970,7 @@
     ":browser_java_test_support",
     "//base:base_java",
     "//base:base_java_test_support",
+    "//cc:cc_java",
     "//chrome/android:chrome_java",
     "//chrome/browser/flags:java",
     "//chrome/browser/tab:java",
@@ -1018,6 +1021,7 @@
     "//base:jni_java",
     "//base/test:test_support_java",
     "//build/config/android/test/resource_overlay:javatests",
+    "//cc:cc_java",
     "//chrome/android:app_hooks_java",
     "//chrome/android:chrome_java",
     "//chrome/android/features/start_surface/internal:java",
diff --git a/chrome/android/features/vr/BUILD.gn b/chrome/android/features/vr/BUILD.gn
index c6b4230..6adc045 100644
--- a/chrome/android/features/vr/BUILD.gn
+++ b/chrome/android/features/vr/BUILD.gn
@@ -71,6 +71,7 @@
     ":java_resources",
     "//base:base_java",
     "//base:jni_java",
+    "//cc:cc_java",
     "//chrome/android:chrome_java",
     "//chrome/browser/feedback/android:java",
     "//chrome/browser/flags:java",
diff --git a/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrShell.java b/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrShell.java
index ff32224..ef0bc19 100644
--- a/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrShell.java
+++ b/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrShell.java
@@ -36,6 +36,7 @@
 import org.chromium.base.annotations.NativeMethods;
 import org.chromium.base.supplier.ObservableSupplierImpl;
 import org.chromium.base.task.PostTask;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ChromeTabbedActivity;
 import org.chromium.chrome.browser.app.ChromeActivity;
@@ -67,7 +68,6 @@
 import org.chromium.content_public.browser.UiThreadTaskTraits;
 import org.chromium.content_public.browser.ViewEventSink;
 import org.chromium.content_public.browser.WebContents;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.ui.base.PermissionCallback;
 import org.chromium.ui.base.WindowAndroid;
 import org.chromium.ui.display.DisplayAndroid;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
index 9ba1654..92163721 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -48,6 +48,7 @@
 import org.chromium.base.supplier.OneshotSupplierImpl;
 import org.chromium.base.supplier.Supplier;
 import org.chromium.base.task.PostTask;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate;
 import org.chromium.chrome.browser.IntentHandler.TabOpenType;
@@ -170,7 +171,6 @@
 import org.chromium.content_public.browser.UiThreadTaskTraits;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.content_public.browser.WebContentsAccessibility;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.content_public.common.ContentSwitches;
 import org.chromium.content_public.common.Referrer;
 import org.chromium.ui.base.PageTransition;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TrustedWebActivityBrowserControlsVisibilityManager.java b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TrustedWebActivityBrowserControlsVisibilityManager.java
index 3dc79d4..421a66e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TrustedWebActivityBrowserControlsVisibilityManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TrustedWebActivityBrowserControlsVisibilityManager.java
@@ -7,6 +7,7 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider;
 import org.chromium.chrome.browser.customtabs.CloseButtonVisibilityManager;
 import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabProvider;
@@ -20,7 +21,6 @@
 import org.chromium.chrome.browser.webapps.WebappExtras;
 import org.chromium.components.security_state.ConnectionSecurityLevel;
 import org.chromium.components.security_state.SecurityStateModel;
-import org.chromium.content_public.common.BrowserControlsState;
 
 import javax.inject.Inject;
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanel.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanel.java
index 789ba7c..ff54b19 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanel.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanel.java
@@ -18,6 +18,7 @@
 import org.chromium.base.ActivityState;
 import org.chromium.base.ApplicationStatus;
 import org.chromium.base.ApplicationStatus.ActivityStateListener;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.browser.app.ChromeActivity;
 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelManager.PanelPriority;
 import org.chromium.chrome.browser.compositor.layouts.Layout;
@@ -35,7 +36,6 @@
 import org.chromium.components.browser_ui.widget.gesture.SwipeGestureListener.SwipeHandler;
 import org.chromium.content_public.browser.SelectionPopupController;
 import org.chromium.content_public.browser.WebContents;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.ui.base.LocalizationUtils;
 import org.chromium.ui.resources.ResourceManager;
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java
index fa4df33..446a839 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java
@@ -23,6 +23,7 @@
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.NativeMethods;
 import org.chromium.base.supplier.Supplier;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.app.ChromeActivity;
 import org.chromium.chrome.browser.compositor.bottombar.OverlayContentDelegate;
@@ -63,7 +64,6 @@
 import org.chromium.content_public.browser.NavigationEntry;
 import org.chromium.content_public.browser.SelectionClient;
 import org.chromium.content_public.browser.WebContents;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.content_public.common.ContentUrlConstants;
 import org.chromium.contextual_search.mojom.OverlayPosition;
 import org.chromium.net.NetworkChangeNotifier;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java
index 2a794a2..369aa529 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java
@@ -20,6 +20,7 @@
 import org.chromium.base.Log;
 import org.chromium.base.PackageManagerUtils;
 import org.chromium.base.supplier.Supplier;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.browser.AppHooks;
 import org.chromium.chrome.browser.ChromeTabbedActivity;
 import org.chromium.chrome.browser.ShortcutHelper;
@@ -62,7 +63,6 @@
 import org.chromium.components.embedder_support.util.UrlUtilities;
 import org.chromium.components.external_intents.ExternalNavigationHandler;
 import org.chromium.content_public.browser.LoadUrlParams;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.content_public.common.ResourceRequestBody;
 import org.chromium.ui.mojom.WindowOpenDisposition;
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabBrowserControlsVisibilityDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabBrowserControlsVisibilityDelegate.java
index 83d3130..a35497c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabBrowserControlsVisibilityDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabBrowserControlsVisibilityDelegate.java
@@ -4,12 +4,12 @@
 
 package org.chromium.chrome.browser.customtabs.features.toolbar;
 
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.browser.ActivityTabProvider;
 import org.chromium.chrome.browser.browser_controls.BrowserControlsVisibilityManager;
 import org.chromium.chrome.browser.browser_controls.BrowserStateBrowserControlsVisibilityDelegate;
 import org.chromium.chrome.browser.dependency_injection.ActivityScope;
 import org.chromium.components.browser_ui.util.BrowserControlsVisibilityDelegate;
-import org.chromium.content_public.common.BrowserControlsState;
 
 import javax.inject.Inject;
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarCoordinator.java
index 2eab033..c333ed9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarCoordinator.java
@@ -20,6 +20,7 @@
 
 import org.chromium.base.Log;
 import org.chromium.base.metrics.RecordUserAction;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.app.ChromeActivity;
 import org.chromium.chrome.browser.browser_controls.BrowserControlsVisibilityManager;
@@ -35,7 +36,6 @@
 import org.chromium.chrome.browser.dependency_injection.ActivityScope;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.toolbar.ToolbarManager;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.ui.util.TokenHolder;
 
 import javax.inject.Inject;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserControlsManager.java b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserControlsManager.java
index 9c559c9..9150c9b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserControlsManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserControlsManager.java
@@ -23,6 +23,7 @@
 import org.chromium.base.ObserverList;
 import org.chromium.base.supplier.ObservableSupplierImpl;
 import org.chromium.base.task.PostTask;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.browser.ActivityTabProvider;
 import org.chromium.chrome.browser.ActivityTabProvider.ActivityTabTabObserver;
 import org.chromium.chrome.browser.app.ChromeActivity;
@@ -41,7 +42,6 @@
 import org.chromium.chrome.browser.vr.VrModuleProvider;
 import org.chromium.components.browser_ui.util.BrowserControlsVisibilityDelegate;
 import org.chromium.content_public.browser.UiThreadTaskTraits;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.ui.util.TokenHolder;
 import org.chromium.ui.vr.VrModeObserver;
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/FullscreenHtmlApiHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/FullscreenHtmlApiHandler.java
index 3ca0b82..7e1cb26 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/FullscreenHtmlApiHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/FullscreenHtmlApiHandler.java
@@ -27,6 +27,7 @@
 import org.chromium.base.ObserverList;
 import org.chromium.base.supplier.ObservableSupplier;
 import org.chromium.base.supplier.ObservableSupplierImpl;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ActivityTabProvider;
 import org.chromium.chrome.browser.ActivityTabProvider.ActivityTabTabObserver;
@@ -45,7 +46,6 @@
 import org.chromium.content_public.browser.NavigationHandle;
 import org.chromium.content_public.browser.SelectionPopupController;
 import org.chromium.content_public.browser.WebContents;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.ui.widget.Toast;
 
 import java.lang.ref.WeakReference;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/messages/ChromeMessageQueueMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/messages/ChromeMessageQueueMediator.java
index af49c6f5..0080768 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/messages/ChromeMessageQueueMediator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/messages/ChromeMessageQueueMediator.java
@@ -6,6 +6,7 @@
 
 import org.chromium.base.supplier.ObservableSupplier;
 import org.chromium.base.supplier.OneshotSupplier;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider;
 import org.chromium.chrome.browser.browser_controls.BrowserControlsUtils;
 import org.chromium.chrome.browser.fullscreen.BrowserControlsManager;
@@ -21,7 +22,6 @@
 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
 import org.chromium.components.messages.ManagedMessageDispatcher;
 import org.chromium.components.messages.MessageQueueDelegate;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.ui.util.TokenHolder;
 
 /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenter.java b/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenter.java
index b148e4d..3c2d3f1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenter.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenter.java
@@ -13,6 +13,7 @@
 import androidx.annotation.VisibleForTesting;
 
 import org.chromium.base.supplier.Supplier;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.app.ChromeActivity;
 import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider;
@@ -30,7 +31,6 @@
 import org.chromium.components.browser_ui.modaldialog.TabModalPresenter;
 import org.chromium.components.browser_ui.util.BrowserControlsVisibilityDelegate;
 import org.chromium.content_public.browser.WebContents;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.ui.UiUtils;
 import org.chromium.ui.modelutil.PropertyModel;
 import org.chromium.ui.util.TokenHolder;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabBrowserControlsConstraintsHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabBrowserControlsConstraintsHelper.java
index b84690f..609a83a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabBrowserControlsConstraintsHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabBrowserControlsConstraintsHelper.java
@@ -9,10 +9,10 @@
 import org.chromium.base.Callback;
 import org.chromium.base.UserData;
 import org.chromium.base.annotations.NativeMethods;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.components.browser_ui.util.BrowserControlsVisibilityDelegate;
 import org.chromium.content_public.browser.NavigationHandle;
 import org.chromium.content_public.browser.WebContents;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.ui.base.WindowAndroid;
 
 /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabStateBrowserControlsVisibilityDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabStateBrowserControlsVisibilityDelegate.java
index 2540e554..1d9f49c7 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabStateBrowserControlsVisibilityDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabStateBrowserControlsVisibilityDelegate.java
@@ -10,6 +10,7 @@
 
 import androidx.annotation.Nullable;
 
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.browser.device.DeviceClassManager;
 import org.chromium.chrome.browser.util.ChromeAccessibilityUtil;
 import org.chromium.components.browser_ui.util.BrowserControlsVisibilityDelegate;
@@ -21,7 +22,6 @@
 import org.chromium.content_public.browser.NavigationHandle;
 import org.chromium.content_public.browser.SelectionPopupController;
 import org.chromium.content_public.browser.WebContents;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.ui.base.WindowAndroid;
 
 /**
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityTest.java
index a43dbdb..c8bfcf5 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityTest.java
@@ -40,6 +40,7 @@
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.MinAndroidSdkLevel;
 import org.chromium.base.test.util.Restriction;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.browser.customtabs.CustomTabActivity;
 import org.chromium.chrome.browser.customtabs.CustomTabActivityTestRule;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
@@ -52,7 +53,6 @@
 import org.chromium.chrome.test.util.browser.Features.DisableFeatures;
 import org.chromium.chrome.test.util.browser.ThemeTestUtils;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.content_public.common.ContentSwitches;
 import org.chromium.net.test.EmbeddedTestServerRule;
 import org.chromium.ui.test.util.UiRestriction;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityTestUtil.java b/chrome/android/javatests/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityTestUtil.java
index 152cdaf..09af393e 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityTestUtil.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityTestUtil.java
@@ -12,6 +12,7 @@
 import androidx.browser.customtabs.TrustedWebUtils;
 
 import org.chromium.base.test.util.CallbackHelper;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.browser.browserservices.ui.controller.CurrentPageVerifier;
 import org.chromium.chrome.browser.customtabs.CustomTabActivity;
 import org.chromium.chrome.browser.customtabs.CustomTabsConnection;
@@ -19,7 +20,6 @@
 import org.chromium.chrome.browser.tab.TabBrowserControlsConstraintsHelper;
 import org.chromium.components.embedder_support.util.Origin;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
-import org.chromium.content_public.common.BrowserControlsState;
 
 import java.util.concurrent.TimeoutException;
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenterTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenterTest.java
index 3f7d207..6e8c033 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenterTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenterTest.java
@@ -44,6 +44,7 @@
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.Restriction;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ChromeTabbedActivity;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
@@ -57,7 +58,6 @@
 import org.chromium.chrome.test.util.OmniboxTestUtils;
 import org.chromium.components.browser_ui.modaldialog.ModalDialogTestUtils;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.net.test.EmbeddedTestServer;
 import org.chromium.ui.modaldialog.DialogDismissalCause;
 import org.chromium.ui.modaldialog.ModalDialogManager;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tab/TabUmaTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/TabUmaTest.java
index 3eb2a0f..302e43a 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/tab/TabUmaTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/TabUmaTest.java
@@ -22,6 +22,7 @@
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.MetricsUtils.HistogramDelta;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.browser.TabbedModeTabDelegateFactory;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
 import org.chromium.chrome.browser.share.ShareDelegate;
@@ -31,7 +32,6 @@
 import org.chromium.components.browser_ui.util.BrowserControlsVisibilityDelegate;
 import org.chromium.content_public.browser.LoadUrlParams;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.net.test.EmbeddedTestServer;
 
 import java.io.DataOutputStream;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkActivityTest.java
index 4fb0a38..f5bc6d1 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkActivityTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkActivityTest.java
@@ -23,6 +23,7 @@
 import org.chromium.base.test.util.ApplicationTestUtils;
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.Feature;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.browser.ChromeTabbedActivity;
 import org.chromium.chrome.browser.app.ChromeActivity;
 import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider;
@@ -34,7 +35,6 @@
 import org.chromium.chrome.test.util.ChromeTabUtils;
 import org.chromium.chrome.test.util.browser.webapps.WebApkIntentDataProviderBuilder;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.webapk.lib.common.WebApkConstants;
 
 /** Tests for WebAPK {@link WebappActivity}. */
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappActivityTestRule.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappActivityTestRule.java
index 1ab1a59..b69fc117 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappActivityTestRule.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappActivityTestRule.java
@@ -22,6 +22,7 @@
 import org.chromium.base.test.util.Criteria;
 import org.chromium.base.test.util.CriteriaHelper;
 import org.chromium.base.test.util.UrlUtils;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.browser.ShortcutHelper;
 import org.chromium.chrome.browser.app.ChromeActivity;
 import org.chromium.chrome.browser.browserservices.ui.splashscreen.SplashController;
@@ -32,7 +33,6 @@
 import org.chromium.content_public.browser.test.util.DOMUtils;
 import org.chromium.content_public.browser.test.util.JavaScriptUtils;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
-import org.chromium.content_public.common.BrowserControlsState;
 
 /**
  * Custom {@link ChromeActivityTestRule} for tests using {@link WebappActivity}.
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappNavigationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappNavigationTest.java
index fc5fc02..2e70ac9 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappNavigationTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappNavigationTest.java
@@ -39,6 +39,7 @@
 import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.Restriction;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ChromeTabbedActivity;
 import org.chromium.chrome.browser.ShortcutHelper;
@@ -58,7 +59,6 @@
 import org.chromium.content_public.browser.test.NativeLibraryTestUtils;
 import org.chromium.content_public.browser.test.util.DOMUtils;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.content_public.common.ContentSwitches;
 import org.chromium.net.test.EmbeddedTestServer;
 import org.chromium.ui.base.PageTransition;
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TrustedWebActivityBrowserControlsVisibilityManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TrustedWebActivityBrowserControlsVisibilityManagerTest.java
index a7feb28..79739c3 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TrustedWebActivityBrowserControlsVisibilityManagerTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TrustedWebActivityBrowserControlsVisibilityManagerTest.java
@@ -25,6 +25,7 @@
 
 import org.chromium.base.UserDataHost;
 import org.chromium.base.test.BaseRobolectricTestRunner;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider;
 import org.chromium.chrome.browser.customtabs.CloseButtonVisibilityManager;
 import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabProvider;
@@ -38,7 +39,6 @@
 import org.chromium.components.security_state.ConnectionSecurityLevel;
 import org.chromium.components.security_state.SecurityStateModel;
 import org.chromium.components.security_state.SecurityStateModelJni;
-import org.chromium.content_public.common.BrowserControlsState;
 
 /**
  * Tests for {@link TrustedWebActivityBrowserControlsVisibilityManager}.
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/tab/TabBrowserControlsConstraintsHelperTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/tab/TabBrowserControlsConstraintsHelperTest.java
index 7c03867..3a096eb 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/tab/TabBrowserControlsConstraintsHelperTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/tab/TabBrowserControlsConstraintsHelperTest.java
@@ -19,10 +19,10 @@
 import org.chromium.base.UserDataHost;
 import org.chromium.base.test.BaseRobolectricTestRunner;
 import org.chromium.base.test.util.JniMocker;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.browser.app.ChromeActivity;
 import org.chromium.components.browser_ui.util.BrowserControlsVisibilityDelegate;
 import org.chromium.content_public.browser.WebContents;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.ui.base.WindowAndroid;
 
 import java.lang.ref.WeakReference;
diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS
index f62efb31..9833ca0 100644
--- a/chrome/browser/DEPS
+++ b/chrome/browser/DEPS
@@ -1,5 +1,6 @@
 include_rules = [
   "+apps",
+  "+cc/input/browser_controls_state.h",
   "+cc/metrics",
   "+cc/paint",
   "+cc/test",
diff --git a/chrome/browser/android/DEPS b/chrome/browser/android/DEPS
index 4c67f920..6c27fc08 100644
--- a/chrome/browser/android/DEPS
+++ b/chrome/browser/android/DEPS
@@ -1,6 +1,7 @@
 include_rules = [
   "-components/devtools_bridge",
   "+components/resources/android",
+  "+cc/input/browser_controls_state.h",
   "+cc/layers/layer.h",
   "+chrome/android/test_support_jni_headers",
   "+chrome/browser/web_share_target",
diff --git a/chrome/browser/android/bottombar/overlay_panel_content.cc b/chrome/browser/android/bottombar/overlay_panel_content.cc
index fd1b3ef..37b748b 100644
--- a/chrome/browser/android/bottombar/overlay_panel_content.cc
+++ b/chrome/browser/android/bottombar/overlay_panel_content.cc
@@ -11,6 +11,7 @@
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
 #include "base/time/time.h"
+#include "cc/input/browser_controls_state.h"
 #include "chrome/android/chrome_jni_headers/OverlayPanelContent_jni.h"
 #include "chrome/browser/android/tab_android.h"
 #include "chrome/browser/history/history_service_factory.h"
@@ -22,7 +23,6 @@
 #include "components/variations/variations_associated_data.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
-#include "content/public/common/browser_controls_state.h"
 #include "ui/android/view_android.h"
 
 using base::android::JavaParamRef;
@@ -150,12 +150,12 @@
   if (!web_contents_)
     return;
 
-  content::BrowserControlsState state = content::BROWSER_CONTROLS_STATE_SHOWN;
+  cc::BrowserControlsState state = cc::BrowserControlsState::kShown;
   if (are_controls_hidden)
-    state = content::BROWSER_CONTROLS_STATE_HIDDEN;
+    state = cc::BrowserControlsState::kHidden;
 
   web_contents_->GetMainFrame()->UpdateBrowserControlsState(
-      state, content::BROWSER_CONTROLS_STATE_BOTH, false);
+      state, cc::BrowserControlsState::kBoth, false);
 }
 
 jlong JNI_OverlayPanelContent_Init(JNIEnv* env,
diff --git a/chrome/browser/android/tab_browser_controls_constraints_helper.cc b/chrome/browser/android/tab_browser_controls_constraints_helper.cc
index 0862c67..6c22c2f1 100644
--- a/chrome/browser/android/tab_browser_controls_constraints_helper.cc
+++ b/chrome/browser/android/tab_browser_controls_constraints_helper.cc
@@ -4,11 +4,11 @@
 
 #include "chrome/browser/android/tab_browser_controls_constraints_helper.h"
 
+#include "cc/input/browser_controls_state.h"
 #include "chrome/android/chrome_jni_headers/TabBrowserControlsConstraintsHelper_jni.h"
 #include "chrome/common/chrome_render_frame.mojom.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
-#include "content/public/common/browser_controls_state.h"
 
 using base::android::AttachCurrentThread;
 using base::android::JavaParamRef;
@@ -35,10 +35,10 @@
     jint constraints,
     jint current,
     jboolean animate) {
-  content::BrowserControlsState constraints_state =
-      static_cast<content::BrowserControlsState>(constraints);
-  content::BrowserControlsState current_state =
-      static_cast<content::BrowserControlsState>(current);
+  cc::BrowserControlsState constraints_state =
+      static_cast<cc::BrowserControlsState>(constraints);
+  cc::BrowserControlsState current_state =
+      static_cast<cc::BrowserControlsState>(current);
 
   auto* web_contents = content::WebContents::FromJavaWebContents(jweb_contents);
   DCHECK(web_contents);
diff --git a/chrome/browser/browser_controls/android/BUILD.gn b/chrome/browser/browser_controls/android/BUILD.gn
index e3cf2af..38492768 100644
--- a/chrome/browser/browser_controls/android/BUILD.gn
+++ b/chrome/browser/browser_controls/android/BUILD.gn
@@ -16,6 +16,7 @@
 
   deps = [
     "//base:base_java",
+    "//cc:cc_java",
     "//chrome/browser/flags:java",
     "//components/browser_ui/util/android:java",
     "//content/public/android:content_java",
@@ -33,6 +34,7 @@
     ":java",
     "//base:base_java",
     "//base:base_junit_test_support",
+    "//cc:cc_java",
     "//content/public/android:content_java",
     "//third_party/android_deps:robolectric_all_java",
     "//third_party/junit",
diff --git a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserStateBrowserControlsVisibilityDelegate.java b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserStateBrowserControlsVisibilityDelegate.java
index eaf1790..0f79f6f 100644
--- a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserStateBrowserControlsVisibilityDelegate.java
+++ b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserStateBrowserControlsVisibilityDelegate.java
@@ -12,9 +12,9 @@
 import org.chromium.base.CommandLine;
 import org.chromium.base.supplier.ObservableSupplier;
 import org.chromium.base.supplier.Supplier;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
 import org.chromium.components.browser_ui.util.BrowserControlsVisibilityDelegate;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.ui.util.TokenHolder;
 
 /**
diff --git a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserStateBrowserControlsVisibilityDelegateTest.java b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserStateBrowserControlsVisibilityDelegateTest.java
index 3a9cc91..5ff4caf6 100644
--- a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserStateBrowserControlsVisibilityDelegateTest.java
+++ b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BrowserStateBrowserControlsVisibilityDelegateTest.java
@@ -24,7 +24,7 @@
 import org.chromium.base.Callback;
 import org.chromium.base.supplier.ObservableSupplierImpl;
 import org.chromium.base.test.BaseRobolectricTestRunner;
-import org.chromium.content_public.common.BrowserControlsState;
+import org.chromium.cc.input.BrowserControlsState;
 
 /**
  * Unit tests for the BrowserStateBrowserControlsVisibilityDelegate.
diff --git a/chrome/browser/ui/views/frame/top_controls_slide_controller_chromeos.cc b/chrome/browser/ui/views/frame/top_controls_slide_controller_chromeos.cc
index f4c2ac2..b78328a 100644
--- a/chrome/browser/ui/views/frame/top_controls_slide_controller_chromeos.cc
+++ b/chrome/browser/ui/views/frame/top_controls_slide_controller_chromeos.cc
@@ -9,6 +9,7 @@
 #include "ash/public/cpp/tablet_mode.h"
 #include "base/auto_reset.h"
 #include "base/bind.h"
+#include "cc/input/browser_controls_state.h"
 #include "chrome/browser/search/search.h"
 #include "chrome/browser/ssl/security_state_tab_helper.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
@@ -24,7 +25,6 @@
 #include "content/public/browser/render_widget_host.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_contents_observer.h"
-#include "content/public/common/browser_controls_state.h"
 #include "extensions/common/constants.h"
 #include "ui/aura/window.h"
 #include "ui/aura/window_tree_host.h"
@@ -51,36 +51,36 @@
 // This function is mostly similar to its corresponding Android one in Java code
 // (See TabStateBrowserControlsVisibilityDelegate#canAutoHideBrowserControls()
 // in TabStateBrowserControlsVisibilityDelegate.java).
-content::BrowserControlsState GetBrowserControlsStateConstraints(
+cc::BrowserControlsState GetBrowserControlsStateConstraints(
     content::WebContents* contents) {
   DCHECK(contents);
 
   if (!IsTabletModeEnabled() || contents->IsFullscreen() ||
       contents->IsFocusedElementEditable() || contents->IsBeingDestroyed() ||
       contents->IsCrashed() || IsSpokenFeedbackEnabled()) {
-    return content::BROWSER_CONTROLS_STATE_SHOWN;
+    return cc::BrowserControlsState::kShown;
   }
 
   content::NavigationEntry* entry = contents->GetController().GetVisibleEntry();
   if (!entry || entry->GetPageType() != content::PAGE_TYPE_NORMAL)
-    return content::BROWSER_CONTROLS_STATE_SHOWN;
+    return cc::BrowserControlsState::kShown;
 
   const GURL& url = entry->GetURL();
   if (url.SchemeIs(content::kChromeUIScheme) ||
       url.SchemeIs(chrome::kChromeNativeScheme) ||
       url.SchemeIs(extensions::kExtensionScheme)) {
-    return content::BROWSER_CONTROLS_STATE_SHOWN;
+    return cc::BrowserControlsState::kShown;
   }
 
   Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext());
   if (profile && search::IsNTPOrRelatedURL(url, profile))
-    return content::BROWSER_CONTROLS_STATE_SHOWN;
+    return cc::BrowserControlsState::kShown;
 
   auto* helper = SecurityStateTabHelper::FromWebContents(contents);
   switch (helper->GetSecurityLevel()) {
     case security_state::WARNING:
     case security_state::DANGEROUS:
-      return content::BROWSER_CONTROLS_STATE_SHOWN;
+      return cc::BrowserControlsState::kShown;
 
     // Force compiler failure if new security level types were added without
     // this being updated.
@@ -95,9 +95,9 @@
   auto* permission_manager =
       permissions::PermissionRequestManager::FromWebContents(contents);
   if (permission_manager && permission_manager->IsRequestInProgress())
-    return content::BROWSER_CONTROLS_STATE_SHOWN;
+    return cc::BrowserControlsState::kShown;
 
-  return content::BROWSER_CONTROLS_STATE_BOTH;
+  return cc::BrowserControlsState::kBoth;
 }
 
 // Triggers a visual properties synchrnoization event on |contents|' main
@@ -582,13 +582,13 @@
 
   // If the omnibox is focused, then the top controls should be constrained to
   // remain fully shown until the omnibox is blurred.
-  const content::BrowserControlsState constraints_state =
+  const cc::BrowserControlsState constraints_state =
       observed_omni_box_ && observed_omni_box_->HasFocus()
-          ? content::BROWSER_CONTROLS_STATE_SHOWN
+          ? cc::BrowserControlsState::kShown
           : GetBrowserControlsStateConstraints(web_contents);
 
-  const content::BrowserControlsState current_state =
-      content::BROWSER_CONTROLS_STATE_SHOWN;
+  const cc::BrowserControlsState current_state =
+      cc::BrowserControlsState::kShown;
   main_frame->UpdateBrowserControlsState(constraints_state, current_state,
                                          animate);
 }
diff --git a/components/browser_ui/util/android/BUILD.gn b/components/browser_ui/util/android/BUILD.gn
index 2d660a93..5068af7 100644
--- a/components/browser_ui/util/android/BUILD.gn
+++ b/components/browser_ui/util/android/BUILD.gn
@@ -21,6 +21,7 @@
   deps = [
     ":java_resources",
     "//base:base_java",
+    "//cc:cc_java",
     "//components/embedder_support/android:util_java",
     "//content/public/android:content_java",
     "//third_party/android_deps:androidx_annotation_annotation_java",
@@ -56,6 +57,7 @@
     "//base:base_java_test_support",
     "//base:base_junit_test_support",
     "//base/test:test_support_java",
+    "//cc:cc_java",
     "//content/public/android:content_java",
     "//third_party/android_deps:robolectric_all_java",
     "//third_party/junit",
diff --git a/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/BrowserControlsVisibilityDelegate.java b/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/BrowserControlsVisibilityDelegate.java
index 5226e9b..7065ada9 100644
--- a/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/BrowserControlsVisibilityDelegate.java
+++ b/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/BrowserControlsVisibilityDelegate.java
@@ -5,7 +5,7 @@
 package org.chromium.components.browser_ui.util;
 
 import org.chromium.base.supplier.ObservableSupplierImpl;
-import org.chromium.content_public.common.BrowserControlsState;
+import org.chromium.cc.input.BrowserControlsState;
 
 /**
  * A delegate to determine visibility of the browser controls.
diff --git a/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/ComposedBrowserControlsVisibilityDelegate.java b/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/ComposedBrowserControlsVisibilityDelegate.java
index 5cf482d3..04ada86 100644
--- a/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/ComposedBrowserControlsVisibilityDelegate.java
+++ b/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/ComposedBrowserControlsVisibilityDelegate.java
@@ -5,7 +5,7 @@
 package org.chromium.components.browser_ui.util;
 
 import org.chromium.base.Callback;
-import org.chromium.content_public.common.BrowserControlsState;
+import org.chromium.cc.input.BrowserControlsState;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/ComposedBrowserControlsVisibilityDelegateTest.java b/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/ComposedBrowserControlsVisibilityDelegateTest.java
index c0f46333..aee8686 100644
--- a/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/ComposedBrowserControlsVisibilityDelegateTest.java
+++ b/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/ComposedBrowserControlsVisibilityDelegateTest.java
@@ -14,7 +14,7 @@
 
 import org.chromium.base.Callback;
 import org.chromium.base.test.BaseRobolectricTestRunner;
-import org.chromium.content_public.common.BrowserControlsState;
+import org.chromium.cc.input.BrowserControlsState;
 
 /** Unit tests for {@link ComposedBrowserControlsVisibilityDelegate}. */
 @RunWith(BaseRobolectricTestRunner.class)
diff --git a/components/thin_webview/DEPS b/components/thin_webview/DEPS
index f4e5517..355515fd 100644
--- a/components/thin_webview/DEPS
+++ b/components/thin_webview/DEPS
@@ -1,4 +1,5 @@
 include_rules = [
+  "+cc/input/browser_controls_state.h",
   "+components/embedder_support/android",
   "+content/public/android/java/src/org/chromium/content_public",
   "+ui/android",
diff --git a/components/thin_webview/internal/thin_webview.cc b/components/thin_webview/internal/thin_webview.cc
index b369811..72b838e 100644
--- a/components/thin_webview/internal/thin_webview.cc
+++ b/components/thin_webview/internal/thin_webview.cc
@@ -5,13 +5,13 @@
 #include "components/thin_webview/internal/thin_webview.h"
 
 #include "base/android/jni_android.h"
+#include "cc/input/browser_controls_state.h"
 #include "cc/layers/layer.h"
 #include "components/embedder_support/android/delegate/web_contents_delegate_android.h"
 #include "components/thin_webview/internal/jni_headers/ThinWebViewImpl_jni.h"
 #include "components/thin_webview/thin_webview_initializer.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
-#include "content/public/common/browser_controls_state.h"
 
 using base::android::JavaParamRef;
 using web_contents_delegate_android::WebContentsDelegateAndroid;
@@ -80,8 +80,8 @@
 
   // Disable browser controls when used for thin webview.
   web_contents->GetMainFrame()->UpdateBrowserControlsState(
-      content::BROWSER_CONTROLS_STATE_HIDDEN,
-      content::BROWSER_CONTROLS_STATE_HIDDEN, false);
+      cc::BrowserControlsState::kHidden, cc::BrowserControlsState::kHidden,
+      false);
 }
 
 void ThinWebView::SizeChanged(JNIEnv* env,
diff --git a/content/browser/renderer_host/back_forward_cache_impl.cc b/content/browser/renderer_host/back_forward_cache_impl.cc
index 6335c6a..857dc33 100644
--- a/content/browser/renderer_host/back_forward_cache_impl.cc
+++ b/content/browser/renderer_host/back_forward_cache_impl.cc
@@ -238,8 +238,7 @@
     // know, so that it then reacts correctly to the SHOW controls message
     // that might follow during DidCommitNavigation.
     cached_rfh->UpdateBrowserControlsState(
-        BrowserControlsState::BROWSER_CONTROLS_STATE_BOTH,
-        BrowserControlsState::BROWSER_CONTROLS_STATE_HIDDEN,
+        cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kHidden,
         // Do not animate as we want this to happen "instantaneously"
         false);
   }
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
index 87c57e5b..ad09664 100644
--- a/content/browser/renderer_host/render_frame_host_impl.cc
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -4387,8 +4387,8 @@
 }
 
 void RenderFrameHostImpl::UpdateBrowserControlsState(
-    BrowserControlsState constraints,
-    BrowserControlsState current,
+    cc::BrowserControlsState constraints,
+    cc::BrowserControlsState current,
     bool animate) {
   if (frame_)
     frame_->UpdateBrowserControlsState(constraints, current, animate);
diff --git a/content/browser/renderer_host/render_frame_host_impl.h b/content/browser/renderer_host/render_frame_host_impl.h
index e7eb445..53f6546 100644
--- a/content/browser/renderer_host/render_frame_host_impl.h
+++ b/content/browser/renderer_host/render_frame_host_impl.h
@@ -381,8 +381,8 @@
   bool HasTransientUserActivation() override;
   void NotifyUserActivation(
       blink::mojom::UserActivationNotificationType notification_type) override;
-  void UpdateBrowserControlsState(BrowserControlsState constraints,
-                                  BrowserControlsState current,
+  void UpdateBrowserControlsState(cc::BrowserControlsState constraints,
+                                  cc::BrowserControlsState current,
                                   bool animate) override;
   bool Reload() override;
   bool IsDOMContentLoaded() override;
diff --git a/content/common/frame.mojom b/content/common/frame.mojom
index fb4b8ee..6867426 100644
--- a/content/common/frame.mojom
+++ b/content/common/frame.mojom
@@ -4,12 +4,12 @@
 
 module content.mojom;
 
+import "cc/mojom/browser_controls_state.mojom";
 import "content/common/frame_messages.mojom";
 import "content/common/native_types.mojom";
 import "content/common/navigation_client.mojom";
 import "content/common/navigation_params.mojom";
 import "content/common/web_ui.mojom";
-import "content/public/common/browser_controls_state.mojom";
 import "content/public/common/window_container_type.mojom";
 import "mojo/public/mojom/base/file_path.mojom";
 import "mojo/public/mojom/base/string16.mojom";
@@ -92,8 +92,8 @@
   // Notifies the renderer whether hiding/showing the browser controls is
   // enabled, what the current state should be, and whether or not to
   // animate to the proper state.
-  UpdateBrowserControlsState(BrowserControlsState constraints,
-                             BrowserControlsState current,
+  UpdateBrowserControlsState(cc.mojom.BrowserControlsState constraints,
+                             cc.mojom.BrowserControlsState current,
                              bool animate);
 
   // Requests a one-time snapshot of the accessibility tree without enabling
diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn
index 5dbc564..29c7dd9 100644
--- a/content/public/android/BUILD.gn
+++ b/content/public/android/BUILD.gn
@@ -359,7 +359,6 @@
     "//content/public/browser/invalidate_type.h",
     "//content/public/browser/navigation_controller.h",
     "//content/public/browser/visibility.h",
-    "//content/public/common/browser_controls_state.h",
     "//content/public/common/console_message_level.h",
   ]
 }
diff --git a/content/public/browser/render_frame_host.h b/content/public/browser/render_frame_host.h
index 933710f..f1705590 100644
--- a/content/public/browser/render_frame_host.h
+++ b/content/public/browser/render_frame_host.h
@@ -13,9 +13,9 @@
 #include "base/feature_list.h"
 #include "base/optional.h"
 #include "build/build_config.h"
+#include "cc/input/browser_controls_state.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/global_routing_id.h"
-#include "content/public/common/browser_controls_state.h"
 #include "content/public/common/isolated_world_ids.h"
 #include "content/public/common/page_visibility_state.h"
 #include "ipc/ipc_listener.h"
@@ -560,8 +560,8 @@
   // Notifies the renderer whether hiding/showing the browser controls is
   // enabled, what the current state should be, and whether or not to animate to
   // the proper state.
-  virtual void UpdateBrowserControlsState(BrowserControlsState constraints,
-                                          BrowserControlsState current,
+  virtual void UpdateBrowserControlsState(cc::BrowserControlsState constraints,
+                                          cc::BrowserControlsState current,
                                           bool animate) = 0;
 
   // Reloads the frame. It initiates a reload but doesn't wait for it to finish.
diff --git a/content/public/common/BUILD.gn b/content/public/common/BUILD.gn
index 626093b..288ff8d 100644
--- a/content/public/common/BUILD.gn
+++ b/content/public/common/BUILD.gn
@@ -94,7 +94,6 @@
 
   sources = [
     "bindings_policy.h",
-    "browser_controls_state.h",
     "cdm_info.h",
     "child_process_host.h",
     "child_process_host_delegate.h",
@@ -323,7 +322,6 @@
   ]
 
   sources = [
-    "browser_controls_state.mojom",
     "drop_data.mojom",
     "fullscreen_video_element.mojom",
     "resource_usage_reporter.mojom",
@@ -358,17 +356,6 @@
     {
       types = [
         {
-          mojom = "content.mojom.BrowserControlsState"
-          cpp = "::content::BrowserControlsState"
-        },
-      ]
-      traits_headers = [ "browser_controls_state.h" ]
-      traits_private_headers = _common_param_traits_headers
-      traits_deps = _common_param_traits_deps
-    },
-    {
-      types = [
-        {
           mojom = "content.mojom.DropData"
           cpp = "::content::DropData"
         },
diff --git a/content/public/common/browser_controls_state.h b/content/public/common/browser_controls_state.h
deleted file mode 100644
index 46b18bd..0000000
--- a/content/public/common/browser_controls_state.h
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_PUBLIC_COMMON_BROWSER_CONTROLS_STATE_H_
-#define CONTENT_PUBLIC_COMMON_BROWSER_CONTROLS_STATE_H_
-
-namespace content {
-
-// A Java counterpart will be generated for this enum.
-// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.content_public.common
-enum BrowserControlsState {
-  BROWSER_CONTROLS_STATE_SHOWN = 1,
-  BROWSER_CONTROLS_STATE_HIDDEN = 2,
-  BROWSER_CONTROLS_STATE_BOTH = 3,
-
-  BROWSER_CONTROLS_STATE_LAST = BROWSER_CONTROLS_STATE_BOTH,
-};
-
-}  // namespace content
-
-#endif  // CONTENT_PUBLIC_COMMON_BROWSER_CONTROLS_STATE_H_
diff --git a/content/public/common/common_param_traits_macros.h b/content/public/common/common_param_traits_macros.h
index eb0bc03..8f4b2c9 100644
--- a/content/public/common/common_param_traits_macros.h
+++ b/content/public/common/common_param_traits_macros.h
@@ -9,7 +9,6 @@
 #define CONTENT_PUBLIC_COMMON_COMMON_PARAM_TRAITS_MACROS_H_
 
 #include "build/build_config.h"
-#include "content/public/common/browser_controls_state.h"
 #include "content/public/common/drop_data.h"
 #include "content/public/common/referrer.h"
 #include "content/public/common/webplugininfo_param_traits.h"
@@ -37,9 +36,6 @@
 #undef IPC_MESSAGE_EXPORT
 #define IPC_MESSAGE_EXPORT CONTENT_EXPORT
 
-IPC_ENUM_TRAITS_MAX_VALUE(content::BrowserControlsState,
-                          content::BROWSER_CONTROLS_STATE_LAST)
-
 IPC_ENUM_TRAITS_VALIDATE(ui::PageTransition,
                          ((value &
                            ui::PageTransition::PAGE_TRANSITION_CORE_MASK) <=
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index ecc0aef..940181e 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -2636,8 +2636,8 @@
 }
 
 void RenderFrameImpl::UpdateBrowserControlsState(
-    BrowserControlsState constraints,
-    BrowserControlsState current,
+    cc::BrowserControlsState constraints,
+    cc::BrowserControlsState current,
     bool animate) {
   TRACE_EVENT2("renderer", "RenderFrameImpl::UpdateBrowserControlsState",
                "Constraint", static_cast<int>(constraints), "Current",
@@ -2647,22 +2647,8 @@
 
   DCHECK(is_main_frame_);
 
-  // Check content::BrowserControlsState, and cc::BrowserControlsState
-  // are kept in sync.
-  static_assert(static_cast<int>(BROWSER_CONTROLS_STATE_SHOWN) ==
-                    static_cast<int>(cc::BrowserControlsState::kShown),
-                "mismatching enums: SHOWN");
-  static_assert(static_cast<int>(BROWSER_CONTROLS_STATE_HIDDEN) ==
-                    static_cast<int>(cc::BrowserControlsState::kHidden),
-                "mismatching enums: HIDDEN");
-  static_assert(static_cast<int>(BROWSER_CONTROLS_STATE_BOTH) ==
-                    static_cast<int>(cc::BrowserControlsState::kBoth),
-                "mismatching enums: BOTH");
-
   cc::LayerTreeHost* host = render_widget_->layer_tree_host();
-  host->UpdateBrowserControlsState(
-      static_cast<cc::BrowserControlsState>(constraints),
-      static_cast<cc::BrowserControlsState>(current), animate);
+  host->UpdateBrowserControlsState(constraints, current, animate);
 }
 
 void RenderFrameImpl::SnapshotAccessibilityTree(
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 402c2253..27510ec 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -31,6 +31,7 @@
 #include "base/unguessable_token.h"
 #include "base/values.h"
 #include "build/build_config.h"
+#include "cc/input/browser_controls_state.h"
 #include "content/common/buildflags.h"
 #include "content/common/download/mhtml_file_writer.mojom.h"
 #include "content/common/frame.mojom.h"
@@ -39,7 +40,6 @@
 #include "content/common/render_accessibility.mojom.h"
 #include "content/common/renderer.mojom.h"
 #include "content/common/web_ui.mojom.h"
-#include "content/public/common/browser_controls_state.h"
 #include "content/public/common/fullscreen_video_element.mojom.h"
 #include "content/public/common/referrer.h"
 #include "content/public/common/stop_find_action.h"
@@ -436,8 +436,8 @@
       GetCanonicalUrlForSharingCallback callback) override;
   void BlockRequests() override;
   void ResumeBlockedRequests() override;
-  void UpdateBrowserControlsState(BrowserControlsState constraints,
-                                  BrowserControlsState current,
+  void UpdateBrowserControlsState(cc::BrowserControlsState constraints,
+                                  cc::BrowserControlsState current,
                                   bool animate) override;
   void SnapshotAccessibilityTree(
       uint32_t ax_mode,
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h
index 1592aa44..e89e36f 100644
--- a/content/renderer/render_view_impl.h
+++ b/content/renderer/render_view_impl.h
@@ -25,9 +25,7 @@
 #include "base/strings/string_piece.h"
 #include "base/timer/timer.h"
 #include "build/build_config.h"
-#include "cc/input/browser_controls_state.h"
 #include "content/common/content_export.h"
-#include "content/public/common/browser_controls_state.h"
 #include "content/public/common/drop_data.h"
 #include "content/public/common/page_visibility_state.h"
 #include "content/public/common/page_zoom.h"
diff --git a/content/web_test/browser/web_test_control_host.cc b/content/web_test/browser/web_test_control_host.cc
index 0f5e6ad..9c85cad 100644
--- a/content/web_test/browser/web_test_control_host.cc
+++ b/content/web_test/browser/web_test_control_host.cc
@@ -597,7 +597,8 @@
   // TODO(danakj): We no longer run web tests on android, and this is an android
   // feature, so maybe this isn't needed anymore.
   main_window_->web_contents()->GetMainFrame()->UpdateBrowserControlsState(
-      BROWSER_CONTROLS_STATE_BOTH, BROWSER_CONTROLS_STATE_HIDDEN, false);
+      cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kHidden,
+      false);
 
   // We did not track the |main_window_| RenderFrameHost during the creation of
   // |main_window_|, since we need the pointer value in this class set first. So
diff --git a/weblayer/browser/browser_controls_container_view.cc b/weblayer/browser/browser_controls_container_view.cc
index a4335283..9ccdb9d 100644
--- a/weblayer/browser/browser_controls_container_view.cc
+++ b/weblayer/browser/browser_controls_container_view.cc
@@ -12,7 +12,6 @@
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/render_widget_host.h"
 #include "content/public/browser/web_contents.h"
-#include "content/public/common/browser_controls_state.h"
 #include "ui/android/resources/resource.h"
 #include "ui/android/resources/resource_manager.h"
 #include "ui/android/view_android.h"
diff --git a/weblayer/browser/browser_controls_navigation_state_handler.cc b/weblayer/browser/browser_controls_navigation_state_handler.cc
index 5457f85..fe45c01 100644
--- a/weblayer/browser/browser_controls_navigation_state_handler.cc
+++ b/weblayer/browser/browser_controls_navigation_state_handler.cc
@@ -131,7 +131,7 @@
 }
 
 void BrowserControlsNavigationStateHandler::UpdateState() {
-  const content::BrowserControlsState renderer_availability_state =
+  const cc::BrowserControlsState renderer_availability_state =
       CalculateStateForReasonRendererAvailability();
   if (renderer_availability_state != last_renderer_availability_state_) {
     last_renderer_availability_state_ = renderer_availability_state;
@@ -140,8 +140,7 @@
         last_renderer_availability_state_);
   }
 
-  const content::BrowserControlsState other_state =
-      CalculateStateForReasonOther();
+  const cc::BrowserControlsState other_state = CalculateStateForReasonOther();
   if (other_state != last_other_state_) {
     last_other_state_ = other_state;
     delegate_->OnBrowserControlsStateStateChanged(
@@ -149,33 +148,33 @@
   }
 }
 
-content::BrowserControlsState BrowserControlsNavigationStateHandler::
+cc::BrowserControlsState BrowserControlsNavigationStateHandler::
     CalculateStateForReasonRendererAvailability() {
   if (!IsRendererControllingOffsets() || web_contents()->IsBeingDestroyed() ||
       web_contents()->IsCrashed()) {
-    return content::BROWSER_CONTROLS_STATE_SHOWN;
+    return cc::BrowserControlsState::kShown;
   }
 
-  return content::BROWSER_CONTROLS_STATE_BOTH;
+  return cc::BrowserControlsState::kBoth;
 }
 
-content::BrowserControlsState
+cc::BrowserControlsState
 BrowserControlsNavigationStateHandler::CalculateStateForReasonOther() {
   // TODO(sky): this needs to force SHOWN if a11y enabled, see
   // AccessibilityUtil.isAccessibilityEnabled().
 
   if (force_show_during_load_ || web_contents()->IsFullscreen() ||
       web_contents()->IsFocusedElementEditable()) {
-    return content::BROWSER_CONTROLS_STATE_SHOWN;
+    return cc::BrowserControlsState::kShown;
   }
 
   content::NavigationEntry* entry =
       web_contents()->GetController().GetVisibleEntry();
   if (!entry || entry->GetPageType() != content::PAGE_TYPE_NORMAL)
-    return content::BROWSER_CONTROLS_STATE_SHOWN;
+    return cc::BrowserControlsState::kShown;
 
   if (entry->GetURL().SchemeIs(content::kChromeUIScheme))
-    return content::BROWSER_CONTROLS_STATE_SHOWN;
+    return cc::BrowserControlsState::kShown;
 
   const security_state::SecurityLevel security_level =
       security_state::GetSecurityLevel(
@@ -184,7 +183,7 @@
   switch (security_level) {
     case security_state::WARNING:
     case security_state::DANGEROUS:
-      return content::BROWSER_CONTROLS_STATE_SHOWN;
+      return cc::BrowserControlsState::kShown;
 
     case security_state::NONE:
     case security_state::SECURE:
@@ -193,7 +192,7 @@
       break;
   }
 
-  return content::BROWSER_CONTROLS_STATE_BOTH;
+  return cc::BrowserControlsState::kBoth;
 }
 
 bool BrowserControlsNavigationStateHandler::IsRendererHungOrCrashed() {
diff --git a/weblayer/browser/browser_controls_navigation_state_handler.h b/weblayer/browser/browser_controls_navigation_state_handler.h
index 69a6f74..339ed5a 100644
--- a/weblayer/browser/browser_controls_navigation_state_handler.h
+++ b/weblayer/browser/browser_controls_navigation_state_handler.h
@@ -7,15 +7,15 @@
 
 #include "base/optional.h"
 #include "base/timer/timer.h"
+#include "cc/input/browser_controls_state.h"
 #include "content/public/browser/web_contents_observer.h"
-#include "content/public/common/browser_controls_state.h"
 
 namespace weblayer {
 
 class BrowserControlsNavigationStateHandlerDelegate;
 
 // BrowserControlsNavigationStateHandler is responsible for the tracking the
-// value of content::BrowserControlsState as related to navigation state and
+// value of cc::BrowserControlsState as related to navigation state and
 // notifying the delegate when the state changes.
 //
 // This class is roughly a combination of TopControlsSliderControllerChromeOS
@@ -67,10 +67,10 @@
 
   // Calculates whether the renderer is available to control the browser
   // controls.
-  content::BrowserControlsState CalculateStateForReasonRendererAvailability();
+  cc::BrowserControlsState CalculateStateForReasonRendererAvailability();
 
   // Calculates the value of the ControlsVisibilityReason::kOther state.
-  content::BrowserControlsState CalculateStateForReasonOther();
+  cc::BrowserControlsState CalculateStateForReasonOther();
 
   bool IsRendererHungOrCrashed();
 
@@ -84,10 +84,9 @@
   base::OneShotTimer forced_show_during_load_timer_;
 
   // Last values supplied to the delegate.
-  content::BrowserControlsState last_renderer_availability_state_ =
-      content::BROWSER_CONTROLS_STATE_BOTH;
-  content::BrowserControlsState last_other_state_ =
-      content::BROWSER_CONTROLS_STATE_BOTH;
+  cc::BrowserControlsState last_renderer_availability_state_ =
+      cc::BrowserControlsState::kBoth;
+  cc::BrowserControlsState last_other_state_ = cc::BrowserControlsState::kBoth;
 
   // This is cached as WebContents::IsCrashed() does not always return the
   // right thing.
diff --git a/weblayer/browser/browser_controls_navigation_state_handler_delegate.h b/weblayer/browser/browser_controls_navigation_state_handler_delegate.h
index 64ee84a3..4ac1515 100644
--- a/weblayer/browser/browser_controls_navigation_state_handler_delegate.h
+++ b/weblayer/browser/browser_controls_navigation_state_handler_delegate.h
@@ -5,7 +5,7 @@
 #ifndef WEBLAYER_BROWSER_BROWSER_CONTROLS_NAVIGATION_STATE_HANDLER_DELEGATE_H_
 #define WEBLAYER_BROWSER_BROWSER_CONTROLS_NAVIGATION_STATE_HANDLER_DELEGATE_H_
 
-#include "content/public/common/browser_controls_state.h"
+#include "cc/input/browser_controls_state.h"
 
 namespace weblayer {
 
@@ -17,7 +17,7 @@
   // Called when the state changes.
   virtual void OnBrowserControlsStateStateChanged(
       ControlsVisibilityReason reason,
-      content::BrowserControlsState state) = 0;
+      cc::BrowserControlsState state) = 0;
 
   // Called when UpdateBrowserControlsState() should be called because a new
   // navigation started. This is necessary as the browser-controls state is
diff --git a/weblayer/browser/java/BUILD.gn b/weblayer/browser/java/BUILD.gn
index 9147086..b8e53cff 100644
--- a/weblayer/browser/java/BUILD.gn
+++ b/weblayer/browser/java/BUILD.gn
@@ -182,6 +182,7 @@
     ":weblayer_resources",
     "//base:base_java",
     "//base:jni_java",
+    "//cc:cc_java",
     "//components/autofill/android/provider:java",
     "//components/browser_ui/banners/android:java",
     "//components/browser_ui/client_certificate/android:java",
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/BrowserControlsContainerView.java b/weblayer/browser/java/org/chromium/weblayer_private/BrowserControlsContainerView.java
index 43b1740..5fa45786 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/BrowserControlsContainerView.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/BrowserControlsContainerView.java
@@ -17,8 +17,8 @@
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.annotations.NativeMethods;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.content_public.browser.WebContents;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.ui.base.EventOffsetHandler;
 import org.chromium.ui.resources.dynamics.ViewResourceAdapter;
 
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/BrowserViewController.java b/weblayer/browser/java/org/chromium/weblayer_private/BrowserViewController.java
index 1869af05..1d70425 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/BrowserViewController.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/BrowserViewController.java
@@ -18,11 +18,11 @@
 import androidx.annotation.Nullable;
 
 import org.chromium.base.annotations.JNINamespace;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.components.browser_ui.modaldialog.AppModalPresenter;
 import org.chromium.components.browser_ui.widget.InsetObserverView;
 import org.chromium.components.embedder_support.view.ContentView;
 import org.chromium.content_public.browser.WebContents;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.ui.modaldialog.DialogDismissalCause;
 import org.chromium.ui.modaldialog.ModalDialogManager;
 import org.chromium.ui.modaldialog.ModalDialogManager.ModalDialogType;
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/TabImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/TabImpl.java
index f04f0ab..d6a98d9 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/TabImpl.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/TabImpl.java
@@ -27,6 +27,7 @@
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.annotations.NativeMethods;
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.components.autofill.AutofillActionModeCallback;
 import org.chromium.components.autofill.AutofillProvider;
 import org.chromium.components.browser_ui.display_cutout.DisplayCutoutController;
@@ -51,7 +52,6 @@
 import org.chromium.content_public.browser.Visibility;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.content_public.browser.WebContentsObserver;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.ui.base.ViewAndroidDelegate;
 import org.chromium.ui.base.WindowAndroid;
 import org.chromium.url.GURL;
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/WebLayerTabModalPresenter.java b/weblayer/browser/java/org/chromium/weblayer_private/WebLayerTabModalPresenter.java
index aef1e1b..3f3ba0b 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/WebLayerTabModalPresenter.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/WebLayerTabModalPresenter.java
@@ -9,10 +9,10 @@
 import android.view.ViewGroup;
 import android.widget.FrameLayout;
 
+import org.chromium.cc.input.BrowserControlsState;
 import org.chromium.components.browser_ui.modaldialog.R;
 import org.chromium.components.browser_ui.modaldialog.TabModalPresenter;
 import org.chromium.content_public.browser.WebContents;
-import org.chromium.content_public.common.BrowserControlsState;
 import org.chromium.ui.LayoutInflaterUtils;
 import org.chromium.ui.modelutil.PropertyModel;
 
diff --git a/weblayer/browser/tab_impl.cc b/weblayer/browser/tab_impl.cc
index 0bafc3d..c50c0d3 100644
--- a/weblayer/browser/tab_impl.cc
+++ b/weblayer/browser/tab_impl.cc
@@ -639,11 +639,11 @@
                                               jint constraint,
                                               jboolean animate) {
   current_browser_controls_visibility_constraint_ =
-      static_cast<content::BrowserControlsState>(constraint);
+      static_cast<cc::BrowserControlsState>(constraint);
   // Passing BOTH here means that it doesn't matter what state the controls are
   // currently in; don't change the current state unless it's incompatible with
   // the new constraint.
-  UpdateBrowserControlsState(content::BROWSER_CONTROLS_STATE_BOTH, animate);
+  UpdateBrowserControlsState(cc::BrowserControlsState::kBoth, animate);
 }
 
 ScopedJavaLocalRef<jstring> TabImpl::GetGuid(JNIEnv* env) {
@@ -694,9 +694,8 @@
   return ScreenShotErrors::kNone;
 }
 
-void TabImpl::UpdateBrowserControlsState(
-    content::BrowserControlsState new_state,
-    bool animate) {
+void TabImpl::UpdateBrowserControlsState(cc::BrowserControlsState new_state,
+                                         bool animate) {
   if (base::FeatureList::IsEnabled(kImmediatelyHideBrowserControlsForTest))
     animate = false;
   // The constraint is managed by Java code, so re-use the existing constraint
@@ -1062,7 +1061,7 @@
 #if defined(OS_ANDROID)
   // Make sure browser controls cannot show when the tab is fullscreen.
   SetBrowserControlsConstraint(ControlsVisibilityReason::kFullscreen,
-                               content::BROWSER_CONTROLS_STATE_HIDDEN);
+                               cc::BrowserControlsState::kHidden);
 #endif
 }
 
@@ -1072,7 +1071,7 @@
 #if defined(OS_ANDROID)
   // Attempt to show browser controls when exiting fullscreen.
   SetBrowserControlsConstraint(ControlsVisibilityReason::kFullscreen,
-                               content::BROWSER_CONTROLS_STATE_BOTH);
+                               cc::BrowserControlsState::kBoth);
 #endif
 }
 
@@ -1194,7 +1193,7 @@
 #if defined(OS_ANDROID)
 void TabImpl::OnBrowserControlsStateStateChanged(
     ControlsVisibilityReason reason,
-    content::BrowserControlsState state) {
+    cc::BrowserControlsState state) {
   SetBrowserControlsConstraint(reason, state);
 }
 
@@ -1204,22 +1203,22 @@
   // updateEnabledState() in Chrome's TabBrowserControlsConstraintsHelper.
   if (did_commit &&
       current_browser_controls_visibility_constraint_ ==
-          content::BROWSER_CONTROLS_STATE_SHOWN &&
+          cc::BrowserControlsState::kShown &&
       top_controls_container_view_ &&
       top_controls_container_view_->IsFullyVisible()) {
     // The top-control is fully visible, don't animate this else the controls
     // bounce around.
-    UpdateBrowserControlsState(content::BROWSER_CONTROLS_STATE_SHOWN, false);
+    UpdateBrowserControlsState(cc::BrowserControlsState::kShown, false);
   } else {
     if (did_commit && current_browser_controls_visibility_constraint_ ==
-                          content::BROWSER_CONTROLS_STATE_BOTH) {
-      // If the current state is BROWSER_CONTROLS_STATE_BOTH, then
+                          cc::BrowserControlsState::kBoth) {
+      // If the current state is kBoth, then
       // TabImpl::UpdateBrowserControlsState() is going to call
       // WebContents::UpdateBrowserControlsState() with both current and
-      // constraints set to BROWSER_CONTROLS_STATE_BOTH. cc does
+      // constraints set to kBoth. cc does
       // nothing in this case. During a navigation the top-view needs to be
       // shown. To force the top-view to show, supply
-      // BROWSER_CONTROLS_STATE_SHOWN. This path is only hit if top-view
+      // kShown. This path is only hit if top-view
       // is configured to only-expand-at-top, as in this case the top-view isn't
       // forced shown during a page load.
       //
@@ -1230,15 +1229,15 @@
       const bool animate =
           !base::FeatureList::IsEnabled(kImmediatelyHideBrowserControlsForTest);
       web_contents_->GetMainFrame()->UpdateBrowserControlsState(
-          content::BROWSER_CONTROLS_STATE_BOTH,
-          content::BROWSER_CONTROLS_STATE_SHOWN, animate);
+          cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kShown,
+          animate);
       // This falls through to call UpdateBrowserControlsState() again to
       // ensure the constraint is set back to BOTH.
     }
     UpdateBrowserControlsState(
-        content::BROWSER_CONTROLS_STATE_BOTH,
+        cc::BrowserControlsState::kBoth,
         current_browser_controls_visibility_constraint_ !=
-            content::BROWSER_CONTROLS_STATE_HIDDEN);
+            cc::BrowserControlsState::kHidden);
   }
 }
 
@@ -1273,10 +1272,10 @@
 #if defined(OS_ANDROID)
 void TabImpl::SetBrowserControlsConstraint(
     ControlsVisibilityReason reason,
-    content::BrowserControlsState constraint) {
+    cc::BrowserControlsState constraint) {
   Java_TabImpl_setBrowserControlsVisibilityConstraint(
       base::android::AttachCurrentThread(), java_impl_,
-      static_cast<int>(reason), constraint);
+      static_cast<int>(reason), static_cast<int>(constraint));
 }
 #endif
 
diff --git a/weblayer/browser/tab_impl.h b/weblayer/browser/tab_impl.h
index be04aba..b1a295f 100644
--- a/weblayer/browser/tab_impl.h
+++ b/weblayer/browser/tab_impl.h
@@ -14,10 +14,10 @@
 #include "base/observer_list.h"
 #include "base/strings/string16.h"
 #include "build/build_config.h"
+#include "cc/input/browser_controls_state.h"
 #include "components/find_in_page/find_result_observer.h"
 #include "content/public/browser/web_contents_delegate.h"
 #include "content/public/browser/web_contents_observer.h"
-#include "content/public/common/browser_controls_state.h"
 #include "weblayer/browser/i18n_util.h"
 #include "weblayer/public/tab.h"
 
@@ -320,7 +320,7 @@
       gfx::Rect* src_rect,
       gfx::Size* output_size);
 
-  void UpdateBrowserControlsState(content::BrowserControlsState new_state,
+  void UpdateBrowserControlsState(cc::BrowserControlsState new_state,
                                   bool animate);
 #endif
 
@@ -335,7 +335,7 @@
   // BrowserControlsNavigationStateHandlerDelegate:
   void OnBrowserControlsStateStateChanged(
       ControlsVisibilityReason reason,
-      content::BrowserControlsState state) override;
+      cc::BrowserControlsState state) override;
   void OnUpdateBrowserControlsStateBecauseOfProcessSwitch(
       bool did_commit) override;
 #endif
@@ -355,7 +355,7 @@
 
 #if defined(OS_ANDROID)
   void SetBrowserControlsConstraint(ControlsVisibilityReason reason,
-                                    content::BrowserControlsState constraint);
+                                    cc::BrowserControlsState constraint);
 #endif
 
   void UpdateBrowserVisibleSecurityStateIfNecessary();
@@ -385,9 +385,8 @@
   // visible, HIDDEN, if for example fullscreen is forcing the controls to be
   // hidden, or BOTH, if either state is viable (e.g. during normal browsing).
   // When BOTH, the actual current state could be showing or hidden.
-  content::BrowserControlsState
-      current_browser_controls_visibility_constraint_ =
-          content::BROWSER_CONTROLS_STATE_SHOWN;
+  cc::BrowserControlsState current_browser_controls_visibility_constraint_ =
+      cc::BrowserControlsState::kShown;
 
   std::map<std::string, std::unique_ptr<WebMessageHostFactoryProxy>>
       js_name_to_proxy_;