Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(45)

Side by Side Diff: chrome/browser/ui/webui/settings/chromeos/change_picture_handler.cc

Issue 1575543003: Settings People Revamp: Implement parts of ChromeOS Change Picture (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix change_picture_handler to accomodate origin/master changes Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698