Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / components / user_manager / user_image / default_user_images.cc
1 // Copyright 2014 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 "components/user_manager/user_image/default_user_images.h"
6
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 "ui/base/l10n/l10n_util.h"
15 #include "ui/base/resource/resource_bundle.h"
16 #include "ui/chromeos/resources/grit/ui_chromeos_resources.h"
17 #include "ui/chromeos/strings/grit/ui_chromeos_strings.h"
18 #include "ui/gfx/image/image_skia.h"
19
20 namespace user_manager {
21
22 namespace {
23
24 const char kDefaultUrlPrefix[] = "chrome://theme/IDR_LOGIN_DEFAULT_USER_";
25 const char kZeroDefaultUrl[] = "chrome://theme/IDR_LOGIN_DEFAULT_USER";
26
27 // IDs of default user image descriptions.
28 const int kDefaultImageDescriptions[] = {
29     0,  // No description for deprecated user image 0.
30     0,  // No description for deprecated user image 1.
31     0,  // No description for deprecated user image 2.
32     0,  // No description for deprecated user image 3.
33     0,  // No description for deprecated user image 4.
34     0,  // No description for deprecated user image 5.
35     0,  // No description for deprecated user image 6.
36     0,  // No description for deprecated user image 7.
37     0,  // No description for deprecated user image 8.
38     0,  // No description for deprecated user image 9.
39     0,  // No description for deprecated user image 10.
40     0,  // No description for deprecated user image 11.
41     0,  // No description for deprecated user image 12.
42     0,  // No description for deprecated user image 13.
43     0,  // No description for deprecated user image 14.
44     0,  // No description for deprecated user image 15.
45     0,  // No description for deprecated user image 16.
46     0,  // No description for deprecated user image 17.
47     0,  // No description for deprecated user image 18.
48     IDS_LOGIN_DEFAULT_USER_DESC_19,
49     IDS_LOGIN_DEFAULT_USER_DESC_20,
50     IDS_LOGIN_DEFAULT_USER_DESC_21,
51     IDS_LOGIN_DEFAULT_USER_DESC_22,
52     IDS_LOGIN_DEFAULT_USER_DESC_23,
53     IDS_LOGIN_DEFAULT_USER_DESC_24,
54     IDS_LOGIN_DEFAULT_USER_DESC_25,
55     IDS_LOGIN_DEFAULT_USER_DESC_26,
56     IDS_LOGIN_DEFAULT_USER_DESC_27,
57     IDS_LOGIN_DEFAULT_USER_DESC_28,
58     IDS_LOGIN_DEFAULT_USER_DESC_29,
59     IDS_LOGIN_DEFAULT_USER_DESC_30,
60     IDS_LOGIN_DEFAULT_USER_DESC_31,
61     IDS_LOGIN_DEFAULT_USER_DESC_32,
62 };
63
64 // Returns a string consisting of the prefix specified and the index of the
65 // image if its valid.
66 std::string GetDefaultImageString(int index, const std::string& prefix) {
67   if (index < 0 || index >= kDefaultImagesCount) {
68     DCHECK(!base::SysInfo::IsRunningOnChromeOS());
69     return std::string();
70   }
71   return base::StringPrintf("%s%d", prefix.c_str(), index);
72 }
73
74 // Returns true if the string specified consists of the prefix and one of
75 // the default images indices. Returns the index of the image in |image_id|
76 // variable.
77 bool IsDefaultImageString(const std::string& s,
78                           const std::string& prefix,
79                           int* image_id) {
80   DCHECK(image_id);
81   if (!StartsWithASCII(s, prefix, true))
82     return false;
83
84   int image_index = -1;
85   if (base::StringToInt(base::StringPiece(s.begin() + prefix.length(), s.end()),
86                         &image_index)) {
87     if (image_index < 0 || image_index >= kDefaultImagesCount)
88       return false;
89     *image_id = image_index;
90     return true;
91   }
92
93   return false;
94 }
95 }  // namespace
96
97 std::string GetDefaultImageUrl(int index) {
98   if (index == 0)
99     return kZeroDefaultUrl;
100   return GetDefaultImageString(index, kDefaultUrlPrefix);
101 }
102
103 bool IsDefaultImageUrl(const std::string& url, int* image_id) {
104   if (url == kZeroDefaultUrl) {
105     *image_id = 0;
106     return true;
107   }
108   return IsDefaultImageString(url, kDefaultUrlPrefix, image_id);
109 }
110
111 const gfx::ImageSkia& GetDefaultImage(int index) {
112   DCHECK(index >= 0 && index < kDefaultImagesCount);
113   return *ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
114       kDefaultImageResourceIDs[index]);
115 }
116
117 base::string16 GetDefaultImageDescription(int index) {
118   DCHECK(index >= 0 && index < kDefaultImagesCount);
119   int string_id = kDefaultImageDescriptions[index];
120   if (string_id)
121     return l10n_util::GetStringUTF16(string_id);
122   else
123     return base::string16();
124 }
125
126 // Resource IDs of default user images.
127 const int kDefaultImageResourceIDs[] = {
128     IDR_LOGIN_DEFAULT_USER,
129     IDR_LOGIN_DEFAULT_USER_1,
130     IDR_LOGIN_DEFAULT_USER_2,
131     IDR_LOGIN_DEFAULT_USER_3,
132     IDR_LOGIN_DEFAULT_USER_4,
133     IDR_LOGIN_DEFAULT_USER_5,
134     IDR_LOGIN_DEFAULT_USER_6,
135     IDR_LOGIN_DEFAULT_USER_7,
136     IDR_LOGIN_DEFAULT_USER_8,
137     IDR_LOGIN_DEFAULT_USER_9,
138     IDR_LOGIN_DEFAULT_USER_10,
139     IDR_LOGIN_DEFAULT_USER_11,
140     IDR_LOGIN_DEFAULT_USER_12,
141     IDR_LOGIN_DEFAULT_USER_13,
142     IDR_LOGIN_DEFAULT_USER_14,
143     IDR_LOGIN_DEFAULT_USER_15,
144     IDR_LOGIN_DEFAULT_USER_16,
145     IDR_LOGIN_DEFAULT_USER_17,
146     IDR_LOGIN_DEFAULT_USER_18,
147     IDR_LOGIN_DEFAULT_USER_19,
148     IDR_LOGIN_DEFAULT_USER_20,
149     IDR_LOGIN_DEFAULT_USER_21,
150     IDR_LOGIN_DEFAULT_USER_22,
151     IDR_LOGIN_DEFAULT_USER_23,
152     IDR_LOGIN_DEFAULT_USER_24,
153     IDR_LOGIN_DEFAULT_USER_25,
154     IDR_LOGIN_DEFAULT_USER_26,
155     IDR_LOGIN_DEFAULT_USER_27,
156     IDR_LOGIN_DEFAULT_USER_28,
157     IDR_LOGIN_DEFAULT_USER_29,
158     IDR_LOGIN_DEFAULT_USER_30,
159     IDR_LOGIN_DEFAULT_USER_31,
160     IDR_LOGIN_DEFAULT_USER_32,
161 };
162
163 const int kDefaultImageAuthorIDs[] = {
164     IDS_LOGIN_DEFAULT_USER_AUTHOR,
165     IDS_LOGIN_DEFAULT_USER_AUTHOR_1,
166     IDS_LOGIN_DEFAULT_USER_AUTHOR_2,
167     IDS_LOGIN_DEFAULT_USER_AUTHOR_3,
168     IDS_LOGIN_DEFAULT_USER_AUTHOR_4,
169     IDS_LOGIN_DEFAULT_USER_AUTHOR_5,
170     IDS_LOGIN_DEFAULT_USER_AUTHOR_6,
171     IDS_LOGIN_DEFAULT_USER_AUTHOR_7,
172     IDS_LOGIN_DEFAULT_USER_AUTHOR_8,
173     IDS_LOGIN_DEFAULT_USER_AUTHOR_9,
174     IDS_LOGIN_DEFAULT_USER_AUTHOR_10,
175     IDS_LOGIN_DEFAULT_USER_AUTHOR_11,
176     IDS_LOGIN_DEFAULT_USER_AUTHOR_12,
177     IDS_LOGIN_DEFAULT_USER_AUTHOR_13,
178     IDS_LOGIN_DEFAULT_USER_AUTHOR_14,
179     IDS_LOGIN_DEFAULT_USER_AUTHOR_15,
180     IDS_LOGIN_DEFAULT_USER_AUTHOR_16,
181     IDS_LOGIN_DEFAULT_USER_AUTHOR_17,
182     IDS_LOGIN_DEFAULT_USER_AUTHOR_18,
183     IDS_LOGIN_DEFAULT_USER_AUTHOR_19,
184     IDS_LOGIN_DEFAULT_USER_AUTHOR_20,
185     IDS_LOGIN_DEFAULT_USER_AUTHOR_21,
186     IDS_LOGIN_DEFAULT_USER_AUTHOR_22,
187     IDS_LOGIN_DEFAULT_USER_AUTHOR_23,
188     IDS_LOGIN_DEFAULT_USER_AUTHOR_24,
189     IDS_LOGIN_DEFAULT_USER_AUTHOR_25,
190     IDS_LOGIN_DEFAULT_USER_AUTHOR_26,
191     IDS_LOGIN_DEFAULT_USER_AUTHOR_27,
192     IDS_LOGIN_DEFAULT_USER_AUTHOR_28,
193     IDS_LOGIN_DEFAULT_USER_AUTHOR_29,
194     IDS_LOGIN_DEFAULT_USER_AUTHOR_30,
195     IDS_LOGIN_DEFAULT_USER_AUTHOR_31,
196     IDS_LOGIN_DEFAULT_USER_AUTHOR_32,
197 };
198
199 const int kDefaultImageWebsiteIDs[] = {
200     IDS_LOGIN_DEFAULT_USER_WEBSITE,
201     IDS_LOGIN_DEFAULT_USER_WEBSITE_1,
202     IDS_LOGIN_DEFAULT_USER_WEBSITE_2,
203     IDS_LOGIN_DEFAULT_USER_WEBSITE_3,
204     IDS_LOGIN_DEFAULT_USER_WEBSITE_4,
205     IDS_LOGIN_DEFAULT_USER_WEBSITE_5,
206     IDS_LOGIN_DEFAULT_USER_WEBSITE_6,
207     IDS_LOGIN_DEFAULT_USER_WEBSITE_7,
208     IDS_LOGIN_DEFAULT_USER_WEBSITE_8,
209     IDS_LOGIN_DEFAULT_USER_WEBSITE_9,
210     IDS_LOGIN_DEFAULT_USER_WEBSITE_10,
211     IDS_LOGIN_DEFAULT_USER_WEBSITE_11,
212     IDS_LOGIN_DEFAULT_USER_WEBSITE_12,
213     IDS_LOGIN_DEFAULT_USER_WEBSITE_13,
214     IDS_LOGIN_DEFAULT_USER_WEBSITE_14,
215     IDS_LOGIN_DEFAULT_USER_WEBSITE_15,
216     IDS_LOGIN_DEFAULT_USER_WEBSITE_16,
217     IDS_LOGIN_DEFAULT_USER_WEBSITE_17,
218     IDS_LOGIN_DEFAULT_USER_WEBSITE_18,
219     IDS_LOGIN_DEFAULT_USER_WEBSITE_19,
220     IDS_LOGIN_DEFAULT_USER_WEBSITE_20,
221     IDS_LOGIN_DEFAULT_USER_WEBSITE_21,
222     IDS_LOGIN_DEFAULT_USER_WEBSITE_22,
223     IDS_LOGIN_DEFAULT_USER_WEBSITE_23,
224     IDS_LOGIN_DEFAULT_USER_WEBSITE_24,
225     IDS_LOGIN_DEFAULT_USER_WEBSITE_25,
226     IDS_LOGIN_DEFAULT_USER_WEBSITE_26,
227     IDS_LOGIN_DEFAULT_USER_WEBSITE_27,
228     IDS_LOGIN_DEFAULT_USER_WEBSITE_28,
229     IDS_LOGIN_DEFAULT_USER_WEBSITE_29,
230     IDS_LOGIN_DEFAULT_USER_WEBSITE_30,
231     IDS_LOGIN_DEFAULT_USER_WEBSITE_31,
232     IDS_LOGIN_DEFAULT_USER_WEBSITE_32,
233 };
234
235 const int kDefaultImagesCount = arraysize(kDefaultImageResourceIDs);
236
237 const int kFirstDefaultImageIndex = 19;
238
239 // The order and the values of these constants are important for histograms
240 // of different Chrome OS versions to be merged smoothly.
241 const int kHistogramImageFromCamera = 19;
242 const int kHistogramImageFromFile = 20;
243 const int kHistogramImageOld = 21;
244 const int kHistogramImageFromProfile = 22;
245 const int kHistogramVideoFromCamera = 23;
246 const int kHistogramVideoFromFile = 24;
247 const int kHistogramImagesCount = kDefaultImagesCount + 6;
248
249 int GetDefaultImageHistogramValue(int index) {
250   DCHECK(index >= 0 && index < kDefaultImagesCount);
251   // Create a gap in histogram values for
252   // [kHistogramImageFromCamera..kHistogramImageFromProfile] block to fit.
253   if (index < kHistogramImageFromCamera)
254     return index;
255   return index + 6;
256 }
257
258 }  // namespace user_manager