| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ash/system/status_area_widget_test_helper.h" |
| |
| #include "ash/root_window_controller.h" |
| #include "ash/session/session_controller_impl.h" |
| #include "ash/shell.h" |
| #include "ash/system/status_area_widget.h" |
| #include "base/run_loop.h" |
| #include "ui/compositor/layer_animation_observer.h" |
| |
| namespace ash { |
| |
| // An observer that quits a run loop when the animation finishes. |
| class AnimationEndObserver : public ui::LayerAnimationObserver { |
| public: |
| explicit AnimationEndObserver(ui::LayerAnimator* animator) |
| : animator_(animator) { |
| animator_->AddObserver(this); |
| } |
| ~AnimationEndObserver() override { animator_->RemoveObserver(this); } |
| |
| void WaitForAnimationEnd() { |
| if (!animator_->is_animating()) |
| return; |
| // This will return immediately if |Quit| was already called. |
| run_loop_.Run(); |
| } |
| |
| // ui::LayerAnimationObserver: |
| void OnLayerAnimationEnded(ui::LayerAnimationSequence* sequence) override { |
| run_loop_.Quit(); |
| } |
| |
| void OnLayerAnimationAborted(ui::LayerAnimationSequence* sequence) override {} |
| |
| void OnLayerAnimationScheduled( |
| ui::LayerAnimationSequence* sequence) override {} |
| |
| private: |
| ui::LayerAnimator* animator_; |
| base::RunLoop run_loop_; |
| }; |
| |
| LoginStatus StatusAreaWidgetTestHelper::GetUserLoginStatus() { |
| return Shell::Get()->session_controller()->login_status(); |
| } |
| |
| StatusAreaWidget* StatusAreaWidgetTestHelper::GetStatusAreaWidget() { |
| return Shell::GetPrimaryRootWindowController()->GetStatusAreaWidget(); |
| } |
| |
| StatusAreaWidget* StatusAreaWidgetTestHelper::GetSecondaryStatusAreaWidget() { |
| RootWindowController* primary_controller = |
| Shell::GetPrimaryRootWindowController(); |
| Shell::RootWindowControllerList controllers = |
| Shell::GetAllRootWindowControllers(); |
| for (size_t i = 0; i < controllers.size(); ++i) { |
| if (controllers[i] != primary_controller) |
| return controllers[i]->GetStatusAreaWidget(); |
| } |
| |
| return nullptr; |
| } |
| |
| void StatusAreaWidgetTestHelper::WaitForAnimationEnd( |
| StatusAreaWidget* status_area_widget) { |
| AnimationEndObserver observer(status_area_widget->GetLayer()->GetAnimator()); |
| observer.WaitForAnimationEnd(); |
| status_area_widget->GetLayer()->GetAnimator()->StopAnimating(); |
| } |
| |
| } // namespace ash |