Low chrome Logic Error 🔧 Commit mapped

Overview

Low
Severity
CVSS
No
Exploited ITW
Fixed
Fix Status
ImpactInappropriate implementation in Custom Tabs
DescriptionInappropriate implementation in Custom Tabs
ComponentCustom Tabs
Bug ClassLogic Error
Tracker362545037
Fix commitce7064982527 (chromium/src) +8/-100
CISA KEVNot listed
CreditedOm Apip
Disclosed2025-04-01

Changed Functions

FunctionChangeNotes
if
chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
modified

Files Changed

  • chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
  • tools/metrics/histograms/metadata/custom_tabs/enums.xml
  • tools/metrics/histograms/metadata/custom_tabs/histograms.xml
From ce7064982527865ee63c8fd136fe2cca52fbdb10 Mon Sep 17 00:00:00 2001
From: Jinsuk Kim <[email protected]>
Date: Thu, 06 Feb 2025 13:38:45 -0800
Subject: [PATCH] [CCT] Suppress preview page for data: url on CCT

The volume of data: url scheme opening preview page on CCT
is pretty low. This CL suppresses the menu item as it could
present a potential security problem.

Histogram/enum added for the stats were also removed as they
were for one-off measurement.

Bug: 362545037
Change-Id: I72b6cf77507157b8f8dfdac43dee127530c9415a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6184388
Reviewed-by: Sinan Sahin <[email protected]>
Commit-Queue: Jinsuk Kim <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1416995}
---

diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
index 5809857..86c45512 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
@@ -26,7 +26,6 @@
 
 import org.chromium.base.Callback;
 import org.chromium.base.ContextUtils;
-import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.shared_preferences.SharedPreferencesManager;
 import org.chromium.base.supplier.Supplier;
 import org.chromium.chrome.R;
@@ -211,67 +210,6 @@
         }
     }
 
-    // Used to record the UMA histogram Android.CustomTabs.ContextMenu.UrlScheme. These don't
-    // need to be a comprehensive list of schemes since what we are interested in is the relative
-    // volume of data scheme.
-    // Since these values are persisted to logs, they should never be renumbered or reused.
-    // LINT.IfChange(UrlScheme)
-    @VisibleForTesting
-    @IntDef({
-        UrlScheme.UNKNOWN_SCHEME,
-        UrlScheme.HTTP_SCHEME,
-        UrlScheme.HTTPS_SCHEME,
-        UrlScheme.FILE_SCHEME,
-        UrlScheme.FTP_SCHEME,
-        UrlScheme.DATA_SCHEME,
-        UrlScheme.JAVASCRIPT_SCHEME,
-        UrlScheme.CHROME_SCHEME,
-        UrlScheme.BLOB_SCHEME,
-        UrlScheme.CONTENT_SCHEME,
-        UrlScheme.INTENT_SCHEME,
-    })
-    public @interface UrlScheme {
-        int UNKNOWN_SCHEME = 0;
-        int HTTP_SCHEME = 1;
-        int HTTPS_SCHEME = 2;
-        int FILE_SCHEME = 3;
-        int FTP_SCHEME = 4;
-        int DATA_SCHEME = 5;
-        int JAVASCRIPT_SCHEME = 6;
-        int CHROME_SCHEME = 7;
-        int BLOB_SCHEME = 8;
-        int CONTENT_SCHEME = 9;
-        int INTENT_SCHEME = 10;
-        int COUNT = 11;
-    }
-
-    // LINT.ThenChange(/tools/metrics/histograms/metadata/custom_tabs/enums.xml:CustomTabsUrlScheme)
-
-    private static @UrlScheme int schemeForUrl(String scheme) {
-        if (scheme.equals(UrlConstants.HTTP_SCHEME)) {
-            return UrlScheme.HTTP_SCHEME;
-        } else if (scheme.equals(UrlConstants.HTTPS_SCHEME)) {
-            return UrlScheme.HTTPS_SCHEME;
-        } else if (scheme.equals(UrlConstants.FILE_SCHEME)) {
-            return UrlScheme.FILE_SCHEME;
-        } else if (scheme.equals(UrlConstants.FTP_SCHEME)) {
-            return UrlScheme.FTP_SCHEME;
-        } else if (scheme.equals(UrlConstants.DATA_SCHEME)) {
-            return UrlScheme.DATA_SCHEME;
-        } else if (scheme.equals(UrlConstants.JAVASCRIPT_SCHEME)) {
-            return UrlScheme.JAVASCRIPT_SCHEME;
-        } else if (scheme.equals(UrlConstants.CHROME_SCHEME)) {
-            return UrlScheme.CHROME_SCHEME;
-        } else if (scheme.equals(UrlConstants.BLOB_SCHEME)) {
-            return UrlScheme.BLOB_SCHEME;
-        } else if (scheme.equals(UrlConstants.CONTENT_SCHEME)) {
-            return UrlScheme.CONTENT_SCHEME;
-        } else if (scheme.equals(UrlConstants.INTENT_SCHEME)) {
-            return UrlScheme.INTENT_SCHEME;
-        }
-        return UrlScheme.UNKNOWN_SCHEME;
-    }
-
     /**
      * Builds a {@link ChromeContextMenuPopulator}.
      *
@@ -350,15 +288,15 @@
                 }
                 if ((mMode == ContextMenuMode.NORMAL || mMode == ContextMenuMode.CUSTOM_TAB)
                         && EphemeralTabCoordinator.isSupported()) {
-                    mShowEphemeralTabNewLabel = shouldTriggerEphemeralTabHelpUi();
-                    if (mMode == ContextMenuMode.CUSTOM_TAB) {
-                        @UrlScheme int enumScheme = schemeForUrl(mParams.getUrl().getScheme());
-                        RecordHistogram.recordEnumeratedHistogram(
-                                "CustomTabs.ContextMenu.UrlScheme", enumScheme, UrlScheme.COUNT);
+                    boolean showNewLabel = shouldTriggerEphemeralTabHelpUi();
+                    boolean isDataUrl =
+                            mParams.getUrl().getScheme().equals(UrlConstants.DATA_SCHEME);
+                    if (!(mMode == ContextMenuMode.CUSTOM_TAB && isDataUrl)) {
+                        // Do not show the item if CCT opens data: url as it could potentially
+                        // cause a security issue.
+                        linkGroup.add(createListItem(Item.OPEN_IN_EPHEMERAL_TAB, showNewLabel));
+                        mShowEphemeralTabNewLabel = showNewLabel;
                     }
-
-                    linkGroup.add(
-                            createListItem(Item.OPEN_IN_EPHEMERAL_TAB, mShowEphemeralTabNewLabel));
                 }
             }
             if (!MailTo.isMailTo(mParams.getLinkUrl().getSpec())
diff --git a/tools/metrics/histograms/metadata/custom_tabs/enums.xml b/tools/metrics/histograms/metadata/custom_tabs/enums.xml
index bcf6192..0676ac3 100644
--- a/tools/metrics/histograms/metadata/custom_tabs/enums.xml
+++ b/tools/metrics/histograms/metadata/custom_tabs/enums.xml
@@ -184,24 +184,6 @@
              memory"/>
 </enum>
 
-<!-- LINT.IfChange(CustomTabsUrlScheme) -->
-
-<enum name="CustomTabsUrlScheme">
-  <int value="0" label="Unknown scheme"/>
-  <int value="1" label="HTTP"/>
-  <int value="2" label="HTTPS"/>
-  <int value="3" label="File"/>
-  <int value="4" label="Ftp"/>
-  <int value="5" label="Data"/>
-  <int value="6" label="Javascript"/>
-  <int value="7" label="Chrome"/>
-  <int value="8" label="Blob"/>
-  <int value="9" label="Content"/>
-  <int value="10" label="Intent"/>
-</enum>
-
-<!-- LINT.ThenChange(//chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java:UrlScheme) -->
-
 <enum name="GoogleBottomBarButtonEvent">
   <int value="0" label="Unknown button"/>
   <int value="1" label="Chrome Page Insights button"/>
diff --git a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
index 999cd33d..8d30595e7 100644
--- a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
+++ b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
@@ -227,18 +227,6 @@
   </summary>
 </histogram>
 
-<histogram name="CustomTabs.ContextMenu.UrlScheme" enum="CustomTabsUrlScheme"
-    expires_after="2025-07-27">
-  <owner>[email protected]</owner>
-  <owner>[email protected]</owner>
-  <summary>
-    Records the scheme of the URL for which the context menu is shown on Custom
-    Tabs. This histogram is to understand the relative volume of data: scheme
-    with a view to not displaying the menu 'Preview Page' for the scheme if the
-    volume is insignificant. Recorded when the context menu is opened.
-  </summary>
-</histogram>
-
 <histogram base="true" name="CustomTabs.DetachedResourceRequest.Duration"
     units="ms" expires_after="2024-03-17">
   <owner>[email protected]</owner>
Loading diff…

Original Bug Report

The reporter's bug is still restricted on the tracker. Chrome de-restricts security bugs ~30–90 days after the fix ships; a later run will backfill it here.