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

Side by Side Diff: chrome/browser/chromeos/login/lock/screen_locker.cc

Issue 2429033003: cros: Cleanup lock screen and OOBE C++ backing code. (Closed)
Patch Set: Address comments Created 4 years, 2 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/chromeos/login/lock/screen_locker.h" 5 #include "chrome/browser/chromeos/login/lock/screen_locker.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "ash/common/wallpaper/wallpaper_controller.h" 10 #include "ash/common/wallpaper/wallpaper_controller.h"
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 } 156 }
157 157
158 void ScreenLocker::Init() { 158 void ScreenLocker::Init() {
159 input_method::InputMethodManager* imm = 159 input_method::InputMethodManager* imm =
160 input_method::InputMethodManager::Get(); 160 input_method::InputMethodManager::Get();
161 saved_ime_state_ = imm->GetActiveIMEState(); 161 saved_ime_state_ = imm->GetActiveIMEState();
162 imm->SetState(saved_ime_state_->Clone()); 162 imm->SetState(saved_ime_state_->Clone());
163 163
164 authenticator_ = UserSessionManager::GetInstance()->CreateAuthenticator(this); 164 authenticator_ = UserSessionManager::GetInstance()->CreateAuthenticator(this);
165 extended_authenticator_ = ExtendedAuthenticator::Create(this); 165 extended_authenticator_ = ExtendedAuthenticator::Create(this);
166 delegate_.reset(new WebUIScreenLocker(this)); 166 web_ui_.reset(new WebUIScreenLocker(this));
167 delegate_->LockScreen(); 167 web_ui()->LockScreen();
168 168
169 // Ownership of |icon_image_source| is passed. 169 // Ownership of |icon_image_source| is passed.
170 screenlock_icon_provider_.reset(new ScreenlockIconProvider); 170 screenlock_icon_provider_.reset(new ScreenlockIconProvider);
171 ScreenlockIconSource* screenlock_icon_source = 171 ScreenlockIconSource* screenlock_icon_source =
172 new ScreenlockIconSource(screenlock_icon_provider_->AsWeakPtr()); 172 new ScreenlockIconSource(screenlock_icon_provider_->AsWeakPtr());
173 content::URLDataSource::Add( 173 content::URLDataSource::Add(web_ui()->GetWebContents()->GetBrowserContext(),
174 GetAssociatedWebUI()->GetWebContents()->GetBrowserContext(), 174 screenlock_icon_source);
175 screenlock_icon_source);
176 } 175 }
177 176
178 void ScreenLocker::OnAuthFailure(const AuthFailure& error) { 177 void ScreenLocker::OnAuthFailure(const AuthFailure& error) {
179 content::RecordAction(UserMetricsAction("ScreenLocker_OnLoginFailure")); 178 content::RecordAction(UserMetricsAction("ScreenLocker_OnLoginFailure"));
180 if (authentication_start_time_.is_null()) { 179 if (authentication_start_time_.is_null()) {
181 LOG(ERROR) << "Start time is not set at authentication failure"; 180 LOG(ERROR) << "Start time is not set at authentication failure";
182 } else { 181 } else {
183 base::TimeDelta delta = base::Time::Now() - authentication_start_time_; 182 base::TimeDelta delta = base::Time::Now() - authentication_start_time_;
184 VLOG(1) << "Authentication failure: " << delta.InSecondsF() << " second(s)"; 183 VLOG(1) << "Authentication failure: " << delta.InSecondsF() << " second(s)";
185 UMA_HISTOGRAM_TIMES("ScreenLocker.AuthenticationFailureTime", delta); 184 UMA_HISTOGRAM_TIMES("ScreenLocker.AuthenticationFailureTime", delta);
186 } 185 }
187 186
188 UMA_HISTOGRAM_ENUMERATION( 187 UMA_HISTOGRAM_ENUMERATION(
189 "ScreenLocker.AuthenticationFailure", 188 "ScreenLocker.AuthenticationFailure",
190 is_pin_attempt_ ? UnlockType::AUTH_PIN : UnlockType::AUTH_PASSWORD, 189 is_pin_attempt_ ? UnlockType::AUTH_PIN : UnlockType::AUTH_PASSWORD,
191 UnlockType::AUTH_COUNT); 190 UnlockType::AUTH_COUNT);
192 191
193 EnableInput(); 192 EnableInput();
194 // Don't enable signout button here as we're showing 193 // Don't enable signout button here as we're showing
195 // MessageBubble. 194 // MessageBubble.
196 195
197 delegate_->ShowErrorMessage(incorrect_passwords_count_++ ? 196 web_ui()->ShowErrorMessage(incorrect_passwords_count_++
198 IDS_LOGIN_ERROR_AUTHENTICATING_2ND_TIME : 197 ? IDS_LOGIN_ERROR_AUTHENTICATING_2ND_TIME
199 IDS_LOGIN_ERROR_AUTHENTICATING, 198 : IDS_LOGIN_ERROR_AUTHENTICATING,
200 HelpAppLauncher::HELP_CANT_ACCESS_ACCOUNT); 199 HelpAppLauncher::HELP_CANT_ACCESS_ACCOUNT);
201 200
202 if (auth_status_consumer_) 201 if (auth_status_consumer_)
203 auth_status_consumer_->OnAuthFailure(error); 202 auth_status_consumer_->OnAuthFailure(error);
204 } 203 }
205 204
206 void ScreenLocker::OnAuthSuccess(const UserContext& user_context) { 205 void ScreenLocker::OnAuthSuccess(const UserContext& user_context) {
207 incorrect_passwords_count_ = 0; 206 incorrect_passwords_count_ = 0;
208 if (authentication_start_time_.is_null()) { 207 if (authentication_start_time_.is_null()) {
209 if (user_context.GetAccountId().is_valid()) 208 if (user_context.GetAccountId().is_valid())
210 LOG(ERROR) << "Start time is not set at authentication success"; 209 LOG(ERROR) << "Start time is not set at authentication success";
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 245
247 authentication_capture_.reset(new AuthenticationParametersCapture()); 246 authentication_capture_.reset(new AuthenticationParametersCapture());
248 authentication_capture_->user_context = user_context; 247 authentication_capture_->user_context = user_context;
249 248
250 // Add guard for case when something get broken in call chain to unlock 249 // Add guard for case when something get broken in call chain to unlock
251 // for sure. 250 // for sure.
252 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( 251 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
253 FROM_HERE, base::Bind(&ScreenLocker::UnlockOnLoginSuccess, 252 FROM_HERE, base::Bind(&ScreenLocker::UnlockOnLoginSuccess,
254 weak_factory_.GetWeakPtr()), 253 weak_factory_.GetWeakPtr()),
255 base::TimeDelta::FromMilliseconds(kUnlockGuardTimeoutMs)); 254 base::TimeDelta::FromMilliseconds(kUnlockGuardTimeoutMs));
256 delegate_->AnimateAuthenticationSuccess(); 255 web_ui()->AnimateAuthenticationSuccess();
257 } 256 }
258 257
259 void ScreenLocker::OnPasswordAuthSuccess(const UserContext& user_context) { 258 void ScreenLocker::OnPasswordAuthSuccess(const UserContext& user_context) {
260 // The user has signed in using their password, so reset the PIN timeout. 259 // The user has signed in using their password, so reset the PIN timeout.
261 PinStorage* pin_storage = 260 PinStorage* pin_storage =
262 PinStorageFactory::GetForAccountId(user_context.GetAccountId()); 261 PinStorageFactory::GetForAccountId(user_context.GetAccountId());
263 if (pin_storage) 262 if (pin_storage)
264 pin_storage->MarkStrongAuth(); 263 pin_storage->MarkStrongAuth();
265 } 264 }
266 265
(...skipping 13 matching lines...) Expand all
280 279
281 VLOG(1) << "Hiding the lock screen."; 280 VLOG(1) << "Hiding the lock screen.";
282 chromeos::ScreenLocker::Hide(); 281 chromeos::ScreenLocker::Hide();
283 } 282 }
284 283
285 void ScreenLocker::Authenticate(const UserContext& user_context) { 284 void ScreenLocker::Authenticate(const UserContext& user_context) {
286 LOG_ASSERT(IsUserLoggedIn(user_context.GetAccountId())) 285 LOG_ASSERT(IsUserLoggedIn(user_context.GetAccountId()))
287 << "Invalid user trying to unlock."; 286 << "Invalid user trying to unlock.";
288 287
289 authentication_start_time_ = base::Time::Now(); 288 authentication_start_time_ = base::Time::Now();
290 delegate_->SetInputEnabled(false); 289 web_ui()->SetInputEnabled(false);
291 delegate_->OnAuthenticate();
292 is_pin_attempt_ = user_context.IsUsingPin(); 290 is_pin_attempt_ = user_context.IsUsingPin();
293 291
294 const user_manager::User* user = FindUnlockUser(user_context.GetAccountId()); 292 const user_manager::User* user = FindUnlockUser(user_context.GetAccountId());
295 if (user) { 293 if (user) {
296 // Check to see if the user submitted a PIN and it is valid. 294 // Check to see if the user submitted a PIN and it is valid.
297 const std::string pin = user_context.GetKey()->GetSecret(); 295 const std::string pin = user_context.GetKey()->GetSecret();
298 296
299 // We only want to try authenticating the pin if it is a number, 297 // We only want to try authenticating the pin if it is a number,
300 // otherwise we will timeout PIN if the user enters their account password 298 // otherwise we will timeout PIN if the user enters their account password
301 // incorrectly more than a few times. 299 // incorrectly more than a few times.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 const user_manager::User* ScreenLocker::FindUnlockUser( 334 const user_manager::User* ScreenLocker::FindUnlockUser(
337 const AccountId& account_id) { 335 const AccountId& account_id) {
338 for (const user_manager::User* user : users_) { 336 for (const user_manager::User* user : users_) {
339 if (user->GetAccountId() == account_id) 337 if (user->GetAccountId() == account_id)
340 return user; 338 return user;
341 } 339 }
342 return nullptr; 340 return nullptr;
343 } 341 }
344 342
345 void ScreenLocker::ClearErrors() { 343 void ScreenLocker::ClearErrors() {
346 delegate_->ClearErrors(); 344 web_ui()->ClearErrors();
347 } 345 }
348 346
349 void ScreenLocker::Signout() { 347 void ScreenLocker::Signout() {
350 delegate_->ClearErrors(); 348 web_ui()->ClearErrors();
351 content::RecordAction(UserMetricsAction("ScreenLocker_Signout")); 349 content::RecordAction(UserMetricsAction("ScreenLocker_Signout"));
352 // We expect that this call will not wait for any user input. 350 // We expect that this call will not wait for any user input.
353 // If it changes at some point, we will need to force exit. 351 // If it changes at some point, we will need to force exit.
354 chrome::AttemptUserExit(); 352 chrome::AttemptUserExit();
355 353
356 // Don't hide yet the locker because the chrome screen may become visible 354 // Don't hide yet the locker because the chrome screen may become visible
357 // briefly. 355 // briefly.
358 } 356 }
359 357
360 void ScreenLocker::EnableInput() { 358 void ScreenLocker::EnableInput() {
361 delegate_->SetInputEnabled(true); 359 web_ui()->SetInputEnabled(true);
362 } 360 }
363 361
364 void ScreenLocker::ShowErrorMessage(int error_msg_id, 362 void ScreenLocker::ShowErrorMessage(int error_msg_id,
365 HelpAppLauncher::HelpTopic help_topic_id, 363 HelpAppLauncher::HelpTopic help_topic_id,
366 bool sign_out_only) { 364 bool sign_out_only) {
367 delegate_->SetInputEnabled(!sign_out_only); 365 web_ui()->SetInputEnabled(!sign_out_only);
368 delegate_->ShowErrorMessage(error_msg_id, help_topic_id); 366 web_ui()->ShowErrorMessage(error_msg_id, help_topic_id);
369 } 367 }
370 368
371 void ScreenLocker::SetLoginStatusConsumer( 369 void ScreenLocker::SetLoginStatusConsumer(
372 chromeos::AuthStatusConsumer* consumer) { 370 chromeos::AuthStatusConsumer* consumer) {
373 auth_status_consumer_ = consumer; 371 auth_status_consumer_ = consumer;
374 } 372 }
375 373
376 // static 374 // static
377 void ScreenLocker::InitClass() { 375 void ScreenLocker::InitClass() {
378 DCHECK(!g_screen_lock_observer); 376 DCHECK(!g_screen_lock_observer);
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 content::Source<ScreenLocker>(this), 528 content::Source<ScreenLocker>(this),
531 content::Details<bool>(&state)); 529 content::Details<bool>(&state));
532 VLOG(1) << "Calling session manager's HandleLockScreenShown D-Bus method"; 530 VLOG(1) << "Calling session manager's HandleLockScreenShown D-Bus method";
533 DBusThreadManager::Get()->GetSessionManagerClient()->NotifyLockScreenShown(); 531 DBusThreadManager::Get()->GetSessionManagerClient()->NotifyLockScreenShown();
534 532
535 input_method::InputMethodManager::Get() 533 input_method::InputMethodManager::Get()
536 ->GetActiveIMEState() 534 ->GetActiveIMEState()
537 ->EnableLockScreenLayouts(); 535 ->EnableLockScreenLayouts();
538 } 536 }
539 537
540 content::WebUI* ScreenLocker::GetAssociatedWebUI() {
541 return delegate_->GetAssociatedWebUI();
542 }
543
544 bool ScreenLocker::IsUserLoggedIn(const AccountId& account_id) const { 538 bool ScreenLocker::IsUserLoggedIn(const AccountId& account_id) const {
545 for (user_manager::User* user : users_) { 539 for (user_manager::User* user : users_) {
546 if (user->GetAccountId() == account_id) 540 if (user->GetAccountId() == account_id)
547 return true; 541 return true;
548 } 542 }
549 return false; 543 return false;
550 } 544 }
551 545
552 } // namespace chromeos 546 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/login/lock/screen_locker.h ('k') | chrome/browser/chromeos/login/lock/screen_locker_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698