immersive_mode_controller_ash_unittest.cc revision f2477e01787aa58f445919b809d89e252beef54f
190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file. 490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/ui/views/frame/immersive_mode_controller_ash.h" 690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ash/root_window_controller.h" 81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ash/shelf/shelf_layout_manager.h" 91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ash/shelf/shelf_types.h" 10bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "ash/shell.h" 1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ash/test/ash_test_base.h" 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/app/chrome_command_ids.h" 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/ui/browser_commands.h" 144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/ui/fullscreen/fullscreen_controller.h" 154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/ui/fullscreen/fullscreen_controller_test.h" 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/ui/views/frame/browser_view.h" 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/ui/views/frame/test_with_browser_view.h" 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/ui/views/frame/top_container_view.h" 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/ui/views/tabs/tab_strip.h" 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/views/toolbar/toolbar_view.h" 2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ui/aura/window.h" 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/views/controls/webview/webview.h" 2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// For now, immersive fullscreen is Chrome OS only. 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(OS_CHROMEOS) 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ImmersiveModeControllerAshTest : public TestWithBrowserView { 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) public: 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ImmersiveModeControllerAshTest() {} 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~ImmersiveModeControllerAshTest() {} 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // TestWithBrowserView override: 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void SetUp() OVERRIDE { 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TestWithBrowserView::SetUp(); 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) browser()->window()->Show(); 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) controller_ = browser_view()->immersive_mode_controller(); 391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) controller_->SetupForTest(); 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Returns the bounds of |view| in widget coordinates. 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect GetBoundsInWidget(views::View* view) { 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return view->ConvertRectToWidget(view->GetLocalBounds()); 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Toggle the browser's fullscreen state. 481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void ToggleFullscreen() { 491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // NOTIFICATION_FULLSCREEN_CHANGED is sent asynchronously. The notification 501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // is used to trigger changes in whether the shelf is auto hidden and 511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // whether a "light bar" version of the tab strip is used when the 521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // top-of-window views are hidden. 531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<FullscreenNotificationObserver> waiter( 541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) new FullscreenNotificationObserver()); 551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) chrome::ToggleFullscreenMode(browser()); 561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) waiter->Wait(); 571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Set whether the browser is in tab fullscreen. 601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void SetTabFullscreen(bool tab_fullscreen) { 611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) content::WebContents* web_contents = 621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) browser_view()->GetContentsWebViewForTest()->GetWebContents(); 631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<FullscreenNotificationObserver> waiter( 641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) new FullscreenNotificationObserver()); 651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) browser()->fullscreen_controller()->ToggleFullscreenModeForTab( 661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) web_contents, tab_fullscreen); 671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) waiter->Wait(); 681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Attempt revealing the top-of-window views. 711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void AttemptReveal() { 721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (!revealed_lock_.get()) { 731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) revealed_lock_.reset(controller_->GetRevealedLock( 741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ImmersiveModeControllerAsh::ANIMATE_REVEAL_NO)); 751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Attempt unrevealing the top-of-window views. 791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void AttemptUnreveal() { 801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) revealed_lock_.reset(); 811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ImmersiveModeController* controller() { return controller_; } 844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Not owned. 871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ImmersiveModeController* controller_; 881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<ImmersiveRevealedLock> revealed_lock_; 904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ImmersiveModeControllerAshTest); 924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Test the layout and visibility of the tabstrip, toolbar and TopContainerView 954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// in immersive fullscreen. 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(ImmersiveModeControllerAshTest, Layout) { 974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) AddTab(browser(), GURL("about:blank")); 984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TabStrip* tabstrip = browser_view()->tabstrip(); 1004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ToolbarView* toolbar = browser_view()->toolbar(); 1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) views::WebView* contents_web_view = 1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) browser_view()->GetContentsWebViewForTest(); 1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Immersive fullscreen starts out disabled. 1054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_FALSE(browser_view()->GetWidget()->IsFullscreen()); 1064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_FALSE(controller()->IsEnabled()); 1074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // By default, the tabstrip and toolbar should be visible. 1094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(tabstrip->visible()); 1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(toolbar->visible()); 1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ToggleFullscreen(); 1134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(browser_view()->GetWidget()->IsFullscreen()); 1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(controller()->IsEnabled()); 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(controller()->IsRevealed()); 1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Entering immersive fullscreen should make the tab strip use the immersive 1184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // style and hide the toolbar. 1194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(tabstrip->visible()); 1204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(tabstrip->IsImmersiveStyle()); 1214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(toolbar->visible()); 1224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The tab indicators should be flush with the top of the widget. 1244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(0, GetBoundsInWidget(tabstrip).y()); 1254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The web contents should be immediately below the tab indicators. 1274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(Tab::GetImmersiveHeight(), 1284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GetBoundsInWidget(contents_web_view).y()); 1294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Revealing the top-of-window views should set the tab strip back to the 1314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // normal style and show the toolbar. 1321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AttemptReveal(); 1334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(controller()->IsRevealed()); 1344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(tabstrip->visible()); 1354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(tabstrip->IsImmersiveStyle()); 1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(toolbar->visible()); 1374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The TopContainerView should be flush with the top edge of the widget. If 1394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // it is not flush with the top edge the immersive reveal animation looks 1404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // wonky. 1414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(0, GetBoundsInWidget(browser_view()->top_container()).y()); 1424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The web contents should be at the same y position as they were when the 1444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // top-of-window views were hidden. 1454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(Tab::GetImmersiveHeight(), 1464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GetBoundsInWidget(contents_web_view).y()); 1474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Repeat the test for when in both immersive fullscreen and tab fullscreen. 1491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetTabFullscreen(true); 1504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Hide and reveal the top-of-window views so that they get relain out. 1511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AttemptUnreveal(); 1521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AttemptReveal(); 1534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The tab strip and toolbar should still be visible and the TopContainerView 1554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // should still be flush with the top edge of the widget. 1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(controller()->IsRevealed()); 1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(tabstrip->visible()); 1584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(tabstrip->IsImmersiveStyle()); 1594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(toolbar->visible()); 1604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(0, GetBoundsInWidget(browser_view()->top_container()).y()); 1614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The web contents should be flush with the top edge of the widget when in 1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // both immersive and tab fullscreen. 1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(0, GetBoundsInWidget(contents_web_view).y()); 1654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Hide the top-of-window views. Both the tab strip and the toolbar should 1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // hide when in both immersive and tab fullscreen. 1681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AttemptUnreveal(); 1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(controller()->IsRevealed()); 1704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(tabstrip->visible()); 1714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(toolbar->visible()); 1724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The web contents should still be flush with the edge of the widget. 1744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(0, GetBoundsInWidget(contents_web_view).y()); 1754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Exiting both immersive and tab fullscreen should show the tab strip and 1774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // toolbar. 1781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ToggleFullscreen(); 1794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(browser_view()->GetWidget()->IsFullscreen()); 1804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(controller()->IsEnabled()); 1814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(controller()->IsRevealed()); 1824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(tabstrip->visible()); 1834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(tabstrip->IsImmersiveStyle()); 1844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(toolbar->visible()); 1854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Test that the browser commands which are usually disabled in fullscreen are 1884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// are enabled in immersive fullscreen. 189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(ImmersiveModeControllerAshTest, EnabledCommands) { 1904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_FALSE(controller()->IsEnabled()); 1914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL)); 1924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_ABOUT)); 1934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION)); 1944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ToggleFullscreen(); 1964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(controller()->IsEnabled()); 1974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL)); 1984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_ABOUT)); 1994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION)); 2004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 2014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Test that restoring a window properly exits immersive fullscreen. 203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(ImmersiveModeControllerAshTest, ExitUponRestore) { 2044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_FALSE(controller()->IsEnabled()); 2051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ToggleFullscreen(); 2061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AttemptReveal(); 2074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(controller()->IsEnabled()); 2084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(controller()->IsRevealed()); 2094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(browser_view()->GetWidget()->IsFullscreen()); 2104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) browser_view()->GetWidget()->Restore(); 2124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(controller()->IsEnabled()); 2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 2144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Test how being simultaneously in tab fullscreen and immersive fullscreen 2161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// affects the shelf visibility and whether the tab indicators are hidden. 217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(ImmersiveModeControllerAshTest, TabAndBrowserFullscreen) { 2181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AddTab(browser(), GURL("about:blank")); 2191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // The shelf should start out as visible. 2211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ash::internal::ShelfLayoutManager* shelf = 2221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ash::Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager(); 2231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_EQ(ash::SHELF_VISIBLE, shelf->visibility_state()); 2241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // 1) Test that entering tab fullscreen from immersive fullscreen hides the 2261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // tab indicators and the shelf. 2271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ToggleFullscreen(); 2281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_TRUE(controller()->IsEnabled()); 2291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(ash::SHELF_AUTO_HIDE, shelf->visibility_state()); 2301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(controller()->ShouldHideTabIndicators()); 2311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetTabFullscreen(true); 2331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_TRUE(controller()->IsEnabled()); 2341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(ash::SHELF_HIDDEN, shelf->visibility_state()); 2351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(controller()->ShouldHideTabIndicators()); 2361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // 2) Test that exiting tab fullscreen shows the tab indicators and autohides 2381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // the shelf. 2391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetTabFullscreen(false); 2401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_TRUE(controller()->IsEnabled()); 2411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(ash::SHELF_AUTO_HIDE, shelf->visibility_state()); 2421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(controller()->ShouldHideTabIndicators()); 2431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // 3) Test that exiting tab fullscreen and immersive fullscreen 2451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // simultaneously correctly updates the shelf visibility and whether the tab 2461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // indicators should be hidden. 2471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetTabFullscreen(true); 2481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ToggleFullscreen(); 2491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_FALSE(controller()->IsEnabled()); 2501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(ash::SHELF_VISIBLE, shelf->visibility_state()); 2511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(controller()->ShouldHideTabIndicators()); 2521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 25490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif // defined(OS_CHROMEOS) 255