| 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 |