15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/ash_constants.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/ash_switches.h" 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/frame/caption_buttons/frame_caption_button_container_view.h" 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/frame/header_painter.h" 11c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ash/shell.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ash/wm/maximize_mode/maximize_mode_controller.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 15a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/ui/browser_commands.h" 16a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/ui/fullscreen/fullscreen_controller.h" 17a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/ui/fullscreen/fullscreen_controller_test.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/frame/browser_view.h" 191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/browser/ui/views/frame/immersive_mode_controller.h" 20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/ui/views/tabs/tab.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/hit_test.h" 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/compositor/scoped_animation_duration_scale_mode.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using views::Widget; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)typedef InProcessBrowserTest BrowserNonClientFrameViewAshTest; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNonClientFrameViewAshTest, NonClientHitTest) { 31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Widget* widget = browser_view->GetWidget(); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We know we're using Ash, so static cast. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserNonClientFrameViewAsh* frame_view = 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<BrowserNonClientFrameViewAsh*>( 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) widget->non_client_view()->frame_view()); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Click on the top edge of a restored window hits the top edge resize handle. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kWindowWidth = 300; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kWindowHeight = 290; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) widget->SetBounds(gfx::Rect(10, 10, kWindowWidth, kWindowHeight)); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point top_edge(kWindowWidth / 2, 0); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(HTTOP, frame_view->NonClientHitTest(top_edge)); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Click just below the resize handle hits the caption. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point below_resize(kWindowWidth / 2, ash::kResizeInsideBoundsSize); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(HTCAPTION, frame_view->NonClientHitTest(below_resize)); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Click in the top edge of a maximized window now hits the client area, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // because we want it to fall through to the tab strip and select a tab. 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) widget->Maximize(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(HTCLIENT, frame_view->NonClientHitTest(top_edge)); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 55a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Test that the frame view does not do any painting in non-immersive 56a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// fullscreen. 57a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNonClientFrameViewAshTest, 58a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) NonImmersiveFullscreen) { 59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); 60a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) content::WebContents* web_contents = browser_view->GetActiveWebContents(); 61a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) Widget* widget = browser_view->GetWidget(); 62a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // We know we're using Ash, so static cast. 63a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) BrowserNonClientFrameViewAsh* frame_view = 64a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) static_cast<BrowserNonClientFrameViewAsh*>( 65a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) widget->non_client_view()->frame_view()); 66a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 67a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Frame paints by default. 68a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(frame_view->ShouldPaint()); 69a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 70a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // No painting should occur in non-immersive fullscreen. (We enter into tab 711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // fullscreen here because tab fullscreen is non-immersive even on ChromeOS). 72a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) { 73a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // NOTIFICATION_FULLSCREEN_CHANGED is sent asynchronously. 74a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) scoped_ptr<FullscreenNotificationObserver> waiter( 75a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) new FullscreenNotificationObserver()); 76a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) browser()->fullscreen_controller()->ToggleFullscreenModeForTab( 77a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) web_contents, true); 78a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) waiter->Wait(); 79a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 80a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_FALSE(browser_view->immersive_mode_controller()->IsEnabled()); 81a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_FALSE(frame_view->ShouldPaint()); 82a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The client view abuts top of the window. 84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(0, frame_view->GetBoundsForClientView().y()); 85a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 86a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // The frame should be painted again when fullscreen is exited and the caption 87a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // buttons should be visible. 88a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) { 89a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) scoped_ptr<FullscreenNotificationObserver> waiter( 90a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) new FullscreenNotificationObserver()); 91a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) chrome::ToggleFullscreenMode(browser()); 92a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) waiter->Wait(); 93a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 94a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(frame_view->ShouldPaint()); 95424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_TRUE(frame_view->caption_button_container_->visible()); 96a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 97a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 98a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// TODO(zturner): Change this to USE_ASH after fixing the test on Windows. 99a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(OS_CHROMEOS) 100a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNonClientFrameViewAshTest, ImmersiveFullscreen) { 101c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); 1021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) content::WebContents* web_contents = browser_view->GetActiveWebContents(); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Widget* widget = browser_view->GetWidget(); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // We know we're using Ash, so static cast. 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserNonClientFrameViewAsh* frame_view = 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<BrowserNonClientFrameViewAsh*>( 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget->non_client_view()->frame_view()); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ImmersiveModeController* immersive_mode_controller = 1101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) browser_view->immersive_mode_controller(); 1111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) immersive_mode_controller->SetupForTest(); 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 113a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Immersive fullscreen starts disabled. 114868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_FALSE(widget->IsFullscreen()); 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(immersive_mode_controller->IsEnabled()); 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Frame paints by default. 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(frame_view->ShouldPaint()); 119a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_LT(Tab::GetImmersiveHeight(), 120a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) frame_view->header_painter_->GetHeaderHeightForPainting()); 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Enter both browser fullscreen and tab fullscreen. Entering browser 1231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // fullscreen should enable immersive fullscreen. 1241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { 1251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // NOTIFICATION_FULLSCREEN_CHANGED is sent asynchronously. 1261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<FullscreenNotificationObserver> waiter( 1271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) new FullscreenNotificationObserver()); 1281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) chrome::ToggleFullscreenMode(browser()); 1291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) waiter->Wait(); 1301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { 1321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<FullscreenNotificationObserver> waiter( 1331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) new FullscreenNotificationObserver()); 1341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) browser()->fullscreen_controller()->ToggleFullscreenModeForTab( 1351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) web_contents, true); 1361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) waiter->Wait(); 1371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(immersive_mode_controller->IsEnabled()); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 140a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // An immersive reveal shows the buttons and the top of the frame. 1411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<ImmersiveRevealedLock> revealed_lock( 1421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) immersive_mode_controller->GetRevealedLock( 1431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ImmersiveModeController::ANIMATE_REVEAL_NO)); 144a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(immersive_mode_controller->IsRevealed()); 145a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(frame_view->ShouldPaint()); 146424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_TRUE(frame_view->caption_button_container_->visible()); 147a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_FALSE(frame_view->UseImmersiveLightbarHeaderStyle()); 148a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // End the reveal. When in both immersive browser fullscreen and tab 1501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // fullscreen, the tab lightbars should not be painted. 1511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) revealed_lock.reset(); 152a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_FALSE(immersive_mode_controller->IsRevealed()); 153a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_FALSE(frame_view->ShouldPaint()); 154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(0, frame_view->header_painter_->GetHeaderHeightForPainting()); 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Repeat test but without tab fullscreen. The tab lightbars should now show 1571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // when the top-of-window views are not revealed. 1581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { 1591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<FullscreenNotificationObserver> waiter( 1601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) new FullscreenNotificationObserver()); 1611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) browser()->fullscreen_controller()->ToggleFullscreenModeForTab( 1621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) web_contents, false); 1631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) waiter->Wait(); 1641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 165a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 166a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Immersive reveal should have same behavior as before. 1671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) revealed_lock.reset(immersive_mode_controller->GetRevealedLock( 1681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ImmersiveModeController::ANIMATE_REVEAL_NO)); 169a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(immersive_mode_controller->IsRevealed()); 170a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(frame_view->ShouldPaint()); 171424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_TRUE(frame_view->caption_button_container_->visible()); 172a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_FALSE(frame_view->UseImmersiveLightbarHeaderStyle()); 173a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_LT(Tab::GetImmersiveHeight(), 174a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) frame_view->header_painter_->GetHeaderHeightForPainting()); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 176a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Ending the reveal should hide the caption buttons and the header should 177a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // be in the lightbar style. 1781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) revealed_lock.reset(); 179a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(frame_view->ShouldPaint()); 180424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_FALSE(frame_view->caption_button_container_->visible()); 181a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(frame_view->UseImmersiveLightbarHeaderStyle()); 182a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(Tab::GetImmersiveHeight(), 183a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) frame_view->header_painter_->GetHeaderHeightForPainting()); 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Exiting immersive fullscreen should make the caption buttons and the frame 1861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // visible again. 1871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { 1881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<FullscreenNotificationObserver> waiter( 1891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) new FullscreenNotificationObserver()); 1901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) browser_view->ExitFullscreen(); 1911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) waiter->Wait(); 1921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(immersive_mode_controller->IsEnabled()); 194a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(frame_view->ShouldPaint()); 195424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_TRUE(frame_view->caption_button_container_->visible()); 196a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_FALSE(frame_view->UseImmersiveLightbarHeaderStyle()); 197a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_LT(Tab::GetImmersiveHeight(), 198a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) frame_view->header_painter_->GetHeaderHeightForPainting()); 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 200a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif // defined(OS_CHROMEOS) 201c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 202c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Tests that FrameCaptionButtonContainer has been relaid out in response to 203c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// maximize mode being toggled. 204c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochIN_PROC_BROWSER_TEST_F(BrowserNonClientFrameViewAshTest, 205c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ToggleMaximizeModeRelayout) { 206c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); 207c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Widget* widget = browser_view->GetWidget(); 208c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // We know we're using Ash, so static cast. 209c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch BrowserNonClientFrameViewAsh* frame_view = 210c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch static_cast<BrowserNonClientFrameViewAsh*>( 211c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch widget->non_client_view()->frame_view()); 212c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 213c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const gfx::Rect initial = frame_view->caption_button_container_->bounds(); 214f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ash::Shell::GetInstance()->maximize_mode_controller()-> 215f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EnableMaximizeModeWindowManager(true); 2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ash::FrameCaptionButtonContainerView::TestApi test(frame_view-> 2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) caption_button_container_); 2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) test.EndAnimations(); 219c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const gfx::Rect during_maximize = frame_view->caption_button_container_-> 220c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bounds(); 221c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_GT(initial.width(), during_maximize.width()); 222f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ash::Shell::GetInstance()->maximize_mode_controller()-> 223f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EnableMaximizeModeWindowManager(false); 2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) test.EndAnimations(); 225c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const gfx::Rect after_restore = frame_view->caption_button_container_-> 226c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bounds(); 227c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_EQ(initial, after_restore); 228c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 229