Index: chrome/browser/ui/views/frame/immersive_mode_controller_ash_browsertest.cc |
diff --git a/chrome/browser/ui/views/frame/immersive_mode_controller_ash_browsertest.cc b/chrome/browser/ui/views/frame/immersive_mode_controller_ash_browsertest.cc |
index 7a13979fd2200939684d35e86876718fef9a9c9e..a6b9289f2e603507c310134e11c5da096aa3b6a3 100644 |
--- a/chrome/browser/ui/views/frame/immersive_mode_controller_ash_browsertest.cc |
+++ b/chrome/browser/ui/views/frame/immersive_mode_controller_ash_browsertest.cc |
@@ -18,6 +18,8 @@ |
#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog_queue.h" |
#include "chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.h" |
#include "chrome/browser/ui/browser_commands.h" |
+#include "chrome/browser/ui/fullscreen/fullscreen_controller.h" |
+#include "chrome/browser/ui/fullscreen/fullscreen_controller_test.h" |
#include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h" |
#include "chrome/browser/ui/views/browser_dialogs.h" |
#include "chrome/browser/ui/views/frame/browser_view.h" |
@@ -163,7 +165,7 @@ IN_PROC_BROWSER_TEST_F(ImmersiveModeControllerAshTest, ImmersiveMode) { |
// When hiding the tab indicators, content is at the top of the browser view |
// both before and during reveal. |
- controller->SetHideTabIndicatorsForTest(true); |
+ controller->SetForceHideTabIndicatorsForTest(true); |
chrome::ToggleFullscreenMode(browser()); |
ASSERT_TRUE(browser_view->IsFullscreen()); |
EXPECT_FALSE(browser_view->IsTabStripVisible()); |
@@ -178,7 +180,7 @@ IN_PROC_BROWSER_TEST_F(ImmersiveModeControllerAshTest, ImmersiveMode) { |
GetRectInWidget(contents_view).y()); |
chrome::ToggleFullscreenMode(browser()); |
ASSERT_FALSE(browser_view->IsFullscreen()); |
- controller->SetHideTabIndicatorsForTest(false); |
+ controller->SetForceHideTabIndicatorsForTest(false); |
// Reveal ends when the mouse moves out of the reveal view. |
chrome::ToggleFullscreenMode(browser()); |
@@ -610,13 +612,72 @@ IN_PROC_BROWSER_TEST_F(ImmersiveModeControllerAshTest, ImmersiveShelf) { |
ASSERT_FALSE(browser_view->IsFullscreen()); |
ASSERT_FALSE(immersive_controller->IsEnabled()); |
EXPECT_EQ(ash::SHELF_AUTO_HIDE, shelf->visibility_state()); |
+} |
+ |
+// Test how being simultaneously in tab fullscreen and immersive fullscreen |
+// affects the shelf visibility and whether the tab indicators are hidden. |
+IN_PROC_BROWSER_TEST_F(ImmersiveModeControllerAshTest, |
+ TabAndBrowserFullscreen) { |
+ ui::ScopedAnimationDurationScaleMode zero_duration_mode( |
+ ui::ScopedAnimationDurationScaleMode::ZERO_DURATION); |
+ ASSERT_TRUE(chrome::UseImmersiveFullscreen()); |
+ |
+ BrowserView* browser_view = static_cast<BrowserView*>(browser()->window()); |
+ ash::internal::ShelfLayoutManager* shelf = |
+ ash::Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager(); |
+ ImmersiveModeControllerAsh* controller = |
+ static_cast<ImmersiveModeControllerAsh*>( |
+ browser_view->immersive_mode_controller()); |
+ |
+ controller->SetForceHideTabIndicatorsForTest(false); |
- // Setting the window property directly toggles immersive mode. |
- aura::Window* window = browser_view->GetWidget()->GetNativeWindow(); |
- window->SetProperty(ash::internal::kImmersiveModeKey, true); |
- EXPECT_TRUE(immersive_controller->IsEnabled()); |
- window->SetProperty(ash::internal::kImmersiveModeKey, false); |
- EXPECT_FALSE(immersive_controller->IsEnabled()); |
+ // The shelf should start out as visible. |
+ ASSERT_EQ(ash::SHELF_VISIBLE, shelf->visibility_state()); |
+ |
+ // 1) Test that entering tab fullscreen from immersive mode hides the tab |
+ // indicators and the shelf. |
+ chrome::ToggleFullscreenMode(browser()); |
+ ASSERT_TRUE(controller->IsEnabled()); |
+ EXPECT_EQ(ash::SHELF_AUTO_HIDE, shelf->visibility_state()); |
+ EXPECT_FALSE(controller->ShouldHideTabIndicators()); |
+ |
+ // The shelf visibility and the tab indicator visibility are updated as a |
+ // result of NOTIFICATION_FULLSCREEN_CHANGED which is asynchronous. Wait for |
+ // the notification before testing visibility. |
+ scoped_ptr<FullscreenNotificationObserver> waiter( |
+ new FullscreenNotificationObserver()); |
+ |
+ browser()->fullscreen_controller()->ToggleFullscreenModeForTab( |
+ browser_view->GetActiveWebContents(), true); |
+ waiter->Wait(); |
+ ASSERT_TRUE(controller->IsEnabled()); |
+ EXPECT_EQ(ash::SHELF_HIDDEN, shelf->visibility_state()); |
+ EXPECT_TRUE(controller->ShouldHideTabIndicators()); |
+ |
+ // 2) Test that exiting tab fullscreen shows the tab indicators and autohides |
+ // the shelf. |
+ waiter.reset(new FullscreenNotificationObserver()); |
+ browser()->fullscreen_controller()->ToggleFullscreenModeForTab( |
+ browser_view->GetActiveWebContents(), false); |
+ waiter->Wait(); |
+ ASSERT_TRUE(controller->IsEnabled()); |
+ EXPECT_EQ(ash::SHELF_AUTO_HIDE, shelf->visibility_state()); |
+ EXPECT_FALSE(controller->ShouldHideTabIndicators()); |
+ |
+ // 3) Test that exiting tab fullscreen and immersive fullscreen |
+ // simultaneously correctly updates the shelf visibility and whether the tab |
+ // indicators should be hidden. |
+ waiter.reset(new FullscreenNotificationObserver()); |
+ browser()->fullscreen_controller()->ToggleFullscreenModeForTab( |
+ browser_view->GetActiveWebContents(), true); |
+ waiter->Wait(); |
+ waiter.reset(new FullscreenNotificationObserver()); |
+ chrome::ToggleFullscreenMode(browser()); |
+ waiter->Wait(); |
+ |
+ ASSERT_FALSE(controller->IsEnabled()); |
+ EXPECT_EQ(ash::SHELF_VISIBLE, shelf->visibility_state()); |
+ EXPECT_TRUE(controller->ShouldHideTabIndicators()); |
} |
#endif // defined(OS_CHROMEOS) |