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