Index: chrome/browser/ui/views/frame/immersive_mode_controller_ash_unittest.cc |
diff --git a/chrome/browser/ui/views/frame/immersive_mode_controller_ash_unittest.cc b/chrome/browser/ui/views/frame/immersive_mode_controller_ash_unittest.cc |
index a98b987481f62ed17acfd60dc7e91aabd781e0c4..6885cf7db192663121573801e0e6164a292f799f 100644 |
--- a/chrome/browser/ui/views/frame/immersive_mode_controller_ash_unittest.cc |
+++ b/chrome/browser/ui/views/frame/immersive_mode_controller_ash_unittest.cc |
@@ -2,13 +2,18 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+// For now, immersive fullscreen is Chrome OS only. |
+#if defined(OS_CHROMEOS) |
+ |
#include "chrome/browser/ui/views/frame/immersive_mode_controller_ash.h" |
+#include "ash/ash_switches.h" |
#include "ash/root_window_controller.h" |
#include "ash/shelf/shelf_layout_manager.h" |
#include "ash/shelf/shelf_types.h" |
#include "ash/shell.h" |
#include "ash/test/ash_test_base.h" |
+#include "base/command_line.h" |
#include "chrome/app/chrome_command_ids.h" |
#include "chrome/browser/ui/browser_commands.h" |
#include "chrome/browser/ui/fullscreen/fullscreen_controller.h" |
@@ -21,8 +26,14 @@ |
#include "ui/aura/window.h" |
#include "ui/views/controls/webview/webview.h" |
-// For now, immersive fullscreen is Chrome OS only. |
-#if defined(OS_CHROMEOS) |
+namespace { |
+ |
+// Returns the bounds of |view| in widget coordinates. |
+gfx::Rect GetBoundsInWidget(views::View* view) { |
+ return view->ConvertRectToWidget(view->GetLocalBounds()); |
+} |
+ |
+} // namespace |
class ImmersiveModeControllerAshTest : public TestWithBrowserView { |
public: |
@@ -39,11 +50,6 @@ class ImmersiveModeControllerAshTest : public TestWithBrowserView { |
controller_->SetupForTest(); |
} |
- // Returns the bounds of |view| in widget coordinates. |
- gfx::Rect GetBoundsInWidget(views::View* view) { |
- return view->ConvertRectToWidget(view->GetLocalBounds()); |
- } |
- |
// Toggle the browser's fullscreen state. |
void ToggleFullscreen() { |
// NOTIFICATION_FULLSCREEN_CHANGED is sent asynchronously. The notification |
@@ -251,4 +257,98 @@ TEST_F(ImmersiveModeControllerAshTest, TabAndBrowserFullscreen) { |
EXPECT_TRUE(controller()->ShouldHideTabIndicators()); |
} |
+class ImmersiveModeControllerAshTestHostedApp : public TestWithBrowserView { |
+ public: |
+ ImmersiveModeControllerAshTestHostedApp() {} |
+ virtual ~ImmersiveModeControllerAshTestHostedApp() {} |
+ |
+ // TestWithBrowserView override: |
+ virtual void SetUp() OVERRIDE { |
+ CommandLine::ForCurrentProcess()->AppendSwitch( |
+ ash::switches::kAshEnableImmersiveFullscreenForAllWindows); |
+ |
+ TestWithBrowserView::SetUp(); |
+ browser()->window()->Show(); |
+ controller_ = browser_view()->immersive_mode_controller(); |
+ controller_->SetupForTest(); |
+ } |
+ |
+ // BrowserWithTestWindowTest override: |
+ virtual void PopulateBrowserCreateParams( |
+ Browser::CreateParams* params) OVERRIDE { |
+ params->type = Browser::TYPE_POPUP; |
+ params->app_name = "Test"; |
+ } |
+ |
+ ImmersiveModeController* controller() { return controller_; } |
+ |
+ private: |
+ // Not owned. |
+ ImmersiveModeController* controller_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ImmersiveModeControllerAshTestHostedApp); |
+}; |
+ |
+// Test the layout and visibility of the TopContainerView and web contents when |
+// a hosted app is put into immersive fullscreen. |
+TEST_F(ImmersiveModeControllerAshTestHostedApp, Layout) { |
+ AddTab(browser(), GURL("about:blank")); |
James Cook
2013/11/25 19:09:20
You might want to comment here about how it's stil
|
+ |
+ TabStrip* tabstrip = browser_view()->tabstrip(); |
+ ToolbarView* toolbar = browser_view()->toolbar(); |
+ views::WebView* contents_web_view = |
+ browser_view()->GetContentsWebViewForTest(); |
+ views::View* top_container = browser_view()->top_container(); |
+ |
+ // Immersive fullscreen starts out disabled. |
+ ASSERT_FALSE(browser_view()->GetWidget()->IsFullscreen()); |
+ ASSERT_FALSE(controller()->IsEnabled()); |
+ |
+ // The tabstrip and toolbar are not visible for hosted apps. |
+ EXPECT_FALSE(tabstrip->visible()); |
+ EXPECT_FALSE(toolbar->visible()); |
+ |
+ // The window header should be above the web contents. |
+ int header_height = GetBoundsInWidget(contents_web_view).y(); |
+ |
+ chrome::ToggleFullscreenMode(browser()); |
+ EXPECT_TRUE(browser_view()->GetWidget()->IsFullscreen()); |
+ EXPECT_TRUE(controller()->IsEnabled()); |
+ EXPECT_FALSE(controller()->IsRevealed()); |
+ |
+ // Entering immersive fullscreen should make the web contents flush with the |
+ // top of the widget. |
+ EXPECT_FALSE(tabstrip->visible()); |
+ EXPECT_FALSE(toolbar->visible()); |
+ EXPECT_TRUE(top_container->GetVisibleBounds().IsEmpty()); |
+ EXPECT_EQ(0, GetBoundsInWidget(contents_web_view).y()); |
+ |
+ // Reveal the window header. |
+ scoped_ptr<ImmersiveRevealedLock> revealed_lock( |
+ controller()->GetRevealedLock( |
+ ImmersiveModeControllerAsh::ANIMATE_REVEAL_NO)); |
+ |
+ // The tabstrip and toolbar should still be hidden and the web contents should |
+ // still be flush with the top of the screen. |
+ EXPECT_FALSE(tabstrip->visible()); |
+ EXPECT_FALSE(toolbar->visible()); |
+ EXPECT_EQ(0, GetBoundsInWidget(contents_web_view).y()); |
+ |
+ // During an immersive reveal, the window header should be painted to the |
+ // TopContainerView. The TopContainerView should be flush with the top of the |
+ // widget and have |header_height|. |
+ gfx::Rect top_container_bounds_in_widget(GetBoundsInWidget(top_container)); |
+ EXPECT_EQ(0, top_container_bounds_in_widget.y()); |
+ EXPECT_EQ(header_height, top_container_bounds_in_widget.height()); |
+ |
+ // Exit immersive fullscreen. The web contents should be back below the window |
+ // header. |
+ chrome::ToggleFullscreenMode(browser()); |
+ EXPECT_FALSE(browser_view()->GetWidget()->IsFullscreen()); |
+ EXPECT_FALSE(controller()->IsEnabled()); |
+ EXPECT_FALSE(tabstrip->visible()); |
+ EXPECT_FALSE(toolbar->visible()); |
+ EXPECT_EQ(header_height, GetBoundsInWidget(contents_web_view).y()); |
+} |
+ |
#endif // defined(OS_CHROMEOS) |