OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/options/chromeos/change_picture_options_handle
r.h" | 5 #include "chrome/browser/ui/webui/settings/chromeos/change_picture_handler.h" |
6 | 6 |
7 #include "ash/audio/sounds.h" | 7 #include "ash/audio/sounds.h" |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/bind_helpers.h" | 9 #include "base/bind_helpers.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
11 #include "base/metrics/histogram.h" | 11 #include "base/metrics/histogram.h" |
12 #include "base/path_service.h" | 12 #include "base/path_service.h" |
13 #include "base/strings/string_util.h" | 13 #include "base/strings/string_util.h" |
14 #include "base/strings/utf_string_conversions.h" | 14 #include "base/strings/utf_string_conversions.h" |
15 #include "base/values.h" | 15 #include "base/values.h" |
(...skipping 22 matching lines...) Expand all Loading... |
38 #include "net/base/data_url.h" | 38 #include "net/base/data_url.h" |
39 #include "ui/base/l10n/l10n_util.h" | 39 #include "ui/base/l10n/l10n_util.h" |
40 #include "ui/base/resource/resource_bundle.h" | 40 #include "ui/base/resource/resource_bundle.h" |
41 #include "ui/base/webui/web_ui_util.h" | 41 #include "ui/base/webui/web_ui_util.h" |
42 #include "ui/views/widget/widget.h" | 42 #include "ui/views/widget/widget.h" |
43 #include "url/gurl.h" | 43 #include "url/gurl.h" |
44 | 44 |
45 using content::BrowserThread; | 45 using content::BrowserThread; |
46 | 46 |
47 namespace chromeos { | 47 namespace chromeos { |
48 namespace options { | 48 namespace settings { |
49 | 49 |
50 namespace { | 50 namespace { |
51 | 51 |
52 // Returns info about extensions for files we support as user images. | 52 // Returns info about extensions for files we support as user images. |
53 ui::SelectFileDialog::FileTypeInfo GetUserImageFileTypeInfo() { | 53 ui::SelectFileDialog::FileTypeInfo GetUserImageFileTypeInfo() { |
54 ui::SelectFileDialog::FileTypeInfo file_type_info; | 54 ui::SelectFileDialog::FileTypeInfo file_type_info; |
55 file_type_info.extensions.resize(1); | 55 file_type_info.extensions.resize(1); |
56 | 56 |
57 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("bmp")); | 57 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("bmp")); |
58 | 58 |
(...skipping 10 matching lines...) Expand all Loading... |
69 l10n_util::GetStringUTF16(IDS_IMAGE_FILES); | 69 l10n_util::GetStringUTF16(IDS_IMAGE_FILES); |
70 | 70 |
71 return file_type_info; | 71 return file_type_info; |
72 } | 72 } |
73 | 73 |
74 // Time histogram suffix for profile image download. | 74 // Time histogram suffix for profile image download. |
75 const char kProfileDownloadReason[] = "Preferences"; | 75 const char kProfileDownloadReason[] = "Preferences"; |
76 | 76 |
77 } // namespace | 77 } // namespace |
78 | 78 |
79 ChangePictureOptionsHandler::ChangePictureOptionsHandler() | 79 ChangePictureHandler::ChangePictureHandler() |
80 : previous_image_url_(url::kAboutBlankURL), | 80 : previous_image_url_(url::kAboutBlankURL), |
81 previous_image_index_(user_manager::User::USER_IMAGE_INVALID) { | 81 previous_image_index_(user_manager::User::USER_IMAGE_INVALID), |
| 82 camera_observer_(this) { |
82 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED, | 83 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED, |
83 content::NotificationService::AllSources()); | 84 content::NotificationService::AllSources()); |
84 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATE_FAILED, | 85 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_IMAGE_UPDATE_FAILED, |
85 content::NotificationService::AllSources()); | 86 content::NotificationService::AllSources()); |
86 registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, | 87 registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, |
87 content::NotificationService::AllSources()); | 88 content::NotificationService::AllSources()); |
88 | 89 |
89 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); | 90 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
90 media::SoundsManager* manager = media::SoundsManager::Get(); | 91 media::SoundsManager* manager = media::SoundsManager::Get(); |
91 manager->Initialize(SOUND_OBJECT_DELETE, | 92 manager->Initialize(SOUND_OBJECT_DELETE, |
92 bundle.GetRawDataResource(IDR_SOUND_OBJECT_DELETE_WAV)); | 93 bundle.GetRawDataResource(IDR_SOUND_OBJECT_DELETE_WAV)); |
93 manager->Initialize(SOUND_CAMERA_SNAP, | 94 manager->Initialize(SOUND_CAMERA_SNAP, |
94 bundle.GetRawDataResource(IDR_SOUND_CAMERA_SNAP_WAV)); | 95 bundle.GetRawDataResource(IDR_SOUND_CAMERA_SNAP_WAV)); |
95 } | 96 } |
96 | 97 |
97 ChangePictureOptionsHandler::~ChangePictureOptionsHandler() { | 98 ChangePictureHandler::~ChangePictureHandler() { |
98 CameraPresenceNotifier::GetInstance()->RemoveObserver(this); | |
99 if (select_file_dialog_.get()) | 99 if (select_file_dialog_.get()) |
100 select_file_dialog_->ListenerDestroyed(); | 100 select_file_dialog_->ListenerDestroyed(); |
101 } | 101 } |
102 | 102 |
103 void ChangePictureOptionsHandler::GetLocalizedValues( | 103 void ChangePictureHandler::RegisterMessages() { |
104 base::DictionaryValue* localized_strings) { | 104 web_ui()->RegisterMessageCallback( |
105 DCHECK(localized_strings); | 105 "chooseFile", base::Bind(&ChangePictureHandler::HandleChooseFile, |
106 localized_strings->SetString("changePicturePage", | 106 base::Unretained(this))); |
107 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_DIALOG_TITLE)); | 107 web_ui()->RegisterMessageCallback( |
108 localized_strings->SetString("changePicturePageDescription", | 108 "takePhoto", base::Bind(&ChangePictureHandler::HandleTakePhoto, |
109 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_DIALOG_TEXT)); | 109 base::Unretained(this))); |
110 localized_strings->SetString("takePhoto", | 110 web_ui()->RegisterMessageCallback( |
111 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_TAKE_PHOTO)); | 111 "photoTaken", base::Bind(&ChangePictureHandler::HandlePhotoTaken, |
112 localized_strings->SetString("discardPhoto", | 112 base::Unretained(this))); |
113 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_DISCARD_PHOTO)); | 113 web_ui()->RegisterMessageCallback( |
114 localized_strings->SetString("flipPhoto", | 114 "discardPhoto", base::Bind(&ChangePictureHandler::HandleDiscardPhoto, |
115 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_FLIP_PHOTO)); | 115 base::Unretained(this))); |
116 localized_strings->SetString("chooseFile", | 116 web_ui()->RegisterMessageCallback( |
117 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_CHOOSE_FILE)); | 117 "onChangePicturePageInitialized", |
118 localized_strings->SetString("profilePhoto", | 118 base::Bind(&ChangePictureHandler::HandlePageInitialized, |
119 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_PROFILE_PHOTO)); | 119 base::Unretained(this))); |
120 localized_strings->SetString("profilePhotoLoading", | 120 web_ui()->RegisterMessageCallback( |
121 l10n_util::GetStringUTF16( | 121 "selectImage", base::Bind(&ChangePictureHandler::HandleSelectImage, |
122 IDS_OPTIONS_CHANGE_PICTURE_PROFILE_LOADING_PHOTO)); | 122 base::Unretained(this))); |
123 localized_strings->SetString("previewAltText", | |
124 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_PREVIEW_ALT)); | |
125 localized_strings->SetString("authorCredit", | |
126 l10n_util::GetStringUTF16(IDS_OPTIONS_SET_WALLPAPER_AUTHOR_TEXT)); | |
127 localized_strings->SetString("photoFromCamera", | |
128 l10n_util::GetStringUTF16(IDS_OPTIONS_CHANGE_PICTURE_PHOTO_FROM_CAMERA)); | |
129 localized_strings->SetString("photoFlippedAccessibleText", | |
130 l10n_util::GetStringUTF16(IDS_OPTIONS_PHOTO_FLIP_ACCESSIBLE_TEXT)); | |
131 localized_strings->SetString("photoFlippedBackAccessibleText", | |
132 l10n_util::GetStringUTF16(IDS_OPTIONS_PHOTO_FLIPBACK_ACCESSIBLE_TEXT)); | |
133 localized_strings->SetString("photoCaptureAccessibleText", | |
134 l10n_util::GetStringUTF16(IDS_OPTIONS_PHOTO_CAPTURE_ACCESSIBLE_TEXT)); | |
135 localized_strings->SetString("photoDiscardAccessibleText", | |
136 l10n_util::GetStringUTF16(IDS_OPTIONS_PHOTO_DISCARD_ACCESSIBLE_TEXT)); | |
137 } | 123 } |
138 | 124 |
139 void ChangePictureOptionsHandler::RegisterMessages() { | 125 void ChangePictureHandler::SendDefaultImages() { |
140 web_ui()->RegisterMessageCallback("chooseFile", | |
141 base::Bind(&ChangePictureOptionsHandler::HandleChooseFile, | |
142 base::Unretained(this))); | |
143 web_ui()->RegisterMessageCallback("takePhoto", | |
144 base::Bind(&ChangePictureOptionsHandler::HandleTakePhoto, | |
145 base::Unretained(this))); | |
146 web_ui()->RegisterMessageCallback("photoTaken", | |
147 base::Bind(&ChangePictureOptionsHandler::HandlePhotoTaken, | |
148 base::Unretained(this))); | |
149 web_ui()->RegisterMessageCallback("discardPhoto", | |
150 base::Bind(&ChangePictureOptionsHandler::HandleDiscardPhoto, | |
151 base::Unretained(this))); | |
152 web_ui()->RegisterMessageCallback("onChangePicturePageShown", | |
153 base::Bind(&ChangePictureOptionsHandler::HandlePageShown, | |
154 base::Unretained(this))); | |
155 web_ui()->RegisterMessageCallback("onChangePicturePageHidden", | |
156 base::Bind(&ChangePictureOptionsHandler::HandlePageHidden, | |
157 base::Unretained(this))); | |
158 web_ui()->RegisterMessageCallback("onChangePicturePageInitialized", | |
159 base::Bind(&ChangePictureOptionsHandler::HandlePageInitialized, | |
160 base::Unretained(this))); | |
161 web_ui()->RegisterMessageCallback("selectImage", | |
162 base::Bind(&ChangePictureOptionsHandler::HandleSelectImage, | |
163 base::Unretained(this))); | |
164 } | |
165 | |
166 void ChangePictureOptionsHandler::SendDefaultImages() { | |
167 base::ListValue image_urls; | 126 base::ListValue image_urls; |
168 for (int i = default_user_image::kFirstDefaultImageIndex; | 127 for (int i = default_user_image::kFirstDefaultImageIndex; |
169 i < default_user_image::kDefaultImagesCount; ++i) { | 128 i < default_user_image::kDefaultImagesCount; ++i) { |
170 scoped_ptr<base::DictionaryValue> image_data(new base::DictionaryValue); | 129 scoped_ptr<base::DictionaryValue> image_data(new base::DictionaryValue); |
171 image_data->SetString("url", default_user_image::GetDefaultImageUrl(i)); | 130 image_data->SetString("url", default_user_image::GetDefaultImageUrl(i)); |
172 image_data->SetString("author", | 131 image_data->SetString("author", |
173 l10n_util::GetStringUTF16( | 132 l10n_util::GetStringUTF16( |
174 default_user_image::kDefaultImageAuthorIDs[i])); | 133 default_user_image::kDefaultImageAuthorIDs[i])); |
175 image_data->SetString("website", | 134 image_data->SetString("website", |
176 l10n_util::GetStringUTF16( | 135 l10n_util::GetStringUTF16( |
177 default_user_image::kDefaultImageWebsiteIDs[i])); | 136 default_user_image::kDefaultImageWebsiteIDs[i])); |
178 image_data->SetString("title", | 137 image_data->SetString("title", |
179 default_user_image::GetDefaultImageDescription(i)); | 138 default_user_image::GetDefaultImageDescription(i)); |
180 image_urls.Append(image_data.release()); | 139 image_urls.Append(image_data.release()); |
181 } | 140 } |
182 web_ui()->CallJavascriptFunction("ChangePictureOptions.setDefaultImages", | 141 web_ui()->CallJavascriptFunction( |
183 image_urls); | 142 "settings.ChangePicturePage.receiveDefaultImages", image_urls); |
184 } | 143 } |
185 | 144 |
186 void ChangePictureOptionsHandler::HandleChooseFile( | 145 void ChangePictureHandler::HandleChooseFile(const base::ListValue* args) { |
187 const base::ListValue* args) { | |
188 DCHECK(args && args->empty()); | 146 DCHECK(args && args->empty()); |
189 select_file_dialog_ = ui::SelectFileDialog::Create( | 147 select_file_dialog_ = ui::SelectFileDialog::Create( |
190 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); | 148 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); |
191 | 149 |
192 base::FilePath downloads_path; | 150 base::FilePath downloads_path; |
193 if (!PathService::Get(chrome::DIR_DEFAULT_DOWNLOADS, &downloads_path)) { | 151 if (!PathService::Get(chrome::DIR_DEFAULT_DOWNLOADS, &downloads_path)) { |
194 NOTREACHED(); | 152 NOTREACHED(); |
195 return; | 153 return; |
196 } | 154 } |
197 | 155 |
198 // Static so we initialize it only once. | 156 // Static so we initialize it only once. |
199 CR_DEFINE_STATIC_LOCAL(ui::SelectFileDialog::FileTypeInfo, file_type_info, | 157 CR_DEFINE_STATIC_LOCAL(ui::SelectFileDialog::FileTypeInfo, file_type_info, |
200 (GetUserImageFileTypeInfo())); | 158 (GetUserImageFileTypeInfo())); |
201 | 159 |
202 select_file_dialog_->SelectFile( | 160 select_file_dialog_->SelectFile( |
203 ui::SelectFileDialog::SELECT_OPEN_FILE, | 161 ui::SelectFileDialog::SELECT_OPEN_FILE, |
204 l10n_util::GetStringUTF16(IDS_DOWNLOAD_TITLE), | 162 l10n_util::GetStringUTF16(IDS_DOWNLOAD_TITLE), downloads_path, |
205 downloads_path, | 163 &file_type_info, 0, FILE_PATH_LITERAL(""), GetBrowserWindow(), NULL); |
206 &file_type_info, | |
207 0, | |
208 FILE_PATH_LITERAL(""), | |
209 GetBrowserWindow(), | |
210 NULL); | |
211 } | 164 } |
212 | 165 |
213 void ChangePictureOptionsHandler::HandleTakePhoto( | 166 void ChangePictureHandler::HandleTakePhoto(const base::ListValue* args) { |
214 const base::ListValue* args) { | |
215 DCHECK(args->empty()); | 167 DCHECK(args->empty()); |
216 ash::PlaySystemSoundIfSpokenFeedback(SOUND_CAMERA_SNAP); | 168 ash::PlaySystemSoundIfSpokenFeedback(SOUND_CAMERA_SNAP); |
217 } | 169 } |
218 | 170 |
219 void ChangePictureOptionsHandler::HandleDiscardPhoto( | 171 void ChangePictureHandler::HandleDiscardPhoto(const base::ListValue* args) { |
220 const base::ListValue* args) { | |
221 DCHECK(args->empty()); | 172 DCHECK(args->empty()); |
222 ash::PlaySystemSoundIfSpokenFeedback(SOUND_OBJECT_DELETE); | 173 ash::PlaySystemSoundIfSpokenFeedback(SOUND_OBJECT_DELETE); |
223 } | 174 } |
224 | 175 |
225 void ChangePictureOptionsHandler::HandlePhotoTaken( | 176 void ChangePictureHandler::HandlePhotoTaken(const base::ListValue* args) { |
226 const base::ListValue* args) { | |
227 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 177 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
228 std::string image_url; | 178 std::string image_url; |
229 if (!args || args->GetSize() != 1 || !args->GetString(0, &image_url)) | 179 if (!args || args->GetSize() != 1 || !args->GetString(0, &image_url)) |
230 NOTREACHED(); | 180 NOTREACHED(); |
231 DCHECK(!image_url.empty()); | 181 DCHECK(!image_url.empty()); |
232 | 182 |
233 std::string mime_type, charset, raw_data; | 183 std::string mime_type, charset, raw_data; |
234 if (!net::DataURL::Parse(GURL(image_url), &mime_type, &charset, &raw_data)) | 184 if (!net::DataURL::Parse(GURL(image_url), &mime_type, &charset, &raw_data)) |
235 NOTREACHED(); | 185 NOTREACHED(); |
236 DCHECK_EQ("image/png", mime_type); | 186 DCHECK_EQ("image/png", mime_type); |
237 | 187 |
238 user_photo_ = gfx::ImageSkia(); | 188 user_photo_ = gfx::ImageSkia(); |
239 user_photo_data_url_ = image_url; | 189 user_photo_data_url_ = image_url; |
240 | 190 |
241 ImageDecoder::Cancel(this); | 191 ImageDecoder::Cancel(this); |
242 ImageDecoder::Start(this, raw_data); | 192 ImageDecoder::Start(this, raw_data); |
243 } | 193 } |
244 | 194 |
245 void ChangePictureOptionsHandler::HandlePageInitialized( | 195 void ChangePictureHandler::HandlePageInitialized(const base::ListValue* args) { |
246 const base::ListValue* args) { | |
247 DCHECK(args && args->empty()); | 196 DCHECK(args && args->empty()); |
| 197 |
| 198 CameraPresenceNotifier* camera = CameraPresenceNotifier::GetInstance(); |
| 199 if (!camera_observer_.IsObserving(camera)) |
| 200 camera_observer_.Add(camera); |
| 201 |
248 SendDefaultImages(); | 202 SendDefaultImages(); |
| 203 SendSelectedImage(); |
| 204 UpdateProfileImage(); |
249 } | 205 } |
250 | 206 |
251 void ChangePictureOptionsHandler::HandlePageShown(const base::ListValue* args) { | 207 void ChangePictureHandler::SendSelectedImage() { |
252 DCHECK(args && args->empty()); | |
253 SendSelectedImage(); | |
254 UpdateProfileImage(); | |
255 CameraPresenceNotifier::GetInstance()->AddObserver(this); | |
256 } | |
257 | |
258 void ChangePictureOptionsHandler::HandlePageHidden( | |
259 const base::ListValue* args) { | |
260 CameraPresenceNotifier::GetInstance()->RemoveObserver(this); | |
261 } | |
262 | |
263 void ChangePictureOptionsHandler::SendSelectedImage() { | |
264 const user_manager::User* user = GetUser(); | 208 const user_manager::User* user = GetUser(); |
265 DCHECK(!user->email().empty()); | 209 DCHECK(!user->email().empty()); |
266 | 210 |
267 previous_image_index_ = user->image_index(); | 211 previous_image_index_ = user->image_index(); |
268 switch (previous_image_index_) { | 212 switch (previous_image_index_) { |
269 case user_manager::User::USER_IMAGE_EXTERNAL: { | 213 case user_manager::User::USER_IMAGE_EXTERNAL: { |
270 // User has image from camera/file, record it and add to the image list. | 214 // User has image from camera/file, record it and add to the image list. |
271 previous_image_ = user->GetImage(); | 215 previous_image_ = user->GetImage(); |
272 SendOldImage(webui::GetBitmapDataUrl(*previous_image_.bitmap())); | 216 SendOldImage(webui::GetBitmapDataUrl(*previous_image_.bitmap())); |
273 break; | 217 break; |
274 } | 218 } |
275 case user_manager::User::USER_IMAGE_PROFILE: { | 219 case user_manager::User::USER_IMAGE_PROFILE: { |
276 // User has his/her Profile image as the current image. | 220 // User has his/her Profile image as the current image. |
277 SendProfileImage(user->GetImage(), true); | 221 SendProfileImage(user->GetImage(), true); |
278 break; | 222 break; |
279 } | 223 } |
280 default: { | 224 default: { |
281 DCHECK(previous_image_index_ >= 0 && | 225 DCHECK(previous_image_index_ >= 0 && |
282 previous_image_index_ < default_user_image::kDefaultImagesCount); | 226 previous_image_index_ < default_user_image::kDefaultImagesCount); |
283 if (previous_image_index_ >= | 227 if (previous_image_index_ >= |
284 default_user_image::kFirstDefaultImageIndex) { | 228 default_user_image::kFirstDefaultImageIndex) { |
285 // User has image from the current set of default images. | 229 // User has image from the current set of default images. |
286 base::StringValue image_url( | 230 base::StringValue image_url( |
287 default_user_image::GetDefaultImageUrl(previous_image_index_)); | 231 default_user_image::GetDefaultImageUrl(previous_image_index_)); |
288 web_ui()->CallJavascriptFunction( | 232 web_ui()->CallJavascriptFunction( |
289 "ChangePictureOptions.setSelectedImage", image_url); | 233 "settings.ChangePicturePage.receiveSelectedImage", image_url); |
290 } else { | 234 } else { |
291 // User has an old default image, so present it in the same manner as a | 235 // User has an old default image, so present it in the same manner as a |
292 // previous image from file. | 236 // previous image from file. |
293 SendOldImage( | 237 SendOldImage( |
294 default_user_image::GetDefaultImageUrl(previous_image_index_)); | 238 default_user_image::GetDefaultImageUrl(previous_image_index_)); |
295 } | 239 } |
296 } | 240 } |
297 } | 241 } |
298 } | 242 } |
299 | 243 |
300 void ChangePictureOptionsHandler::SendProfileImage(const gfx::ImageSkia& image, | 244 void ChangePictureHandler::SendProfileImage(const gfx::ImageSkia& image, |
301 bool should_select) { | 245 bool should_select) { |
302 base::StringValue data_url(webui::GetBitmapDataUrl(*image.bitmap())); | 246 base::StringValue data_url(webui::GetBitmapDataUrl(*image.bitmap())); |
303 base::FundamentalValue select(should_select); | 247 base::FundamentalValue select(should_select); |
304 web_ui()->CallJavascriptFunction("ChangePictureOptions.setProfileImage", | 248 web_ui()->CallJavascriptFunction( |
305 data_url, select); | 249 "settings.ChangePicturePage.receiveProfileImage", data_url, select); |
306 } | 250 } |
307 | 251 |
308 void ChangePictureOptionsHandler::UpdateProfileImage() { | 252 void ChangePictureHandler::UpdateProfileImage() { |
309 UserImageManager* user_image_manager = | 253 UserImageManager* user_image_manager = |
310 ChromeUserManager::Get()->GetUserImageManager(GetUser()->GetAccountId()); | 254 ChromeUserManager::Get()->GetUserImageManager(GetUser()->GetAccountId()); |
311 // If we have a downloaded profile image and haven't sent it in | 255 // If we have a downloaded profile image and haven't sent it in |
312 // |SendSelectedImage|, send it now (without selecting). | 256 // |SendSelectedImage|, send it now (without selecting). |
313 if (previous_image_index_ != user_manager::User::USER_IMAGE_PROFILE && | 257 if (previous_image_index_ != user_manager::User::USER_IMAGE_PROFILE && |
314 !user_image_manager->DownloadedProfileImage().isNull()) | 258 !user_image_manager->DownloadedProfileImage().isNull()) |
315 SendProfileImage(user_image_manager->DownloadedProfileImage(), false); | 259 SendProfileImage(user_image_manager->DownloadedProfileImage(), false); |
316 | 260 |
317 user_image_manager->DownloadProfileImage(kProfileDownloadReason); | 261 user_image_manager->DownloadProfileImage(kProfileDownloadReason); |
318 } | 262 } |
319 | 263 |
320 void ChangePictureOptionsHandler::SendOldImage(const std::string& image_url) { | 264 void ChangePictureHandler::SendOldImage(const std::string& image_url) { |
321 previous_image_url_ = image_url; | 265 previous_image_url_ = image_url; |
322 base::StringValue url(image_url); | 266 base::StringValue url(image_url); |
323 web_ui()->CallJavascriptFunction("ChangePictureOptions.setOldImage", url); | 267 web_ui()->CallJavascriptFunction("settings.ChangePicturePage.receiveOldImage", |
| 268 url); |
324 } | 269 } |
325 | 270 |
326 void ChangePictureOptionsHandler::HandleSelectImage( | 271 void ChangePictureHandler::HandleSelectImage(const base::ListValue* args) { |
327 const base::ListValue* args) { | |
328 std::string image_url; | 272 std::string image_url; |
329 std::string image_type; | 273 std::string image_type; |
330 if (!args || | 274 if (!args || args->GetSize() != 2 || !args->GetString(0, &image_url) || |
331 args->GetSize() != 2 || | |
332 !args->GetString(0, &image_url) || | |
333 !args->GetString(1, &image_type)) { | 275 !args->GetString(1, &image_type)) { |
334 NOTREACHED(); | 276 NOTREACHED(); |
335 return; | 277 return; |
336 } | 278 } |
337 DCHECK(!image_url.empty()); | 279 DCHECK(!image_url.empty()); |
338 DCHECK(!image_type.empty()); | 280 DCHECK(!image_type.empty()); |
339 | 281 |
340 UserImageManager* user_image_manager = | 282 UserImageManager* user_image_manager = |
341 ChromeUserManager::Get()->GetUserImageManager(GetUser()->GetAccountId()); | 283 ChromeUserManager::Get()->GetUserImageManager(GetUser()->GetAccountId()); |
342 int image_index = user_manager::User::USER_IMAGE_INVALID; | 284 int image_index = user_manager::User::USER_IMAGE_INVALID; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
387 } | 329 } |
388 } else { | 330 } else { |
389 NOTREACHED() << "Unexpected image type: " << image_type; | 331 NOTREACHED() << "Unexpected image type: " << image_type; |
390 } | 332 } |
391 | 333 |
392 // Ignore the result of the previous decoding if it's no longer needed. | 334 // Ignore the result of the previous decoding if it's no longer needed. |
393 if (!waiting_for_camera_photo) | 335 if (!waiting_for_camera_photo) |
394 ImageDecoder::Cancel(this); | 336 ImageDecoder::Cancel(this); |
395 } | 337 } |
396 | 338 |
397 void ChangePictureOptionsHandler::FileSelected(const base::FilePath& path, | 339 void ChangePictureHandler::FileSelected(const base::FilePath& path, |
398 int index, | 340 int index, |
399 void* params) { | 341 void* params) { |
400 ChromeUserManager::Get() | 342 ChromeUserManager::Get() |
401 ->GetUserImageManager(GetUser()->GetAccountId()) | 343 ->GetUserImageManager(GetUser()->GetAccountId()) |
402 ->SaveUserImageFromFile(path); | 344 ->SaveUserImageFromFile(path); |
403 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", | 345 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", |
404 default_user_image::kHistogramImageFromFile, | 346 default_user_image::kHistogramImageFromFile, |
405 default_user_image::kHistogramImagesCount); | 347 default_user_image::kHistogramImagesCount); |
406 VLOG(1) << "Selected image from file"; | 348 VLOG(1) << "Selected image from file"; |
407 } | 349 } |
408 | 350 |
409 void ChangePictureOptionsHandler::SetImageFromCamera( | 351 void ChangePictureHandler::SetImageFromCamera(const gfx::ImageSkia& photo) { |
410 const gfx::ImageSkia& photo) { | |
411 ChromeUserManager::Get() | 352 ChromeUserManager::Get() |
412 ->GetUserImageManager(GetUser()->GetAccountId()) | 353 ->GetUserImageManager(GetUser()->GetAccountId()) |
413 ->SaveUserImage(user_manager::UserImage::CreateAndEncode(photo)); | 354 ->SaveUserImage(user_manager::UserImage::CreateAndEncode(photo)); |
414 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", | 355 UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", |
415 default_user_image::kHistogramImageFromCamera, | 356 default_user_image::kHistogramImageFromCamera, |
416 default_user_image::kHistogramImagesCount); | 357 default_user_image::kHistogramImagesCount); |
417 VLOG(1) << "Selected camera photo"; | 358 VLOG(1) << "Selected camera photo"; |
418 } | 359 } |
419 | 360 |
420 void ChangePictureOptionsHandler::SetCameraPresent(bool present) { | 361 void ChangePictureHandler::SetCameraPresent(bool present) { |
421 base::FundamentalValue present_value(present); | 362 base::FundamentalValue present_value(present); |
422 | 363 |
423 web_ui()->CallJavascriptFunction("ChangePictureOptions.setCameraPresent", | 364 web_ui()->CallJavascriptFunction( |
424 present_value); | 365 "settings.ChangePicturePage.receiveCameraPresence", present_value); |
425 } | 366 } |
426 | 367 |
427 void ChangePictureOptionsHandler::OnCameraPresenceCheckDone( | 368 void ChangePictureHandler::OnCameraPresenceCheckDone(bool is_camera_present) { |
428 bool is_camera_present) { | |
429 SetCameraPresent(is_camera_present); | 369 SetCameraPresent(is_camera_present); |
430 } | 370 } |
431 | 371 |
432 void ChangePictureOptionsHandler::Observe( | 372 void ChangePictureHandler::Observe( |
433 int type, | 373 int type, |
434 const content::NotificationSource& source, | 374 const content::NotificationSource& source, |
435 const content::NotificationDetails& details) { | 375 const content::NotificationDetails& details) { |
436 if (type == chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED) { | 376 if (type == chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED) { |
437 // User profile image has been updated. | 377 // User profile image has been updated. |
438 SendProfileImage(*content::Details<const gfx::ImageSkia>(details).ptr(), | 378 SendProfileImage(*content::Details<const gfx::ImageSkia>(details).ptr(), |
439 false); | 379 false); |
440 } else if (type == chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED) { | 380 } else if (type == chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED) { |
441 // Not initialized yet. | 381 // Not initialized yet. |
442 if (previous_image_index_ == user_manager::User::USER_IMAGE_INVALID) | 382 if (previous_image_index_ == user_manager::User::USER_IMAGE_INVALID) |
443 return; | 383 return; |
444 SendSelectedImage(); | 384 SendSelectedImage(); |
445 } | 385 } |
446 } | 386 } |
447 | 387 |
448 gfx::NativeWindow ChangePictureOptionsHandler::GetBrowserWindow() const { | 388 gfx::NativeWindow ChangePictureHandler::GetBrowserWindow() const { |
449 Browser* browser = | 389 Browser* browser = |
450 chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()); | 390 chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()); |
451 return browser->window()->GetNativeWindow(); | 391 return browser->window()->GetNativeWindow(); |
452 } | 392 } |
453 | 393 |
454 void ChangePictureOptionsHandler::OnImageDecoded( | 394 void ChangePictureHandler::OnImageDecoded(const SkBitmap& decoded_image) { |
455 const SkBitmap& decoded_image) { | |
456 user_photo_ = gfx::ImageSkia::CreateFrom1xBitmap(decoded_image); | 395 user_photo_ = gfx::ImageSkia::CreateFrom1xBitmap(decoded_image); |
457 SetImageFromCamera(user_photo_); | 396 SetImageFromCamera(user_photo_); |
458 } | 397 } |
459 | 398 |
460 void ChangePictureOptionsHandler::OnDecodeImageFailed() { | 399 void ChangePictureHandler::OnDecodeImageFailed() { |
461 NOTREACHED() << "Failed to decode PNG image from WebUI"; | 400 NOTREACHED() << "Failed to decode PNG image from WebUI"; |
462 } | 401 } |
463 | 402 |
464 const user_manager::User* ChangePictureOptionsHandler::GetUser() const { | 403 const user_manager::User* ChangePictureHandler::GetUser() const { |
465 Profile* profile = Profile::FromWebUI(web_ui()); | 404 Profile* profile = Profile::FromWebUI(web_ui()); |
466 const user_manager::User* user = | 405 const user_manager::User* user = |
467 ProfileHelper::Get()->GetUserByProfile(profile); | 406 ProfileHelper::Get()->GetUserByProfile(profile); |
468 if (!user) | 407 if (!user) |
469 return user_manager::UserManager::Get()->GetActiveUser(); | 408 return user_manager::UserManager::Get()->GetActiveUser(); |
470 return user; | 409 return user; |
471 } | 410 } |
472 | 411 |
473 } // namespace options | 412 } // namespace settings |
474 } // namespace chromeos | 413 } // namespace chromeos |
OLD | NEW |