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