Index: ash/wm/shelf_layout_manager_unittest.cc |
diff --git a/ash/wm/shelf_layout_manager_unittest.cc b/ash/wm/shelf_layout_manager_unittest.cc |
deleted file mode 100644 |
index 2de43a59cfab6a27b681a5aba74c96cc9e723cc5..0000000000000000000000000000000000000000 |
--- a/ash/wm/shelf_layout_manager_unittest.cc |
+++ /dev/null |
@@ -1,1132 +0,0 @@ |
-// Copyright (c) 2012 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/wm/shelf_layout_manager.h" |
- |
-#include "ash/accelerators/accelerator_controller.h" |
-#include "ash/accelerators/accelerator_table.h" |
-#include "ash/ash_switches.h" |
-#include "ash/display/display_manager.h" |
-#include "ash/focus_cycler.h" |
-#include "ash/launcher/launcher.h" |
-#include "ash/root_window_controller.h" |
-#include "ash/screen_ash.h" |
-#include "ash/shell.h" |
-#include "ash/shell_delegate.h" |
-#include "ash/shell_window_ids.h" |
-#include "ash/system/status_area_widget.h" |
-#include "ash/system/tray/system_tray.h" |
-#include "ash/system/tray/system_tray_item.h" |
-#include "ash/test/ash_test_base.h" |
-#include "ash/wm/window_util.h" |
-#include "base/command_line.h" |
-#include "base/utf_string_conversions.h" |
-#include "ui/aura/client/aura_constants.h" |
-#include "ui/aura/root_window.h" |
-#include "ui/aura/test/event_generator.h" |
-#include "ui/aura/window.h" |
-#include "ui/base/animation/animation_container_element.h" |
-#include "ui/compositor/layer.h" |
-#include "ui/compositor/layer_animator.h" |
-#include "ui/gfx/display.h" |
-#include "ui/gfx/screen.h" |
-#include "ui/views/controls/label.h" |
-#include "ui/views/layout/fill_layout.h" |
-#include "ui/views/view.h" |
-#include "ui/views/widget/widget.h" |
- |
-#if defined(OS_WIN) |
-#include "base/win/windows_version.h" |
-#endif |
- |
-namespace ash { |
-namespace internal { |
- |
-namespace { |
- |
-void StepWidgetLayerAnimatorToEnd(views::Widget* widget) { |
- ui::AnimationContainerElement* element = |
- static_cast<ui::AnimationContainerElement*>( |
- widget->GetNativeView()->layer()->GetAnimator()); |
- element->Step(base::TimeTicks::Now() + base::TimeDelta::FromSeconds(1)); |
-} |
- |
-ShelfLayoutManager* GetShelfLayoutManager() { |
- return Shell::GetPrimaryRootWindowController()->shelf(); |
-} |
- |
-SystemTray* GetSystemTray() { |
- return Shell::GetPrimaryRootWindowController()->GetSystemTray(); |
-} |
- |
-class ShelfLayoutObserverTest : public ShelfLayoutManager::Observer { |
- public: |
- ShelfLayoutObserverTest() |
- : changed_auto_hide_state_(false) { |
- } |
- |
- virtual ~ShelfLayoutObserverTest() {} |
- |
- bool changed_auto_hide_state() const { return changed_auto_hide_state_; } |
- |
- private: |
- virtual void OnAutoHideStateChanged( |
- ShelfAutoHideState new_state) OVERRIDE { |
- changed_auto_hide_state_ = true; |
- } |
- |
- bool changed_auto_hide_state_; |
- |
- DISALLOW_COPY_AND_ASSIGN(ShelfLayoutObserverTest); |
-}; |
- |
-// Trivial item implementation that tracks its views for testing. |
-class TestItem : public SystemTrayItem { |
- public: |
- TestItem() |
- : SystemTrayItem(GetSystemTray()), |
- tray_view_(NULL), |
- default_view_(NULL), |
- detailed_view_(NULL), |
- notification_view_(NULL) {} |
- |
- virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE { |
- tray_view_ = new views::View; |
- // Add a label so it has non-zero width. |
- tray_view_->SetLayoutManager(new views::FillLayout); |
- tray_view_->AddChildView(new views::Label(UTF8ToUTF16("Tray"))); |
- return tray_view_; |
- } |
- |
- virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE { |
- default_view_ = new views::View; |
- default_view_->SetLayoutManager(new views::FillLayout); |
- default_view_->AddChildView(new views::Label(UTF8ToUTF16("Default"))); |
- return default_view_; |
- } |
- |
- virtual views::View* CreateDetailedView(user::LoginStatus status) OVERRIDE { |
- detailed_view_ = new views::View; |
- detailed_view_->SetLayoutManager(new views::FillLayout); |
- detailed_view_->AddChildView(new views::Label(UTF8ToUTF16("Detailed"))); |
- return detailed_view_; |
- } |
- |
- virtual views::View* CreateNotificationView( |
- user::LoginStatus status) OVERRIDE { |
- notification_view_ = new views::View; |
- return notification_view_; |
- } |
- |
- virtual void DestroyTrayView() OVERRIDE { |
- tray_view_ = NULL; |
- } |
- |
- virtual void DestroyDefaultView() OVERRIDE { |
- default_view_ = NULL; |
- } |
- |
- virtual void DestroyDetailedView() OVERRIDE { |
- detailed_view_ = NULL; |
- } |
- |
- virtual void DestroyNotificationView() OVERRIDE { |
- notification_view_ = NULL; |
- } |
- |
- virtual void UpdateAfterLoginStatusChange( |
- user::LoginStatus status) OVERRIDE {} |
- |
- views::View* tray_view() const { return tray_view_; } |
- views::View* default_view() const { return default_view_; } |
- views::View* detailed_view() const { return detailed_view_; } |
- views::View* notification_view() const { return notification_view_; } |
- |
- private: |
- views::View* tray_view_; |
- views::View* default_view_; |
- views::View* detailed_view_; |
- views::View* notification_view_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TestItem); |
-}; |
- |
-} // namespace |
- |
-class ShelfLayoutManagerTest : public ash::test::AshTestBase { |
- public: |
- ShelfLayoutManagerTest() {} |
- |
- void SetState(ShelfLayoutManager* shelf, |
- ShelfVisibilityState state) { |
- shelf->SetState(state); |
- } |
- |
- void UpdateAutoHideStateNow() { |
- GetShelfLayoutManager()->UpdateAutoHideStateNow(); |
- } |
- |
- aura::Window* CreateTestWindow() { |
- aura::Window* window = new aura::Window(NULL); |
- window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); |
- window->SetType(aura::client::WINDOW_TYPE_NORMAL); |
- window->Init(ui::LAYER_TEXTURED); |
- SetDefaultParentByPrimaryRootWindow(window); |
- return window; |
- } |
- |
- views::Widget* CreateTestWidgetWithParams( |
- const views::Widget::InitParams& params) { |
- views::Widget* out = new views::Widget; |
- out->Init(params); |
- out->Show(); |
- return out; |
- } |
- |
- // Create a simple widget attached to the current context (will |
- // delete on TearDown). |
- views::Widget* CreateTestWidget() { |
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); |
- params.bounds = gfx::Rect(0, 0, 200, 200); |
- params.context = CurrentContext(); |
- return CreateTestWidgetWithParams(params); |
- } |
- |
- // Overridden from AshTestBase: |
- virtual void SetUp() OVERRIDE { |
- CommandLine::ForCurrentProcess()->AppendSwitch( |
- ash::switches::kAshEnableTrayDragging); |
- test::AshTestBase::SetUp(); |
- } |
- private: |
- DISALLOW_COPY_AND_ASSIGN(ShelfLayoutManagerTest); |
-}; |
- |
-// Fails on Mac only. Need to be implemented. http://crbug.com/111279. |
-#if defined(OS_MACOSX) || defined(OS_WIN) |
-#define MAYBE_SetVisible DISABLED_SetVisible |
-#else |
-#define MAYBE_SetVisible SetVisible |
-#endif |
-// Makes sure SetVisible updates work area and widget appropriately. |
-TEST_F(ShelfLayoutManagerTest, MAYBE_SetVisible) { |
- ShelfLayoutManager* shelf = GetShelfLayoutManager(); |
- // Force an initial layout. |
- shelf->LayoutShelf(); |
- EXPECT_EQ(SHELF_VISIBLE, shelf->visibility_state()); |
- |
- gfx::Rect status_bounds( |
- shelf->status_area_widget()->GetWindowBoundsInScreen()); |
- gfx::Rect launcher_bounds( |
- shelf->launcher_widget()->GetWindowBoundsInScreen()); |
- int shelf_height = shelf->GetIdealBounds().height(); |
- |
- const gfx::Display& display = Shell::GetInstance()->display_manager()-> |
- GetDisplayNearestWindow(Shell::GetPrimaryRootWindow()); |
- ASSERT_NE(-1, display.id()); |
- // Bottom inset should be the max of widget heights. |
- EXPECT_EQ(shelf_height, |
- display.bounds().bottom() - display.work_area().bottom()); |
- |
- // Hide the shelf. |
- SetState(shelf, SHELF_HIDDEN); |
- // Run the animation to completion. |
- StepWidgetLayerAnimatorToEnd(shelf->launcher_widget()); |
- StepWidgetLayerAnimatorToEnd(shelf->status_area_widget()); |
- EXPECT_EQ(SHELF_HIDDEN, shelf->visibility_state()); |
- EXPECT_EQ(0, |
- display.bounds().bottom() - display.work_area().bottom()); |
- |
- // Make sure the bounds of the two widgets changed. |
- EXPECT_GE(shelf->launcher_widget()->GetNativeView()->bounds().y(), |
- Shell::GetScreen()->GetPrimaryDisplay().bounds().bottom()); |
- EXPECT_GE(shelf->status_area_widget()->GetNativeView()->bounds().y(), |
- Shell::GetScreen()->GetPrimaryDisplay().bounds().bottom()); |
- |
- // And show it again. |
- SetState(shelf, SHELF_VISIBLE); |
- // Run the animation to completion. |
- StepWidgetLayerAnimatorToEnd(shelf->launcher_widget()); |
- StepWidgetLayerAnimatorToEnd(shelf->status_area_widget()); |
- EXPECT_EQ(SHELF_VISIBLE, shelf->visibility_state()); |
- EXPECT_EQ(shelf_height, |
- display.bounds().bottom() - display.work_area().bottom()); |
- |
- // Make sure the bounds of the two widgets changed. |
- launcher_bounds = shelf->launcher_widget()->GetNativeView()->bounds(); |
- int bottom = |
- Shell::GetScreen()->GetPrimaryDisplay().bounds().bottom() - shelf_height; |
- EXPECT_EQ(launcher_bounds.y(), |
- bottom + (shelf->GetIdealBounds().height() - |
- launcher_bounds.height()) / 2); |
- status_bounds = shelf->status_area_widget()->GetNativeView()->bounds(); |
- EXPECT_EQ(status_bounds.y(), |
- bottom + shelf_height - status_bounds.height()); |
-} |
- |
-// Makes sure LayoutShelf invoked while animating cleans things up. |
-TEST_F(ShelfLayoutManagerTest, LayoutShelfWhileAnimating) { |
- ShelfLayoutManager* shelf = GetShelfLayoutManager(); |
- // Force an initial layout. |
- shelf->LayoutShelf(); |
- EXPECT_EQ(SHELF_VISIBLE, shelf->visibility_state()); |
- |
- const gfx::Display& display = Shell::GetInstance()->display_manager()-> |
- GetDisplayNearestWindow(Shell::GetPrimaryRootWindow()); |
- |
- // Hide the shelf. |
- SetState(shelf, SHELF_HIDDEN); |
- shelf->LayoutShelf(); |
- EXPECT_EQ(SHELF_HIDDEN, shelf->visibility_state()); |
- EXPECT_EQ(0, display.bounds().bottom() - display.work_area().bottom()); |
- |
- // Make sure the bounds of the two widgets changed. |
- EXPECT_GE(shelf->launcher_widget()->GetNativeView()->bounds().y(), |
- Shell::GetScreen()->GetPrimaryDisplay().bounds().bottom()); |
- EXPECT_GE(shelf->status_area_widget()->GetNativeView()->bounds().y(), |
- Shell::GetScreen()->GetPrimaryDisplay().bounds().bottom()); |
-} |
- |
-// Makes sure the launcher is initially sized correctly. |
-TEST_F(ShelfLayoutManagerTest, LauncherInitiallySized) { |
- Launcher* launcher = Launcher::ForPrimaryDisplay(); |
- ASSERT_TRUE(launcher); |
- ShelfLayoutManager* shelf_layout_manager = GetShelfLayoutManager(); |
- ASSERT_TRUE(shelf_layout_manager); |
- ASSERT_TRUE(shelf_layout_manager->status_area_widget()); |
- int status_width = shelf_layout_manager->status_area_widget()-> |
- GetWindowBoundsInScreen().width(); |
- // Test only makes sense if the status is > 0, which is better be. |
- EXPECT_GT(status_width, 0); |
- EXPECT_EQ(status_width, launcher->status_size().width()); |
-} |
- |
-// Makes sure the launcher is sized when the status area changes size. |
-TEST_F(ShelfLayoutManagerTest, LauncherUpdatedWhenStatusAreaChangesSize) { |
- Launcher* launcher = Launcher::ForPrimaryDisplay(); |
- ASSERT_TRUE(launcher); |
- ShelfLayoutManager* shelf_layout_manager = GetShelfLayoutManager(); |
- ASSERT_TRUE(shelf_layout_manager); |
- ASSERT_TRUE(shelf_layout_manager->status_area_widget()); |
- shelf_layout_manager->status_area_widget()->SetBounds( |
- gfx::Rect(0, 0, 200, 200)); |
- EXPECT_EQ(200, launcher->status_size().width()); |
-} |
- |
-// Verifies when the shell is deleted with a full screen window we don't |
-// crash. This test is here as originally the crash was in ShelfLayoutManager. |
-TEST_F(ShelfLayoutManagerTest, DontReferenceLauncherAfterDeletion) { |
- views::Widget* widget = new views::Widget; |
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); |
- params.bounds = gfx::Rect(0, 0, 200, 200); |
- params.context = CurrentContext(); |
- // Widget is now owned by the parent window. |
- widget->Init(params); |
- widget->SetFullscreen(true); |
-} |
- |
-#if defined(OS_WIN) |
-// RootWindow and Display can't resize on Windows Ash. http://crbug.com/165962 |
-#define MAYBE_AutoHide DISABLED_AutoHide |
-#else |
-#define MAYBE_AutoHide AutoHide |
-#endif |
- |
-// Various assertions around auto-hide. |
-TEST_F(ShelfLayoutManagerTest, MAYBE_AutoHide) { |
- aura::RootWindow* root = Shell::GetPrimaryRootWindow(); |
- aura::test::EventGenerator generator(root, root); |
- generator.MoveMouseTo(0, 0); |
- |
- ShelfLayoutManager* shelf = GetShelfLayoutManager(); |
- shelf->SetAutoHideBehavior(ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
- views::Widget* widget = new views::Widget; |
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); |
- params.bounds = gfx::Rect(0, 0, 200, 200); |
- params.context = CurrentContext(); |
- // Widget is now owned by the parent window. |
- widget->Init(params); |
- widget->Maximize(); |
- widget->Show(); |
- EXPECT_EQ(SHELF_AUTO_HIDE, shelf->visibility_state()); |
- EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); |
- |
- // LayoutShelf() forces the animation to completion, at which point the |
- // launcher should go off the screen. |
- shelf->LayoutShelf(); |
- EXPECT_EQ(root->bounds().bottom() - ShelfLayoutManager::kAutoHideSize, |
- shelf->launcher_widget()->GetWindowBoundsInScreen().y()); |
- EXPECT_EQ(root->bounds().bottom() - ShelfLayoutManager::kAutoHideSize, |
- Shell::GetScreen()->GetDisplayNearestWindow( |
- root).work_area().bottom()); |
- |
- // Move the mouse to the bottom of the screen. |
- generator.MoveMouseTo(0, root->bounds().bottom() - 1); |
- |
- // Shelf should be shown again (but it shouldn't have changed the work area). |
- SetState(shelf, SHELF_AUTO_HIDE); |
- EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); |
- shelf->LayoutShelf(); |
- EXPECT_EQ(root->bounds().bottom() - shelf->GetIdealBounds().height(), |
- shelf->launcher_widget()->GetWindowBoundsInScreen().y()); |
- EXPECT_EQ(root->bounds().bottom() - ShelfLayoutManager::kAutoHideSize, |
- Shell::GetScreen()->GetDisplayNearestWindow( |
- root).work_area().bottom()); |
- |
- // Move mouse back up. |
- generator.MoveMouseTo(0, 0); |
- SetState(shelf, SHELF_AUTO_HIDE); |
- EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); |
- shelf->LayoutShelf(); |
- EXPECT_EQ(root->bounds().bottom() - ShelfLayoutManager::kAutoHideSize, |
- shelf->launcher_widget()->GetWindowBoundsInScreen().y()); |
- |
- // Drag mouse to bottom of screen. |
- generator.PressLeftButton(); |
- generator.MoveMouseTo(0, root->bounds().bottom() - 1); |
- UpdateAutoHideStateNow(); |
- EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); |
- |
- generator.ReleaseLeftButton(); |
- generator.MoveMouseTo(1, root->bounds().bottom() - 1); |
- UpdateAutoHideStateNow(); |
- EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); |
- generator.PressLeftButton(); |
- generator.MoveMouseTo(1, root->bounds().bottom() - 1); |
- UpdateAutoHideStateNow(); |
- EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); |
-} |
- |
-// Assertions around the lock screen showing. |
-TEST_F(ShelfLayoutManagerTest, VisibleWhenLockScreenShowing) { |
- // Since ShelfLayoutManager queries for mouse location, move the mouse so |
- // it isn't over the shelf. |
- aura::test::EventGenerator generator( |
- Shell::GetPrimaryRootWindow(), gfx::Point()); |
- generator.MoveMouseTo(0, 0); |
- |
- ShelfLayoutManager* shelf = GetShelfLayoutManager(); |
- shelf->SetAutoHideBehavior(ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
- views::Widget* widget = new views::Widget; |
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); |
- params.bounds = gfx::Rect(0, 0, 200, 200); |
- params.context = CurrentContext(); |
- // Widget is now owned by the parent window. |
- widget->Init(params); |
- widget->Maximize(); |
- widget->Show(); |
- EXPECT_EQ(SHELF_AUTO_HIDE, shelf->visibility_state()); |
- EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); |
- |
- aura::RootWindow* root = Shell::GetPrimaryRootWindow(); |
- // LayoutShelf() forces the animation to completion, at which point the |
- // launcher should go off the screen. |
- shelf->LayoutShelf(); |
- EXPECT_EQ(root->bounds().bottom() - ShelfLayoutManager::kAutoHideSize, |
- shelf->launcher_widget()->GetWindowBoundsInScreen().y()); |
- |
- aura::Window* lock_container = Shell::GetContainer( |
- Shell::GetPrimaryRootWindow(), |
- internal::kShellWindowId_LockScreenContainer); |
- |
- views::Widget* lock_widget = new views::Widget; |
- views::Widget::InitParams lock_params( |
- views::Widget::InitParams::TYPE_WINDOW); |
- lock_params.bounds = gfx::Rect(0, 0, 200, 200); |
- params.context = CurrentContext(); |
- lock_params.parent = lock_container; |
- // Widget is now owned by the parent window. |
- lock_widget->Init(lock_params); |
- lock_widget->Maximize(); |
- lock_widget->Show(); |
- |
- // Lock the screen. |
- Shell::GetInstance()->delegate()->LockScreen(); |
- shelf->UpdateVisibilityState(); |
- // Showing a widget in the lock screen should force the shelf to be visibile. |
- EXPECT_EQ(SHELF_VISIBLE, shelf->visibility_state()); |
- |
- Shell::GetInstance()->delegate()->UnlockScreen(); |
- shelf->UpdateVisibilityState(); |
- EXPECT_EQ(SHELF_AUTO_HIDE, shelf->visibility_state()); |
-} |
- |
-// Assertions around SetAutoHideBehavior. |
-TEST_F(ShelfLayoutManagerTest, SetAutoHideBehavior) { |
- // Since ShelfLayoutManager queries for mouse location, move the mouse so |
- // it isn't over the shelf. |
- aura::test::EventGenerator generator( |
- Shell::GetPrimaryRootWindow(), gfx::Point()); |
- generator.MoveMouseTo(0, 0); |
- |
- ShelfLayoutManager* shelf = GetShelfLayoutManager(); |
- views::Widget* widget = new views::Widget; |
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); |
- params.bounds = gfx::Rect(0, 0, 200, 200); |
- params.context = CurrentContext(); |
- // Widget is now owned by the parent window. |
- widget->Init(params); |
- widget->Show(); |
- aura::Window* window = widget->GetNativeWindow(); |
- gfx::Rect display_bounds( |
- Shell::GetScreen()->GetDisplayNearestWindow(window).bounds()); |
- |
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
- EXPECT_EQ(SHELF_AUTO_HIDE, shelf->visibility_state()); |
- |
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_NEVER); |
- EXPECT_EQ(SHELF_VISIBLE, shelf->visibility_state()); |
- |
- widget->Maximize(); |
- EXPECT_EQ(SHELF_VISIBLE, shelf->visibility_state()); |
- EXPECT_EQ(Shell::GetScreen()->GetDisplayNearestWindow( |
- window).work_area().bottom(), |
- widget->GetWorkAreaBoundsInScreen().bottom()); |
- |
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
- EXPECT_EQ(SHELF_AUTO_HIDE, shelf->visibility_state()); |
- EXPECT_EQ(Shell::GetScreen()->GetDisplayNearestWindow( |
- window).work_area().bottom(), |
- widget->GetWorkAreaBoundsInScreen().bottom()); |
- |
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_NEVER); |
- EXPECT_EQ(SHELF_VISIBLE, shelf->visibility_state()); |
- EXPECT_EQ(Shell::GetScreen()->GetDisplayNearestWindow( |
- window).work_area().bottom(), |
- widget->GetWorkAreaBoundsInScreen().bottom()); |
-} |
- |
-// Verifies the shelf is visible when status/launcher is focused. |
-TEST_F(ShelfLayoutManagerTest, VisibleWhenStatusOrLauncherFocused) { |
- // Since ShelfLayoutManager queries for mouse location, move the mouse so |
- // it isn't over the shelf. |
- aura::test::EventGenerator generator( |
- Shell::GetPrimaryRootWindow(), gfx::Point()); |
- generator.MoveMouseTo(0, 0); |
- |
- ShelfLayoutManager* shelf = GetShelfLayoutManager(); |
- views::Widget* widget = new views::Widget; |
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); |
- params.bounds = gfx::Rect(0, 0, 200, 200); |
- params.context = CurrentContext(); |
- // Widget is now owned by the parent window. |
- widget->Init(params); |
- widget->Show(); |
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
- EXPECT_EQ(SHELF_AUTO_HIDE, shelf->visibility_state()); |
- EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); |
- |
- // Focus the launcher. Have to go through the focus cycler as normal focus |
- // requests to it do nothing. |
- shelf->launcher()->GetFocusCycler()->RotateFocus(FocusCycler::FORWARD); |
- EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); |
- |
- widget->Activate(); |
- EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); |
- |
- // Trying to activate the status should fail, since we only allow activating |
- // it when the user is using the keyboard (i.e. through FocusCycler). |
- shelf->status_area_widget()->Activate(); |
- EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); |
- |
- shelf->launcher()->GetFocusCycler()->RotateFocus(FocusCycler::FORWARD); |
- EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); |
-} |
- |
-// Makes sure shelf will be visible when app list opens as shelf is in |
-// SHELF_VISIBLE state,and toggling app list won't change shelf |
-// visibility state. |
-TEST_F(ShelfLayoutManagerTest, OpenAppListWithShelfVisibleState) { |
- Shell* shell = Shell::GetInstance(); |
- internal::RootWindowController* controller = |
- Shell::GetPrimaryRootWindowController(); |
- ShelfLayoutManager* shelf = GetShelfLayoutManager(); |
- shelf->LayoutShelf(); |
- controller->SetShelfAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_NEVER); |
- |
- // Create a normal unmaximized windowm shelf should be visible. |
- aura::Window* window = CreateTestWindow(); |
- window->SetBounds(gfx::Rect(0, 0, 100, 100)); |
- window->Show(); |
- EXPECT_FALSE(shell->GetAppListTargetVisibility()); |
- EXPECT_EQ(SHELF_VISIBLE, shelf->visibility_state()); |
- |
- // Toggle app list to show, and the shelf stays visible. |
- shell->ToggleAppList(NULL); |
- EXPECT_TRUE(shell->GetAppListTargetVisibility()); |
- EXPECT_EQ(SHELF_VISIBLE, shelf->visibility_state()); |
- |
- // Toggle app list to hide, and the shelf stays visible. |
- shell->ToggleAppList(NULL); |
- EXPECT_FALSE(shell->GetAppListTargetVisibility()); |
- EXPECT_EQ(SHELF_VISIBLE, shelf->visibility_state()); |
-} |
- |
-// Makes sure shelf will be shown with SHELF_AUTO_HIDE_SHOWN state |
-// when app list opens as shelf is in SHELF_AUTO_HIDE state, and |
-// toggling app list won't change shelf visibility state. |
-TEST_F(ShelfLayoutManagerTest, OpenAppListWithShelfAutoHideState) { |
- Shell* shell = Shell::GetInstance(); |
- ShelfLayoutManager* shelf = GetShelfLayoutManager(); |
- internal::RootWindowController* controller = |
- Shell::GetPrimaryRootWindowController(); |
- shelf->LayoutShelf(); |
- controller->SetShelfAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
- |
- // Create a window and show it in maximized state. |
- aura::Window* window = CreateTestWindow(); |
- window->SetBounds(gfx::Rect(0, 0, 100, 100)); |
- window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MAXIMIZED); |
- window->Show(); |
- wm::ActivateWindow(window); |
- |
- EXPECT_FALSE(shell->GetAppListTargetVisibility()); |
- EXPECT_EQ(SHELF_AUTO_HIDE, shelf->visibility_state()); |
- |
- // Toggle app list to show. |
- shell->ToggleAppList(NULL); |
- // The shelf's auto hide state won't be changed until the timer fires, so |
- // calling shell->UpdateShelfVisibility() is kind of manually helping it to |
- // update the state. |
- shell->UpdateShelfVisibility(); |
- EXPECT_TRUE(shell->GetAppListTargetVisibility()); |
- EXPECT_EQ(SHELF_AUTO_HIDE, shelf->visibility_state()); |
- EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); |
- |
- // Toggle app list to hide. |
- shell->ToggleAppList(NULL); |
- EXPECT_FALSE(shell->GetAppListTargetVisibility()); |
- EXPECT_EQ(SHELF_AUTO_HIDE, shelf->visibility_state()); |
-} |
- |
-// Makes sure shelf will be hidden when app list opens as shelf is in HIDDEN |
-// state, and toggling app list won't change shelf visibility state. |
-TEST_F(ShelfLayoutManagerTest, OpenAppListWithShelfHiddenState) { |
- Shell* shell = Shell::GetInstance(); |
- ShelfLayoutManager* shelf = GetShelfLayoutManager(); |
- // For shelf to be visible, app list is not open in initial state. |
- shelf->LayoutShelf(); |
- |
- // Create a window and make it full screen. |
- aura::Window* window = CreateTestWindow(); |
- window->SetBounds(gfx::Rect(0, 0, 100, 100)); |
- window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN); |
- window->Show(); |
- wm::ActivateWindow(window); |
- |
- // App list and shelf is not shown. |
- EXPECT_FALSE(shell->GetAppListTargetVisibility()); |
- EXPECT_EQ(SHELF_HIDDEN, shelf->visibility_state()); |
- |
- // Toggle app list to show. |
- shell->ToggleAppList(NULL); |
- EXPECT_TRUE(shell->GetAppListTargetVisibility()); |
- EXPECT_EQ(SHELF_HIDDEN, shelf->visibility_state()); |
- |
- // Toggle app list to hide. |
- shell->ToggleAppList(NULL); |
- EXPECT_FALSE(shell->GetAppListTargetVisibility()); |
- EXPECT_EQ(SHELF_HIDDEN, shelf->visibility_state()); |
-} |
- |
-#if defined(OS_WIN) |
-// RootWindow and Display can't resize on Windows Ash. http://crbug.com/165962 |
-#define MAYBE_SetAlignment DISABLED_SetAlignment |
-#else |
-#define MAYBE_SetAlignment SetAlignment |
-#endif |
- |
-// Tests SHELF_ALIGNMENT_(LEFT, RIGHT, TOP). |
-TEST_F(ShelfLayoutManagerTest, MAYBE_SetAlignment) { |
- ShelfLayoutManager* shelf = GetShelfLayoutManager(); |
- // Force an initial layout. |
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_NEVER); |
- shelf->LayoutShelf(); |
- EXPECT_EQ(SHELF_VISIBLE, shelf->visibility_state()); |
- |
- shelf->SetAlignment(SHELF_ALIGNMENT_LEFT); |
- gfx::Rect launcher_bounds( |
- shelf->launcher_widget()->GetWindowBoundsInScreen()); |
- const internal::DisplayManager* manager = |
- Shell::GetInstance()->display_manager(); |
- gfx::Display display = |
- manager->GetDisplayNearestWindow(Shell::GetPrimaryRootWindow()); |
- ASSERT_NE(-1, display.id()); |
- EXPECT_EQ(shelf->GetIdealBounds().width(), |
- display.GetWorkAreaInsets().left()); |
- EXPECT_GE( |
- launcher_bounds.width(), |
- shelf->launcher_widget()->GetContentsView()->GetPreferredSize().width()); |
- EXPECT_EQ(SHELF_ALIGNMENT_LEFT, GetSystemTray()->shelf_alignment()); |
- StatusAreaWidget* status_area_widget = shelf->status_area_widget(); |
- gfx::Rect status_bounds(status_area_widget->GetWindowBoundsInScreen()); |
- EXPECT_GE(status_bounds.width(), |
- status_area_widget->GetContentsView()->GetPreferredSize().width()); |
- EXPECT_EQ(shelf->GetIdealBounds().width(), |
- display.GetWorkAreaInsets().left()); |
- EXPECT_EQ(0, display.GetWorkAreaInsets().top()); |
- EXPECT_EQ(0, display.GetWorkAreaInsets().bottom()); |
- EXPECT_EQ(0, display.GetWorkAreaInsets().right()); |
- EXPECT_EQ(display.bounds().x(), launcher_bounds.x()); |
- EXPECT_EQ(display.bounds().y(), launcher_bounds.y()); |
- EXPECT_EQ(display.bounds().height(), launcher_bounds.height()); |
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
- display = manager->GetDisplayNearestWindow(Shell::GetPrimaryRootWindow()); |
- EXPECT_EQ(ShelfLayoutManager::kAutoHideSize, |
- display.GetWorkAreaInsets().left()); |
- EXPECT_EQ(ShelfLayoutManager::kAutoHideSize, display.work_area().x()); |
- |
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_NEVER); |
- shelf->SetAlignment(SHELF_ALIGNMENT_RIGHT); |
- display = manager->GetDisplayNearestWindow(Shell::GetPrimaryRootWindow()); |
- launcher_bounds = shelf->launcher_widget()->GetWindowBoundsInScreen(); |
- display = manager->GetDisplayNearestWindow(Shell::GetPrimaryRootWindow()); |
- ASSERT_NE(-1, display.id()); |
- EXPECT_EQ(shelf->GetIdealBounds().width(), |
- display.GetWorkAreaInsets().right()); |
- EXPECT_GE(launcher_bounds.width(), |
- shelf->launcher_widget()->GetContentsView()->GetPreferredSize().width()); |
- EXPECT_EQ(SHELF_ALIGNMENT_RIGHT, GetSystemTray()->shelf_alignment()); |
- status_bounds = gfx::Rect(status_area_widget->GetWindowBoundsInScreen()); |
- EXPECT_GE(status_bounds.width(), |
- status_area_widget->GetContentsView()->GetPreferredSize().width()); |
- EXPECT_EQ(shelf->GetIdealBounds().width(), |
- display.GetWorkAreaInsets().right()); |
- EXPECT_EQ(0, display.GetWorkAreaInsets().top()); |
- EXPECT_EQ(0, display.GetWorkAreaInsets().bottom()); |
- EXPECT_EQ(0, display.GetWorkAreaInsets().left()); |
- EXPECT_EQ(display.work_area().right(), launcher_bounds.x()); |
- EXPECT_EQ(display.bounds().y(), launcher_bounds.y()); |
- EXPECT_EQ(display.bounds().height(), launcher_bounds.height()); |
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
- display = manager->GetDisplayNearestWindow(Shell::GetPrimaryRootWindow()); |
- EXPECT_EQ(ShelfLayoutManager::kAutoHideSize, |
- display.GetWorkAreaInsets().right()); |
- EXPECT_EQ(ShelfLayoutManager::kAutoHideSize, |
- display.bounds().right() - display.work_area().right()); |
- |
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_NEVER); |
- shelf->SetAlignment(SHELF_ALIGNMENT_TOP); |
- display = manager->GetDisplayNearestWindow(Shell::GetPrimaryRootWindow()); |
- launcher_bounds = shelf->launcher_widget()->GetWindowBoundsInScreen(); |
- display = manager->GetDisplayNearestWindow(Shell::GetPrimaryRootWindow()); |
- ASSERT_NE(-1, display.id()); |
- EXPECT_EQ(shelf->GetIdealBounds().height(), |
- display.GetWorkAreaInsets().top()); |
- EXPECT_GE(launcher_bounds.height(), |
- shelf->launcher_widget()->GetContentsView()->GetPreferredSize().height()); |
- EXPECT_EQ(SHELF_ALIGNMENT_TOP, GetSystemTray()->shelf_alignment()); |
- status_bounds = gfx::Rect(status_area_widget->GetWindowBoundsInScreen()); |
- EXPECT_GE(status_bounds.height(), |
- status_area_widget->GetContentsView()->GetPreferredSize().height()); |
- EXPECT_EQ(shelf->GetIdealBounds().height(), |
- display.GetWorkAreaInsets().top()); |
- EXPECT_EQ(0, display.GetWorkAreaInsets().right()); |
- EXPECT_EQ(0, display.GetWorkAreaInsets().bottom()); |
- EXPECT_EQ(0, display.GetWorkAreaInsets().left()); |
- EXPECT_EQ(display.work_area().y(), launcher_bounds.bottom()); |
- EXPECT_EQ(display.bounds().x(), launcher_bounds.x()); |
- EXPECT_EQ(display.bounds().width(), launcher_bounds.width()); |
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
- display = manager->GetDisplayNearestWindow(Shell::GetPrimaryRootWindow()); |
- EXPECT_EQ(ShelfLayoutManager::kAutoHideSize, |
- display.GetWorkAreaInsets().top()); |
- EXPECT_EQ(ShelfLayoutManager::kAutoHideSize, |
- display.work_area().y() - display.bounds().y()); |
-} |
- |
-#if defined(OS_WIN) |
-// RootWindow and Display can't resize on Windows Ash. http://crbug.com/165962 |
-#define MAYBE_GestureDrag DISABLED_GestureDrag |
-#else |
-#define MAYBE_GestureDrag GestureDrag |
-#endif |
- |
-TEST_F(ShelfLayoutManagerTest, MAYBE_GestureDrag) { |
- ShelfLayoutManager* shelf = GetShelfLayoutManager(); |
- internal::RootWindowController* controller = |
- Shell::GetPrimaryRootWindowController(); |
- controller->SetShelfAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_NEVER); |
- shelf->LayoutShelf(); |
- |
- views::Widget* widget = new views::Widget; |
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); |
- params.bounds = gfx::Rect(0, 0, 200, 200); |
- params.context = CurrentContext(); |
- widget->Init(params); |
- widget->Show(); |
- widget->Maximize(); |
- |
- aura::Window* window = widget->GetNativeWindow(); |
- |
- gfx::Rect shelf_shown = shelf->launcher_widget()->GetWindowBoundsInScreen(); |
- gfx::Rect bounds_shelf = window->bounds(); |
- EXPECT_EQ(SHELF_VISIBLE, shelf->visibility_state()); |
- |
- aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); |
- |
- // Swipe up on the shelf. This should not change any state. |
- gfx::Point start = |
- shelf->launcher_widget()->GetWindowBoundsInScreen().CenterPoint(); |
- gfx::Point end(start.x(), start.y() + 100); |
- |
- // Swipe down on the shelf to hide it. |
- end.set_y(start.y() + 100); |
- generator.GestureScrollSequence(start, end, |
- base::TimeDelta::FromMilliseconds(10), 1); |
- EXPECT_EQ(SHELF_AUTO_HIDE, shelf->visibility_state()); |
- EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); |
- EXPECT_EQ(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS, shelf->auto_hide_behavior()); |
- EXPECT_NE(bounds_shelf.ToString(), window->bounds().ToString()); |
- EXPECT_NE(shelf_shown.ToString(), |
- shelf->launcher_widget()->GetWindowBoundsInScreen().ToString()); |
- |
- gfx::Rect bounds_noshelf = window->bounds(); |
- gfx::Rect shelf_hidden = shelf->launcher_widget()->GetWindowBoundsInScreen(); |
- |
- // Swipe up to show the shelf. |
- generator.GestureScrollSequence(end, start, |
- base::TimeDelta::FromMilliseconds(10), 1); |
- EXPECT_EQ(SHELF_VISIBLE, shelf->visibility_state()); |
- EXPECT_EQ(SHELF_AUTO_HIDE_BEHAVIOR_NEVER, shelf->auto_hide_behavior()); |
- EXPECT_EQ(bounds_shelf.ToString(), window->bounds().ToString()); |
- EXPECT_EQ(shelf_shown.ToString(), |
- shelf->launcher_widget()->GetWindowBoundsInScreen().ToString()); |
- |
- // Swipe up again. The shelf should hide. |
- end.set_y(start.y() - 100); |
- generator.GestureScrollSequence(start, end, |
- base::TimeDelta::FromMilliseconds(10), 1); |
- EXPECT_EQ(SHELF_AUTO_HIDE, shelf->visibility_state()); |
- EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); |
- EXPECT_EQ(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS, shelf->auto_hide_behavior()); |
- EXPECT_EQ(shelf_hidden.ToString(), |
- shelf->launcher_widget()->GetWindowBoundsInScreen().ToString()); |
- |
- // Swipe up yet again to show it. |
- end.set_y(start.y() + 100); |
- generator.GestureScrollSequence(end, start, |
- base::TimeDelta::FromMilliseconds(10), 1); |
- |
- // Swipe down very little. It shouldn't change any state. |
- end.set_y(start.y() + shelf_shown.height() * 3 / 10); |
- generator.GestureScrollSequence(start, end, |
- base::TimeDelta::FromMilliseconds(100), 1); |
- EXPECT_EQ(SHELF_VISIBLE, shelf->visibility_state()); |
- EXPECT_EQ(SHELF_AUTO_HIDE_BEHAVIOR_NEVER, shelf->auto_hide_behavior()); |
- EXPECT_EQ(bounds_shelf.ToString(), window->bounds().ToString()); |
- EXPECT_EQ(shelf_shown.ToString(), |
- shelf->launcher_widget()->GetWindowBoundsInScreen().ToString()); |
- |
- // Swipe down again to hide. |
- end.set_y(start.y() + 100); |
- generator.GestureScrollSequence(start, end, |
- base::TimeDelta::FromMilliseconds(10), 1); |
- EXPECT_EQ(SHELF_AUTO_HIDE, shelf->visibility_state()); |
- EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); |
- EXPECT_EQ(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS, shelf->auto_hide_behavior()); |
- EXPECT_EQ(bounds_noshelf.ToString(), window->bounds().ToString()); |
- EXPECT_EQ(shelf_hidden.ToString(), |
- shelf->launcher_widget()->GetWindowBoundsInScreen().ToString()); |
- |
- // Swipe up yet again to show it. |
- end.set_y(start.y() + 100); |
- generator.GestureScrollSequence(end, start, |
- base::TimeDelta::FromMilliseconds(10), 1); |
- EXPECT_EQ(SHELF_VISIBLE, shelf->visibility_state()); |
- EXPECT_EQ(SHELF_AUTO_HIDE_BEHAVIOR_NEVER, shelf->auto_hide_behavior()); |
- |
- // Tap on the shelf itself. This should not change anything. |
- generator.GestureTapAt(start); |
- EXPECT_EQ(SHELF_VISIBLE, shelf->visibility_state()); |
- EXPECT_EQ(SHELF_AUTO_HIDE_BEHAVIOR_NEVER, shelf->auto_hide_behavior()); |
- |
- // Now, tap on the desktop region (above the shelf). This should hide the |
- // shelf. |
- gfx::Point tap = start + gfx::Vector2d(0, -90); |
- generator.GestureTapAt(tap); |
- EXPECT_EQ(SHELF_AUTO_HIDE, shelf->visibility_state()); |
- EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); |
- EXPECT_EQ(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS, shelf->auto_hide_behavior()); |
- |
- // Make the window fullscreen. |
- widget->SetFullscreen(true); |
- gfx::Rect bounds_fullscreen = window->bounds(); |
- EXPECT_TRUE(widget->IsFullscreen()); |
- EXPECT_NE(bounds_noshelf.ToString(), bounds_fullscreen.ToString()); |
- EXPECT_EQ(SHELF_HIDDEN, shelf->visibility_state()); |
- |
- // Swipe-up. This should not change anything. |
- generator.GestureScrollSequence(end, start, |
- base::TimeDelta::FromMilliseconds(10), 1); |
- EXPECT_EQ(SHELF_HIDDEN, shelf->visibility_state()); |
- EXPECT_EQ(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS, shelf->auto_hide_behavior()); |
- EXPECT_EQ(bounds_fullscreen.ToString(), window->bounds().ToString()); |
-} |
- |
-TEST_F(ShelfLayoutManagerTest, WindowVisibilityDisablesAutoHide) { |
- ShelfLayoutManager* shelf = GetShelfLayoutManager(); |
- shelf->LayoutShelf(); |
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
- |
- // Create a visible window so auto-hide behavior is enforced |
- views::Widget* dummy = CreateTestWidget(); |
- |
- // Window visible => auto hide behaves normally. |
- shelf->UpdateVisibilityState(); |
- EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); |
- |
- // Window minimized => auto hide disabled. |
- dummy->Minimize(); |
- shelf->UpdateVisibilityState(); |
- EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); |
- |
- // Window closed => auto hide disabled. |
- dummy->CloseNow(); |
- shelf->UpdateVisibilityState(); |
- EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); |
- |
- // Multiple window test |
- views::Widget* window1 = CreateTestWidget(); |
- views::Widget* window2 = CreateTestWidget(); |
- |
- // both visible => normal autohide |
- shelf->UpdateVisibilityState(); |
- EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); |
- |
- // either minimzed => normal autohide |
- window2->Minimize(); |
- shelf->UpdateVisibilityState(); |
- EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); |
- window2->Restore(); |
- window1->Minimize(); |
- shelf->UpdateVisibilityState(); |
- EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); |
- |
- // both minimzed => disable auto hide |
- window2->Minimize(); |
- shelf->UpdateVisibilityState(); |
- EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); |
-} |
- |
-#if defined(OS_WIN) |
-// RootWindow and Display can't resize on Windows Ash. http://crbug.com/165962 |
-#define MAYBE_GestureRevealsTrayBubble DISABLED_GestureRevealsTrayBubble |
-#else |
-#define MAYBE_GestureRevealsTrayBubble GestureRevealsTrayBubble |
-#endif |
- |
-TEST_F(ShelfLayoutManagerTest, MAYBE_GestureRevealsTrayBubble) { |
- ShelfLayoutManager* shelf = GetShelfLayoutManager(); |
- shelf->LayoutShelf(); |
- |
- // Create a visible window so auto-hide behavior is enforced. |
- CreateTestWidget(); |
- |
- aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); |
- SystemTray* tray = GetSystemTray(); |
- |
- // First, make sure the shelf is visible. |
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_NEVER); |
- EXPECT_FALSE(tray->HasSystemBubble()); |
- |
- // Now, drag up on the tray to show the bubble. |
- gfx::Point start = |
- shelf->status_area_widget()->GetWindowBoundsInScreen().CenterPoint(); |
- gfx::Point end(start.x(), start.y() - 100); |
- generator.GestureScrollSequence(start, end, |
- base::TimeDelta::FromMilliseconds(10), 1); |
- EXPECT_TRUE(tray->HasSystemBubble()); |
- tray->CloseBubbleForTest(); |
- RunAllPendingInMessageLoop(); |
- EXPECT_FALSE(tray->HasSystemBubble()); |
- |
- // Drag again, but only a small amount, and slowly. The bubble should not be |
- // visible. |
- end.set_y(start.y() - 30); |
- generator.GestureScrollSequence(start, end, |
- base::TimeDelta::FromMilliseconds(500), 100); |
- EXPECT_FALSE(tray->HasSystemBubble()); |
- |
- // Now, hide the shelf. |
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
- |
- // Start a drag from the bezel, and drag up to show both the shelf and the |
- // tray bubble. |
- start.set_y(start.y() + 100); |
- end.set_y(start.y() - 400); |
- generator.GestureScrollSequence(start, end, |
- base::TimeDelta::FromMilliseconds(10), 1); |
- EXPECT_EQ(SHELF_VISIBLE, shelf->visibility_state()); |
- EXPECT_TRUE(tray->HasSystemBubble()); |
-} |
- |
-TEST_F(ShelfLayoutManagerTest, ShelfFlickerOnTrayActivation) { |
- ShelfLayoutManager* shelf = GetShelfLayoutManager(); |
- |
- // Create a visible window so auto-hide behavior is enforced. |
- CreateTestWidget(); |
- |
- // Turn on auto-hide for the shelf. |
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
- EXPECT_EQ(SHELF_AUTO_HIDE, shelf->visibility_state()); |
- EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); |
- |
- // Show the status menu. That should make the shelf visible again. |
- Shell::GetInstance()->accelerator_controller()->PerformAction( |
- SHOW_SYSTEM_TRAY_BUBBLE, ui::Accelerator()); |
- EXPECT_EQ(SHELF_AUTO_HIDE, shelf->visibility_state()); |
- EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); |
- EXPECT_TRUE(GetSystemTray()->HasSystemBubble()); |
- |
- // Now activate the tray (using the keyboard, instead of using the mouse to |
- // make sure the mouse does not alter the auto-hide state in the shelf). |
- // This should not trigger any auto-hide state change in the shelf. |
- ShelfLayoutObserverTest observer; |
- shelf->AddObserver(&observer); |
- |
- aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); |
- generator.PressKey(ui::VKEY_SPACE, 0); |
- generator.ReleaseKey(ui::VKEY_SPACE, 0); |
- EXPECT_TRUE(GetSystemTray()->HasSystemBubble()); |
- EXPECT_EQ(SHELF_AUTO_HIDE, shelf->visibility_state()); |
- EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->auto_hide_state()); |
- EXPECT_FALSE(observer.changed_auto_hide_state()); |
- |
- shelf->RemoveObserver(&observer); |
-} |
- |
-TEST_F(ShelfLayoutManagerTest, WorkAreaChangeWorkspace) { |
- // Make sure the shelf is always visible. |
- ShelfLayoutManager* shelf = GetShelfLayoutManager(); |
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_NEVER); |
- shelf->LayoutShelf(); |
- |
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); |
- params.bounds = gfx::Rect(0, 0, 200, 200); |
- params.context = CurrentContext(); |
- views::Widget* widget_one = CreateTestWidgetWithParams(params); |
- widget_one->Maximize(); |
- |
- views::Widget* widget_two = CreateTestWidgetWithParams(params); |
- widget_two->Maximize(); |
- widget_two->Activate(); |
- |
- // Both windows are maximized. They should be of the same size. |
- EXPECT_EQ(widget_one->GetNativeWindow()->bounds().ToString(), |
- widget_two->GetNativeWindow()->bounds().ToString()); |
- |
- // Now hide the shelf. |
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
- |
- // The active maximized window will get resized to the new work area. However, |
- // the inactive window should not get resized. |
- EXPECT_NE(widget_one->GetNativeWindow()->bounds().ToString(), |
- widget_two->GetNativeWindow()->bounds().ToString()); |
- |
- // Activate the first window. Now, both windows should be of the same size |
- // again. |
- widget_one->Activate(); |
- EXPECT_EQ(widget_one->GetNativeWindow()->bounds().ToString(), |
- widget_two->GetNativeWindow()->bounds().ToString()); |
- |
- // Now show the shelf. |
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_NEVER); |
- |
- // The active maximized window will get resized to the new work area. However, |
- // the inactive window should not get resized. |
- EXPECT_NE(widget_one->GetNativeWindow()->bounds().ToString(), |
- widget_two->GetNativeWindow()->bounds().ToString()); |
- |
- // Activate the first window. Now, both windows should be of the same size |
- // again. |
- widget_two->Activate(); |
- EXPECT_EQ(widget_one->GetNativeWindow()->bounds().ToString(), |
- widget_two->GetNativeWindow()->bounds().ToString()); |
-} |
- |
-// Confirm that the shelf is dimmed only when content is maximized and |
-// shelf is not autohidden. |
-TEST_F(ShelfLayoutManagerTest, Dimming) { |
- GetShelfLayoutManager()->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_NEVER); |
- scoped_ptr<aura::Window> w1(CreateTestWindow()); |
- w1->Show(); |
- wm::ActivateWindow(w1.get()); |
- |
- // Normal window doesn't dim shelf. |
- w1->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); |
- Launcher* launcher = Launcher::ForPrimaryDisplay(); |
- EXPECT_FALSE(launcher->GetDimsShelf()); |
- |
- // Maximized window does. |
- w1->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MAXIMIZED); |
- EXPECT_TRUE(launcher->GetDimsShelf()); |
- |
- // Change back to normal stops dimming. |
- w1->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); |
- EXPECT_FALSE(launcher->GetDimsShelf()); |
- |
- // Changing back to maximized dims again. |
- w1->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MAXIMIZED); |
- EXPECT_TRUE(launcher->GetDimsShelf()); |
- |
- // Changing shelf to autohide stops dimming. |
- GetShelfLayoutManager()->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
- EXPECT_FALSE(launcher->GetDimsShelf()); |
-} |
- |
-// Make sure that the shelf will not hide if the mouse is between a bubble and |
-// the shelf. |
-TEST_F(ShelfLayoutManagerTest, BubbleEnlargesShelfMouseHitArea) { |
- ShelfLayoutManager* shelf = GetShelfLayoutManager(); |
- StatusAreaWidget* status_area_widget = |
- Shell::GetPrimaryRootWindowController()->status_area_widget(); |
- SystemTray* tray = GetSystemTray(); |
- |
- // Create a visible window so auto-hide behavior is enforced. |
- CreateTestWidget(); |
- |
- shelf->LayoutShelf(); |
- aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); |
- |
- // Make two iterations - first without a message bubble which should make |
- // the shelf disappear and then with a message bubble which should keep it |
- // visible. |
- for (int i = 0; i < 2; i++) { |
- // Make sure the shelf is visible and position the mouse over it. Then |
- // allow auto hide. |
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_NEVER); |
- EXPECT_FALSE(status_area_widget->IsMessageBubbleShown()); |
- gfx::Point center = |
- status_area_widget->GetWindowBoundsInScreen().CenterPoint(); |
- generator.MoveMouseTo(center.x(), center.y()); |
- shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
- EXPECT_TRUE(shelf->IsVisible()); |
- if (!i) { |
- // In our first iteration we make sure there is no bubble. |
- tray->CloseBubbleForTest(); |
- EXPECT_FALSE(status_area_widget->IsMessageBubbleShown()); |
- } else { |
- // In our second iteration we show a bubble. |
- TestItem *item = new TestItem; |
- tray->AddTrayItem(item); |
- tray->ShowNotificationView(item); |
- EXPECT_TRUE(status_area_widget->IsMessageBubbleShown()); |
- } |
- // Move the pointer over the edge of the shelf. |
- generator.MoveMouseTo( |
- center.x(), status_area_widget->GetWindowBoundsInScreen().y() - 8); |
- shelf->UpdateVisibilityState(); |
- if (i) { |
- EXPECT_TRUE(shelf->IsVisible()); |
- EXPECT_TRUE(status_area_widget->IsMessageBubbleShown()); |
- } else { |
- EXPECT_FALSE(shelf->IsVisible()); |
- EXPECT_FALSE(status_area_widget->IsMessageBubbleShown()); |
- } |
- } |
-} |
- |
-} // namespace internal |
-} // namespace ash |