diff --git a/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinViewBinder.java b/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinViewBinder.java
index c7c6fe01cba6a6665ed462d463eac387fde75f72..de4822ab98de2a066a7fe71aae363812913e5975 100644
--- a/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinViewBinder.java
+++ b/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinViewBinder.java
@@ -63,9 +63,13 @@ class EdgeToEdgeBottomChinViewBinder {
     }
 
     private static void updateVisibility(PropertyModel model, ViewHolder viewHolder) {
-        boolean visible = model.get(CAN_SHOW) && model.get(Y_OFFSET) < model.get(HEIGHT);
+        // Even if the chin has scrolled off, the android view should remain in case other browser
+        // controls are showing. The presence of the android view is needed to avoid strange
+        // transparency / cut-off bugs that happen when scrolling browser controls under bottom
+        // inset when drawing edge-to-edge.
+        viewHolder.mAndroidView.setVisibility(model.get(CAN_SHOW) ? View.VISIBLE : View.GONE);
 
-        viewHolder.mAndroidView.setVisibility(visible ? View.VISIBLE : View.GONE);
+        boolean visible = model.get(CAN_SHOW) && model.get(Y_OFFSET) < model.get(HEIGHT);
         viewHolder.mSceneLayer.setIsVisible(visible);
     }
 
diff --git a/chrome/browser/ui/android/edge_to_edge/internal/junit/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinViewBinderTest.java b/chrome/browser/ui/android/edge_to_edge/internal/junit/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinViewBinderTest.java
index 0124bc40494c4c7416a16f9a4f7d3a6c57d80bca..8cb675ffc8a248fb9bd5f8cb17c498f36fbc9545 100644
--- a/chrome/browser/ui/android/edge_to_edge/internal/junit/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinViewBinderTest.java
+++ b/chrome/browser/ui/android/edge_to_edge/internal/junit/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeBottomChinViewBinderTest.java
@@ -71,7 +71,7 @@ public class EdgeToEdgeBottomChinViewBinderTest {
         // Set the y-offset to full height.
         mModel.set(Y_OFFSET, mModel.get(HEIGHT));
         verify(mSceneLayer).setYOffset(mModel.get(HEIGHT));
-        verify(mAndroidView, atLeastOnce()).setVisibility(eq(View.GONE));
+        verify(mAndroidView, never()).setVisibility(eq(View.GONE));
         verify(mSceneLayer, atLeastOnce()).setIsVisible(eq(false));
 
         clearInvocations(mSceneLayer);
@@ -79,14 +79,14 @@ public class EdgeToEdgeBottomChinViewBinderTest {
         // Clear the y-offset.
         mModel.set(Y_OFFSET, 0);
         verify(mSceneLayer).setYOffset(0);
-        verify(mAndroidView, atLeastOnce()).setVisibility(eq(View.VISIBLE));
+        verify(mAndroidView, never()).setVisibility(eq(View.GONE));
         verify(mSceneLayer, atLeastOnce()).setIsVisible(eq(true));
     }
 
     @Test
     public void testUpdate_Height() {
         mModel.set(HEIGHT, 0);
-        verify(mAndroidView, atLeastOnce()).setVisibility(eq(View.GONE));
+        verify(mAndroidView, never()).setVisibility(eq(View.GONE));
         verify(mSceneLayer, atLeastOnce()).setIsVisible(eq(false));
 
         mModel.set(HEIGHT, 60);