browser_non_client_frame_view_ash_browsertest.cc revision 1e9bf3e0803691d0a228da41fc608347b6db4340
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" 9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ash/wm/caption_buttons/frame_caption_button_container_view.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 12a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/ui/browser_commands.h" 13a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/ui/fullscreen/fullscreen_controller.h" 14a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/ui/fullscreen/fullscreen_controller_test.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/frame/browser_view.h" 161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/browser/ui/views/frame/immersive_mode_controller.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/hit_test.h" 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/compositor/scoped_animation_duration_scale_mode.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using views::Widget; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef InProcessBrowserTest BrowserNonClientFrameViewAshTest; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNonClientFrameViewAshTest, WindowHeader) { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We know we're using Views, so static cast. 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserView* browser_view = static_cast<BrowserView*>(browser()->window()); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Widget* widget = browser_view->GetWidget(); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We know we're using Ash, so static cast. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserNonClientFrameViewAsh* frame_view = 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<BrowserNonClientFrameViewAsh*>( 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) widget->non_client_view()->frame_view()); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Restored window uses tall header. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kWindowWidth = 300; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kWindowHeight = 290; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) widget->SetBounds(gfx::Rect(10, 10, kWindowWidth, kWindowHeight)); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(frame_view->UseShortHeader()); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Click on the top edge of a window hits the top edge resize handle. 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) // Window at top of screen uses normal header. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) widget->SetBounds(gfx::Rect(10, 0, kWindowWidth, kWindowHeight)); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(frame_view->UseShortHeader()); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Maximized window uses short header. 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) widget->Maximize(); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(frame_view->UseShortHeader()); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Click in the top edge of a maximized window now hits the client area, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // because we want it to fall through to the tab strip and select a tab. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(HTCLIENT, frame_view->NonClientHitTest(top_edge)); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Popups tall header. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* popup = CreateBrowserForPopup(browser()->profile()); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Widget* popup_widget = 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<BrowserView*>(popup->window())->GetWidget(); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserNonClientFrameViewAsh* popup_frame_view = 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<BrowserNonClientFrameViewAsh*>( 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) popup_widget->non_client_view()->frame_view()); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) popup_widget->SetBounds(gfx::Rect(5, 5, 200, 200)); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(popup_frame_view->UseShortHeader()); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Apps use tall header. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* app = CreateBrowserForApp("name", browser()->profile()); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Widget* app_widget = 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<BrowserView*>(app->window())->GetWidget(); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserNonClientFrameViewAsh* app_frame_view = 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<BrowserNonClientFrameViewAsh*>( 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_widget->non_client_view()->frame_view()); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_widget->SetBounds(gfx::Rect(15, 15, 250, 250)); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(app_frame_view->UseShortHeader()); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Test that the frame view does not do any painting in non-immersive 83a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// fullscreen. 84a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNonClientFrameViewAshTest, 85a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) NonImmersiveFullscreen) { 86a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // We know we're using Views, so static cast. 87a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) BrowserView* browser_view = static_cast<BrowserView*>(browser()->window()); 88a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) content::WebContents* web_contents = browser_view->GetActiveWebContents(); 89a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) Widget* widget = browser_view->GetWidget(); 90a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // We know we're using Ash, so static cast. 91a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) BrowserNonClientFrameViewAsh* frame_view = 92a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) static_cast<BrowserNonClientFrameViewAsh*>( 93a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) widget->non_client_view()->frame_view()); 94a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 95a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Frame paints by default. 96a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(frame_view->ShouldPaint()); 97a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 98a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // No painting should occur in non-immersive fullscreen. (We enter into tab 991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // fullscreen here because tab fullscreen is non-immersive even on ChromeOS). 100a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) { 101a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // NOTIFICATION_FULLSCREEN_CHANGED is sent asynchronously. 102a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) scoped_ptr<FullscreenNotificationObserver> waiter( 103a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) new FullscreenNotificationObserver()); 104a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) browser()->fullscreen_controller()->ToggleFullscreenModeForTab( 105a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) web_contents, true); 106a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) waiter->Wait(); 107a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 108a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_FALSE(browser_view->immersive_mode_controller()->IsEnabled()); 109a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_FALSE(frame_view->ShouldPaint()); 110a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The client view abuts top of the window. 1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(0, frame_view->NonClientTopBorderHeight()); 113a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 114a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // The frame should be painted again when fullscreen is exited and the caption 115a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // buttons should be visible. 116a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) { 117a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) scoped_ptr<FullscreenNotificationObserver> waiter( 118a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) new FullscreenNotificationObserver()); 119a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) chrome::ToggleFullscreenMode(browser()); 120a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) waiter->Wait(); 121a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 122a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(frame_view->ShouldPaint()); 123424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_TRUE(frame_view->caption_button_container_->visible()); 124a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 125a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 126a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNonClientFrameViewAshTest, ImmersiveFullscreen) { 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // We know we're using Views, so static cast. 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserView* browser_view = static_cast<BrowserView*>(browser()->window()); 1291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) content::WebContents* web_contents = browser_view->GetActiveWebContents(); 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Widget* widget = browser_view->GetWidget(); 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // We know we're using Ash, so static cast. 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserNonClientFrameViewAsh* frame_view = 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<BrowserNonClientFrameViewAsh*>( 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget->non_client_view()->frame_view()); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ImmersiveModeController* immersive_mode_controller = 1371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) browser_view->immersive_mode_controller(); 1381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) immersive_mode_controller->SetupForTest(); 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Immersive mode starts disabled. 141868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_FALSE(widget->IsFullscreen()); 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(immersive_mode_controller->IsEnabled()); 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Frame paints by default. 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(frame_view->ShouldPaint()); 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Enter both browser fullscreen and tab fullscreen. Entering browser 1481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // fullscreen should enable immersive fullscreen. 1491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { 1501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // NOTIFICATION_FULLSCREEN_CHANGED is sent asynchronously. 1511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<FullscreenNotificationObserver> waiter( 1521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) new FullscreenNotificationObserver()); 1531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) chrome::ToggleFullscreenMode(browser()); 1541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) waiter->Wait(); 1551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { 1571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<FullscreenNotificationObserver> waiter( 1581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) new FullscreenNotificationObserver()); 1591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) browser()->fullscreen_controller()->ToggleFullscreenModeForTab( 1601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) web_contents, true); 1611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) waiter->Wait(); 1621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(immersive_mode_controller->IsEnabled()); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 165a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // An immersive reveal shows the buttons and the top of the frame. 1661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<ImmersiveRevealedLock> revealed_lock( 1671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 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_TRUE(frame_view->UseShortHeader()); 173a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_FALSE(frame_view->UseImmersiveLightbarHeaderStyle()); 174a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // End the reveal. When in both immersive browser fullscreen and tab 1761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // fullscreen, the tab lightbars should not be painted. 1771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) revealed_lock.reset(); 178a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_FALSE(immersive_mode_controller->IsRevealed()); 179a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_FALSE(frame_view->ShouldPaint()); 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Repeat test but without tab fullscreen. The tab lightbars should now show 1821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // when the top-of-window views are not revealed. 1831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { 1841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<FullscreenNotificationObserver> waiter( 1851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) new FullscreenNotificationObserver()); 1861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) browser()->fullscreen_controller()->ToggleFullscreenModeForTab( 1871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) web_contents, false); 1881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) waiter->Wait(); 1891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 190a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 191a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Immersive reveal should have same behavior as before. 1921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) revealed_lock.reset(immersive_mode_controller->GetRevealedLock( 1931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ImmersiveModeController::ANIMATE_REVEAL_NO)); 194a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(immersive_mode_controller->IsRevealed()); 195a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(frame_view->ShouldPaint()); 196424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_TRUE(frame_view->caption_button_container_->visible()); 197a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(frame_view->UseShortHeader()); 198a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_FALSE(frame_view->UseImmersiveLightbarHeaderStyle()); 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 200a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Ending the reveal should hide the caption buttons and the header should 201a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // be in the lightbar style. 2021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) revealed_lock.reset(); 203a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(frame_view->ShouldPaint()); 204424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_FALSE(frame_view->caption_button_container_->visible()); 205a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(frame_view->UseShortHeader()); 206a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(frame_view->UseImmersiveLightbarHeaderStyle()); 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Exiting immersive fullscreen should make the caption buttons and the frame 2091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // visible again. 2101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { 2111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<FullscreenNotificationObserver> waiter( 2121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) new FullscreenNotificationObserver()); 2131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) browser_view->ExitFullscreen(); 2141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) waiter->Wait(); 2151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(immersive_mode_controller->IsEnabled()); 217a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_TRUE(frame_view->ShouldPaint()); 218424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_TRUE(frame_view->caption_button_container_->visible()); 219a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_FALSE(frame_view->UseImmersiveLightbarHeaderStyle()); 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 221