1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/chromeos/login/default_user_images.h" 6 7 #include "base/basictypes.h" 8 #include "base/logging.h" 9 #include "base/string_number_conversions.h" 10 #include "base/string_util.h" 11 #include "base/stringprintf.h" 12 #include "grit/theme_resources.h" 13 14 namespace chromeos { 15 16 namespace { 17 18 const char kDefaultPathPrefix[] = "default:"; 19 const char kDefaultUrlPrefix[] = "chrome://theme/IDR_LOGIN_DEFAULT_USER_"; 20 const char kFirstDefaultUrl[] = "chrome://theme/IDR_LOGIN_DEFAULT_USER"; 21 22 const char* kOldDefaultImageNames[] = { 23 "default:gray", 24 "default:green", 25 "default:blue", 26 "default:yellow", 27 "default:red", 28 }; 29 30 // Returns a string consisting of the prefix specified and the index of the 31 // image if its valid. 32 std::string GetDefaultImageString(int index, const std::string& prefix) { 33 if (index < 0 || index >= kDefaultImagesCount) { 34 NOTREACHED(); 35 return std::string(); 36 } 37 return StringPrintf("%s%d", prefix.c_str(), index); 38 } 39 40 // Returns true if the string specified consists of the prefix and one of 41 // the default images indices. Returns the index of the image in |image_id| 42 // variable. 43 bool IsDefaultImageString(const std::string& s, 44 const std::string& prefix, 45 int* image_id) { 46 DCHECK(image_id); 47 if (!StartsWithASCII(s, prefix, true)) 48 return false; 49 50 int image_index = -1; 51 if (base::StringToInt(s.begin() + prefix.length(), 52 s.end(), 53 &image_index)) { 54 if (image_index < 0 || image_index >= kDefaultImagesCount) 55 return false; 56 *image_id = image_index; 57 return true; 58 } 59 60 return false; 61 } 62 } // namespace 63 64 std::string GetDefaultImagePath(int index) { 65 return GetDefaultImageString(index, kDefaultPathPrefix); 66 } 67 68 bool IsDefaultImagePath(const std::string& path, int* image_id) { 69 if (IsDefaultImageString(path, kDefaultPathPrefix, image_id)) 70 return true; 71 72 // Check old default image names for back-compatibility. 73 for (size_t i = 0; i < arraysize(kOldDefaultImageNames); ++i) { 74 if (path == kOldDefaultImageNames[i]) { 75 *image_id = static_cast<int>(i); 76 return true; 77 } 78 } 79 return false; 80 } 81 82 std::string GetDefaultImageUrl(int index) { 83 if (index == 0) 84 return kFirstDefaultUrl; 85 return GetDefaultImageString(index, kDefaultUrlPrefix); 86 } 87 88 bool IsDefaultImageUrl(const std::string url, int* image_id) { 89 if (url == kFirstDefaultUrl) { 90 *image_id = 0; 91 return true; 92 } 93 return IsDefaultImageString(url, kDefaultUrlPrefix, image_id); 94 } 95 96 // Resource IDs of default user images. 97 const int kDefaultImageResources[] = { 98 IDR_LOGIN_DEFAULT_USER, 99 IDR_LOGIN_DEFAULT_USER_1, 100 IDR_LOGIN_DEFAULT_USER_2, 101 IDR_LOGIN_DEFAULT_USER_3, 102 IDR_LOGIN_DEFAULT_USER_4, 103 IDR_LOGIN_DEFAULT_USER_5, 104 IDR_LOGIN_DEFAULT_USER_6, 105 IDR_LOGIN_DEFAULT_USER_7, 106 IDR_LOGIN_DEFAULT_USER_8, 107 IDR_LOGIN_DEFAULT_USER_9, 108 IDR_LOGIN_DEFAULT_USER_10, 109 IDR_LOGIN_DEFAULT_USER_11, 110 IDR_LOGIN_DEFAULT_USER_12, 111 IDR_LOGIN_DEFAULT_USER_13, 112 IDR_LOGIN_DEFAULT_USER_14, 113 IDR_LOGIN_DEFAULT_USER_15, 114 IDR_LOGIN_DEFAULT_USER_16, 115 IDR_LOGIN_DEFAULT_USER_17, 116 IDR_LOGIN_DEFAULT_USER_18, 117 }; 118 119 const int kDefaultImagesCount = arraysize(kDefaultImageResources); 120 121 } // namespace chromeos 122 123