Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(954)

Side by Side Diff: chrome/browser/about_flags.cc

Issue 14820030: Move Chrome OS switches to chromeos/chromeos_switches.cc (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix nits Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/chromeos/background/ash_user_wallpaper_delegate.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <algorithm> 7 #include <algorithm>
8 #include <iterator> 8 #include <iterator>
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 #if defined(OS_CHROMEOS) 164 #if defined(OS_CHROMEOS)
165 const Experiment::Choice kAshBootAnimationFunction[] = { 165 const Experiment::Choice kAshBootAnimationFunction[] = {
166 { IDS_GENERIC_EXPERIMENT_CHOICE_DEFAULT, "", "" }, 166 { IDS_GENERIC_EXPERIMENT_CHOICE_DEFAULT, "", "" },
167 { IDS_FLAGS_ASH_BOOT_ANIMATION_FUNCTION2, 167 { IDS_FLAGS_ASH_BOOT_ANIMATION_FUNCTION2,
168 ash::switches::kAshBootAnimationFunction2, ""}, 168 ash::switches::kAshBootAnimationFunction2, ""},
169 { IDS_FLAGS_ASH_BOOT_ANIMATION_FUNCTION3, 169 { IDS_FLAGS_ASH_BOOT_ANIMATION_FUNCTION3,
170 ash::switches::kAshBootAnimationFunction3, ""} 170 ash::switches::kAshBootAnimationFunction3, ""}
171 }; 171 };
172 172
173 const Experiment::Choice kChromeCaptivePortalDetectionChoices[] = { 173 const Experiment::Choice kChromeCaptivePortalDetectionChoices[] = {
174 { IDS_GENERIC_EXPERIMENT_CHOICE_DEFAULT, "", ""}, 174 { IDS_GENERIC_EXPERIMENT_CHOICE_DEFAULT, "", "" },
175 { IDS_FLAGS_CHROME_CAPTIVE_PORTAL_DETECTOR, 175 { IDS_FLAGS_CHROME_CAPTIVE_PORTAL_DETECTOR,
176 switches::kEnableChromeCaptivePortalDetector, ""}, 176 chromeos::switches::kEnableChromeCaptivePortalDetector, "" },
177 { IDS_FLAGS_SHILL_CAPTIVE_PORTAL_DETECTOR, 177 { IDS_FLAGS_SHILL_CAPTIVE_PORTAL_DETECTOR,
178 switches::kDisableChromeCaptivePortalDetector, ""} 178 chromeos::switches::kDisableChromeCaptivePortalDetector, "" }
179 }; 179 };
180 180
181 #endif 181 #endif
182 182
183 const Experiment::Choice kImplSidePaintingChoices[] = { 183 const Experiment::Choice kImplSidePaintingChoices[] = {
184 { IDS_GENERIC_EXPERIMENT_CHOICE_DEFAULT, "", "" }, 184 { IDS_GENERIC_EXPERIMENT_CHOICE_DEFAULT, "", "" },
185 { IDS_GENERIC_EXPERIMENT_CHOICE_ENABLED, 185 { IDS_GENERIC_EXPERIMENT_CHOICE_ENABLED,
186 cc::switches::kEnableImplSidePainting, ""}, 186 cc::switches::kEnableImplSidePainting, ""},
187 { IDS_GENERIC_EXPERIMENT_CHOICE_DISABLED, 187 { IDS_GENERIC_EXPERIMENT_CHOICE_DISABLED,
188 cc::switches::kDisableImplSidePainting, ""} 188 cc::switches::kDisableImplSidePainting, ""}
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 ENABLE_DISABLE_VALUE_TYPE(switches::kEnableLocalOnlyInstantExtendedAPI, 588 ENABLE_DISABLE_VALUE_TYPE(switches::kEnableLocalOnlyInstantExtendedAPI,
589 switches::kDisableLocalOnlyInstantExtendedAPI) 589 switches::kDisableLocalOnlyInstantExtendedAPI)
590 }, 590 },
591 { 591 {
592 "static-ip-config", 592 "static-ip-config",
593 IDS_FLAGS_STATIC_IP_CONFIG_NAME, 593 IDS_FLAGS_STATIC_IP_CONFIG_NAME,
594 IDS_FLAGS_STATIC_IP_CONFIG_DESCRIPTION, 594 IDS_FLAGS_STATIC_IP_CONFIG_DESCRIPTION,
595 kOsCrOS, 595 kOsCrOS,
596 #if defined(OS_CHROMEOS) 596 #if defined(OS_CHROMEOS)
597 // This switch exists only on Chrome OS. 597 // This switch exists only on Chrome OS.
598 SINGLE_VALUE_TYPE(switches::kEnableStaticIPConfig) 598 SINGLE_VALUE_TYPE(chromeos::switches::kEnableStaticIPConfig)
599 #else 599 #else
600 SINGLE_VALUE_TYPE("") 600 SINGLE_VALUE_TYPE("")
601 #endif 601 #endif
602 }, 602 },
603 { 603 {
604 "show-autofill-type-predictions", 604 "show-autofill-type-predictions",
605 IDS_FLAGS_SHOW_AUTOFILL_TYPE_PREDICTIONS_NAME, 605 IDS_FLAGS_SHOW_AUTOFILL_TYPE_PREDICTIONS_NAME,
606 IDS_FLAGS_SHOW_AUTOFILL_TYPE_PREDICTIONS_DESCRIPTION, 606 IDS_FLAGS_SHOW_AUTOFILL_TYPE_PREDICTIONS_DESCRIPTION,
607 kOsAll, 607 kOsAll,
608 SINGLE_VALUE_TYPE(autofill::switches::kShowAutofillTypePredictions) 608 SINGLE_VALUE_TYPE(autofill::switches::kShowAutofillTypePredictions)
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
886 kOsWin | kOsMac | kOsLinux | kOsCrOS, 886 kOsWin | kOsMac | kOsLinux | kOsCrOS,
887 ENABLE_DISABLE_VALUE_TYPE_AND_VALUE(switches::kTabCapture, "1", 887 ENABLE_DISABLE_VALUE_TYPE_AND_VALUE(switches::kTabCapture, "1",
888 switches::kTabCapture, "0") 888 switches::kTabCapture, "0")
889 }, 889 },
890 #if defined(OS_CHROMEOS) 890 #if defined(OS_CHROMEOS)
891 { 891 {
892 "enable-background-loader", 892 "enable-background-loader",
893 IDS_ENABLE_BACKLOADER_NAME, 893 IDS_ENABLE_BACKLOADER_NAME,
894 IDS_ENABLE_BACKLOADER_DESCRIPTION, 894 IDS_ENABLE_BACKLOADER_DESCRIPTION,
895 kOsCrOS, 895 kOsCrOS,
896 SINGLE_VALUE_TYPE(switches::kEnableBackgroundLoader) 896 SINGLE_VALUE_TYPE(chromeos::switches::kEnableBackgroundLoader)
897 }, 897 },
898 { 898 {
899 "enable-bezel-touch", 899 "enable-bezel-touch",
900 IDS_ENABLE_BEZEL_TOUCH_NAME, 900 IDS_ENABLE_BEZEL_TOUCH_NAME,
901 IDS_ENABLE_BEZEL_TOUCH_DESCRIPTION, 901 IDS_ENABLE_BEZEL_TOUCH_DESCRIPTION,
902 kOsCrOS, 902 kOsCrOS,
903 SINGLE_VALUE_TYPE(switches::kEnableBezelTouch) 903 SINGLE_VALUE_TYPE(switches::kEnableBezelTouch)
904 }, 904 },
905 { 905 {
906 "enable-screensaver-extension", 906 "enable-screensaver-extension",
907 IDS_ENABLE_SCREENSAVER_EXTENSION_NAME, 907 IDS_ENABLE_SCREENSAVER_EXTENSION_NAME,
908 IDS_ENABLE_SCREENSAVER_EXTENSION_DESCRIPTION, 908 IDS_ENABLE_SCREENSAVER_EXTENSION_DESCRIPTION,
909 kOsCrOS, 909 kOsCrOS,
910 SINGLE_VALUE_TYPE(chromeos::switches::kEnableScreensaverExtensions) 910 SINGLE_VALUE_TYPE(chromeos::switches::kEnableScreensaverExtensions)
911 }, 911 },
912 { 912 {
913 "no-discard-tabs", 913 "no-discard-tabs",
914 IDS_FLAGS_NO_DISCARD_TABS_NAME, 914 IDS_FLAGS_NO_DISCARD_TABS_NAME,
915 IDS_FLAGS_NO_DISCARD_TABS_DESCRIPTION, 915 IDS_FLAGS_NO_DISCARD_TABS_DESCRIPTION,
916 kOsCrOS, 916 kOsCrOS,
917 SINGLE_VALUE_TYPE(switches::kNoDiscardTabs) 917 SINGLE_VALUE_TYPE(chromeos::switches::kNoDiscardTabs)
918 }, 918 },
919 #endif 919 #endif
920 { 920 {
921 "enable-download-resumption", 921 "enable-download-resumption",
922 IDS_FLAGS_ENABLE_DOWNLOAD_RESUMPTION_NAME, 922 IDS_FLAGS_ENABLE_DOWNLOAD_RESUMPTION_NAME,
923 IDS_FLAGS_ENABLE_DOWNLOAD_RESUMPTION_DESCRIPTION, 923 IDS_FLAGS_ENABLE_DOWNLOAD_RESUMPTION_DESCRIPTION,
924 kOsDesktop, 924 kOsDesktop,
925 SINGLE_VALUE_TYPE(switches::kEnableDownloadResumption) 925 SINGLE_VALUE_TYPE(switches::kEnableDownloadResumption)
926 }, 926 },
927 { 927 {
(...skipping 16 matching lines...) Expand all
944 IDS_FLAGS_FORCE_HIGH_DPI_DESCRIPTION, 944 IDS_FLAGS_FORCE_HIGH_DPI_DESCRIPTION,
945 kOsCrOS, 945 kOsCrOS,
946 SINGLE_VALUE_TYPE_AND_VALUE(switches::kForceDeviceScaleFactor, "2") 946 SINGLE_VALUE_TYPE_AND_VALUE(switches::kForceDeviceScaleFactor, "2")
947 }, 947 },
948 #if defined(OS_CHROMEOS) 948 #if defined(OS_CHROMEOS)
949 { 949 {
950 "allow-touchpad-three-finger-click", 950 "allow-touchpad-three-finger-click",
951 IDS_FLAGS_ALLOW_TOUCHPAD_THREE_FINGER_CLICK_NAME, 951 IDS_FLAGS_ALLOW_TOUCHPAD_THREE_FINGER_CLICK_NAME,
952 IDS_FLAGS_ALLOW_TOUCHPAD_THREE_FINGER_CLICK_DESCRIPTION, 952 IDS_FLAGS_ALLOW_TOUCHPAD_THREE_FINGER_CLICK_DESCRIPTION,
953 kOsCrOS, 953 kOsCrOS,
954 SINGLE_VALUE_TYPE(switches::kEnableTouchpadThreeFingerClick) 954 SINGLE_VALUE_TYPE(chromeos::switches::kEnableTouchpadThreeFingerClick)
955 }, 955 },
956 { 956 {
957 "allow-touchpad-three-finger-swipe", 957 "allow-touchpad-three-finger-swipe",
958 IDS_FLAGS_ALLOW_TOUCHPAD_THREE_FINGER_SWIPE_NAME, 958 IDS_FLAGS_ALLOW_TOUCHPAD_THREE_FINGER_SWIPE_NAME,
959 IDS_FLAGS_ALLOW_TOUCHPAD_THREE_FINGER_SWIPE_DESCRIPTION, 959 IDS_FLAGS_ALLOW_TOUCHPAD_THREE_FINGER_SWIPE_DESCRIPTION,
960 kOsCrOS, 960 kOsCrOS,
961 SINGLE_VALUE_TYPE(switches::kEnableTouchpadThreeFingerSwipe) 961 SINGLE_VALUE_TYPE(chromeos::switches::kEnableTouchpadThreeFingerSwipe)
962 }, 962 },
963 #endif 963 #endif
964 { 964 {
965 "use-client-login-signin-flow", 965 "use-client-login-signin-flow",
966 IDS_FLAGS_USE_CLIENT_LOGIN_SIGNIN_FLOW_NAME, 966 IDS_FLAGS_USE_CLIENT_LOGIN_SIGNIN_FLOW_NAME,
967 IDS_FLAGS_USE_CLIENT_LOGIN_SIGNIN_FLOW_DESCRIPTION, 967 IDS_FLAGS_USE_CLIENT_LOGIN_SIGNIN_FLOW_DESCRIPTION,
968 kOsMac | kOsWin | kOsLinux, 968 kOsMac | kOsWin | kOsLinux,
969 SINGLE_VALUE_TYPE(switches::kUseClientLoginSigninFlow) 969 SINGLE_VALUE_TYPE(switches::kUseClientLoginSigninFlow)
970 }, 970 },
971 { 971 {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1026 kOsLinux | kOsWin | kOsCrOS, 1026 kOsLinux | kOsWin | kOsCrOS,
1027 SINGLE_VALUE_TYPE(ash::switches::kForcedMaximizeMode), 1027 SINGLE_VALUE_TYPE(ash::switches::kForcedMaximizeMode),
1028 }, 1028 },
1029 #endif // defined(USE_ASH) 1029 #endif // defined(USE_ASH)
1030 #if defined(OS_CHROMEOS) 1030 #if defined(OS_CHROMEOS)
1031 { 1031 {
1032 "disable-boot-animation", 1032 "disable-boot-animation",
1033 IDS_FLAGS_DISABLE_BOOT_ANIMATION, 1033 IDS_FLAGS_DISABLE_BOOT_ANIMATION,
1034 IDS_FLAGS_DISABLE_BOOT_ANIMATION_DESCRIPTION, 1034 IDS_FLAGS_DISABLE_BOOT_ANIMATION_DESCRIPTION,
1035 kOsCrOSOwnerOnly, 1035 kOsCrOSOwnerOnly,
1036 SINGLE_VALUE_TYPE(switches::kDisableBootAnimation), 1036 SINGLE_VALUE_TYPE(chromeos::switches::kDisableBootAnimation),
1037 }, 1037 },
1038 { 1038 {
1039 "disable-boot-animation2", 1039 "disable-boot-animation2",
1040 IDS_FLAGS_DISABLE_BOOT_ANIMATION2, 1040 IDS_FLAGS_DISABLE_BOOT_ANIMATION2,
1041 IDS_FLAGS_DISABLE_BOOT_ANIMATION2_DESCRIPTION, 1041 IDS_FLAGS_DISABLE_BOOT_ANIMATION2_DESCRIPTION,
1042 kOsCrOSOwnerOnly, 1042 kOsCrOSOwnerOnly,
1043 SINGLE_VALUE_TYPE(ash::switches::kAshDisableBootAnimation2), 1043 SINGLE_VALUE_TYPE(ash::switches::kAshDisableBootAnimation2),
1044 }, 1044 },
1045 { 1045 {
1046 "boot-animation-fucntion", 1046 "boot-animation-fucntion",
(...skipping 14 matching lines...) Expand all
1061 IDS_FLAGS_ASH_NEW_LOCK_ANIMATIONS, 1061 IDS_FLAGS_ASH_NEW_LOCK_ANIMATIONS,
1062 IDS_FLAGS_ASH_NEW_LOCK_ANIMATIONS_DESCRIPTION, 1062 IDS_FLAGS_ASH_NEW_LOCK_ANIMATIONS_DESCRIPTION,
1063 kOsCrOS, 1063 kOsCrOS,
1064 SINGLE_VALUE_TYPE(ash::switches::kAshDisableNewLockAnimations), 1064 SINGLE_VALUE_TYPE(ash::switches::kAshDisableNewLockAnimations),
1065 }, 1065 },
1066 { 1066 {
1067 "file-manager-legacy", 1067 "file-manager-legacy",
1068 IDS_FLAGS_FILE_MANAGER_LEGACY_NAME, 1068 IDS_FLAGS_FILE_MANAGER_LEGACY_NAME,
1069 IDS_FLAGS_FILE_MANAGER_LEGACY_DESCRIPTION, 1069 IDS_FLAGS_FILE_MANAGER_LEGACY_DESCRIPTION,
1070 kOsCrOS, 1070 kOsCrOS,
1071 SINGLE_VALUE_TYPE(switches::kFileManagerLegacy), 1071 SINGLE_VALUE_TYPE(chromeos::switches::kFileManagerLegacy),
1072 }, 1072 },
1073 { 1073 {
1074 "file-manager-legacy-ui", 1074 "file-manager-legacy-ui",
1075 IDS_FLAGS_FILE_MANAGER_LEGACY_UI_NAME, 1075 IDS_FLAGS_FILE_MANAGER_LEGACY_UI_NAME,
1076 IDS_FLAGS_FILE_MANAGER_LEGACY_UI_DESCRIPTION, 1076 IDS_FLAGS_FILE_MANAGER_LEGACY_UI_DESCRIPTION,
1077 kOsCrOS, 1077 kOsCrOS,
1078 SINGLE_VALUE_TYPE(switches::kFileManagerLegacyUI), 1078 SINGLE_VALUE_TYPE(chromeos::switches::kFileManagerLegacyUI),
1079 }, 1079 },
1080 { 1080 {
1081 "disable-launcher-per-display", 1081 "disable-launcher-per-display",
1082 IDS_FLAGS_DISABLE_LAUNCHER_PER_DISPLAY_NAME, 1082 IDS_FLAGS_DISABLE_LAUNCHER_PER_DISPLAY_NAME,
1083 IDS_FLAGS_DISABLE_LAUNCHER_PER_DISPLAY_DESCRIPTION, 1083 IDS_FLAGS_DISABLE_LAUNCHER_PER_DISPLAY_DESCRIPTION,
1084 kOsCrOS, 1084 kOsCrOS,
1085 SINGLE_VALUE_TYPE(ash::switches::kAshDisableLauncherPerDisplay), 1085 SINGLE_VALUE_TYPE(ash::switches::kAshDisableLauncherPerDisplay),
1086 }, 1086 },
1087 { 1087 {
1088 "disable-app-mode", 1088 "disable-app-mode",
1089 IDS_FLAGS_DISABLE_KIOSK_APPS_NAME, 1089 IDS_FLAGS_DISABLE_KIOSK_APPS_NAME,
1090 IDS_FLAGS_DISABLE_KIOSK_APPS_DESCRIPTION, 1090 IDS_FLAGS_DISABLE_KIOSK_APPS_DESCRIPTION,
1091 kOsCrOSOwnerOnly, 1091 kOsCrOSOwnerOnly,
1092 SINGLE_VALUE_TYPE(switches::kDisableAppMode), 1092 SINGLE_VALUE_TYPE(chromeos::switches::kDisableAppMode),
1093 }, 1093 },
1094 { 1094 {
1095 "disable-force-fullscreen-app", 1095 "disable-force-fullscreen-app",
1096 IDS_FLAGS_DISABLE_FULLSCREEN_APP_NAME, 1096 IDS_FLAGS_DISABLE_FULLSCREEN_APP_NAME,
1097 IDS_FLAGS_DISABLE_FULLSCREEN_APP_DESCRIPTION, 1097 IDS_FLAGS_DISABLE_FULLSCREEN_APP_DESCRIPTION,
1098 kOsCrOS, 1098 kOsCrOS,
1099 SINGLE_VALUE_TYPE(switches::kDisableFullscreenApp), 1099 SINGLE_VALUE_TYPE(switches::kDisableFullscreenApp),
1100 }, 1100 },
1101 { 1101 {
1102 "disable-quickoffice-component-app", 1102 "disable-quickoffice-component-app",
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
1203 IDS_FLAGS_ASH_AUDIO_DEVICE_MENU_NAME, 1203 IDS_FLAGS_ASH_AUDIO_DEVICE_MENU_NAME,
1204 IDS_FLAGS_ASH_AUDIO_DEVICE_MENU_DESCRIPTION, 1204 IDS_FLAGS_ASH_AUDIO_DEVICE_MENU_DESCRIPTION,
1205 kOsCrOS, 1205 kOsCrOS,
1206 SINGLE_VALUE_TYPE(ash::switches::kAshEnableAudioDeviceMenu) 1206 SINGLE_VALUE_TYPE(ash::switches::kAshEnableAudioDeviceMenu)
1207 }, 1207 },
1208 { 1208 {
1209 "enable-carrier-switching", 1209 "enable-carrier-switching",
1210 IDS_FLAGS_ENABLE_CARRIER_SWITCHING, 1210 IDS_FLAGS_ENABLE_CARRIER_SWITCHING,
1211 IDS_FLAGS_ENABLE_CARRIER_SWITCHING_DESCRIPTION, 1211 IDS_FLAGS_ENABLE_CARRIER_SWITCHING_DESCRIPTION,
1212 kOsCrOS, 1212 kOsCrOS,
1213 SINGLE_VALUE_TYPE(switches::kEnableCarrierSwitching) 1213 SINGLE_VALUE_TYPE(chromeos::switches::kEnableCarrierSwitching)
1214 }, 1214 },
1215 { 1215 {
1216 "enable-request-tablet-site", 1216 "enable-request-tablet-site",
1217 IDS_FLAGS_ENABLE_REQUEST_TABLET_SITE_NAME, 1217 IDS_FLAGS_ENABLE_REQUEST_TABLET_SITE_NAME,
1218 IDS_FLAGS_ENABLE_REQUEST_TABLET_SITE_DESCRIPTION, 1218 IDS_FLAGS_ENABLE_REQUEST_TABLET_SITE_DESCRIPTION,
1219 kOsCrOS, 1219 kOsCrOS,
1220 SINGLE_VALUE_TYPE(switches::kEnableRequestTabletSite) 1220 SINGLE_VALUE_TYPE(chromeos::switches::kEnableRequestTabletSite)
1221 }, 1221 },
1222 #endif 1222 #endif
1223 { 1223 {
1224 "debug-packed-apps", 1224 "debug-packed-apps",
1225 IDS_FLAGS_DEBUG_PACKED_APP_NAME, 1225 IDS_FLAGS_DEBUG_PACKED_APP_NAME,
1226 IDS_FLAGS_DEBUG_PACKED_APP_DESCRIPTION, 1226 IDS_FLAGS_DEBUG_PACKED_APP_DESCRIPTION,
1227 kOsDesktop, 1227 kOsDesktop,
1228 SINGLE_VALUE_TYPE(switches::kDebugPackedApps) 1228 SINGLE_VALUE_TYPE(switches::kDebugPackedApps)
1229 }, 1229 },
1230 { 1230 {
(...skipping 728 matching lines...) Expand 10 before | Expand all | Expand 10 after
1959 } 1959 }
1960 1960
1961 const Experiment* GetExperiments(size_t* count) { 1961 const Experiment* GetExperiments(size_t* count) {
1962 *count = num_experiments; 1962 *count = num_experiments;
1963 return experiments; 1963 return experiments;
1964 } 1964 }
1965 1965
1966 } // namespace testing 1966 } // namespace testing
1967 1967
1968 } // namespace about_flags 1968 } // namespace about_flags
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/chromeos/background/ash_user_wallpaper_delegate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698