| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_ABOUT_FLAGS_H_ | 5 #ifndef CHROME_BROWSER_ABOUT_FLAGS_H_ |
| 6 #define CHROME_BROWSER_ABOUT_FLAGS_H_ | 6 #define CHROME_BROWSER_ABOUT_FLAGS_H_ |
| 7 | 7 |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <map> | 10 #include <map> |
| 11 #include <set> | 11 #include <set> |
| 12 #include <string> | 12 #include <string> |
| 13 | 13 |
| 14 #include "base/command_line.h" | 14 #include "base/command_line.h" |
| 15 #include "base/metrics/histogram_base.h" | 15 #include "base/metrics/histogram_base.h" |
| 16 #include "base/strings/string16.h" | 16 #include "base/strings/string16.h" |
| 17 #include "components/flags_ui/feature_entry.h" | 17 #include "components/flags_ui/feature_entry.h" |
| 18 | 18 #include "components/flags_ui/flags_state.h" |
| 19 class PrefService; | |
| 20 | 19 |
| 21 namespace base { | 20 namespace base { |
| 22 class ListValue; | 21 class ListValue; |
| 23 } | 22 } |
| 24 | 23 |
| 25 namespace flags_ui { | 24 namespace flags_ui { |
| 26 class FlagsStorage; | 25 class FlagsStorage; |
| 27 } | 26 } |
| 28 | 27 |
| 29 namespace about_flags { | 28 namespace about_flags { |
| 30 | 29 |
| 31 // A flag controlling the behavior of the |ConvertFlagsToSwitches| function - | |
| 32 // whether it should add the sentinel switches around flags. | |
| 33 enum SentinelsMode { kNoSentinels, kAddSentinels }; | |
| 34 | |
| 35 // Reads the state from |flags_storage| and adds the command line flags | 30 // Reads the state from |flags_storage| and adds the command line flags |
| 36 // belonging to the active feature entries to |command_line|. | 31 // belonging to the active feature entries to |command_line|. |
| 37 void ConvertFlagsToSwitches(flags_ui::FlagsStorage* flags_storage, | 32 void ConvertFlagsToSwitches(flags_ui::FlagsStorage* flags_storage, |
| 38 base::CommandLine* command_line, | 33 base::CommandLine* command_line, |
| 39 SentinelsMode sentinels); | 34 flags_ui::SentinelsMode sentinels); |
| 40 | 35 |
| 41 // Compares a set of switches of the two provided command line objects and | 36 // Compares a set of switches of the two provided command line objects and |
| 42 // returns true if they are the same and false otherwise. | 37 // returns true if they are the same and false otherwise. |
| 43 // If |out_difference| is not NULL, it's filled with set_symmetric_difference | 38 // If |out_difference| is not NULL, it's filled with set_symmetric_difference |
| 44 // between sets. | 39 // between sets. |
| 45 bool AreSwitchesIdenticalToCurrentCommandLine( | 40 bool AreSwitchesIdenticalToCurrentCommandLine( |
| 46 const base::CommandLine& new_cmdline, | 41 const base::CommandLine& new_cmdline, |
| 47 const base::CommandLine& active_cmdline, | 42 const base::CommandLine& active_cmdline, |
| 48 std::set<base::CommandLine::StringType>* out_difference); | 43 std::set<base::CommandLine::StringType>* out_difference); |
| 49 | 44 |
| 50 // Differentiate between generic flags available on a per session base and flags | |
| 51 // that influence the whole machine and can be said by the admin only. This flag | |
| 52 // is relevant for ChromeOS for now only and dictates whether entries marked | |
| 53 // with the |kOsCrOSOwnerOnly| label should be enabled in the UI or not. | |
| 54 enum FlagAccess { kGeneralAccessFlagsOnly, kOwnerAccessToFlags }; | |
| 55 | |
| 56 // Gets the list of feature entries. Entries that are available for the current | 45 // Gets the list of feature entries. Entries that are available for the current |
| 57 // platform are appended to |supported_entries|; all other entries are appended | 46 // platform are appended to |supported_entries|; all other entries are appended |
| 58 // to |unsupported_entries|. | 47 // to |unsupported_entries|. |
| 59 void GetFlagFeatureEntries(flags_ui::FlagsStorage* flags_storage, | 48 void GetFlagFeatureEntries(flags_ui::FlagsStorage* flags_storage, |
| 60 FlagAccess access, | 49 flags_ui::FlagAccess access, |
| 61 base::ListValue* supported_entries, | 50 base::ListValue* supported_entries, |
| 62 base::ListValue* unsupported_entries); | 51 base::ListValue* unsupported_entries); |
| 63 | 52 |
| 64 // Returns true if one of the feature entry flags has been flipped since | 53 // Returns true if one of the feature entry flags has been flipped since |
| 65 // startup. | 54 // startup. |
| 66 bool IsRestartNeededToCommitChanges(); | 55 bool IsRestartNeededToCommitChanges(); |
| 67 | 56 |
| 68 // Enables or disables the current with id |internal_name|. | 57 // Enables or disables the current with id |internal_name|. |
| 69 void SetFeatureEntryEnabled(flags_ui::FlagsStorage* flags_storage, | 58 void SetFeatureEntryEnabled(flags_ui::FlagsStorage* flags_storage, |
| 70 const std::string& internal_name, | 59 const std::string& internal_name, |
| 71 bool enable); | 60 bool enable); |
| 72 | 61 |
| 73 // Removes all switches that were added to a command line by a previous call to | 62 // Removes all switches that were added to a command line by a previous call to |
| 74 // |ConvertFlagsToSwitches()|. | 63 // |ConvertFlagsToSwitches()|. |
| 75 void RemoveFlagsSwitches( | 64 void RemoveFlagsSwitches( |
| 76 std::map<std::string, base::CommandLine::StringType>* switch_list); | 65 std::map<std::string, base::CommandLine::StringType>* switch_list); |
| 77 | 66 |
| 78 // Reset all flags to the default state by clearing all flags. | 67 // Reset all flags to the default state by clearing all flags. |
| 79 void ResetAllFlags(flags_ui::FlagsStorage* flags_storage); | 68 void ResetAllFlags(flags_ui::FlagsStorage* flags_storage); |
| 80 | 69 |
| 81 // Returns the value for the current platform. This is one of the values defined | |
| 82 // by the OS enum above. | |
| 83 // This is exposed only for testing. | |
| 84 int GetCurrentPlatform(); | |
| 85 | |
| 86 // Sends UMA stats about experimental flag usage. This should be called once per | 70 // Sends UMA stats about experimental flag usage. This should be called once per |
| 87 // startup. | 71 // startup. |
| 88 void RecordUMAStatistics(flags_ui::FlagsStorage* flags_storage); | 72 void RecordUMAStatistics(flags_ui::FlagsStorage* flags_storage); |
| 89 | 73 |
| 90 // Returns the UMA id for the specified switch name. | 74 // Returns the UMA id for the specified switch name. |
| 91 base::HistogramBase::Sample GetSwitchUMAId(const std::string& switch_name); | 75 base::HistogramBase::Sample GetSwitchUMAId(const std::string& switch_name); |
| 92 | 76 |
| 93 // Sends stats (as UMA histogram) about command_line_difference. | 77 // Sends stats (as UMA histogram) about command_line_difference. |
| 94 // This is used on ChromeOS to report flags that lead to browser restart. | 78 // This is used on ChromeOS to report flags that lead to browser restart. |
| 95 // |command_line_difference| is the result of | 79 // |command_line_difference| is the result of |
| 96 // AreSwitchesIdenticalToCurrentCommandLine(). | 80 // AreSwitchesIdenticalToCurrentCommandLine(). |
| 97 void ReportCustomFlags(const std::string& uma_histogram_hame, | 81 void ReportCustomFlags(const std::string& uma_histogram_hame, |
| 98 const std::set<std::string>& command_line_difference); | 82 const std::set<std::string>& command_line_difference); |
| 99 | 83 |
| 100 namespace testing { | 84 namespace testing { |
| 101 | 85 |
| 102 // Clears internal global state, for unit tests. | 86 // Returns the global set of feature entries. |
| 103 void ClearState(); | |
| 104 | |
| 105 // Sets the list of feature entries. Pass in null to use the default set. This | |
| 106 // does NOT take ownership of the supplied |entries|. | |
| 107 void SetFeatureEntries(const flags_ui::FeatureEntry* entries, size_t count); | |
| 108 | |
| 109 // Returns the current set of feature entries. | |
| 110 const flags_ui::FeatureEntry* GetFeatureEntries(size_t* count); | 87 const flags_ui::FeatureEntry* GetFeatureEntries(size_t* count); |
| 111 | 88 |
| 112 // This value is reported as switch histogram ID if switch name has unknown | 89 // This value is reported as switch histogram ID if switch name has unknown |
| 113 // format. | 90 // format. |
| 114 extern const base::HistogramBase::Sample kBadSwitchFormatHistogramId; | 91 extern const base::HistogramBase::Sample kBadSwitchFormatHistogramId; |
| 115 | 92 |
| 116 } // namespace testing | 93 } // namespace testing |
| 117 | 94 |
| 118 } // namespace about_flags | 95 } // namespace about_flags |
| 119 | 96 |
| 120 #endif // CHROME_BROWSER_ABOUT_FLAGS_H_ | 97 #endif // CHROME_BROWSER_ABOUT_FLAGS_H_ |
| OLD | NEW |