About flags shouldnt prompt for restart if no changes have been made
BUG=222048
TEST=Sign in to sync, restart, check about:flags, no restart should be required
Review URL: https://chromiumcodereview.appspot.com/12617017
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@189161 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index c9155fb..20ffd3f 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -1629,8 +1629,6 @@
void FlagsState::SetExperimentEnabled(
PrefService* prefs, const std::string& internal_name, bool enable) {
- needs_restart_ = true;
-
size_t at_index = internal_name.find(testing::kMultiSeparator);
if (at_index != std::string::npos) {
DCHECK(enable);
@@ -1644,7 +1642,7 @@
if (internal_name != experiment_name + "@0") {
std::set<std::string> enabled_experiments;
GetSanitizedEnabledFlags(prefs, &enabled_experiments);
- enabled_experiments.insert(internal_name);
+ needs_restart_ |= enabled_experiments.insert(internal_name).second;
SetEnabledFlags(prefs, enabled_experiments);
}
return;
@@ -1664,19 +1662,20 @@
if (e->type == Experiment::SINGLE_VALUE) {
if (enable)
- enabled_experiments.insert(internal_name);
+ needs_restart_ |= enabled_experiments.insert(internal_name).second;
else
- enabled_experiments.erase(internal_name);
+ needs_restart_ |= (enabled_experiments.erase(internal_name) > 0);
} else {
if (enable) {
// Enable the first choice.
- enabled_experiments.insert(e->NameForChoice(0));
+ needs_restart_ |= enabled_experiments.insert(e->NameForChoice(0)).second;
} else {
// Find the currently enabled choice and disable it.
for (int i = 0; i < e->num_choices; ++i) {
std::string choice_name = e->NameForChoice(i);
if (enabled_experiments.find(choice_name) !=
enabled_experiments.end()) {
+ needs_restart_ = true;
enabled_experiments.erase(choice_name);
// Continue on just in case there's a bug and more than one
// experiment for this choice was enabled.