Index: components/user_manager/user_image/default_user_images.cc |
diff --git a/components/user_manager/user_image/default_user_images.cc b/components/user_manager/user_image/default_user_images.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..35aabf233a6b6dde3967a48128352ad6b0c9a26d |
--- /dev/null |
+++ b/components/user_manager/user_image/default_user_images.cc |
@@ -0,0 +1,258 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "components/user_manager/user_image/default_user_images.h" |
+ |
+#include "base/basictypes.h" |
+#include "base/logging.h" |
+#include "base/strings/string_number_conversions.h" |
+#include "base/strings/string_piece.h" |
+#include "base/strings/string_util.h" |
+#include "base/strings/stringprintf.h" |
+#include "base/sys_info.h" |
+#include "grit/ui_chromeos_resources.h" |
+#include "grit/ui_chromeos_strings.h" |
+#include "ui/base/l10n/l10n_util.h" |
+#include "ui/base/resource/resource_bundle.h" |
+#include "ui/gfx/image/image_skia.h" |
+ |
+namespace user_manager { |
+ |
+namespace { |
+ |
+const char kDefaultUrlPrefix[] = "chrome://theme/IDR_LOGIN_DEFAULT_USER_"; |
+const char kZeroDefaultUrl[] = "chrome://theme/IDR_LOGIN_DEFAULT_USER"; |
+ |
+// IDs of default user image descriptions. |
+const int kDefaultImageDescriptions[] = { |
+ 0, // No description for deprecated user image 0. |
+ 0, // No description for deprecated user image 1. |
+ 0, // No description for deprecated user image 2. |
+ 0, // No description for deprecated user image 3. |
+ 0, // No description for deprecated user image 4. |
+ 0, // No description for deprecated user image 5. |
+ 0, // No description for deprecated user image 6. |
+ 0, // No description for deprecated user image 7. |
+ 0, // No description for deprecated user image 8. |
+ 0, // No description for deprecated user image 9. |
+ 0, // No description for deprecated user image 10. |
+ 0, // No description for deprecated user image 11. |
+ 0, // No description for deprecated user image 12. |
+ 0, // No description for deprecated user image 13. |
+ 0, // No description for deprecated user image 14. |
+ 0, // No description for deprecated user image 15. |
+ 0, // No description for deprecated user image 16. |
+ 0, // No description for deprecated user image 17. |
+ 0, // No description for deprecated user image 18. |
+ IDS_LOGIN_DEFAULT_USER_DESC_19, |
+ IDS_LOGIN_DEFAULT_USER_DESC_20, |
+ IDS_LOGIN_DEFAULT_USER_DESC_21, |
+ IDS_LOGIN_DEFAULT_USER_DESC_22, |
+ IDS_LOGIN_DEFAULT_USER_DESC_23, |
+ IDS_LOGIN_DEFAULT_USER_DESC_24, |
+ IDS_LOGIN_DEFAULT_USER_DESC_25, |
+ IDS_LOGIN_DEFAULT_USER_DESC_26, |
+ IDS_LOGIN_DEFAULT_USER_DESC_27, |
+ IDS_LOGIN_DEFAULT_USER_DESC_28, |
+ IDS_LOGIN_DEFAULT_USER_DESC_29, |
+ IDS_LOGIN_DEFAULT_USER_DESC_30, |
+ IDS_LOGIN_DEFAULT_USER_DESC_31, |
+ IDS_LOGIN_DEFAULT_USER_DESC_32, |
+}; |
+ |
+// Returns a string consisting of the prefix specified and the index of the |
+// image if its valid. |
+std::string GetDefaultImageString(int index, const std::string& prefix) { |
+ if (index < 0 || index >= kDefaultImagesCount) { |
+ DCHECK(!base::SysInfo::IsRunningOnChromeOS()); |
+ return std::string(); |
+ } |
+ return base::StringPrintf("%s%d", prefix.c_str(), index); |
+} |
+ |
+// Returns true if the string specified consists of the prefix and one of |
+// the default images indices. Returns the index of the image in |image_id| |
+// variable. |
+bool IsDefaultImageString(const std::string& s, |
+ const std::string& prefix, |
+ int* image_id) { |
+ DCHECK(image_id); |
+ if (!StartsWithASCII(s, prefix, true)) |
+ return false; |
+ |
+ int image_index = -1; |
+ if (base::StringToInt(base::StringPiece(s.begin() + prefix.length(), s.end()), |
+ &image_index)) { |
+ if (image_index < 0 || image_index >= kDefaultImagesCount) |
+ return false; |
+ *image_id = image_index; |
+ return true; |
+ } |
+ |
+ return false; |
+} |
+} // namespace |
+ |
+std::string GetDefaultImageUrl(int index) { |
+ if (index == 0) |
+ return kZeroDefaultUrl; |
+ return GetDefaultImageString(index, kDefaultUrlPrefix); |
+} |
+ |
+bool IsDefaultImageUrl(const std::string& url, int* image_id) { |
+ if (url == kZeroDefaultUrl) { |
+ *image_id = 0; |
+ return true; |
+ } |
+ return IsDefaultImageString(url, kDefaultUrlPrefix, image_id); |
+} |
+ |
+const gfx::ImageSkia& GetDefaultImage(int index) { |
+ DCHECK(index >= 0 && index < kDefaultImagesCount); |
+ return *ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
+ kDefaultImageResourceIDs[index]); |
+} |
+ |
+base::string16 GetDefaultImageDescription(int index) { |
+ DCHECK(index >= 0 && index < kDefaultImagesCount); |
+ int string_id = kDefaultImageDescriptions[index]; |
+ if (string_id) |
+ return l10n_util::GetStringUTF16(string_id); |
+ else |
+ return base::string16(); |
+} |
+ |
+// Resource IDs of default user images. |
+const int kDefaultImageResourceIDs[] = { |
+ IDR_LOGIN_DEFAULT_USER, |
+ IDR_LOGIN_DEFAULT_USER_1, |
+ IDR_LOGIN_DEFAULT_USER_2, |
+ IDR_LOGIN_DEFAULT_USER_3, |
+ IDR_LOGIN_DEFAULT_USER_4, |
+ IDR_LOGIN_DEFAULT_USER_5, |
+ IDR_LOGIN_DEFAULT_USER_6, |
+ IDR_LOGIN_DEFAULT_USER_7, |
+ IDR_LOGIN_DEFAULT_USER_8, |
+ IDR_LOGIN_DEFAULT_USER_9, |
+ IDR_LOGIN_DEFAULT_USER_10, |
+ IDR_LOGIN_DEFAULT_USER_11, |
+ IDR_LOGIN_DEFAULT_USER_12, |
+ IDR_LOGIN_DEFAULT_USER_13, |
+ IDR_LOGIN_DEFAULT_USER_14, |
+ IDR_LOGIN_DEFAULT_USER_15, |
+ IDR_LOGIN_DEFAULT_USER_16, |
+ IDR_LOGIN_DEFAULT_USER_17, |
+ IDR_LOGIN_DEFAULT_USER_18, |
+ IDR_LOGIN_DEFAULT_USER_19, |
+ IDR_LOGIN_DEFAULT_USER_20, |
+ IDR_LOGIN_DEFAULT_USER_21, |
+ IDR_LOGIN_DEFAULT_USER_22, |
+ IDR_LOGIN_DEFAULT_USER_23, |
+ IDR_LOGIN_DEFAULT_USER_24, |
+ IDR_LOGIN_DEFAULT_USER_25, |
+ IDR_LOGIN_DEFAULT_USER_26, |
+ IDR_LOGIN_DEFAULT_USER_27, |
+ IDR_LOGIN_DEFAULT_USER_28, |
+ IDR_LOGIN_DEFAULT_USER_29, |
+ IDR_LOGIN_DEFAULT_USER_30, |
+ IDR_LOGIN_DEFAULT_USER_31, |
+ IDR_LOGIN_DEFAULT_USER_32, |
+}; |
+ |
+const int kDefaultImageAuthorIDs[] = { |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_1, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_2, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_3, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_4, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_5, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_6, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_7, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_8, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_9, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_10, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_11, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_12, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_13, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_14, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_15, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_16, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_17, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_18, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_19, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_20, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_21, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_22, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_23, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_24, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_25, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_26, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_27, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_28, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_29, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_30, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_31, |
+ IDS_LOGIN_DEFAULT_USER_AUTHOR_32, |
+}; |
+ |
+const int kDefaultImageWebsiteIDs[] = { |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_1, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_2, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_3, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_4, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_5, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_6, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_7, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_8, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_9, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_10, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_11, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_12, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_13, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_14, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_15, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_16, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_17, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_18, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_19, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_20, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_21, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_22, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_23, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_24, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_25, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_26, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_27, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_28, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_29, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_30, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_31, |
+ IDS_LOGIN_DEFAULT_USER_WEBSITE_32, |
+}; |
+ |
+const int kDefaultImagesCount = arraysize(kDefaultImageResourceIDs); |
+ |
+const int kFirstDefaultImageIndex = 19; |
+ |
+// The order and the values of these constants are important for histograms |
+// of different Chrome OS versions to be merged smoothly. |
+const int kHistogramImageFromCamera = 19; |
+const int kHistogramImageFromFile = 20; |
+const int kHistogramImageOld = 21; |
+const int kHistogramImageFromProfile = 22; |
+const int kHistogramVideoFromCamera = 23; |
+const int kHistogramVideoFromFile = 24; |
+const int kHistogramImagesCount = kDefaultImagesCount + 6; |
+ |
+int GetDefaultImageHistogramValue(int index) { |
+ DCHECK(index >= 0 && index < kDefaultImagesCount); |
+ // Create a gap in histogram values for |
+ // [kHistogramImageFromCamera..kHistogramImageFromProfile] block to fit. |
+ if (index < kHistogramImageFromCamera) |
+ return index; |
+ return index + 6; |
+} |
+ |
+} // namespace user_manager |