| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 #include "components/flags_ui/flags_state.h" | 5 #include "components/flags_ui/flags_state.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 397 #else | 397 #else |
| 398 const std::string& existing_value_utf8 = existing_value; | 398 const std::string& existing_value_utf8 = existing_value; |
| 399 #endif | 399 #endif |
| 400 | 400 |
| 401 std::vector<std::string> features = | 401 std::vector<std::string> features = |
| 402 base::FeatureList::SplitFeatureListString(existing_value_utf8); | 402 base::FeatureList::SplitFeatureListString(existing_value_utf8); |
| 403 std::vector<std::string> remaining_features; | 403 std::vector<std::string> remaining_features; |
| 404 // For any featrue name in |features| that is not in |switch_added_values| - | 404 // For any featrue name in |features| that is not in |switch_added_values| - |
| 405 // i.e. it wasn't added by about_flags code, add it to |remaining_features|. | 405 // i.e. it wasn't added by about_flags code, add it to |remaining_features|. |
| 406 for (const std::string& feature : features) { | 406 for (const std::string& feature : features) { |
| 407 if (!ContainsKey(switch_added_values, feature)) | 407 if (!base::ContainsKey(switch_added_values, feature)) |
| 408 remaining_features.push_back(feature); | 408 remaining_features.push_back(feature); |
| 409 } | 409 } |
| 410 | 410 |
| 411 // Either remove the flag entirely if |remaining_features| is empty, or set | 411 // Either remove the flag entirely if |remaining_features| is empty, or set |
| 412 // the new list. | 412 // the new list. |
| 413 if (remaining_features.empty()) { | 413 if (remaining_features.empty()) { |
| 414 switch_list->erase(switch_name); | 414 switch_list->erase(switch_name); |
| 415 } else { | 415 } else { |
| 416 std::string switch_value = base::JoinString(remaining_features, ","); | 416 std::string switch_value = base::JoinString(remaining_features, ","); |
| 417 #if defined(OS_WIN) | 417 #if defined(OS_WIN) |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 585 } | 585 } |
| 586 | 586 |
| 587 return result; | 587 return result; |
| 588 } | 588 } |
| 589 | 589 |
| 590 void FlagsState::AddSwitchMapping( | 590 void FlagsState::AddSwitchMapping( |
| 591 const std::string& key, | 591 const std::string& key, |
| 592 const std::string& switch_name, | 592 const std::string& switch_name, |
| 593 const std::string& switch_value, | 593 const std::string& switch_value, |
| 594 std::map<std::string, SwitchEntry>* name_to_switch_map) { | 594 std::map<std::string, SwitchEntry>* name_to_switch_map) { |
| 595 DCHECK(!ContainsKey(*name_to_switch_map, key)); | 595 DCHECK(!base::ContainsKey(*name_to_switch_map, key)); |
| 596 | 596 |
| 597 SwitchEntry* entry = &(*name_to_switch_map)[key]; | 597 SwitchEntry* entry = &(*name_to_switch_map)[key]; |
| 598 entry->switch_name = switch_name; | 598 entry->switch_name = switch_name; |
| 599 entry->switch_value = switch_value; | 599 entry->switch_value = switch_value; |
| 600 } | 600 } |
| 601 | 601 |
| 602 void FlagsState::AddFeatureMapping( | 602 void FlagsState::AddFeatureMapping( |
| 603 const std::string& key, | 603 const std::string& key, |
| 604 const std::string& feature_name, | 604 const std::string& feature_name, |
| 605 bool feature_state, | 605 bool feature_state, |
| 606 std::map<std::string, SwitchEntry>* name_to_switch_map) { | 606 std::map<std::string, SwitchEntry>* name_to_switch_map) { |
| 607 DCHECK(!ContainsKey(*name_to_switch_map, key)); | 607 DCHECK(!base::ContainsKey(*name_to_switch_map, key)); |
| 608 | 608 |
| 609 SwitchEntry* entry = &(*name_to_switch_map)[key]; | 609 SwitchEntry* entry = &(*name_to_switch_map)[key]; |
| 610 entry->feature_name = feature_name; | 610 entry->feature_name = feature_name; |
| 611 entry->feature_state = feature_state; | 611 entry->feature_state = feature_state; |
| 612 } | 612 } |
| 613 | 613 |
| 614 void FlagsState::AddSwitchesToCommandLine( | 614 void FlagsState::AddSwitchesToCommandLine( |
| 615 const std::set<std::string>& enabled_entries, | 615 const std::set<std::string>& enabled_entries, |
| 616 const std::map<std::string, SwitchEntry>& name_to_switch_map, | 616 const std::map<std::string, SwitchEntry>& name_to_switch_map, |
| 617 SentinelsMode sentinels, | 617 SentinelsMode sentinels, |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 658 void FlagsState::MergeFeatureCommandLineSwitch( | 658 void FlagsState::MergeFeatureCommandLineSwitch( |
| 659 const std::map<std::string, bool>& feature_switches, | 659 const std::map<std::string, bool>& feature_switches, |
| 660 const char* switch_name, | 660 const char* switch_name, |
| 661 bool feature_state, | 661 bool feature_state, |
| 662 base::CommandLine* command_line) { | 662 base::CommandLine* command_line) { |
| 663 std::string original_switch_value = | 663 std::string original_switch_value = |
| 664 command_line->GetSwitchValueASCII(switch_name); | 664 command_line->GetSwitchValueASCII(switch_name); |
| 665 std::vector<std::string> features = | 665 std::vector<std::string> features = |
| 666 base::FeatureList::SplitFeatureListString(original_switch_value); | 666 base::FeatureList::SplitFeatureListString(original_switch_value); |
| 667 // Only add features that don't already exist in the lists. | 667 // Only add features that don't already exist in the lists. |
| 668 // Note: The ContainsValue() call results in O(n^2) performance, but in | 668 // Note: The base::ContainsValue() call results in O(n^2) performance, but in |
| 669 // practice n should be very small. | 669 // practice n should be very small. |
| 670 for (const auto& entry : feature_switches) { | 670 for (const auto& entry : feature_switches) { |
| 671 if (entry.second == feature_state && | 671 if (entry.second == feature_state && |
| 672 !ContainsValue(features, entry.first)) { | 672 !base::ContainsValue(features, entry.first)) { |
| 673 features.push_back(entry.first); | 673 features.push_back(entry.first); |
| 674 appended_switches_[switch_name].insert(entry.first); | 674 appended_switches_[switch_name].insert(entry.first); |
| 675 } | 675 } |
| 676 } | 676 } |
| 677 // Update the switch value only if it didn't change. This avoids setting an | 677 // Update the switch value only if it didn't change. This avoids setting an |
| 678 // empty list or duplicating the same list (since AppendSwitch() adds the | 678 // empty list or duplicating the same list (since AppendSwitch() adds the |
| 679 // switch to the end but doesn't remove previous ones). | 679 // switch to the end but doesn't remove previous ones). |
| 680 std::string switch_value = base::JoinString(features, ","); | 680 std::string switch_value = base::JoinString(features, ","); |
| 681 if (switch_value != original_switch_value) | 681 if (switch_value != original_switch_value) |
| 682 command_line->AppendSwitchASCII(switch_name, switch_value); | 682 command_line->AppendSwitchASCII(switch_name, switch_value); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 726 } | 726 } |
| 727 | 727 |
| 728 std::set<std::string> new_enabled_entries = | 728 std::set<std::string> new_enabled_entries = |
| 729 base::STLSetIntersection<std::set<std::string>>(platform_entries, | 729 base::STLSetIntersection<std::set<std::string>>(platform_entries, |
| 730 *result); | 730 *result); |
| 731 | 731 |
| 732 result->swap(new_enabled_entries); | 732 result->swap(new_enabled_entries); |
| 733 } | 733 } |
| 734 | 734 |
| 735 } // namespace flags_ui | 735 } // namespace flags_ui |
| OLD | NEW |