about_flags::ReportCustomFlags() should use signed 32-bit IDs.

On 32-bit architectures UMA Histogram IDs (enum
LoginCustomFlags) are negative. So HistogramBase::Sample
(which is int32_t) should be used.

BUG=408196
TEST=manual

Review URL: https://codereview.chromium.org/509923003

Cr-Commit-Position: refs/heads/master@{#293062}
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 34fbe4c..4fa0f57 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -67,7 +67,7 @@
 
 namespace about_flags {
 
-const uint32_t kBadSwitchFormatHistogramId = 0;
+const base::HistogramBase::Sample kBadSwitchFormatHistogramId = 0;
 
 // Macros to simplify specifying the type.
 #define SINGLE_VALUE_TYPE_AND_VALUE(command_line_switch, switch_value) \
@@ -2265,8 +2265,9 @@
   content::RecordAction(UserMetricsAction("StartupTick"));
 }
 
-uint32_t GetSwitchUMAId(const std::string& switch_name) {
-  return static_cast<uint32_t>(metrics::HashMetricName(switch_name));
+base::HistogramBase::Sample GetSwitchUMAId(const std::string& switch_name) {
+  return static_cast<base::HistogramBase::Sample>(
+      metrics::HashMetricName(switch_name));
 }
 
 void ReportCustomFlags(const std::string& uma_histogram_hame,
diff --git a/chrome/browser/about_flags.h b/chrome/browser/about_flags.h
index 7a229a7..ed455a4e 100644
--- a/chrome/browser/about_flags.h
+++ b/chrome/browser/about_flags.h
@@ -12,6 +12,7 @@
 #include <string>
 
 #include "base/command_line.h"
+#include "base/metrics/histogram_base.h"
 #include "base/strings/string16.h"
 
 class PrefService;
@@ -26,7 +27,7 @@
 
 // This value is reported as switch histogram ID if switch name has unknown
 // format.
-extern const uint32_t kBadSwitchFormatHistogramId;
+extern const base::HistogramBase::Sample kBadSwitchFormatHistogramId;
 
 // Enumeration of OSs.
 // This is exposed only for testing.
@@ -171,7 +172,7 @@
 void RecordUMAStatistics(FlagsStorage* flags_storage);
 
 // Returns the UMA id for the specified switch name.
-uint32_t GetSwitchUMAId(const std::string& switch_name);
+base::HistogramBase::Sample GetSwitchUMAId(const std::string& switch_name);
 
 // Sends stats (as UMA histogram) about command_line_difference.
 // This is used on ChromeOS to report flags that lead to browser restart.
diff --git a/chrome/browser/about_flags_unittest.cc b/chrome/browser/about_flags_unittest.cc
index 6e0c938..a666043a 100644
--- a/chrome/browser/about_flags_unittest.cc
+++ b/chrome/browser/about_flags_unittest.cc
@@ -41,19 +41,20 @@
 const char kEnableDisableValue1[] = "value1";
 const char kEnableDisableValue2[] = "value2";
 
-typedef std::map<std::string, uint32_t> SwitchToIdMap;
+typedef base::HistogramBase::Sample Sample;
+typedef std::map<std::string, Sample> SwitchToIdMap;
 
 // This is a helper function to the ReadEnumFromHistogramsXml().
 // Extracts single enum (with integer values) from histograms.xml.
 // Expects |reader| to point at given enum.
 // Returns map { value => label }.
 // Returns empty map on error.
-std::map<uint32_t, std::string> ParseEnumFromHistogramsXml(
+std::map<Sample, std::string> ParseEnumFromHistogramsXml(
     const std::string& enum_name,
     XmlReader* reader) {
   int entries_index = -1;
 
-  std::map<uint32_t, std::string> result;
+  std::map<Sample, std::string> result;
   bool success = true;
 
   while (true) {
@@ -80,8 +81,8 @@
         success = false;
       }
 
-      uint32_t value;
-      if (has_value && !base::StringToUint(value_str, &value)) {
+      Sample value;
+      if (has_value && !base::StringToInt(value_str, &value)) {
         ADD_FAILURE() << "Bad " << enum_name << " enum entry (at index "
                       << entries_index << ", label='" << label
                       << "', value_str='" << value_str
@@ -105,7 +106,7 @@
     // until possible.
     reader->Next();
   }
-  return (success ? result : std::map<uint32_t, std::string>());
+  return (success ? result : std::map<Sample, std::string>());
 }
 
 // Find and read given enum (with integer values) from histograms.xml.
@@ -117,10 +118,10 @@
 // becomes:
 //   { 9 => "enable-pinch-virtual-viewport" }
 // Returns empty map on error.
-std::map<uint32_t, std::string> ReadEnumFromHistogramsXml(
+std::map<Sample, std::string> ReadEnumFromHistogramsXml(
     const std::string& enum_name,
     XmlReader* histograms_xml) {
-  std::map<uint32_t, std::string> login_custom_flags;
+  std::map<Sample, std::string> login_custom_flags;
 
   // Implement simple depth first search.
   while (true) {
@@ -131,7 +132,7 @@
         if (!login_custom_flags.empty()) {
           EXPECT_TRUE(login_custom_flags.empty())
               << "Duplicate enum '" << enum_name << "' found in histograms.xml";
-          return std::map<uint32_t, std::string>();
+          return std::map<Sample, std::string>();
         }
 
         const bool got_into_enum = histograms_xml->Read();
@@ -147,7 +148,7 @@
               << "' (looks empty) found in histograms.xml.";
         }
         if (login_custom_flags.empty())
-          return std::map<uint32_t, std::string>();
+          return std::map<Sample, std::string>();
       }
     }
     // Go deeper if possible (stops at the closing tag of the deepest node).
@@ -676,9 +677,9 @@
   // This is a helper function to check that all IDs in enum LoginCustomFlags in
   // histograms.xml are unique.
   void SetSwitchToHistogramIdMapping(const std::string& switch_name,
-                                     const uint32_t switch_histogram_id,
-                                     std::map<std::string, uint32_t>* out_map) {
-    const std::pair<std::map<std::string, uint32_t>::iterator, bool> status =
+                                     const Sample switch_histogram_id,
+                                     std::map<std::string, Sample>* out_map) {
+    const std::pair<std::map<std::string, Sample>::iterator, bool> status =
         out_map->insert(std::make_pair(switch_name, switch_histogram_id));
     if (!status.second) {
       EXPECT_TRUE(status.first->second == switch_histogram_id)
@@ -690,9 +691,9 @@
   // This method generates a hint for the user for what string should be added
   // to the enum LoginCustomFlags to make in consistent.
   std::string GetHistogramEnumEntryText(const std::string& switch_name,
-                                        uint32_t value) {
+                                        Sample value) {
     return base::StringPrintf(
-        "<int value=\"%u\" label=\"%s\"/>", value, switch_name.c_str());
+        "<int value=\"%d\" label=\"%s\"/>", value, switch_name.c_str());
   }
 };
 
@@ -708,7 +709,7 @@
   XmlReader histograms_xml;
   ASSERT_TRUE(histograms_xml.LoadFile(
       FilePathStringTypeToString(histograms_xml_file_path.value())));
-  std::map<uint32_t, std::string> login_custom_flags =
+  std::map<Sample, std::string> login_custom_flags =
       ReadEnumFromHistogramsXml("LoginCustomFlags", &histograms_xml);
   ASSERT_TRUE(login_custom_flags.size())
       << "Error reading enum 'LoginCustomFlags' from histograms.xml.";
@@ -722,7 +723,7 @@
          "Consider adding entry:\n"
       << "  " << GetHistogramEnumEntryText("BAD_FLAG_FORMAT", 0);
   // Check that all LoginCustomFlags entries have correct values.
-  for (std::map<uint32_t, std::string>::const_iterator it =
+  for (std::map<Sample, std::string>::const_iterator it =
            login_custom_flags.begin();
        it != login_custom_flags.end();
        ++it) {
@@ -732,7 +733,7 @@
           "", it->first, &histograms_xml_switches_ids);
       continue;
     }
-    const uint32_t uma_id = GetSwitchUMAId(it->second);
+    const Sample uma_id = GetSwitchUMAId(it->second);
     EXPECT_EQ(uma_id, it->first)
         << "histograms.xml enum LoginCustomFlags "
            "entry '" << it->second << "' has incorrect value=" << it->first
@@ -750,7 +751,7 @@
     // Skip empty placeholders.
     if (it->empty())
       continue;
-    const uint32_t uma_id = GetSwitchUMAId(*it);
+    const Sample uma_id = GetSwitchUMAId(*it);
     EXPECT_NE(kBadSwitchFormatHistogramId, uma_id)
         << "Command-line switch '" << *it
         << "' from about_flags.cc has UMA ID equal to reserved value "
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index ef21c84..e124dc4 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -44132,6 +44132,147 @@
 -->
 
   <summary>Chrome flags that lead to chrome restart on ChromeOS.</summary>
+  <int value="-2137755780" label="enable-reader-mode-toolbar-icon"/>
+  <int value="-2132591642" label="enable-input-view"/>
+  <int value="-2117201726" label="disable-gpu-rasterization"/>
+  <int value="-2114831248" label="disable-new-ntp"/>
+  <int value="-2098610409" label="disable-lcd-text"/>
+  <int value="-2097515669" label="disable-cast"/>
+  <int value="-2077268643" label="disable-device-enumeration"/>
+  <int value="-2052416224" label="enable-zero-suggest-ether-noserp"/>
+  <int value="-2047822258" label="enable-avfoundation"/>
+  <int value="-2025367104" label="enable-material-design-ntp"/>
+  <int value="-2020024440" label="scroll-end-effect"/>
+  <int value="-2008272679" label="disable-webrtc-hw-encoding"/>
+  <int value="-2003354337"
+      label="enable-search-button-in-omnibox-for-str-or-iip"/>
+  <int value="-1985025593" label="file-manager-enable-new-gallery"/>
+  <int value="-1972383451" label="disable-pinch"/>
+  <int value="-1940806558" label="enable-syncfs-directory-operation"/>
+  <int value="-1930720286" label="nacl-debug-mask"/>
+  <int value="-1928198763" label="enable-async-dns"/>
+  <int value="-1925117279" label="disable-quic-https"/>
+  <int value="-1888273969" label="tab-capture-upscale-quality"/>
+  <int value="-1876881908"
+      label="disable-infobar-for-protected-media-identifier"/>
+  <int value="-1874908826" label="enable-instant-search-clicks"/>
+  <int value="-1870961970" label="enable-filemanager-mtp"/>
+  <int value="-1847835522" label="disable-touch-adjustment"/>
+  <int value="-1838482444" label="disable-settings-window"/>
+  <int value="-1835975804" label="disable-offline-auto-reload"/>
+  <int value="-1833149810" label="enable-accessibility-tab-switcher"/>
+  <int value="-1767470652" label="out-of-process-pdf"/>
+  <int value="-1746767834" label="ssl-interstitial-v2-gray"/>
+  <int value="-1740519217" label="disable-software-rasterizer"/>
+  <int value="-1735643253" label="enable-display-list-2d-canvas"/>
+  <int value="-1725507605" label="enable-web-midi"/>
+  <int value="-1719833926" label="disable-answers-in-suggest"/>
+  <int value="-1716654100" label="tab-capture-downscale-quality"/>
+  <int value="-1703709912" label="enable-new-ntp"/>
+  <int value="-1703308540" label="disable-webaudio"/>
+  <int value="-1696366449" label="disable-permissions-bubbles"/>
+  <int value="-1619757314" label="touch-scrolling-mode"/>
+  <int value="-1605567628" label="disable-overlay-scrollbar"/>
+  <int value="-1596559650" label="max-tiles-for-interest-area"/>
+  <int value="-1571841513" label="enable-devtools-experiments"/>
+  <int value="-1553477903" label="ash-disable-text-filtering-in-overview-mode"/>
+  <int value="-1546903171" label="enable-touch-drag-drop"/>
+  <int value="-1510839574" label="disable-sync-synced-notifications"/>
+  <int value="-1497338981" label="disable-accelerated-overflow-scroll"/>
+  <int value="-1482685863" label="enable-request-tablet-site"/>
+  <int value="-1460462432" label="disable-media-source"/>
+  <int value="-1433087548" label="enable-app-install-alerts"/>
+  <int value="-1419788257" label="enable-experimental-hotwording"/>
+  <int value="-1408288176" label="enable-account-consistency"/>
+  <int value="-1399753480" label="disable-harfbuzz-rendertext"/>
+  <int value="-1399419572" label="enable-app-list"/>
+  <int value="-1392562498" label="disable-origin-chip"/>
+  <int value="-1375111024" label="enable-fixed-position-compositing"/>
+  <int value="-1349872906"
+      label="disallow-autofill-sync-credential-for-reauth"/>
+  <int value="-1341092934" label="enable-accelerated-overflow-scroll"/>
+  <int value="-1340055960" label="enable-streamlined-hosted-apps"/>
+  <int value="-1334327410" label="ash-enable-touch-view-testing"/>
+  <int value="-1319688939" label="ignore-gpu-blacklist"/>
+  <int value="-1285021473" label="save-page-as-mhtml"/>
+  <int value="-1245459041" label="enable-zero-suggest-personalized"/>
+  <int value="-1241747717" label="enable-android-password-link"/>
+  <int value="-1218608640" label="disable-offline-load-stale-cache"/>
+  <int value="-1212273428" label="enable-experimental-app-list"/>
+  <int value="-1201183153" label="enable-centered-app-list"/>
+  <int value="-1172204005" label="enable-offline-auto-reload-visible-only"/>
+  <int value="-1159563774" label="enable-accessibility-script-injection"/>
+  <int value="-1136509631" label="ssl-interstitial-v1"/>
+  <int value="-1102212525" label="enable-tcp-fastopen"/>
+  <int value="-1078093206" label="ash-debug-shortcuts"/>
+  <int value="-1077752943" label="enable-password-generation"/>
+  <int value="-1052782474" label="enable-cloud-devices"/>
+  <int value="-1052415111" label="malware-interstitial-v2"/>
+  <int value="-1022971520" label="enable-search-button-in-omnibox-for-str"/>
+  <int value="-979034258" label="disable-ntp-other-sessions-menu"/>
+  <int value="-949178861" label="enable-new-avatar-menu"/>
+  <int value="-926422468" label="disable-embedded-shared-worker"/>
+  <int value="-918618075" label="enable-service-worker"/>
+  <int value="-914210146" label="enable-web-based-signin"/>
+  <int value="-899334103" label="disable-fast-text-autosizing"/>
+  <int value="-898005938" label="disable-pinch-virtual-viewport"/>
+  <int value="-885601782" label="enable-contextual-search"/>
+  <int value="-867087281" label="enable-virtual-keyboard"/>
+  <int value="-864205629" label="enable-offline-load-stale-cache"/>
+  <int value="-853594220" label="disable-new-avatar-menu"/>
+  <int value="-836123854" label="wallet-service-use-sandbox"/>
+  <int value="-820041355" label="enable-transition-compositing"/>
+  <int value="-814097014" label="disable-session-crashed-bubble"/>
+  <int value="-795600188" label="disable-async-dns"/>
+  <int value="-770319039" label="enable-touch-editing"/>
+  <int value="-749048160" label="enable-panels"/>
+  <int value="-744159181" label="disable-spdy-proxy-dev-auth-origin"/>
+  <int value="-743103250" label="enable-linkable-ephemeral-apps"/>
+  <int value="-711890895" label="enable-website-settings-manager"/>
+  <int value="-699767107" label="enable-sync-app-list"/>
+  <int value="-697751423" label="disable-quickoffice-component-app"/>
+  <int value="-667517406" label="overscroll-history-navigation"/>
+  <int value="-660160292" label="enable-apps-show-on-first-paint"/>
+  <int value="-649956990" label="enable-harfbuzz-rendertext"/>
+  <int value="-641719457" label="disable-compositor-touch-hit-testing"/>
+  <int value="-604814313" label="enable-pinch"/>
+  <int value="-601384286" label="disable-contextual-search"/>
+  <int value="-579192400" label="disable-input-view"/>
+  <int value="-563980787" label="disable-webrtc"/>
+  <int value="-562274241" label="enable-extension-action-redesign"/>
+  <int value="-536289234" label="ssl-interstitial-v2-colorful"/>
+  <int value="-516845951" label="enable-embedded-extension-options"/>
+  <int value="-510488450" label="disable-pnacl"/>
+  <int value="-508143738" label="disable-accelerated-fixed-root-background"/>
+  <int value="-495585885" label="enable-spdy-proxy-dev-auth-origin"/>
+  <int value="-478462945" label="enable-ephemeral-apps"/>
+  <int value="-462205750" label="enable-service-worker-sync"/>
+  <int value="-430360431" label="disable-password-generation"/>
+  <int value="-418868128" label="enable-experimental-web-platform-features"/>
+  <int value="-385337473" label="enable-fast-unload"/>
+  <int value="-349057743" label="extensions-on-chrome-urls"/>
+  <int value="-340255045" label="allow-nacl-socket-api"/>
+  <int value="-328361990" label="enable-experimental-extension-apis"/>
+  <int value="-320820051" label="enable-zero-copy"/>
+  <int value="-314910380" label="disable-distance-field-text"/>
+  <int value="-288316828" label="enable-delegated-renderer"/>
+  <int value="-278347667" label="default-tile-height"/>
+  <int value="-277144896" label="enable-viewport-meta"/>
+  <int value="-254887599" label="google-profile-info"/>
+  <int value="-231922000" label="enable-renderer-mojo-channel"/>
+  <int value="-206393363" label="enable-scroll-prediction"/>
+  <int value="-158549277" label="enable-embeddedsearch-api"/>
+  <int value="-147283486" label="enable-network-portal-notification"/>
+  <int value="-102537270" label="extension-content-verification"/>
+  <int value="-86788587" label="allow-autofill-sync-credential"/>
+  <int value="-80353187" label="disable-display-color-calibration"/>
+  <int value="-76631048" label="disable-offline-auto-reload-visible-only"/>
+  <int value="-68225452" label="enable-translate-new-ux"/>
+  <int value="-48920737" label="enable-smooth-scrolling"/>
+  <int value="-23090520" label="disable-search-button-in-omnibox"/>
+  <int value="-22544408" label="enable-video-player-chromecast-support"/>
+  <int value="-5052940" label="enable-simplified-fullscreen"/>
+  <int value="-2371418" label="disable-display-list-2d-canvas"/>
   <int value="0" label="BAD_FLAG_FORMAT">
     Command-line flag doesn't start with two dashes.
   </int>
@@ -44269,146 +44410,6 @@
   <int value="2119964154" label="enable-download-resumption"/>
   <int value="2122876605" label="enable-bleeding-edge-rendering-fast-paths"/>
   <int value="2137347307" label="enable-drive-apps-in-app-list"/>
-  <int value="2157211516" label="enable-reader-mode-toolbar-icon"/>
-  <int value="2162375654" label="enable-input-view"/>
-  <int value="2177765570" label="disable-gpu-rasterization"/>
-  <int value="2180136048" label="disable-new-ntp"/>
-  <int value="2196356887" label="disable-lcd-text"/>
-  <int value="2197451627" label="disable-cast"/>
-  <int value="2217698653" label="disable-device-enumeration"/>
-  <int value="2242551072" label="enable-zero-suggest-ether-noserp"/>
-  <int value="2247145038" label="enable-avfoundation"/>
-  <int value="2269600192" label="enable-material-design-ntp"/>
-  <int value="2274942856" label="scroll-end-effect"/>
-  <int value="2286694617" label="disable-webrtc-hw-encoding"/>
-  <int value="2291612959"
-      label="enable-search-button-in-omnibox-for-str-or-iip"/>
-  <int value="2309941703" label="file-manager-enable-new-gallery"/>
-  <int value="2322583845" label="disable-pinch"/>
-  <int value="2354160738" label="enable-syncfs-directory-operation"/>
-  <int value="2364247010" label="nacl-debug-mask"/>
-  <int value="2366768533" label="enable-async-dns"/>
-  <int value="2369850017" label="disable-quic-https"/>
-  <int value="2406693327" label="tab-capture-upscale-quality"/>
-  <int value="2418085388"
-      label="disable-infobar-for-protected-media-identifier"/>
-  <int value="2420058470" label="enable-instant-search-clicks"/>
-  <int value="2424005326" label="enable-filemanager-mtp"/>
-  <int value="2447131774" label="disable-touch-adjustment"/>
-  <int value="2456484852" label="disable-settings-window"/>
-  <int value="2458991492" label="disable-offline-auto-reload"/>
-  <int value="2461817486" label="enable-accessibility-tab-switcher"/>
-  <int value="2527496644" label="out-of-process-pdf"/>
-  <int value="2548199462" label="ssl-interstitial-v2-gray"/>
-  <int value="2554448079" label="disable-software-rasterizer"/>
-  <int value="2559324043" label="enable-display-list-2d-canvas"/>
-  <int value="2569459691" label="enable-web-midi"/>
-  <int value="2575133370" label="disable-answers-in-suggest"/>
-  <int value="2578313196" label="tab-capture-downscale-quality"/>
-  <int value="2591257384" label="enable-new-ntp"/>
-  <int value="2591658756" label="disable-webaudio"/>
-  <int value="2598600847" label="disable-permissions-bubbles"/>
-  <int value="2675209982" label="touch-scrolling-mode"/>
-  <int value="2689399668" label="disable-overlay-scrollbar"/>
-  <int value="2698407646" label="max-tiles-for-interest-area"/>
-  <int value="2723125783" label="enable-devtools-experiments"/>
-  <int value="2741489393" label="ash-disable-text-filtering-in-overview-mode"/>
-  <int value="2748064125" label="enable-touch-drag-drop"/>
-  <int value="2784127722" label="disable-sync-synced-notifications"/>
-  <int value="2797628315" label="disable-accelerated-overflow-scroll"/>
-  <int value="2812281433" label="enable-request-tablet-site"/>
-  <int value="2834504864" label="disable-media-source"/>
-  <int value="2861879748" label="enable-app-install-alerts"/>
-  <int value="2875179039" label="enable-experimental-hotwording"/>
-  <int value="2886679120" label="enable-account-consistency"/>
-  <int value="2895213816" label="disable-harfbuzz-rendertext"/>
-  <int value="2895547724" label="enable-app-list"/>
-  <int value="2902404798" label="disable-origin-chip"/>
-  <int value="2919856272" label="enable-fixed-position-compositing"/>
-  <int value="2945094390" label="disallow-autofill-sync-credential-for-reauth"/>
-  <int value="2953874362" label="enable-accelerated-overflow-scroll"/>
-  <int value="2954911336" label="enable-streamlined-hosted-apps"/>
-  <int value="2960639886" label="ash-enable-touch-view-testing"/>
-  <int value="2975278357" label="ignore-gpu-blacklist"/>
-  <int value="3009945823" label="save-page-as-mhtml"/>
-  <int value="3049508255" label="enable-zero-suggest-personalized"/>
-  <int value="3053219579" label="enable-android-password-link"/>
-  <int value="3076358656" label="disable-offline-load-stale-cache"/>
-  <int value="3082693868" label="enable-experimental-app-list"/>
-  <int value="3093784143" label="enable-centered-app-list"/>
-  <int value="3122763291" label="enable-offline-auto-reload-visible-only"/>
-  <int value="3135403522" label="enable-accessibility-script-injection"/>
-  <int value="3158457665" label="ssl-interstitial-v1"/>
-  <int value="3192754771" label="enable-tcp-fastopen"/>
-  <int value="3216874090" label="ash-debug-shortcuts"/>
-  <int value="3217214353" label="enable-password-generation"/>
-  <int value="3242184822" label="enable-cloud-devices"/>
-  <int value="3242552185" label="malware-interstitial-v2"/>
-  <int value="3271995776" label="enable-search-button-in-omnibox-for-str"/>
-  <int value="3315933038" label="disable-ntp-other-sessions-menu"/>
-  <int value="3345788435" label="enable-new-avatar-menu"/>
-  <int value="3368544828" label="disable-embedded-shared-worker"/>
-  <int value="3376349221" label="enable-service-worker"/>
-  <int value="3380757150" label="enable-web-based-signin"/>
-  <int value="3395633193" label="disable-fast-text-autosizing"/>
-  <int value="3396961358" label="disable-pinch-virtual-viewport"/>
-  <int value="3409365514" label="enable-contextual-search"/>
-  <int value="3427880015" label="enable-virtual-keyboard"/>
-  <int value="3430761667" label="enable-offline-load-stale-cache"/>
-  <int value="3441373076" label="disable-new-avatar-menu"/>
-  <int value="3458843442" label="wallet-service-use-sandbox"/>
-  <int value="3474925941" label="enable-transition-compositing"/>
-  <int value="3480870282" label="disable-session-crashed-bubble"/>
-  <int value="3499367108" label="disable-async-dns"/>
-  <int value="3524648257" label="enable-touch-editing"/>
-  <int value="3545919136" label="enable-panels"/>
-  <int value="3550808115" label="disable-spdy-proxy-dev-auth-origin"/>
-  <int value="3551864046" label="enable-linkable-ephemeral-apps"/>
-  <int value="3583076401" label="enable-website-settings-manager"/>
-  <int value="3595200189" label="enable-sync-app-list"/>
-  <int value="3597215873" label="disable-quickoffice-component-app"/>
-  <int value="3627449890" label="overscroll-history-navigation"/>
-  <int value="3634807004" label="enable-apps-show-on-first-paint"/>
-  <int value="3645010306" label="enable-harfbuzz-rendertext"/>
-  <int value="3653247839" label="disable-compositor-touch-hit-testing"/>
-  <int value="3690152983" label="enable-pinch"/>
-  <int value="3693583010" label="disable-contextual-search"/>
-  <int value="3715774896" label="disable-input-view"/>
-  <int value="3730986509" label="disable-webrtc"/>
-  <int value="3732693055" label="enable-extension-action-redesign"/>
-  <int value="3758678062" label="ssl-interstitial-v2-colorful"/>
-  <int value="3778121345" label="enable-embedded-extension-options"/>
-  <int value="3784478846" label="disable-pnacl"/>
-  <int value="3786823558" label="disable-accelerated-fixed-root-background"/>
-  <int value="3799381411" label="enable-spdy-proxy-dev-auth-origin"/>
-  <int value="3816504351" label="enable-ephemeral-apps"/>
-  <int value="3832761546" label="enable-service-worker-sync"/>
-  <int value="3864606865" label="disable-password-generation"/>
-  <int value="3876099168" label="enable-experimental-web-platform-features"/>
-  <int value="3909629823" label="enable-fast-unload"/>
-  <int value="3945909553" label="extensions-on-chrome-urls"/>
-  <int value="3954712251" label="allow-nacl-socket-api"/>
-  <int value="3966605306" label="enable-experimental-extension-apis"/>
-  <int value="3974147245" label="enable-zero-copy"/>
-  <int value="3980056916" label="disable-distance-field-text"/>
-  <int value="4006650468" label="enable-delegated-renderer"/>
-  <int value="4016619629" label="default-tile-height"/>
-  <int value="4017822400" label="enable-viewport-meta"/>
-  <int value="4040079697" label="google-profile-info"/>
-  <int value="4063045296" label="enable-renderer-mojo-channel"/>
-  <int value="4088573933" label="enable-scroll-prediction"/>
-  <int value="4136418019" label="enable-embeddedsearch-api"/>
-  <int value="4147683810" label="enable-network-portal-notification"/>
-  <int value="4192430026" label="extension-content-verification"/>
-  <int value="4208178709" label="allow-autofill-sync-credential"/>
-  <int value="4214614109" label="disable-display-color-calibration"/>
-  <int value="4218336248" label="disable-offline-auto-reload-visible-only"/>
-  <int value="4226741844" label="enable-translate-new-ux"/>
-  <int value="4246046559" label="enable-smooth-scrolling"/>
-  <int value="4271876776" label="disable-search-button-in-omnibox"/>
-  <int value="4272422888" label="enable-video-player-chromecast-support"/>
-  <int value="4289914356" label="enable-simplified-fullscreen"/>
-  <int value="4292595878" label="disable-display-list-2d-canvas"/>
 </enum>
 
 <enum name="LoginFailureReason" type="int">
diff --git a/tools/metrics/histograms/pretty_print.py b/tools/metrics/histograms/pretty_print.py
index 00e9ff5..d9e03279 100755
--- a/tools/metrics/histograms/pretty_print.py
+++ b/tools/metrics/histograms/pretty_print.py
@@ -80,14 +80,27 @@
     # Put subnodes in a list of node,key pairs to allow for custom sorting.
     subtag, key_function = ALPHABETIZATION_RULES[node.tagName]
     subnodes = []
-    last_key = -1
+    sort_key = -1
+    pending_node_indices = []
     for c in node.childNodes:
       if (c.nodeType == xml.dom.minidom.Node.ELEMENT_NODE and
           c.tagName == subtag):
-        last_key = key_function(c)
-      # Subnodes that we don't want to rearrange use the last node's key,
-      # so they stay in the same relative position.
-      subnodes.append( (c, last_key) )
+        sort_key = key_function(c)
+        # Replace sort keys for delayed nodes.
+        for idx in pending_node_indices:
+          subnodes[idx][1] = sort_key
+        pending_node_indices = []
+      else:
+        # Subnodes that we don't want to rearrange use the next node's key,
+        # so they stay in the same relative position.
+        # Therefore we delay setting key until the next node is found.
+        pending_node_indices.append(len(subnodes))
+
+      subnodes.append( [c, sort_key] )
+
+    # Use last sort key for trailing unknown nodes.
+    for idx in pending_node_indices:
+      subnodes[idx][1] = sort_key
 
     # Sort the subnode list.
     subnodes.sort(key=lambda pair: pair[1])