OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.h" | 5 #include "chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 } | 137 } |
138 | 138 |
139 void UserImageScreenHandler::OnProfileImageAbsent() { | 139 void UserImageScreenHandler::OnProfileImageAbsent() { |
140 profile_picture_absent_ = true; | 140 profile_picture_absent_ = true; |
141 if (page_is_ready()) { | 141 if (page_is_ready()) { |
142 scoped_ptr<base::Value> null_value(base::Value::CreateNullValue()); | 142 scoped_ptr<base::Value> null_value(base::Value::CreateNullValue()); |
143 CallJS("oobe.UserImageScreen.setProfileImage", *null_value); | 143 CallJS("oobe.UserImageScreen.setProfileImage", *null_value); |
144 } | 144 } |
145 } | 145 } |
146 | 146 |
147 void UserImageScreenHandler::HandleGetImages(const base::ListValue* args) { | 147 void UserImageScreenHandler::HandleGetImages() { |
148 DCHECK(args && !args->GetSize()); | |
149 | |
150 base::ListValue image_urls; | 148 base::ListValue image_urls; |
151 for (int i = kFirstDefaultImageIndex; i < kDefaultImagesCount; ++i) { | 149 for (int i = kFirstDefaultImageIndex; i < kDefaultImagesCount; ++i) { |
152 scoped_ptr<base::DictionaryValue> image_data(new base::DictionaryValue); | 150 scoped_ptr<base::DictionaryValue> image_data(new base::DictionaryValue); |
153 image_data->SetString("url", GetDefaultImageUrl(i)); | 151 image_data->SetString("url", GetDefaultImageUrl(i)); |
154 image_data->SetString( | 152 image_data->SetString( |
155 "author", l10n_util::GetStringUTF16(kDefaultImageAuthorIDs[i])); | 153 "author", l10n_util::GetStringUTF16(kDefaultImageAuthorIDs[i])); |
156 image_data->SetString( | 154 image_data->SetString( |
157 "website", l10n_util::GetStringUTF16(kDefaultImageWebsiteIDs[i])); | 155 "website", l10n_util::GetStringUTF16(kDefaultImageWebsiteIDs[i])); |
158 image_data->SetString("title", GetDefaultImageDescription(i)); | 156 image_data->SetString("title", GetDefaultImageDescription(i)); |
159 image_urls.Append(image_data.release()); | 157 image_urls.Append(image_data.release()); |
160 } | 158 } |
161 CallJS("oobe.UserImageScreen.setDefaultImages", image_urls); | 159 CallJS("oobe.UserImageScreen.setDefaultImages", image_urls); |
162 | 160 |
163 if (selected_image_ != User::kInvalidImageIndex) | 161 if (selected_image_ != User::kInvalidImageIndex) |
164 SelectImage(selected_image_); | 162 SelectImage(selected_image_); |
165 | 163 |
166 if (profile_picture_data_url_ != chrome::kAboutBlankURL) | 164 if (profile_picture_data_url_ != chrome::kAboutBlankURL) |
167 SendProfileImage(profile_picture_data_url_); | 165 SendProfileImage(profile_picture_data_url_); |
168 else if (profile_picture_absent_) | 166 else if (profile_picture_absent_) |
169 OnProfileImageAbsent(); | 167 OnProfileImageAbsent(); |
170 } | 168 } |
171 | 169 |
172 void UserImageScreenHandler::HandlePhotoTaken(const base::ListValue* args) { | 170 void UserImageScreenHandler::HandlePhotoTaken(const std::string& image_url) { |
173 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 171 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
174 std::string image_url; | |
175 if (!args || args->GetSize() != 1 || !args->GetString(0, &image_url)) | |
176 NOTREACHED(); | |
177 DCHECK(!image_url.empty()); | |
178 | |
179 std::string mime_type, charset, raw_data; | 172 std::string mime_type, charset, raw_data; |
180 if (!net::DataURL::Parse(GURL(image_url), &mime_type, &charset, &raw_data)) | 173 if (!net::DataURL::Parse(GURL(image_url), &mime_type, &charset, &raw_data)) |
181 NOTREACHED(); | 174 NOTREACHED(); |
182 DCHECK_EQ("image/png", mime_type); | 175 DCHECK_EQ("image/png", mime_type); |
183 | 176 |
184 user_photo_ = gfx::ImageSkia(); | 177 user_photo_ = gfx::ImageSkia(); |
185 user_photo_data_url_ = image_url; | 178 user_photo_data_url_ = image_url; |
186 | 179 |
187 if (image_decoder_.get()) | 180 if (image_decoder_.get()) |
188 image_decoder_->set_delegate(NULL); | 181 image_decoder_->set_delegate(NULL); |
189 image_decoder_ = new ImageDecoder(this, raw_data, | 182 image_decoder_ = new ImageDecoder(this, raw_data, |
190 ImageDecoder::DEFAULT_CODEC); | 183 ImageDecoder::DEFAULT_CODEC); |
191 scoped_refptr<base::MessageLoopProxy> task_runner = | 184 scoped_refptr<base::MessageLoopProxy> task_runner = |
192 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI); | 185 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI); |
193 image_decoder_->Start(task_runner); | 186 image_decoder_->Start(task_runner); |
194 } | 187 } |
195 | 188 |
196 void UserImageScreenHandler::HandleCheckCameraPresence( | 189 void UserImageScreenHandler::HandleCheckCameraPresence() { |
197 const base::ListValue* args) { | |
198 DCHECK(args->empty()); | |
199 CheckCameraPresence(); | 190 CheckCameraPresence(); |
200 } | 191 } |
201 | 192 |
202 void UserImageScreenHandler::HandleSelectImage(const base::ListValue* args) { | 193 void UserImageScreenHandler::HandleSelectImage(const std::string& image_url, |
203 std::string image_url; | 194 const std::string& image_type) { |
204 std::string image_type; | |
205 if (!args || | |
206 args->GetSize() != 2 || | |
207 !args->GetString(0, &image_url) || | |
208 !args->GetString(1, &image_type)) { | |
209 NOTREACHED(); | |
210 return; | |
211 } | |
212 if (image_url.empty()) | 195 if (image_url.empty()) |
213 return; | 196 return; |
214 | 197 |
215 int user_image_index = User::kInvalidImageIndex; | 198 int user_image_index = User::kInvalidImageIndex; |
216 if (image_type == "default" && | 199 if (image_type == "default" && |
217 IsDefaultImageUrl(image_url, &user_image_index)) { | 200 IsDefaultImageUrl(image_url, &user_image_index)) { |
218 selected_image_ = user_image_index; | 201 selected_image_ = user_image_index; |
219 } else if (image_type == "camera") { | 202 } else if (image_type == "camera") { |
220 selected_image_ = User::kExternalImageIndex; | 203 selected_image_ = User::kExternalImageIndex; |
221 } else if (image_type == "profile") { | 204 } else if (image_type == "profile") { |
222 selected_image_ = User::kProfileImageIndex; | 205 selected_image_ = User::kProfileImageIndex; |
223 } else { | 206 } else { |
224 NOTREACHED() << "Unexpected image type: " << image_type; | 207 NOTREACHED() << "Unexpected image type: " << image_type; |
225 } | 208 } |
226 } | 209 } |
227 | 210 |
228 void UserImageScreenHandler::HandleImageAccepted(const base::ListValue* args) { | 211 void UserImageScreenHandler::HandleImageAccepted() { |
229 DCHECK(args && args->empty()); | |
230 if (!screen_) | 212 if (!screen_) |
231 return; | 213 return; |
232 switch (selected_image_) { | 214 switch (selected_image_) { |
233 case User::kExternalImageIndex: | 215 case User::kExternalImageIndex: |
234 // Photo decoding may not have been finished yet. | 216 // Photo decoding may not have been finished yet. |
235 if (user_photo_.isNull()) | 217 if (user_photo_.isNull()) |
236 accept_photo_after_decoding_ = true; | 218 accept_photo_after_decoding_ = true; |
237 else | 219 else |
238 screen_->OnPhotoTaken(user_photo_); | 220 screen_->OnPhotoTaken(user_photo_); |
239 break; | 221 break; |
240 | 222 |
241 case User::kProfileImageIndex: | 223 case User::kProfileImageIndex: |
242 screen_->OnProfileImageSelected(); | 224 screen_->OnProfileImageSelected(); |
243 break; | 225 break; |
244 | 226 |
245 default: | 227 default: |
246 DCHECK(selected_image_ >= 0 && selected_image_ < kDefaultImagesCount); | 228 DCHECK(selected_image_ >= 0 && selected_image_ < kDefaultImagesCount); |
247 screen_->OnDefaultImageSelected(selected_image_); | 229 screen_->OnDefaultImageSelected(selected_image_); |
248 } | 230 } |
249 } | 231 } |
250 | 232 |
251 void UserImageScreenHandler::HandleScreenShown(const base::ListValue* args) { | 233 void UserImageScreenHandler::HandleScreenShown() { |
252 DCHECK(args && args->empty()); | |
253 DCHECK(!screen_show_time_.is_null()); | 234 DCHECK(!screen_show_time_.is_null()); |
254 | 235 |
255 base::TimeDelta delta = base::Time::Now() - screen_show_time_; | 236 base::TimeDelta delta = base::Time::Now() - screen_show_time_; |
256 VLOG(1) << "Screen load time: " << delta.InSecondsF(); | 237 VLOG(1) << "Screen load time: " << delta.InSecondsF(); |
257 UMA_HISTOGRAM_TIMES("UserImage.ScreenIsShownTime", delta); | 238 UMA_HISTOGRAM_TIMES("UserImage.ScreenIsShownTime", delta); |
258 } | 239 } |
259 | 240 |
260 void UserImageScreenHandler::OnCameraPresenceCheckDone() { | 241 void UserImageScreenHandler::OnCameraPresenceCheckDone() { |
261 base::FundamentalValue present_value( | 242 base::FundamentalValue present_value( |
262 CameraDetector::camera_presence() == CameraDetector::kCameraPresent); | 243 CameraDetector::camera_presence() == CameraDetector::kCameraPresent); |
(...skipping 11 matching lines...) Expand all Loading... |
274 void UserImageScreenHandler::OnDecodeImageFailed(const ImageDecoder* decoder) { | 255 void UserImageScreenHandler::OnDecodeImageFailed(const ImageDecoder* decoder) { |
275 NOTREACHED() << "Failed to decode PNG image from WebUI"; | 256 NOTREACHED() << "Failed to decode PNG image from WebUI"; |
276 } | 257 } |
277 | 258 |
278 void UserImageScreenHandler::SetProfilePictureEnabled(bool enabled) { | 259 void UserImageScreenHandler::SetProfilePictureEnabled(bool enabled) { |
279 base::FundamentalValue present_value(enabled); | 260 base::FundamentalValue present_value(enabled); |
280 CallJS("oobe.UserImageScreen.setProfilePictureEnabled", present_value); | 261 CallJS("oobe.UserImageScreen.setProfilePictureEnabled", present_value); |
281 } | 262 } |
282 | 263 |
283 } // namespace chromeos | 264 } // namespace chromeos |
OLD | NEW |