| Index: chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos_unittest.cc
|
| diff --git a/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos_unittest.cc b/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos_unittest.cc
|
| index 29da872897688d5f2cddc05d334c2809e56820b9..32c9ce95e633c69f63b9091af82fc47b6dffec8c 100644
|
| --- a/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos_unittest.cc
|
| +++ b/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos_unittest.cc
|
| @@ -2,6 +2,8 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include "ash/root_window_controller.h"
|
| +#include "ash/shelf/shelf_widget.h"
|
| #include "ash/shell.h"
|
| #include "ash/shell_window_ids.h"
|
| #include "ash/test/ash_test_base.h"
|
| @@ -768,6 +770,9 @@ TEST_F(MultiUserWindowManagerChromeOSTest, AnimationSteps) {
|
| ash::Shell::GetInstance()->GetShelfAutoHideBehavior(
|
| window(0)->GetRootWindow()));
|
| EXPECT_EQ(1.0f, window(0)->layer()->GetTargetOpacity());
|
| + ash::ShelfWidget* shelf = ash::RootWindowController::ForWindow(
|
| + window(0))->shelf();
|
| + EXPECT_FALSE(shelf->IsShelfHiddenBehindBlackBar());
|
|
|
| // Start the animation and see that the old window is becoming invisible, the
|
| // new one visible, the background starts transitionining and the shelf hides.
|
| @@ -779,6 +784,7 @@ TEST_F(MultiUserWindowManagerChromeOSTest, AnimationSteps) {
|
| EXPECT_EQ(ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN,
|
| ash::Shell::GetInstance()->GetShelfAutoHideBehavior(
|
| window(0)->GetRootWindow()));
|
| + EXPECT_FALSE(shelf->IsShelfHiddenBehindBlackBar());
|
|
|
| // Staring the next step should show the shelf again, but there are many
|
| // subsystems missing (preferences system, ChromeLauncherController, ...)
|
| @@ -790,9 +796,11 @@ TEST_F(MultiUserWindowManagerChromeOSTest, AnimationSteps) {
|
| EXPECT_EQ(ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN,
|
| ash::Shell::GetInstance()->GetShelfAutoHideBehavior(
|
| window(0)->GetRootWindow()));
|
| + EXPECT_FALSE(shelf->IsShelfHiddenBehindBlackBar());
|
|
|
| // After the finalize the animation of the wallpaper should be finished.
|
| AdvanceUserTransitionAnimation();
|
| + EXPECT_FALSE(shelf->IsShelfHiddenBehindBlackBar());
|
| EXPECT_EQ("B", GetWallaperUserIdForTest());
|
| }
|
|
|
| @@ -990,5 +998,86 @@ TEST_F(MultiUserWindowManagerChromeOSTest, ShowForUserSwitchesDesktop) {
|
| EXPECT_EQ("H[a,b], H[b], S[c]", GetStatus());
|
| }
|
|
|
| +class TestWindowObserver : public aura::WindowObserver {
|
| + public:
|
| + TestWindowObserver(): resize_calls_(0) {}
|
| + virtual ~TestWindowObserver() {};
|
| +
|
| + virtual void OnWindowBoundsChanged(aura::Window* window,
|
| + const gfx::Rect& old_bounds,
|
| + const gfx::Rect& new_bounds) OVERRIDE {
|
| + resize_calls_++;
|
| + }
|
| +
|
| + int resize_calls() { return resize_calls_; }
|
| +
|
| + private:
|
| + int resize_calls_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestWindowObserver);
|
| +};
|
| +
|
| +// Test that switching between users with the shelf in the same place, the shelf
|
| +// will get covered with a black bar instead being hidden and re-shown.
|
| +TEST_F(MultiUserWindowManagerChromeOSTest, TestBlackBarCover) {
|
| + SetUpForThisManyWindows(2);
|
| + multi_user_window_manager()->SetWindowOwner(window(0), "A");
|
| + multi_user_window_manager()->SetWindowOwner(window(1), "B");
|
| + aura::Window* root_window = ash::Shell::GetInstance()->GetPrimaryRootWindow();
|
| +
|
| + // Turn the use of delays and animation on.
|
| + multi_user_window_manager()->SetAnimationSpeedForTest(
|
| + chrome::MultiUserWindowManagerChromeOS::ANIMATION_SPEED_FAST);
|
| + EXPECT_NE(ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN,
|
| + ash::Shell::GetInstance()->GetShelfAutoHideBehavior(root_window));
|
| + ash::ShelfWidget* shelf = ash::RootWindowController::ForWindow(
|
| + root_window)->shelf();
|
| + EXPECT_FALSE(shelf->IsShelfHiddenBehindBlackBar());
|
| +
|
| + // First test that with no maximized window we show/hide the shelf.
|
| + StartUserTransitionAnimation("B");
|
| + EXPECT_FALSE(shelf->IsShelfHiddenBehindBlackBar());
|
| + EXPECT_EQ(ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN,
|
| + ash::Shell::GetInstance()->GetShelfAutoHideBehavior(root_window));
|
| +
|
| + // Staring the next step should show the shelf again.
|
| + AdvanceUserTransitionAnimation();
|
| + EXPECT_FALSE(shelf->IsShelfHiddenBehindBlackBar());
|
| +
|
| + AdvanceUserTransitionAnimation();
|
| + EXPECT_FALSE(shelf->IsShelfHiddenBehindBlackBar());
|
| + ash::Shell::GetInstance()->SetShelfAutoHideBehavior(
|
| + ash::SHELF_AUTO_HIDE_BEHAVIOR_NEVER, root_window);
|
| +
|
| + // Now we maximize the windows which will cause the black overlay to show up.
|
| + wm::GetWindowState(window(0))->Maximize();
|
| + wm::GetWindowState(window(1))->Maximize();
|
| + // We set a window observer on both windows to see that no resize is performed
|
| + // on our test windows.
|
| + TestWindowObserver window_observer;
|
| + window(0)->AddObserver(&window_observer);
|
| + window(1)->AddObserver(&window_observer);
|
| +
|
| + // Start the animation and see that the shelf gets hidden by the black bar,
|
| + // and the AutoHide behavior remains as it was.
|
| + StartUserTransitionAnimation("A");
|
| + EXPECT_TRUE(shelf->IsShelfHiddenBehindBlackBar());
|
| + EXPECT_NE(ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN,
|
| + ash::Shell::GetInstance()->GetShelfAutoHideBehavior(root_window));
|
| +
|
| + // Staring the next step should show the shelf again.
|
| + AdvanceUserTransitionAnimation();
|
| + EXPECT_FALSE(shelf->IsShelfHiddenBehindBlackBar());
|
| + EXPECT_NE(ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN,
|
| + ash::Shell::GetInstance()->GetShelfAutoHideBehavior(root_window));
|
| +
|
| + AdvanceUserTransitionAnimation();
|
| + EXPECT_FALSE(shelf->IsShelfHiddenBehindBlackBar());
|
| + window(0)->RemoveObserver(&window_observer);
|
| + window(1)->RemoveObserver(&window_observer);
|
| + // No resize should have been done to the window.
|
| + EXPECT_EQ(0, window_observer.resize_calls());
|
| +}
|
| +
|
| } // namespace test
|
| } // namespace ash
|
|
|