| Index: chrome/browser/chromeos/login/ui/login_display_host_impl.cc
|
| diff --git a/chrome/browser/chromeos/login/ui/login_display_host_impl.cc b/chrome/browser/chromeos/login/ui/login_display_host_impl.cc
|
| index a498e861c9d909c276d7263028ab47c2232d2eb3..8b36df361eea4f40add4fdf463961168b84b59ca 100644
|
| --- a/chrome/browser/chromeos/login/ui/login_display_host_impl.cc
|
| +++ b/chrome/browser/chromeos/login/ui/login_display_host_impl.cc
|
| @@ -291,6 +291,16 @@ void ResetKeyboardOverscrollOverride() {
|
| keyboard::KEYBOARD_OVERSCROLL_OVERRIDE_NONE);
|
| }
|
|
|
| +void ScheduleCompletionCallbacks(std::vector<base::OnceClosure>&& callbacks) {
|
| + for (auto& callback : callbacks) {
|
| + if (callback.is_null())
|
| + continue;
|
| +
|
| + base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
|
| + std::move(callback));
|
| + }
|
| +}
|
| +
|
| } // namespace
|
|
|
| namespace chromeos {
|
| @@ -503,6 +513,8 @@ LoginDisplayHostImpl::~LoginDisplayHostImpl() {
|
| views::FocusManager::set_arrow_key_traversal_enabled(false);
|
| ResetLoginWindowAndView();
|
|
|
| + ScheduleCompletionCallbacks(std::move(completion_callbacks_));
|
| +
|
| keep_alive_.reset();
|
|
|
| default_host_ = nullptr;
|
| @@ -536,9 +548,11 @@ void LoginDisplayHostImpl::BeforeSessionStart() {
|
| session_starting_ = true;
|
| }
|
|
|
| -void LoginDisplayHostImpl::Finalize() {
|
| +void LoginDisplayHostImpl::Finalize(base::OnceClosure completion_callback) {
|
| DVLOG(1) << "Finalizing LoginDisplayHost. User session starting";
|
|
|
| + completion_callbacks_.push_back(std::move(completion_callback));
|
| +
|
| switch (finalize_animation_type_) {
|
| case ANIMATION_NONE:
|
| ShutdownDisplayHost(false);
|
| @@ -621,11 +635,11 @@ AppLaunchController* LoginDisplayHostImpl::GetAppLaunchController() {
|
| }
|
|
|
| void LoginDisplayHostImpl::StartUserAdding(
|
| - const base::Closure& completion_callback) {
|
| + base::OnceClosure completion_callback) {
|
| DisableKeyboardOverscroll();
|
|
|
| restore_path_ = RESTORE_ADD_USER_INTO_SESSION;
|
| - completion_callback_ = completion_callback;
|
| + completion_callbacks_.push_back(std::move(completion_callback));
|
| // Animation is not supported in Mash
|
| if (!ash_util::IsRunningInMash())
|
| finalize_animation_type_ = ANIMATION_ADD_USER;
|
| @@ -677,7 +691,7 @@ void LoginDisplayHostImpl::CancelUserAdding() {
|
| // canceled. Changing to ANIMATION_NONE so that Finalize() shuts down the host
|
| // immediately.
|
| finalize_animation_type_ = ANIMATION_NONE;
|
| - Finalize();
|
| + Finalize(base::OnceClosure());
|
| }
|
|
|
| void LoginDisplayHostImpl::StartSignInScreen(
|
| @@ -1031,11 +1045,6 @@ void LoginDisplayHostImpl::ShutdownDisplayHost(bool post_quit_task) {
|
| base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this);
|
| if (post_quit_task)
|
| base::MessageLoop::current()->QuitWhenIdle();
|
| -
|
| - if (!completion_callback_.is_null()) {
|
| - base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
|
| - completion_callback_);
|
| - }
|
| }
|
|
|
| void LoginDisplayHostImpl::ScheduleWorkspaceAnimation() {
|
| @@ -1043,18 +1052,11 @@ void LoginDisplayHostImpl::ScheduleWorkspaceAnimation() {
|
| NOTIMPLEMENTED();
|
| return;
|
| }
|
| - if (ash::Shell::GetContainer(ash::Shell::GetPrimaryRootWindow(),
|
| - ash::kShellWindowId_WallpaperContainer)
|
| - ->children()
|
| - .empty()) {
|
| - // If there is no wallpaper window, don't perform any animation on the
|
| - // default and wallpaper layer because there is nothing behind it.
|
| - return;
|
| - }
|
|
|
| if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| - switches::kDisableLoginAnimations))
|
| + switches::kDisableLoginAnimations)) {
|
| ash::Shell::Get()->DoInitialWorkspaceAnimation();
|
| + }
|
| }
|
|
|
| void LoginDisplayHostImpl::ScheduleFadeOutAnimation(int animation_speed_ms) {
|
| @@ -1122,7 +1124,7 @@ void LoginDisplayHostImpl::StartPostponedWebUI() {
|
| StartSignInScreen(LoginScreenContext());
|
| break;
|
| case RESTORE_ADD_USER_INTO_SESSION:
|
| - StartUserAdding(completion_callback_);
|
| + StartUserAdding(base::OnceClosure());
|
| break;
|
| default:
|
| NOTREACHED();
|
|
|