| 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 #include "chrome/browser/about_flags.h" | 5 #include "chrome/browser/about_flags.h" |
| 6 | 6 |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <iterator> | 10 #include <iterator> |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 78 void AddOsStrings(unsigned bitmask, ListValue* list) { | 78 void AddOsStrings(unsigned bitmask, ListValue* list) { |
| 79 struct { | 79 struct { |
| 80 unsigned bit; | 80 unsigned bit; |
| 81 const char* const name; | 81 const char* const name; |
| 82 } kBitsToOs[] = { | 82 } kBitsToOs[] = { |
| 83 {kOsMac, "Mac"}, | 83 {kOsMac, "Mac"}, |
| 84 {kOsWin, "Windows"}, | 84 {kOsWin, "Windows"}, |
| 85 {kOsLinux, "Linux"}, | 85 {kOsLinux, "Linux"}, |
| 86 {kOsCrOS, "Chrome OS"}, | 86 {kOsCrOS, "Chrome OS"}, |
| 87 {kOsAndroid, "Android"}, | 87 {kOsAndroid, "Android"}, |
| 88 {kOsCrOSOwnerOnly, "Chrome OS (owner only)"}, |
| 88 }; | 89 }; |
| 89 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kBitsToOs); ++i) | 90 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kBitsToOs); ++i) |
| 90 if (bitmask & kBitsToOs[i].bit) | 91 if (bitmask & kBitsToOs[i].bit) |
| 91 list->Append(new StringValue(kBitsToOs[i].name)); | 92 list->Append(new StringValue(kBitsToOs[i].name)); |
| 92 } | 93 } |
| 93 | 94 |
| 94 const Experiment::Choice kOmniboxHistoryQuickProviderNewScoringChoices[] = { | 95 const Experiment::Choice kOmniboxHistoryQuickProviderNewScoringChoices[] = { |
| 95 { IDS_FLAGS_OMNIBOX_HISTORY_QUICK_PROVIDER_NEW_SCORING_AUTOMATIC, "", "" }, | 96 { IDS_FLAGS_OMNIBOX_HISTORY_QUICK_PROVIDER_NEW_SCORING_AUTOMATIC, "", "" }, |
| 96 { IDS_FLAGS_OMNIBOX_HISTORY_QUICK_PROVIDER_NEW_SCORING_ENABLED, | 97 { IDS_FLAGS_OMNIBOX_HISTORY_QUICK_PROVIDER_NEW_SCORING_ENABLED, |
| 97 switches::kOmniboxHistoryQuickProviderNewScoring, | 98 switches::kOmniboxHistoryQuickProviderNewScoring, |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 IDS_FLAGS_FORCE_COMPOSITING_MODE_NAME, | 301 IDS_FLAGS_FORCE_COMPOSITING_MODE_NAME, |
| 301 IDS_FLAGS_FORCE_COMPOSITING_MODE_DESCRIPTION, | 302 IDS_FLAGS_FORCE_COMPOSITING_MODE_DESCRIPTION, |
| 302 kOsMac | kOsWin | kOsLinux, | 303 kOsMac | kOsWin | kOsLinux, |
| 303 ENABLE_DISABLE_VALUE_TYPE(switches::kForceCompositingMode, | 304 ENABLE_DISABLE_VALUE_TYPE(switches::kForceCompositingMode, |
| 304 switches::kDisableForceCompositingMode) | 305 switches::kDisableForceCompositingMode) |
| 305 }, | 306 }, |
| 306 { | 307 { |
| 307 "threaded-compositing-mode", | 308 "threaded-compositing-mode", |
| 308 IDS_FLAGS_THREADED_COMPOSITING_MODE_NAME, | 309 IDS_FLAGS_THREADED_COMPOSITING_MODE_NAME, |
| 309 IDS_FLAGS_THREADED_COMPOSITING_MODE_DESCRIPTION, | 310 IDS_FLAGS_THREADED_COMPOSITING_MODE_DESCRIPTION, |
| 310 kOsDesktop & ~kOsCrOS, | 311 kOsMac | kOsWin | kOsLinux, |
| 311 ENABLE_DISABLE_VALUE_TYPE(switches::kEnableThreadedCompositing, | 312 ENABLE_DISABLE_VALUE_TYPE(switches::kEnableThreadedCompositing, |
| 312 switches::kDisableThreadedCompositing) | 313 switches::kDisableThreadedCompositing) |
| 313 }, | 314 }, |
| 314 { | 315 { |
| 315 "force-accelerated-composited-scrolling", | 316 "force-accelerated-composited-scrolling", |
| 316 IDS_FLAGS_FORCE_ACCELERATED_OVERFLOW_SCROLL_MODE_NAME, | 317 IDS_FLAGS_FORCE_ACCELERATED_OVERFLOW_SCROLL_MODE_NAME, |
| 317 IDS_FLAGS_FORCE_ACCELERATED_OVERFLOW_SCROLL_MODE_DESCRIPTION, | 318 IDS_FLAGS_FORCE_ACCELERATED_OVERFLOW_SCROLL_MODE_DESCRIPTION, |
| 318 kOsAll, | 319 kOsAll, |
| 319 ENABLE_DISABLE_VALUE_TYPE(switches::kEnableAcceleratedOverflowScroll, | 320 ENABLE_DISABLE_VALUE_TYPE(switches::kEnableAcceleratedOverflowScroll, |
| 320 switches::kDisableAcceleratedOverflowScroll) | 321 switches::kDisableAcceleratedOverflowScroll) |
| (...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 675 "enable-vp9-playback", | 676 "enable-vp9-playback", |
| 676 IDS_FLAGS_ENABLE_VP9_PLAYBACK_NAME, | 677 IDS_FLAGS_ENABLE_VP9_PLAYBACK_NAME, |
| 677 IDS_FLAGS_ENABLE_VP9_PLAYBACK_DESCRIPTION, | 678 IDS_FLAGS_ENABLE_VP9_PLAYBACK_DESCRIPTION, |
| 678 kOsDesktop, | 679 kOsDesktop, |
| 679 SINGLE_VALUE_TYPE(switches::kEnableVp9Playback) | 680 SINGLE_VALUE_TYPE(switches::kEnableVp9Playback) |
| 680 }, | 681 }, |
| 681 { | 682 { |
| 682 "enable-managed-users", | 683 "enable-managed-users", |
| 683 IDS_FLAGS_ENABLE_LOCALLY_MANAGED_USERS_NAME, | 684 IDS_FLAGS_ENABLE_LOCALLY_MANAGED_USERS_NAME, |
| 684 IDS_FLAGS_ENABLE_LOCALLY_MANAGED_USERS_DESCRIPTION, | 685 IDS_FLAGS_ENABLE_LOCALLY_MANAGED_USERS_DESCRIPTION, |
| 685 kOsAll, | 686 kOsMac | kOsWin | kOsLinux | kOsAndroid | kOsCrOSOwnerOnly, |
| 686 SINGLE_VALUE_TYPE(switches::kEnableManagedUsers) | 687 SINGLE_VALUE_TYPE(switches::kEnableManagedUsers) |
| 687 }, | 688 }, |
| 688 #if defined(USE_ASH) | 689 #if defined(USE_ASH) |
| 689 { | 690 { |
| 690 "ash-disable-auto-window-placement", | 691 "ash-disable-auto-window-placement", |
| 691 IDS_FLAGS_ASH_AUTO_WINDOW_PLACEMENT_NAME, | 692 IDS_FLAGS_ASH_AUTO_WINDOW_PLACEMENT_NAME, |
| 692 IDS_FLAGS_ASH_AUTO_WINDOW_PLACEMENT_DESCRIPTION, | 693 IDS_FLAGS_ASH_AUTO_WINDOW_PLACEMENT_DESCRIPTION, |
| 693 kOsWin | kOsLinux | kOsCrOS, | 694 kOsWin | kOsLinux | kOsCrOS, |
| 694 SINGLE_VALUE_TYPE(ash::switches::kAshDisableAutoWindowPlacement) | 695 SINGLE_VALUE_TYPE(ash::switches::kAshDisableAutoWindowPlacement) |
| 695 }, | 696 }, |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 950 IDS_FLAGS_ENABLE_APP_LIST_SHOW_APPS_ONLY_DESCRIPTION, | 951 IDS_FLAGS_ENABLE_APP_LIST_SHOW_APPS_ONLY_DESCRIPTION, |
| 951 kOsAll, | 952 kOsAll, |
| 952 SINGLE_VALUE_TYPE(app_list::switches::kAppListShowAppsOnly), | 953 SINGLE_VALUE_TYPE(app_list::switches::kAppListShowAppsOnly), |
| 953 }, | 954 }, |
| 954 #endif // defined(USE_ASH) | 955 #endif // defined(USE_ASH) |
| 955 #if defined(OS_CHROMEOS) | 956 #if defined(OS_CHROMEOS) |
| 956 { | 957 { |
| 957 "disable-boot-animation", | 958 "disable-boot-animation", |
| 958 IDS_FLAGS_DISABLE_BOOT_ANIMATION, | 959 IDS_FLAGS_DISABLE_BOOT_ANIMATION, |
| 959 IDS_FLAGS_DISABLE_BOOT_ANIMATION_DESCRIPTION, | 960 IDS_FLAGS_DISABLE_BOOT_ANIMATION_DESCRIPTION, |
| 960 kOsCrOS, | 961 kOsCrOSOwnerOnly, |
| 961 SINGLE_VALUE_TYPE(switches::kDisableBootAnimation), | 962 SINGLE_VALUE_TYPE(switches::kDisableBootAnimation), |
| 962 }, | 963 }, |
| 963 { | 964 { |
| 964 "disable-boot-animation2", | 965 "disable-boot-animation2", |
| 965 IDS_FLAGS_DISABLE_BOOT_ANIMATION2, | 966 IDS_FLAGS_DISABLE_BOOT_ANIMATION2, |
| 966 IDS_FLAGS_DISABLE_BOOT_ANIMATION2_DESCRIPTION, | 967 IDS_FLAGS_DISABLE_BOOT_ANIMATION2_DESCRIPTION, |
| 967 kOsCrOS, | 968 kOsCrOSOwnerOnly, |
| 968 SINGLE_VALUE_TYPE(ash::switches::kAshDisableBootAnimation2), | 969 SINGLE_VALUE_TYPE(ash::switches::kAshDisableBootAnimation2), |
| 969 }, | 970 }, |
| 970 { | 971 { |
| 971 "boot-animation-fucntion", | 972 "boot-animation-fucntion", |
| 972 IDS_FLAGS_ASH_BOOT_ANIMATION_FUNCTION, | 973 IDS_FLAGS_ASH_BOOT_ANIMATION_FUNCTION, |
| 973 IDS_FLAGS_ASH_BOOT_ANIMATION_FUNCTION_DESCRIPTION, | 974 IDS_FLAGS_ASH_BOOT_ANIMATION_FUNCTION_DESCRIPTION, |
| 974 kOsCrOS, | 975 kOsCrOSOwnerOnly, |
| 975 MULTI_VALUE_TYPE(kAshBootAnimationFunction), | 976 MULTI_VALUE_TYPE(kAshBootAnimationFunction), |
| 976 }, | 977 }, |
| 977 { | 978 { |
| 978 "captive-portal-detector", | 979 "captive-portal-detector", |
| 979 IDS_FLAGS_CAPTIVE_PORTAL_DETECTOR_NAME, | 980 IDS_FLAGS_CAPTIVE_PORTAL_DETECTOR_NAME, |
| 980 IDS_FLAGS_CAPTIVE_PORTAL_DETECTOR_DESCRIPTION, | 981 IDS_FLAGS_CAPTIVE_PORTAL_DETECTOR_DESCRIPTION, |
| 981 kOsCrOS, | 982 kOsCrOSOwnerOnly, |
| 982 MULTI_VALUE_TYPE(kChromeCaptivePortalDetectionChoices), | 983 MULTI_VALUE_TYPE(kChromeCaptivePortalDetectionChoices), |
| 983 }, | 984 }, |
| 984 { | 985 { |
| 985 "disable-new-lock-animations", | 986 "disable-new-lock-animations", |
| 986 IDS_FLAGS_ASH_NEW_LOCK_ANIMATIONS, | 987 IDS_FLAGS_ASH_NEW_LOCK_ANIMATIONS, |
| 987 IDS_FLAGS_ASH_NEW_LOCK_ANIMATIONS_DESCRIPTION, | 988 IDS_FLAGS_ASH_NEW_LOCK_ANIMATIONS_DESCRIPTION, |
| 988 kOsCrOS, | 989 kOsCrOS, |
| 989 SINGLE_VALUE_TYPE(ash::switches::kAshDisableNewLockAnimations), | 990 SINGLE_VALUE_TYPE(ash::switches::kAshDisableNewLockAnimations), |
| 990 }, | 991 }, |
| 991 { | 992 { |
| 992 "file-manager-packaged", | 993 "file-manager-packaged", |
| 993 IDS_FLAGS_FILE_MANAGER_PACKAGED_NAME, | 994 IDS_FLAGS_FILE_MANAGER_PACKAGED_NAME, |
| 994 IDS_FLAGS_FILE_MANAGER_PACKAGED_DESCRIPTION, | 995 IDS_FLAGS_FILE_MANAGER_PACKAGED_DESCRIPTION, |
| 995 kOsCrOS, | 996 kOsCrOS, |
| 996 SINGLE_VALUE_TYPE(switches::kFileManagerPackaged), | 997 SINGLE_VALUE_TYPE(switches::kFileManagerPackaged), |
| 997 }, | 998 }, |
| 998 { | 999 { |
| 999 "disable-launcher-per-display", | 1000 "disable-launcher-per-display", |
| 1000 IDS_FLAGS_DISABLE_LAUNCHER_PER_DISPLAY_NAME, | 1001 IDS_FLAGS_DISABLE_LAUNCHER_PER_DISPLAY_NAME, |
| 1001 IDS_FLAGS_DISABLE_LAUNCHER_PER_DISPLAY_DESCRIPTION, | 1002 IDS_FLAGS_DISABLE_LAUNCHER_PER_DISPLAY_DESCRIPTION, |
| 1002 kOsCrOS, | 1003 kOsCrOS, |
| 1003 SINGLE_VALUE_TYPE(ash::switches::kAshDisableLauncherPerDisplay), | 1004 SINGLE_VALUE_TYPE(ash::switches::kAshDisableLauncherPerDisplay), |
| 1004 }, | 1005 }, |
| 1005 { | 1006 { |
| 1006 "disable-app-mode", | 1007 "disable-app-mode", |
| 1007 IDS_FLAGS_DISABLE_KIOSK_APPS_NAME, | 1008 IDS_FLAGS_DISABLE_KIOSK_APPS_NAME, |
| 1008 IDS_FLAGS_DISABLE_KIOSK_APPS_DESCRIPTION, | 1009 IDS_FLAGS_DISABLE_KIOSK_APPS_DESCRIPTION, |
| 1009 kOsCrOS, | 1010 kOsCrOSOwnerOnly, |
| 1010 SINGLE_VALUE_TYPE(switches::kDisableAppMode), | 1011 SINGLE_VALUE_TYPE(switches::kDisableAppMode), |
| 1011 }, | 1012 }, |
| 1012 { | 1013 { |
| 1013 "disable-force-fullscreen-app", | 1014 "disable-force-fullscreen-app", |
| 1014 IDS_FLAGS_DISABLE_FULLSCREEN_APP_NAME, | 1015 IDS_FLAGS_DISABLE_FULLSCREEN_APP_NAME, |
| 1015 IDS_FLAGS_DISABLE_FULLSCREEN_APP_DESCRIPTION, | 1016 IDS_FLAGS_DISABLE_FULLSCREEN_APP_DESCRIPTION, |
| 1016 kOsCrOS, | 1017 kOsCrOS, |
| 1017 SINGLE_VALUE_TYPE(switches::kDisableFullscreenApp), | 1018 SINGLE_VALUE_TYPE(switches::kDisableFullscreenApp), |
| 1018 }, | 1019 }, |
| 1019 #endif // defined(OS_CHROMEOS) | 1020 #endif // defined(OS_CHROMEOS) |
| (...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1399 // Variant of GetSanitizedEnabledFlags that also removes any flags that aren't | 1400 // Variant of GetSanitizedEnabledFlags that also removes any flags that aren't |
| 1400 // enabled on the current platform. | 1401 // enabled on the current platform. |
| 1401 void GetSanitizedEnabledFlagsForCurrentPlatform( | 1402 void GetSanitizedEnabledFlagsForCurrentPlatform( |
| 1402 PrefService* prefs, std::set<std::string>* result) { | 1403 PrefService* prefs, std::set<std::string>* result) { |
| 1403 GetSanitizedEnabledFlags(prefs, result); | 1404 GetSanitizedEnabledFlags(prefs, result); |
| 1404 | 1405 |
| 1405 // Filter out any experiments that aren't enabled on the current platform. We | 1406 // Filter out any experiments that aren't enabled on the current platform. We |
| 1406 // don't remove these from prefs else syncing to a platform with a different | 1407 // don't remove these from prefs else syncing to a platform with a different |
| 1407 // set of experiments would be lossy. | 1408 // set of experiments would be lossy. |
| 1408 std::set<std::string> platform_experiments; | 1409 std::set<std::string> platform_experiments; |
| 1409 int current_platform = GetCurrentPlatform(); | 1410 int current_platform = GetCurrentPlatform(true); |
| 1410 for (size_t i = 0; i < num_experiments; ++i) { | 1411 for (size_t i = 0; i < num_experiments; ++i) { |
| 1411 if (experiments[i].supported_platforms & current_platform) | 1412 if (experiments[i].supported_platforms & current_platform) |
| 1412 AddInternalName(experiments[i], &platform_experiments); | 1413 AddInternalName(experiments[i], &platform_experiments); |
| 1413 } | 1414 } |
| 1414 | 1415 |
| 1415 std::set<std::string> new_enabled_experiments; | 1416 std::set<std::string> new_enabled_experiments; |
| 1416 std::set_intersection( | 1417 std::set_intersection( |
| 1417 platform_experiments.begin(), platform_experiments.end(), | 1418 platform_experiments.begin(), platform_experiments.end(), |
| 1418 result->begin(), result->end(), | 1419 result->begin(), result->end(), |
| 1419 std::inserter(new_enabled_experiments, new_enabled_experiments.begin())); | 1420 std::inserter(new_enabled_experiments, new_enabled_experiments.begin())); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1463 } else { | 1464 } else { |
| 1464 description_id = choices[index].description_id; | 1465 description_id = choices[index].description_id; |
| 1465 } | 1466 } |
| 1466 return l10n_util::GetStringUTF16(description_id); | 1467 return l10n_util::GetStringUTF16(description_id); |
| 1467 } | 1468 } |
| 1468 | 1469 |
| 1469 void ConvertFlagsToSwitches(PrefService* prefs, CommandLine* command_line) { | 1470 void ConvertFlagsToSwitches(PrefService* prefs, CommandLine* command_line) { |
| 1470 FlagsState::GetInstance()->ConvertFlagsToSwitches(prefs, command_line); | 1471 FlagsState::GetInstance()->ConvertFlagsToSwitches(prefs, command_line); |
| 1471 } | 1472 } |
| 1472 | 1473 |
| 1473 ListValue* GetFlagsExperimentsData(PrefService* prefs) { | 1474 ListValue* GetFlagsExperimentsData(PrefService* prefs, bool owner) { |
| 1474 std::set<std::string> enabled_experiments; | 1475 std::set<std::string> enabled_experiments; |
| 1475 GetSanitizedEnabledFlags(prefs, &enabled_experiments); | 1476 GetSanitizedEnabledFlags(prefs, &enabled_experiments); |
| 1476 | 1477 |
| 1477 int current_platform = GetCurrentPlatform(); | 1478 int current_platform = GetCurrentPlatform(owner); |
| 1478 | 1479 |
| 1479 ListValue* experiments_data = new ListValue(); | 1480 ListValue* experiments_data = new ListValue(); |
| 1480 for (size_t i = 0; i < num_experiments; ++i) { | 1481 for (size_t i = 0; i < num_experiments; ++i) { |
| 1481 const Experiment& experiment = experiments[i]; | 1482 const Experiment& experiment = experiments[i]; |
| 1482 | 1483 |
| 1483 #if defined(OS_ANDROID) | 1484 #if defined(OS_ANDROID) |
| 1484 // Special case enable-spdy-proxy-auth, because it should only | 1485 // Special case enable-spdy-proxy-auth, because it should only |
| 1485 // be available on Dev and Beta channels. | 1486 // be available on Dev and Beta channels. |
| 1486 if (!strcmp("enable-spdy-proxy-auth", experiment.internal_name) && | 1487 if (!strcmp("enable-spdy-proxy-auth", experiment.internal_name) && |
| 1487 chrome::VersionInfo::GetChannel() == | 1488 chrome::VersionInfo::GetChannel() == |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1533 | 1534 |
| 1534 void RemoveFlagsSwitches( | 1535 void RemoveFlagsSwitches( |
| 1535 std::map<std::string, CommandLine::StringType>* switch_list) { | 1536 std::map<std::string, CommandLine::StringType>* switch_list) { |
| 1536 FlagsState::GetInstance()->RemoveFlagsSwitches(switch_list); | 1537 FlagsState::GetInstance()->RemoveFlagsSwitches(switch_list); |
| 1537 } | 1538 } |
| 1538 | 1539 |
| 1539 void ResetAllFlags(PrefService* prefs) { | 1540 void ResetAllFlags(PrefService* prefs) { |
| 1540 FlagsState::GetInstance()->ResetAllFlags(prefs); | 1541 FlagsState::GetInstance()->ResetAllFlags(prefs); |
| 1541 } | 1542 } |
| 1542 | 1543 |
| 1543 int GetCurrentPlatform() { | 1544 int GetCurrentPlatform(bool owner) { |
| 1544 #if defined(OS_MACOSX) | 1545 #if defined(OS_MACOSX) |
| 1545 return kOsMac; | 1546 return kOsMac; |
| 1546 #elif defined(OS_WIN) | 1547 #elif defined(OS_WIN) |
| 1547 return kOsWin; | 1548 return kOsWin; |
| 1548 #elif defined(OS_CHROMEOS) // Needs to be before the OS_LINUX check. | 1549 #elif defined(OS_CHROMEOS) // Needs to be before the OS_LINUX check. |
| 1549 return kOsCrOS; | 1550 return kOsCrOS | (owner ? kOsCrOSOwnerOnly : 0); |
| 1550 #elif defined(OS_LINUX) || defined(OS_OPENBSD) | 1551 #elif defined(OS_LINUX) || defined(OS_OPENBSD) |
| 1551 return kOsLinux; | 1552 return kOsLinux; |
| 1552 #elif defined(OS_ANDROID) | 1553 #elif defined(OS_ANDROID) |
| 1553 return kOsAndroid; | 1554 return kOsAndroid; |
| 1554 #else | 1555 #else |
| 1555 #error Unknown platform | 1556 #error Unknown platform |
| 1556 #endif | 1557 #endif |
| 1557 } | 1558 } |
| 1558 | 1559 |
| 1559 void RecordUMAStatistics(const PrefService* prefs) { | 1560 void RecordUMAStatistics(const PrefService* prefs) { |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1756 } | 1757 } |
| 1757 | 1758 |
| 1758 const Experiment* GetExperiments(size_t* count) { | 1759 const Experiment* GetExperiments(size_t* count) { |
| 1759 *count = num_experiments; | 1760 *count = num_experiments; |
| 1760 return experiments; | 1761 return experiments; |
| 1761 } | 1762 } |
| 1762 | 1763 |
| 1763 } // namespace testing | 1764 } // namespace testing |
| 1764 | 1765 |
| 1765 } // namespace about_flags | 1766 } // namespace about_flags |
| OLD | NEW |