browser_non_client_frame_view_ash_browsertest.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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"
10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "ash/wm/header_painter.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
13a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/ui/browser_commands.h"
14a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/ui/fullscreen/fullscreen_controller.h"
15a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/ui/fullscreen/fullscreen_controller_test.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/frame/browser_view.h"
171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/browser/ui/views/frame/immersive_mode_controller.h"
18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/ui/views/tabs/tab.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/hit_test.h"
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/compositor/scoped_animation_duration_scale_mode.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using views::Widget;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef InProcessBrowserTest BrowserNonClientFrameViewAshTest;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNonClientFrameViewAshTest, NonClientHitTest) {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We know we're using Views, so static cast.
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BrowserView* browser_view = static_cast<BrowserView*>(browser()->window());
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Widget* widget = browser_view->GetWidget();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We know we're using Ash, so static cast.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserNonClientFrameViewAsh* frame_view =
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      static_cast<BrowserNonClientFrameViewAsh*>(
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          widget->non_client_view()->frame_view());
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Click on the top edge of a restored window hits the top edge resize handle.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int kWindowWidth = 300;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int kWindowHeight = 290;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  widget->SetBounds(gfx::Rect(10, 10, kWindowWidth, kWindowHeight));
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point top_edge(kWindowWidth / 2, 0);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(HTTOP, frame_view->NonClientHitTest(top_edge));
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Click just below the resize handle hits the caption.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point below_resize(kWindowWidth / 2, ash::kResizeInsideBoundsSize);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(HTCAPTION, frame_view->NonClientHitTest(below_resize));
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Click in the top edge of a maximized window now hits the client area,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // because we want it to fall through to the tab strip and select a tab.
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  widget->Maximize();
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(HTCLIENT, frame_view->NonClientHitTest(top_edge));
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
54a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Test that the frame view does not do any painting in non-immersive
55a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// fullscreen.
56a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNonClientFrameViewAshTest,
57a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                       NonImmersiveFullscreen) {
58a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // We know we're using Views, so static cast.
59a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  BrowserView* browser_view = static_cast<BrowserView*>(browser()->window());
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)
98a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Immersive fullscreen is CrOS only for now.
99a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(OS_CHROMEOS)
100a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserNonClientFrameViewAshTest, ImmersiveFullscreen) {
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // We know we're using Views, so static cast.
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BrowserView* browser_view = static_cast<BrowserView*>(browser()->window());
1031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  content::WebContents* web_contents = browser_view->GetActiveWebContents();
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Widget* widget = browser_view->GetWidget();
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // We know we're using Ash, so static cast.
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BrowserNonClientFrameViewAsh* frame_view =
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<BrowserNonClientFrameViewAsh*>(
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          widget->non_client_view()->frame_view());
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  ImmersiveModeController* immersive_mode_controller =
1111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      browser_view->immersive_mode_controller();
1121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  immersive_mode_controller->SetupForTest();
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
114a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Immersive fullscreen starts disabled.
115868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_FALSE(widget->IsFullscreen());
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(immersive_mode_controller->IsEnabled());
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Frame paints by default.
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(frame_view->ShouldPaint());
120a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_LT(Tab::GetImmersiveHeight(),
121a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            frame_view->header_painter_->header_height());
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Enter both browser fullscreen and tab fullscreen. Entering browser
1241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // fullscreen should enable immersive fullscreen.
1251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  {
1261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    // NOTIFICATION_FULLSCREEN_CHANGED is sent asynchronously.
1271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    scoped_ptr<FullscreenNotificationObserver> waiter(
1281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        new FullscreenNotificationObserver());
1291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    chrome::ToggleFullscreenMode(browser());
1301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    waiter->Wait();
1311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  }
1321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  {
1331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    scoped_ptr<FullscreenNotificationObserver> waiter(
1341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        new FullscreenNotificationObserver());
1351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    browser()->fullscreen_controller()->ToggleFullscreenModeForTab(
1361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        web_contents, true);
1371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    waiter->Wait();
1381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  }
139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(immersive_mode_controller->IsEnabled());
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
141a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // An immersive reveal shows the buttons and the top of the frame.
1421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  scoped_ptr<ImmersiveRevealedLock> revealed_lock(
1431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      immersive_mode_controller->GetRevealedLock(
1441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)          ImmersiveModeController::ANIMATE_REVEAL_NO));
145a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  EXPECT_TRUE(immersive_mode_controller->IsRevealed());
146a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  EXPECT_TRUE(frame_view->ShouldPaint());
147424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  EXPECT_TRUE(frame_view->caption_button_container_->visible());
148a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  EXPECT_TRUE(frame_view->UseShortHeader());
149a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  EXPECT_FALSE(frame_view->UseImmersiveLightbarHeaderStyle());
150a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
1511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // End the reveal. When in both immersive browser fullscreen and tab
1521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // fullscreen, the tab lightbars should not be painted.
1531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  revealed_lock.reset();
154a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  EXPECT_FALSE(immersive_mode_controller->IsRevealed());
155a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  EXPECT_FALSE(frame_view->ShouldPaint());
156a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_EQ(0, frame_view->header_painter_->header_height());
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Repeat test but without tab fullscreen. The tab lightbars should now show
1591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // when the top-of-window views are not revealed.
1601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  {
1611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    scoped_ptr<FullscreenNotificationObserver> waiter(
1621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        new FullscreenNotificationObserver());
1631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    browser()->fullscreen_controller()->ToggleFullscreenModeForTab(
1641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        web_contents, false);
1651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    waiter->Wait();
1661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  }
167a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
168a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Immersive reveal should have same behavior as before.
1691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  revealed_lock.reset(immersive_mode_controller->GetRevealedLock(
1701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      ImmersiveModeController::ANIMATE_REVEAL_NO));
171a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  EXPECT_TRUE(immersive_mode_controller->IsRevealed());
172a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  EXPECT_TRUE(frame_view->ShouldPaint());
173424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  EXPECT_TRUE(frame_view->caption_button_container_->visible());
174a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  EXPECT_TRUE(frame_view->UseShortHeader());
175a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  EXPECT_FALSE(frame_view->UseImmersiveLightbarHeaderStyle());
176a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_LT(Tab::GetImmersiveHeight(),
177a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            frame_view->header_painter_->header_height());
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
179a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Ending the reveal should hide the caption buttons and the header should
180a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // be in the lightbar style.
1811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  revealed_lock.reset();
182a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  EXPECT_TRUE(frame_view->ShouldPaint());
183424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  EXPECT_FALSE(frame_view->caption_button_container_->visible());
184a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  EXPECT_TRUE(frame_view->UseShortHeader());
185a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  EXPECT_TRUE(frame_view->UseImmersiveLightbarHeaderStyle());
186a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_EQ(Tab::GetImmersiveHeight(),
187a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            frame_view->header_painter_->header_height());
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Exiting immersive fullscreen should make the caption buttons and the frame
1901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // visible again.
1911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  {
1921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    scoped_ptr<FullscreenNotificationObserver> waiter(
1931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        new FullscreenNotificationObserver());
1941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    browser_view->ExitFullscreen();
1951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    waiter->Wait();
1961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  }
197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_FALSE(immersive_mode_controller->IsEnabled());
198a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  EXPECT_TRUE(frame_view->ShouldPaint());
199424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  EXPECT_TRUE(frame_view->caption_button_container_->visible());
200a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  EXPECT_FALSE(frame_view->UseImmersiveLightbarHeaderStyle());
201a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_LT(Tab::GetImmersiveHeight(),
202a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            frame_view->header_painter_->header_height());
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
204a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif  // defined(OS_CHROMEOS)
205