12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/audio/sounds.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/metrics/histogram.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/chromeos/login/existing_user_controller.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/webui_login_display.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h" 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chromeos/audio/chromeos_sounds.h" 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/user_manager/user.h" 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/user_manager/user_image/default_user_images.h" 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "grit/browser_resources.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/data_url.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)namespace { 28a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 29a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const char kJsScreenPath[] = "login.UserImageScreen"; 30a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 31a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} // namespace 32a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UserImageScreenHandler::UserImageScreenHandler() 36a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) : BaseScreenHandler(kJsScreenPath), 37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) screen_(NULL), 383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) show_on_init_(false), 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) is_ready_(false) { 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) media::SoundsManager* manager = media::SoundsManager::Get(); 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager->Initialize(SOUND_OBJECT_DELETE, 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bundle.GetRawDataResource(IDR_SOUND_OBJECT_DELETE_WAV)); 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager->Initialize(SOUND_CAMERA_SNAP, 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bundle.GetRawDataResource(IDR_SOUND_CAMERA_SNAP_WAV)); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UserImageScreenHandler::~UserImageScreenHandler() { 49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (screen_) { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) screen_->OnActorDestroyed(this); 51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UserImageScreenHandler::Initialize() { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (show_on_init_) { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Show(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_on_init_ = false; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UserImageScreenHandler::SetDelegate( 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserImageScreenActor::Delegate* screen) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) screen_ = screen; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UserImageScreenHandler::Show() { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!page_is_ready()) { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_on_init_ = true; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) screen_show_time_ = base::Time::Now(); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowScreen(OobeUI::kScreenUserImagePicker, NULL); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When shown, query camera presence. 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!screen_) 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (is_ready_) 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) screen_->OnScreenReady(); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UserImageScreenHandler::Hide() { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UserImageScreenHandler::PrepareToShow() { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserImageScreenHandler::DeclareLocalizedValues( 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LocalizedValuesBuilder* builder) { 89effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch builder->Add("userImageScreenTitle", IDS_USER_IMAGE_SCREEN_TITLE); 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("userImageScreenDescription", 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_OPTIONS_CHANGE_PICTURE_DIALOG_TEXT); 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("takePhoto", IDS_OPTIONS_CHANGE_PICTURE_TAKE_PHOTO); 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("discardPhoto", IDS_OPTIONS_CHANGE_PICTURE_DISCARD_PHOTO); 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("flipPhoto", IDS_OPTIONS_CHANGE_PICTURE_FLIP_PHOTO); 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("profilePhoto", IDS_IMAGE_SCREEN_PROFILE_PHOTO); 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("profilePhotoLoading", 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_IMAGE_SCREEN_PROFILE_LOADING_PHOTO); 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("okButtonText", IDS_OK); 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("authorCredit", IDS_OPTIONS_SET_WALLPAPER_AUTHOR_TEXT); 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("photoFromCamera", IDS_OPTIONS_CHANGE_PICTURE_PHOTO_FROM_CAMERA); 101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) builder->Add("photoFlippedAccessibleText", 102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) IDS_OPTIONS_PHOTO_FLIP_ACCESSIBLE_TEXT); 103a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) builder->Add("photoFlippedBackAccessibleText", 104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) IDS_OPTIONS_PHOTO_FLIPBACK_ACCESSIBLE_TEXT); 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("photoCaptureAccessibleText", 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_OPTIONS_PHOTO_CAPTURE_ACCESSIBLE_TEXT); 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("photoDiscardAccessibleText", 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_OPTIONS_PHOTO_DISCARD_ACCESSIBLE_TEXT); 10968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) builder->Add("syncingPreferences", IDS_IMAGE_SCREEN_SYNCING_PREFERENCES); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UserImageScreenHandler::RegisterMessages() { 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("getImages", &UserImageScreenHandler::HandleGetImages); 1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) AddCallback("screenReady", &UserImageScreenHandler::HandleScreenReady); 115a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AddCallback("takePhoto", &UserImageScreenHandler::HandleTakePhoto); 116a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AddCallback("discardPhoto", &UserImageScreenHandler::HandleDiscardPhoto); 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("photoTaken", &UserImageScreenHandler::HandlePhotoTaken); 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("selectImage", &UserImageScreenHandler::HandleSelectImage); 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("onUserImageAccepted", 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &UserImageScreenHandler::HandleImageAccepted); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("onUserImageScreenShown", 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &UserImageScreenHandler::HandleScreenShown); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserImageScreenHandler::SelectImage(int index) { 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (page_is_ready()) 1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CallJS("setSelectedImage", user_manager::GetDefaultImageUrl(index)); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UserImageScreenHandler::SendProfileImage(const std::string& data_url) { 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (page_is_ready()) 132a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CallJS("setProfileImage", data_url); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UserImageScreenHandler::OnProfileImageAbsent() { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (page_is_ready()) { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> null_value(base::Value::CreateNullValue()); 138a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CallJS("setProfileImage", *null_value); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// TODO(antrim) : It looks more like parameters for "Init" rather than callback. 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserImageScreenHandler::HandleGetImages() { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue image_urls; 1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (int i = user_manager::kFirstDefaultImageIndex; 1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) i < user_manager::kDefaultImagesCount; 1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ++i) { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::DictionaryValue> image_data(new base::DictionaryValue); 1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) image_data->SetString("url", user_manager::GetDefaultImageUrl(i)); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) image_data->SetString( 1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "author", 1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n_util::GetStringUTF16(user_manager::kDefaultImageAuthorIDs[i])); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) image_data->SetString( 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "website", 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n_util::GetStringUTF16(user_manager::kDefaultImageWebsiteIDs[i])); 1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) image_data->SetString("title", user_manager::GetDefaultImageDescription(i)); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) image_urls.Append(image_data.release()); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 159a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CallJS("setDefaultImages", image_urls); 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!screen_) 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (screen_->selected_image() != user_manager::User::USER_IMAGE_INVALID) 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SelectImage(screen_->selected_image()); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (screen_->profile_picture_data_url() != url::kAboutBlankURL) 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SendProfileImage(screen_->profile_picture_data_url()); 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) else if (screen_->profile_picture_absent()) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnProfileImageAbsent(); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void UserImageScreenHandler::HandleScreenReady() { 1723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) is_ready_ = true; 1733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (screen_) 1743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) screen_->OnScreenReady(); 1753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 1763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserImageScreenHandler::HandlePhotoTaken(const std::string& image_url) { 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string mime_type, charset, raw_data; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!net::DataURL::Parse(GURL(image_url), &mime_type, &charset, &raw_data)) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ("image/png", mime_type); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (screen_) 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) screen_->OnPhotoTaken(raw_data); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 187a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void UserImageScreenHandler::HandleTakePhoto() { 188a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ash::PlaySystemSoundIfSpokenFeedback(SOUND_CAMERA_SNAP); 189a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 190a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 191a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void UserImageScreenHandler::HandleDiscardPhoto() { 192a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ash::PlaySystemSoundIfSpokenFeedback(SOUND_OBJECT_DELETE); 193a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserImageScreenHandler::HandleSelectImage(const std::string& image_url, 1963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& image_type, 1973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool is_user_selection) { 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (screen_) 1993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) screen_->OnImageSelected(image_type, image_url, is_user_selection); 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserImageScreenHandler::HandleImageAccepted() { 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (screen_) 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) screen_->OnImageAccepted(); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserImageScreenHandler::HandleScreenShown() { 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!screen_show_time_.is_null()); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta delta = base::Time::Now() - screen_show_time_; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << "Screen load time: " << delta.InSecondsF(); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UMA_HISTOGRAM_TIMES("UserImage.ScreenIsShownTime", delta); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserImageScreenHandler::SetCameraPresent(bool present) { 216a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CallJS("setCameraPresent", present); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void UserImageScreenHandler::HideCurtain() { 2203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CallJS("hideCurtain"); 2213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 2223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 224