Collect UMA statistics on which chrome://flags lead to chrome restart on ChromeOS.

On ChromeOS browser is restarted to apply user flags.
We need to calculate statistics on which flags mostly affect users.

BUG=386313
TEST=unittest

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

Cr-Commit-Position: refs/heads/master@{#289919}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@289919 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/about_flags.h b/chrome/browser/about_flags.h
index 55859db..7a229a7 100644
--- a/chrome/browser/about_flags.h
+++ b/chrome/browser/about_flags.h
@@ -5,7 +5,10 @@
 #ifndef CHROME_BROWSER_ABOUT_FLAGS_H_
 #define CHROME_BROWSER_ABOUT_FLAGS_H_
 
+#include <stdint.h>
+
 #include <map>
+#include <set>
 #include <string>
 
 #include "base/command_line.h"
@@ -21,6 +24,10 @@
 
 class FlagsStorage;
 
+// This value is reported as switch histogram ID if switch name has unknown
+// format.
+extern const uint32_t kBadSwitchFormatHistogramId;
+
 // Enumeration of OSs.
 // This is exposed only for testing.
 enum { kOsMac = 1 << 0, kOsWin = 1 << 1, kOsLinux = 1 << 2 , kOsCrOS = 1 << 3,
@@ -117,9 +124,12 @@
 
 // Compares a set of switches of the two provided command line objects and
 // returns true if they are the same and false otherwise.
+// If |out_difference| is not NULL, it's filled with set_symmetric_difference
+// between sets.
 bool AreSwitchesIdenticalToCurrentCommandLine(
     const base::CommandLine& new_cmdline,
-    const base::CommandLine& active_cmdline);
+    const base::CommandLine& active_cmdline,
+    std::set<CommandLine::StringType>* out_difference);
 
 // Differentiate between generic flags available on a per session base and flags
 // that influence the whole machine and can be said by the admin only. This flag
@@ -160,6 +170,16 @@
 // startup.
 void RecordUMAStatistics(FlagsStorage* flags_storage);
 
+// Returns the UMA id for the specified switch name.
+uint32_t 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.
+// |command_line_difference| is the result of
+// AreSwitchesIdenticalToCurrentCommandLine().
+void ReportCustomFlags(const std::string& uma_histogram_hame,
+                       const std::set<std::string>& command_line_difference);
+
 namespace testing {
 
 // Clears internal global state, for unit tests.