Commit 0107c327 authored by alemate's avatar alemate Committed by Commit bot

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}
parent 49690368
......@@ -67,7 +67,7 @@ using base::UserMetricsAction;
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 @@ void RecordUMAStatistics(FlagsStorage* flags_storage) {
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,
......
......@@ -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 @@ class FlagsStorage;
// 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 @@ int GetCurrentPlatform();
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.
......
......@@ -41,19 +41,20 @@ const char kValueForMultiSwitch2[] = "value_for_multi_switch2";
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 @@ std::map<uint32_t, std::string> ParseEnumFromHistogramsXml(
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 @@ std::map<uint32_t, std::string> ParseEnumFromHistogramsXml(
// 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 @@ std::map<uint32_t, std::string> ParseEnumFromHistogramsXml(
// 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 @@ std::map<uint32_t, std::string> ReadEnumFromHistogramsXml(
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 @@ std::map<uint32_t, std::string> ReadEnumFromHistogramsXml(
<< "' (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 @@ class AboutFlagsHistogramTest : public ::testing::Test {
// 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 @@ class AboutFlagsHistogramTest : public ::testing::Test {
// 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 @@ TEST_F(AboutFlagsHistogramTest, CheckHistograms) {
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 @@ TEST_F(AboutFlagsHistogramTest, CheckHistograms) {
"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 @@ TEST_F(AboutFlagsHistogramTest, CheckHistograms) {
"", 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 @@ TEST_F(AboutFlagsHistogramTest, CheckHistograms) {
// 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 "
......
......@@ -44132,6 +44132,147 @@ To add a new entry, add it with any value and run test to compute valid value.
-->
<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 @@ To add a new entry, add it with any value and run test to compute valid value.
<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">
......@@ -80,14 +80,27 @@ def TransformByAlphabetizing(node):
# 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,
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.
subnodes.append( (c, last_key) )
# 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])
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment