[Chrome Colors] Add Chrome Colors flag and feature

Bug: 960982
Change-Id: I34059e493332e6dca9ed9e1fa91babd916523948
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1601636
Commit-Queue: Gayane Petrosyan <gayane@chromium.org>
Reviewed-by: Kyle Milka <kmilka@chromium.org>
Cr-Commit-Position: refs/heads/master@{#658660}
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 475b8f9..a6cc1f3 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -2703,6 +2703,10 @@
 #endif  // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
 
 #if !defined(OS_ANDROID)
+    {"chrome-colors", flag_descriptions::kChromeColorsName,
+     flag_descriptions::kChromeColorsDescription, kOsDesktop,
+     FEATURE_VALUE_TYPE(features::kChromeColors)},
+
     {"remove-ntp-fakebox", flag_descriptions::kRemoveNtpFakeboxName,
      flag_descriptions::kRemoveNtpFakeboxDescription, kOsDesktop,
      FEATURE_VALUE_TYPE(features::kRemoveNtpFakebox)},
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index b0dbcc08..fe1112f 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -371,6 +371,11 @@
     "expiry_milestone": 76
   },
   {
+    "name": "chrome-colors",
+    "owners": ["gayane"],
+    "expiry_milestone": 78
+  },
+  {
     "name": "clear-old-browsing-data",
     "owners": [ "dullweber" ],
     "expiry_milestone": 78
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 5b6c4fa..dd78340 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -2597,6 +2597,10 @@
 const char kAppManagementDescription[] =
     "Shows the new app management page at chrome://apps.";
 
+const char kChromeColorsName[] = "Chrome Colors menu";
+const char kChromeColorsDescription[] =
+    "Show Chrome Colors menu in the NTP customization menu.";
+
 const char kRemoveNtpFakeboxName[] = "Remove fakebox from the NTP";
 const char kRemoveNtpFakeboxDescription[] =
     "Do not show the fakebox on the New Tab page.";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index afd97365..85499453 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1551,6 +1551,9 @@
 extern const char kAutofillDropdownLayoutName[];
 extern const char kAutofillDropdownLayoutDescription[];
 
+extern const char kChromeColorsName[];
+extern const char kChromeColorsDescription[];
+
 extern const char kRemoveNtpFakeboxName[];
 extern const char kRemoveNtpFakeboxDescription[];
 
diff --git a/chrome/browser/resources/local_ntp/custom_backgrounds.js b/chrome/browser/resources/local_ntp/custom_backgrounds.js
index 196d9a4..e9032340 100644
--- a/chrome/browser/resources/local_ntp/custom_backgrounds.js
+++ b/chrome/browser/resources/local_ntp/custom_backgrounds.js
@@ -217,6 +217,7 @@
   $(customBackgrounds.IDS.EDIT_BG_DIVIDER).hidden = false;
   $(customBackgrounds.IDS.CUSTOM_LINKS_RESTORE_DEFAULT).hidden =
       configData.hideShortcuts;
+  $(customBackgrounds.IDS.COLORS_BUTTON).hidden = !configData.chromeColors;
 };
 
 /**
diff --git a/chrome/browser/resources/local_ntp/externs.js b/chrome/browser/resources/local_ntp/externs.js
index f5e69bbb..60cd9a2d 100644
--- a/chrome/browser/resources/local_ntp/externs.js
+++ b/chrome/browser/resources/local_ntp/externs.js
@@ -33,7 +33,8 @@
  *            removeFakebox: boolean,
  *            alternateFakebox: boolean,
  *            fakeboxSearchIcon: boolean,
- *            hideShortcuts: boolean}}
+ *            hideShortcuts: boolean,
+ *            chromeColors: boolean}}
  */
 let configData;
 
diff --git a/chrome/browser/search/local_ntp_source.cc b/chrome/browser/search/local_ntp_source.cc
index e5f2083..3e6f84b4 100644
--- a/chrome/browser/search/local_ntp_source.cc
+++ b/chrome/browser/search/local_ntp_source.cc
@@ -623,6 +623,8 @@
       config_data.SetBoolean(
           "richerPicker",
           base::FeatureList::IsEnabled(features::kNtpCustomizationMenuV2));
+      config_data.SetBoolean("chromeColors", base::FeatureList::IsEnabled(
+                                                 features::kChromeColors));
     }
 
     // Serialize the dictionary.
diff --git a/chrome/browser/search/ntp_features.cc b/chrome/browser/search/ntp_features.cc
index 1b6929f..606e4ff 100644
--- a/chrome/browser/search/ntp_features.cc
+++ b/chrome/browser/search/ntp_features.cc
@@ -9,6 +9,10 @@
 
 namespace features {
 
+// If enabled, 'Chrome Colors' menu becomes visible in the customization picker.
+const base::Feature kChromeColors{"ChromeColors",
+                                  base::FEATURE_DISABLED_BY_DEFAULT};
+
 // If enabled, does not fade in most visited tiles on initial page load.
 const base::Feature kDisableInitialMostVisitedFadeIn{
     "DisableInitialMostVisitedFadeIn", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chrome/browser/search/ntp_features.h b/chrome/browser/search/ntp_features.h
index 3211ce94..a642e74 100644
--- a/chrome/browser/search/ntp_features.h
+++ b/chrome/browser/search/ntp_features.h
@@ -12,6 +12,7 @@
 // The features should be documented alongside the definition of their values in
 // the .cc file.
 
+extern const base::Feature kChromeColors;
 extern const base::Feature kDisableInitialMostVisitedFadeIn;
 extern const base::Feature kNtpCustomizationMenuV2;
 extern const base::Feature kRemoveNtpFakebox;
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index a600e3f..3e435ae 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -32957,6 +32957,7 @@
   <int value="-1650769314" label="enable-webgl2-compute-context"/>
   <int value="-1649778035" label="disable-clear-browsing-data-counters"/>
   <int value="-1648216169" label="NewOmniboxAnswerTypes:disabled"/>
+  <int value="-1645071473" label="ChromeColors:disabled"/>
   <int value="-1638815914" label="enable-experimental-productivity-features"/>
   <int value="-1634878515" label="ChromeHomeModernLayout:enabled"/>
   <int value="-1634490190"
@@ -34735,6 +34736,7 @@
   <int value="1070164693" label="MidiManagerDynamicInstantiation:disabled"/>
   <int value="1070300488" label="disable-webgl"/>
   <int value="1070449228" label="ContextualSuggestionsCarousel:enabled"/>
+  <int value="1070840417" label="ChromeColors:enabled"/>
   <int value="1071520357" label="WebAuthenticationTouchId:enabled"/>
   <int value="1072010558" label="NTPModernLayout:disabled"/>
   <int value="1074359194" label="UseSuggestionsEvenIfFew:enabled"/>