- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / login / default_user_images.cc
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.
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/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"
19
20 namespace chromeos {
21
22 namespace {
23
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";
27
28 const char* kOldDefaultImageNames[] = {
29   "default:gray",
30   "default:green",
31   "default:blue",
32   "default:yellow",
33   "default:red",
34 };
35
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,
71 };
72
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());
78     return std::string();
79   }
80   return base::StringPrintf("%s%d", prefix.c_str(), index);
81 }
82
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|
85 // variable.
86 bool IsDefaultImageString(const std::string& s,
87                           const std::string& prefix,
88                           int* image_id) {
89   DCHECK(image_id);
90   if (!StartsWithASCII(s, prefix, true))
91     return false;
92
93   int image_index = -1;
94   if (base::StringToInt(base::StringPiece(s.begin() + prefix.length(),
95                                           s.end()),
96                         &image_index)) {
97     if (image_index < 0 || image_index >= kDefaultImagesCount)
98       return false;
99     *image_id = image_index;
100     return true;
101   }
102
103   return false;
104 }
105 }  // namespace
106
107 std::string GetDefaultImagePath(int index) {
108   return GetDefaultImageString(index, kDefaultPathPrefix);
109 }
110
111 bool IsDefaultImagePath(const std::string& path, int* image_id) {
112   if (IsDefaultImageString(path, kDefaultPathPrefix, image_id))
113     return true;
114
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);
119       return true;
120     }
121   }
122   return false;
123 }
124
125 std::string GetDefaultImageUrl(int index) {
126   if (index == 0)
127     return kZeroDefaultUrl;
128   return GetDefaultImageString(index, kDefaultUrlPrefix);
129 }
130
131 bool IsDefaultImageUrl(const std::string& url, int* image_id) {
132   if (url == kZeroDefaultUrl) {
133     *image_id = 0;
134     return true;
135   }
136   return IsDefaultImageString(url, kDefaultUrlPrefix, image_id);
137 }
138
139 const gfx::ImageSkia& GetDefaultImage(int index) {
140   DCHECK(index >= 0 && index < kDefaultImagesCount);
141   return *ResourceBundle::GetSharedInstance().
142       GetImageSkiaNamed(kDefaultImageResourceIDs[index]);
143 }
144
145 string16 GetDefaultImageDescription(int index) {
146   DCHECK(index >= 0 && index < kDefaultImagesCount);
147   int string_id = kDefaultImageDescriptions[index];
148   if (string_id)
149     return l10n_util::GetStringUTF16(string_id);
150   else
151     return string16();
152 }
153
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,
189 };
190
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,
225 };
226
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,
261 };
262
263 const int kDefaultImagesCount = arraysize(kDefaultImageResourceIDs);
264
265 const int kFirstDefaultImageIndex = 19;
266
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;
276
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)
282     return index;
283   return index + 6;
284 }
285
286 }  // namespace chromeos