| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.h" | 5 #include "chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "base/metrics/histogram_macros.h" | 11 #include "base/metrics/histogram_macros.h" |
| 12 #include "base/values.h" | 12 #include "base/values.h" |
| 13 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h" | 13 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h" |
| 14 #include "chrome/browser/chromeos/login/existing_user_controller.h" | 14 #include "chrome/browser/chromeos/login/existing_user_controller.h" |
| 15 #include "chrome/browser/chromeos/login/oobe_screen.h" | 15 #include "chrome/browser/chromeos/login/oobe_screen.h" |
| 16 #include "chrome/browser/chromeos/login/screens/user_image_model.h" | 16 #include "chrome/browser/chromeos/login/screens/user_image_screen.h" |
| 17 #include "chrome/browser/chromeos/login/ui/webui_login_display.h" | 17 #include "chrome/browser/chromeos/login/ui/webui_login_display.h" |
| 18 #include "chrome/browser/chromeos/login/users/default_user_image/default_user_im
ages.h" | 18 #include "chrome/browser/chromeos/login/users/default_user_image/default_user_im
ages.h" |
| 19 #include "chrome/common/chrome_switches.h" | 19 #include "chrome/common/chrome_switches.h" |
| 20 #include "chrome/common/url_constants.h" | 20 #include "chrome/common/url_constants.h" |
| 21 #include "chrome/grit/browser_resources.h" | 21 #include "chrome/grit/browser_resources.h" |
| 22 #include "chrome/grit/generated_resources.h" | 22 #include "chrome/grit/generated_resources.h" |
| 23 #include "chromeos/audio/chromeos_sounds.h" | 23 #include "chromeos/audio/chromeos_sounds.h" |
| 24 #include "components/login/localized_values_builder.h" | 24 #include "components/login/localized_values_builder.h" |
| 25 #include "components/strings/grit/components_strings.h" | 25 #include "components/strings/grit/components_strings.h" |
| 26 #include "components/user_manager/user.h" | 26 #include "components/user_manager/user.h" |
| 27 #include "media/audio/sounds/sounds_manager.h" | 27 #include "media/audio/sounds/sounds_manager.h" |
| 28 #include "net/base/data_url.h" | 28 #include "net/base/data_url.h" |
| 29 #include "ui/base/l10n/l10n_util.h" | 29 #include "ui/base/l10n/l10n_util.h" |
| 30 #include "ui/base/resource/resource_bundle.h" | 30 #include "ui/base/resource/resource_bundle.h" |
| 31 #include "url/gurl.h" | 31 #include "url/gurl.h" |
| 32 | 32 |
| 33 namespace { | 33 namespace { |
| 34 | 34 |
| 35 const char kJsScreenPath[] = "login.UserImageScreen"; | 35 const char kJsScreenPath[] = "login.UserImageScreen"; |
| 36 | 36 |
| 37 } // namespace | 37 } // namespace |
| 38 | 38 |
| 39 namespace chromeos { | 39 namespace chromeos { |
| 40 | 40 |
| 41 UserImageScreenHandler::UserImageScreenHandler() | 41 UserImageScreenHandler::UserImageScreenHandler() |
| 42 : BaseScreenHandler(kJsScreenPath), | 42 : BaseScreenHandler(kJsScreenPath) { |
| 43 model_(nullptr), | |
| 44 show_on_init_(false), | |
| 45 is_ready_(false) { | |
| 46 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); | 43 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
| 47 media::SoundsManager* manager = media::SoundsManager::Get(); | 44 media::SoundsManager* manager = media::SoundsManager::Get(); |
| 48 manager->Initialize(SOUND_OBJECT_DELETE, | 45 manager->Initialize(SOUND_OBJECT_DELETE, |
| 49 bundle.GetRawDataResource(IDR_SOUND_OBJECT_DELETE_WAV)); | 46 bundle.GetRawDataResource(IDR_SOUND_OBJECT_DELETE_WAV)); |
| 50 manager->Initialize(SOUND_CAMERA_SNAP, | 47 manager->Initialize(SOUND_CAMERA_SNAP, |
| 51 bundle.GetRawDataResource(IDR_SOUND_CAMERA_SNAP_WAV)); | 48 bundle.GetRawDataResource(IDR_SOUND_CAMERA_SNAP_WAV)); |
| 52 } | 49 } |
| 53 | 50 |
| 54 UserImageScreenHandler::~UserImageScreenHandler() { | 51 UserImageScreenHandler::~UserImageScreenHandler() { |
| 55 if (model_) | 52 if (screen_) |
| 56 model_->OnViewDestroyed(this); | 53 screen_->OnViewDestroyed(this); |
| 57 } | 54 } |
| 58 | 55 |
| 59 void UserImageScreenHandler::Initialize() { | 56 void UserImageScreenHandler::Initialize() { |
| 60 if (show_on_init_) { | 57 if (show_on_init_) { |
| 61 Show(); | 58 Show(); |
| 62 show_on_init_ = false; | 59 show_on_init_ = false; |
| 63 } | 60 } |
| 64 } | 61 } |
| 65 | 62 |
| 66 void UserImageScreenHandler::Bind(UserImageModel& model) { | 63 void UserImageScreenHandler::Bind(UserImageScreen* screen) { |
| 67 model_ = &model; | 64 screen_ = screen; |
| 68 BaseScreenHandler::SetBaseScreen(model_); | 65 BaseScreenHandler::SetBaseScreen(screen_); |
| 69 } | 66 } |
| 70 | 67 |
| 71 void UserImageScreenHandler::Unbind() { | 68 void UserImageScreenHandler::Unbind() { |
| 72 model_ = nullptr; | 69 screen_ = nullptr; |
| 73 BaseScreenHandler::SetBaseScreen(nullptr); | 70 BaseScreenHandler::SetBaseScreen(nullptr); |
| 74 } | 71 } |
| 75 | 72 |
| 76 void UserImageScreenHandler::Show() { | 73 void UserImageScreenHandler::Show() { |
| 77 if (!page_is_ready()) { | 74 if (!page_is_ready()) { |
| 78 show_on_init_ = true; | 75 show_on_init_ = true; |
| 79 return; | 76 return; |
| 80 } | 77 } |
| 81 screen_show_time_ = base::Time::Now(); | 78 screen_show_time_ = base::Time::Now(); |
| 82 ShowScreen(OobeScreen::SCREEN_USER_IMAGE_PICKER); | 79 ShowScreen(OobeScreen::SCREEN_USER_IMAGE_PICKER); |
| 83 | 80 |
| 84 // When shown, query camera presence. | 81 // When shown, query camera presence. |
| 85 if (model_ && is_ready_) | 82 if (screen_ && is_ready_) |
| 86 model_->OnScreenReady(); | 83 screen_->OnScreenReady(); |
| 87 } | 84 } |
| 88 | 85 |
| 89 void UserImageScreenHandler::Hide() { | 86 void UserImageScreenHandler::Hide() { |
| 90 } | 87 } |
| 91 | 88 |
| 92 void UserImageScreenHandler::DeclareLocalizedValues( | 89 void UserImageScreenHandler::DeclareLocalizedValues( |
| 93 ::login::LocalizedValuesBuilder* builder) { | 90 ::login::LocalizedValuesBuilder* builder) { |
| 94 builder->Add("userImageScreenTitle", IDS_USER_IMAGE_SCREEN_TITLE); | 91 builder->Add("userImageScreenTitle", IDS_USER_IMAGE_SCREEN_TITLE); |
| 95 builder->Add("userImageScreenDescription", | 92 builder->Add("userImageScreenDescription", |
| 96 IDS_OPTIONS_CHANGE_PICTURE_DIALOG_TEXT); | 93 IDS_OPTIONS_CHANGE_PICTURE_DIALOG_TEXT); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 default_user_image::kDefaultImageWebsiteIDs[i])); | 140 default_user_image::kDefaultImageWebsiteIDs[i])); |
| 144 image_data->SetString("title", | 141 image_data->SetString("title", |
| 145 default_user_image::GetDefaultImageDescription(i)); | 142 default_user_image::GetDefaultImageDescription(i)); |
| 146 image_urls.Append(std::move(image_data)); | 143 image_urls.Append(std::move(image_data)); |
| 147 } | 144 } |
| 148 CallJS("setDefaultImages", image_urls); | 145 CallJS("setDefaultImages", image_urls); |
| 149 } | 146 } |
| 150 | 147 |
| 151 void UserImageScreenHandler::HandleScreenReady() { | 148 void UserImageScreenHandler::HandleScreenReady() { |
| 152 is_ready_ = true; | 149 is_ready_ = true; |
| 153 if (model_) | 150 if (screen_) |
| 154 model_->OnScreenReady(); | 151 screen_->OnScreenReady(); |
| 155 } | 152 } |
| 156 | 153 |
| 157 void UserImageScreenHandler::HandlePhotoTaken(const std::string& image_url) { | 154 void UserImageScreenHandler::HandlePhotoTaken(const std::string& image_url) { |
| 158 std::string mime_type, charset, raw_data; | 155 std::string mime_type, charset, raw_data; |
| 159 if (!net::DataURL::Parse(GURL(image_url), &mime_type, &charset, &raw_data)) | 156 if (!net::DataURL::Parse(GURL(image_url), &mime_type, &charset, &raw_data)) |
| 160 NOTREACHED(); | 157 NOTREACHED(); |
| 161 DCHECK_EQ("image/png", mime_type); | 158 DCHECK_EQ("image/png", mime_type); |
| 162 | 159 |
| 163 if (model_) | 160 if (screen_) |
| 164 model_->OnPhotoTaken(raw_data); | 161 screen_->OnPhotoTaken(raw_data); |
| 165 } | 162 } |
| 166 | 163 |
| 167 void UserImageScreenHandler::HandleTakePhoto() { | 164 void UserImageScreenHandler::HandleTakePhoto() { |
| 168 AccessibilityManager::Get()->PlayEarcon( | 165 AccessibilityManager::Get()->PlayEarcon( |
| 169 SOUND_CAMERA_SNAP, PlaySoundOption::SPOKEN_FEEDBACK_ENABLED); | 166 SOUND_CAMERA_SNAP, PlaySoundOption::SPOKEN_FEEDBACK_ENABLED); |
| 170 } | 167 } |
| 171 | 168 |
| 172 void UserImageScreenHandler::HandleDiscardPhoto() { | 169 void UserImageScreenHandler::HandleDiscardPhoto() { |
| 173 AccessibilityManager::Get()->PlayEarcon( | 170 AccessibilityManager::Get()->PlayEarcon( |
| 174 SOUND_OBJECT_DELETE, PlaySoundOption::SPOKEN_FEEDBACK_ENABLED); | 171 SOUND_OBJECT_DELETE, PlaySoundOption::SPOKEN_FEEDBACK_ENABLED); |
| 175 } | 172 } |
| 176 | 173 |
| 177 void UserImageScreenHandler::HandleSelectImage(const std::string& image_url, | 174 void UserImageScreenHandler::HandleSelectImage(const std::string& image_url, |
| 178 const std::string& image_type, | 175 const std::string& image_type, |
| 179 bool is_user_selection) { | 176 bool is_user_selection) { |
| 180 if (model_) | 177 if (screen_) |
| 181 model_->OnImageSelected(image_type, image_url, is_user_selection); | 178 screen_->OnImageSelected(image_type, image_url, is_user_selection); |
| 182 } | 179 } |
| 183 | 180 |
| 184 void UserImageScreenHandler::HandleImageAccepted() { | 181 void UserImageScreenHandler::HandleImageAccepted() { |
| 185 if (model_) | 182 if (screen_) |
| 186 model_->OnImageAccepted(); | 183 screen_->OnImageAccepted(); |
| 187 } | 184 } |
| 188 | 185 |
| 189 void UserImageScreenHandler::HandleScreenShown() { | 186 void UserImageScreenHandler::HandleScreenShown() { |
| 190 DCHECK(!screen_show_time_.is_null()); | 187 DCHECK(!screen_show_time_.is_null()); |
| 191 | 188 |
| 192 base::TimeDelta delta = base::Time::Now() - screen_show_time_; | 189 base::TimeDelta delta = base::Time::Now() - screen_show_time_; |
| 193 VLOG(1) << "Screen load time: " << delta.InSecondsF(); | 190 VLOG(1) << "Screen load time: " << delta.InSecondsF(); |
| 194 UMA_HISTOGRAM_TIMES("UserImage.ScreenIsShownTime", delta); | 191 UMA_HISTOGRAM_TIMES("UserImage.ScreenIsShownTime", delta); |
| 195 } | 192 } |
| 196 | 193 |
| 197 void UserImageScreenHandler::HideCurtain() { | 194 void UserImageScreenHandler::HideCurtain() { |
| 198 CallJS("hideCurtain"); | 195 CallJS("hideCurtain"); |
| 199 } | 196 } |
| 200 | 197 |
| 201 } // namespace chromeos | 198 } // namespace chromeos |
| OLD | NEW |