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
3 // found in the LICENSE file.
5 #include "chrome/browser/chromeos/login/default_user_images.h"
7 #include "base/basictypes.h"
8 #include "base/logging.h"
9 #include "base/strings/string_number_conversions.h"
10 #include "base/strings/string_piece.h"
11 #include "base/strings/string_util.h"
12 #include "base/strings/stringprintf.h"
13 #include "base/sys_info.h"
14 #include "grit/generated_resources.h"
15 #include "grit/theme_resources.h"
16 #include "ui/base/l10n/l10n_util.h"
17 #include "ui/base/resource/resource_bundle.h"
18 #include "ui/gfx/image/image_skia.h"
24 const char kDefaultPathPrefix
[] = "default:";
25 const char kDefaultUrlPrefix
[] = "chrome://theme/IDR_LOGIN_DEFAULT_USER_";
26 const char kZeroDefaultUrl
[] = "chrome://theme/IDR_LOGIN_DEFAULT_USER";
28 const char* kOldDefaultImageNames
[] = {
36 // IDs of default user image descriptions.
37 const int kDefaultImageDescriptions
[] = {
38 0, // No description for deprecated user image 0.
39 0, // No description for deprecated user image 1.
40 0, // No description for deprecated user image 2.
41 0, // No description for deprecated user image 3.
42 0, // No description for deprecated user image 4.
43 0, // No description for deprecated user image 5.
44 0, // No description for deprecated user image 6.
45 0, // No description for deprecated user image 7.
46 0, // No description for deprecated user image 8.
47 0, // No description for deprecated user image 9.
48 0, // No description for deprecated user image 10.
49 0, // No description for deprecated user image 11.
50 0, // No description for deprecated user image 12.
51 0, // No description for deprecated user image 13.
52 0, // No description for deprecated user image 14.
53 0, // No description for deprecated user image 15.
54 0, // No description for deprecated user image 16.
55 0, // No description for deprecated user image 17.
56 0, // No description for deprecated user image 18.
57 IDS_LOGIN_DEFAULT_USER_DESC_19
,
58 IDS_LOGIN_DEFAULT_USER_DESC_20
,
59 IDS_LOGIN_DEFAULT_USER_DESC_21
,
60 IDS_LOGIN_DEFAULT_USER_DESC_22
,
61 IDS_LOGIN_DEFAULT_USER_DESC_23
,
62 IDS_LOGIN_DEFAULT_USER_DESC_24
,
63 IDS_LOGIN_DEFAULT_USER_DESC_25
,
64 IDS_LOGIN_DEFAULT_USER_DESC_26
,
65 IDS_LOGIN_DEFAULT_USER_DESC_27
,
66 IDS_LOGIN_DEFAULT_USER_DESC_28
,
67 IDS_LOGIN_DEFAULT_USER_DESC_29
,
68 IDS_LOGIN_DEFAULT_USER_DESC_30
,
69 IDS_LOGIN_DEFAULT_USER_DESC_31
,
70 IDS_LOGIN_DEFAULT_USER_DESC_32
,
73 // Returns a string consisting of the prefix specified and the index of the
74 // image if its valid.
75 std::string
GetDefaultImageString(int index
, const std::string
& prefix
) {
76 if (index
< 0 || index
>= kDefaultImagesCount
) {
77 DCHECK(!base::SysInfo::IsRunningOnChromeOS());
80 return base::StringPrintf("%s%d", prefix
.c_str(), index
);
83 // Returns true if the string specified consists of the prefix and one of
84 // the default images indices. Returns the index of the image in |image_id|
86 bool IsDefaultImageString(const std::string
& s
,
87 const std::string
& prefix
,
90 if (!StartsWithASCII(s
, prefix
, true))
94 if (base::StringToInt(base::StringPiece(s
.begin() + prefix
.length(),
97 if (image_index
< 0 || image_index
>= kDefaultImagesCount
)
99 *image_id
= image_index
;
107 std::string
GetDefaultImagePath(int index
) {
108 return GetDefaultImageString(index
, kDefaultPathPrefix
);
111 bool IsDefaultImagePath(const std::string
& path
, int* image_id
) {
112 if (IsDefaultImageString(path
, kDefaultPathPrefix
, image_id
))
115 // Check old default image names for back-compatibility.
116 for (size_t i
= 0; i
< arraysize(kOldDefaultImageNames
); ++i
) {
117 if (path
== kOldDefaultImageNames
[i
]) {
118 *image_id
= static_cast<int>(i
);
125 std::string
GetDefaultImageUrl(int index
) {
127 return kZeroDefaultUrl
;
128 return GetDefaultImageString(index
, kDefaultUrlPrefix
);
131 bool IsDefaultImageUrl(const std::string
& url
, int* image_id
) {
132 if (url
== kZeroDefaultUrl
) {
136 return IsDefaultImageString(url
, kDefaultUrlPrefix
, image_id
);
139 const gfx::ImageSkia
& GetDefaultImage(int index
) {
140 DCHECK(index
>= 0 && index
< kDefaultImagesCount
);
141 return *ResourceBundle::GetSharedInstance().
142 GetImageSkiaNamed(kDefaultImageResourceIDs
[index
]);
145 base::string16
GetDefaultImageDescription(int index
) {
146 DCHECK(index
>= 0 && index
< kDefaultImagesCount
);
147 int string_id
= kDefaultImageDescriptions
[index
];
149 return l10n_util::GetStringUTF16(string_id
);
151 return base::string16();
154 // Resource IDs of default user images.
155 const int kDefaultImageResourceIDs
[] = {
156 IDR_LOGIN_DEFAULT_USER
,
157 IDR_LOGIN_DEFAULT_USER_1
,
158 IDR_LOGIN_DEFAULT_USER_2
,
159 IDR_LOGIN_DEFAULT_USER_3
,
160 IDR_LOGIN_DEFAULT_USER_4
,
161 IDR_LOGIN_DEFAULT_USER_5
,
162 IDR_LOGIN_DEFAULT_USER_6
,
163 IDR_LOGIN_DEFAULT_USER_7
,
164 IDR_LOGIN_DEFAULT_USER_8
,
165 IDR_LOGIN_DEFAULT_USER_9
,
166 IDR_LOGIN_DEFAULT_USER_10
,
167 IDR_LOGIN_DEFAULT_USER_11
,
168 IDR_LOGIN_DEFAULT_USER_12
,
169 IDR_LOGIN_DEFAULT_USER_13
,
170 IDR_LOGIN_DEFAULT_USER_14
,
171 IDR_LOGIN_DEFAULT_USER_15
,
172 IDR_LOGIN_DEFAULT_USER_16
,
173 IDR_LOGIN_DEFAULT_USER_17
,
174 IDR_LOGIN_DEFAULT_USER_18
,
175 IDR_LOGIN_DEFAULT_USER_19
,
176 IDR_LOGIN_DEFAULT_USER_20
,
177 IDR_LOGIN_DEFAULT_USER_21
,
178 IDR_LOGIN_DEFAULT_USER_22
,
179 IDR_LOGIN_DEFAULT_USER_23
,
180 IDR_LOGIN_DEFAULT_USER_24
,
181 IDR_LOGIN_DEFAULT_USER_25
,
182 IDR_LOGIN_DEFAULT_USER_26
,
183 IDR_LOGIN_DEFAULT_USER_27
,
184 IDR_LOGIN_DEFAULT_USER_28
,
185 IDR_LOGIN_DEFAULT_USER_29
,
186 IDR_LOGIN_DEFAULT_USER_30
,
187 IDR_LOGIN_DEFAULT_USER_31
,
188 IDR_LOGIN_DEFAULT_USER_32
,
191 const int kDefaultImageAuthorIDs
[] = {
192 IDS_LOGIN_DEFAULT_USER_AUTHOR
,
193 IDS_LOGIN_DEFAULT_USER_AUTHOR_1
,
194 IDS_LOGIN_DEFAULT_USER_AUTHOR_2
,
195 IDS_LOGIN_DEFAULT_USER_AUTHOR_3
,
196 IDS_LOGIN_DEFAULT_USER_AUTHOR_4
,
197 IDS_LOGIN_DEFAULT_USER_AUTHOR_5
,
198 IDS_LOGIN_DEFAULT_USER_AUTHOR_6
,
199 IDS_LOGIN_DEFAULT_USER_AUTHOR_7
,
200 IDS_LOGIN_DEFAULT_USER_AUTHOR_8
,
201 IDS_LOGIN_DEFAULT_USER_AUTHOR_9
,
202 IDS_LOGIN_DEFAULT_USER_AUTHOR_10
,
203 IDS_LOGIN_DEFAULT_USER_AUTHOR_11
,
204 IDS_LOGIN_DEFAULT_USER_AUTHOR_12
,
205 IDS_LOGIN_DEFAULT_USER_AUTHOR_13
,
206 IDS_LOGIN_DEFAULT_USER_AUTHOR_14
,
207 IDS_LOGIN_DEFAULT_USER_AUTHOR_15
,
208 IDS_LOGIN_DEFAULT_USER_AUTHOR_16
,
209 IDS_LOGIN_DEFAULT_USER_AUTHOR_17
,
210 IDS_LOGIN_DEFAULT_USER_AUTHOR_18
,
211 IDS_LOGIN_DEFAULT_USER_AUTHOR_19
,
212 IDS_LOGIN_DEFAULT_USER_AUTHOR_20
,
213 IDS_LOGIN_DEFAULT_USER_AUTHOR_21
,
214 IDS_LOGIN_DEFAULT_USER_AUTHOR_22
,
215 IDS_LOGIN_DEFAULT_USER_AUTHOR_23
,
216 IDS_LOGIN_DEFAULT_USER_AUTHOR_24
,
217 IDS_LOGIN_DEFAULT_USER_AUTHOR_25
,
218 IDS_LOGIN_DEFAULT_USER_AUTHOR_26
,
219 IDS_LOGIN_DEFAULT_USER_AUTHOR_27
,
220 IDS_LOGIN_DEFAULT_USER_AUTHOR_28
,
221 IDS_LOGIN_DEFAULT_USER_AUTHOR_29
,
222 IDS_LOGIN_DEFAULT_USER_AUTHOR_30
,
223 IDS_LOGIN_DEFAULT_USER_AUTHOR_31
,
224 IDS_LOGIN_DEFAULT_USER_AUTHOR_32
,
227 const int kDefaultImageWebsiteIDs
[] = {
228 IDS_LOGIN_DEFAULT_USER_WEBSITE
,
229 IDS_LOGIN_DEFAULT_USER_WEBSITE_1
,
230 IDS_LOGIN_DEFAULT_USER_WEBSITE_2
,
231 IDS_LOGIN_DEFAULT_USER_WEBSITE_3
,
232 IDS_LOGIN_DEFAULT_USER_WEBSITE_4
,
233 IDS_LOGIN_DEFAULT_USER_WEBSITE_5
,
234 IDS_LOGIN_DEFAULT_USER_WEBSITE_6
,
235 IDS_LOGIN_DEFAULT_USER_WEBSITE_7
,
236 IDS_LOGIN_DEFAULT_USER_WEBSITE_8
,
237 IDS_LOGIN_DEFAULT_USER_WEBSITE_9
,
238 IDS_LOGIN_DEFAULT_USER_WEBSITE_10
,
239 IDS_LOGIN_DEFAULT_USER_WEBSITE_11
,
240 IDS_LOGIN_DEFAULT_USER_WEBSITE_12
,
241 IDS_LOGIN_DEFAULT_USER_WEBSITE_13
,
242 IDS_LOGIN_DEFAULT_USER_WEBSITE_14
,
243 IDS_LOGIN_DEFAULT_USER_WEBSITE_15
,
244 IDS_LOGIN_DEFAULT_USER_WEBSITE_16
,
245 IDS_LOGIN_DEFAULT_USER_WEBSITE_17
,
246 IDS_LOGIN_DEFAULT_USER_WEBSITE_18
,
247 IDS_LOGIN_DEFAULT_USER_WEBSITE_19
,
248 IDS_LOGIN_DEFAULT_USER_WEBSITE_20
,
249 IDS_LOGIN_DEFAULT_USER_WEBSITE_21
,
250 IDS_LOGIN_DEFAULT_USER_WEBSITE_22
,
251 IDS_LOGIN_DEFAULT_USER_WEBSITE_23
,
252 IDS_LOGIN_DEFAULT_USER_WEBSITE_24
,
253 IDS_LOGIN_DEFAULT_USER_WEBSITE_25
,
254 IDS_LOGIN_DEFAULT_USER_WEBSITE_26
,
255 IDS_LOGIN_DEFAULT_USER_WEBSITE_27
,
256 IDS_LOGIN_DEFAULT_USER_WEBSITE_28
,
257 IDS_LOGIN_DEFAULT_USER_WEBSITE_29
,
258 IDS_LOGIN_DEFAULT_USER_WEBSITE_30
,
259 IDS_LOGIN_DEFAULT_USER_WEBSITE_31
,
260 IDS_LOGIN_DEFAULT_USER_WEBSITE_32
,
263 const int kDefaultImagesCount
= arraysize(kDefaultImageResourceIDs
);
265 const int kFirstDefaultImageIndex
= 19;
267 // The order and the values of these constants are important for histograms
268 // of different Chrome OS versions to be merged smoothly.
269 const int kHistogramImageFromCamera
= 19;
270 const int kHistogramImageFromFile
= 20;
271 const int kHistogramImageOld
= 21;
272 const int kHistogramImageFromProfile
= 22;
273 const int kHistogramVideoFromCamera
= 23;
274 const int kHistogramVideoFromFile
= 24;
275 const int kHistogramImagesCount
= kDefaultImagesCount
+ 6;
277 int GetDefaultImageHistogramValue(int index
) {
278 DCHECK(index
>= 0 && index
< kDefaultImagesCount
);
279 // Create a gap in histogram values for
280 // [kHistogramImageFromCamera..kHistogramImageFromProfile] block to fit.
281 if (index
< kHistogramImageFromCamera
)
286 } // namespace chromeos