Index: ash/wm/immersive_fullscreen_controller_unittest.cc |
diff --git a/chrome/browser/ui/views/frame/immersive_mode_controller_ash_unittest.cc b/ash/wm/immersive_fullscreen_controller_unittest.cc |
similarity index 63% |
copy from chrome/browser/ui/views/frame/immersive_mode_controller_ash_unittest.cc |
copy to ash/wm/immersive_fullscreen_controller_unittest.cc |
index ce917169d388a5bfcfab5d06dfb260ebc8c13775..5c7edb177d21af1c7bfcd7d02693d8c9f2dc76a2 100644 |
--- a/chrome/browser/ui/views/frame/immersive_mode_controller_ash_unittest.cc |
+++ b/ash/wm/immersive_fullscreen_controller_unittest.cc |
@@ -2,23 +2,16 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "chrome/browser/ui/views/frame/immersive_mode_controller_ash.h" |
+#include "ash/wm/immersive_fullscreen_controller.h" |
#include "ash/display/display_manager.h" |
#include "ash/root_window_controller.h" |
+#include "ash/screen_ash.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 "chrome/app/chrome_command_ids.h" |
-#include "chrome/browser/ui/browser_commands.h" |
-#include "chrome/browser/ui/fullscreen/fullscreen_controller.h" |
-#include "chrome/browser/ui/fullscreen/fullscreen_controller_test.h" |
-#include "chrome/browser/ui/views/frame/browser_view.h" |
-#include "chrome/browser/ui/views/frame/test_with_browser_view.h" |
-#include "chrome/browser/ui/views/frame/top_container_view.h" |
-#include "chrome/browser/ui/views/tabs/tab_strip.h" |
-#include "chrome/browser/ui/views/toolbar_view.h" |
+#include "ui/aura/client/aura_constants.h" |
#include "ui/aura/client/cursor_client.h" |
#include "ui/aura/env.h" |
#include "ui/aura/root_window.h" |
@@ -26,42 +19,68 @@ |
#include "ui/aura/window.h" |
#include "ui/gfx/animation/slide_animation.h" |
#include "ui/views/bubble/bubble_delegate.h" |
-#include "ui/views/controls/webview/webview.h" |
+#include "ui/views/view.h" |
+#include "ui/views/widget/widget.h" |
// For now, immersive fullscreen is Chrome OS only. |
#if defined(OS_CHROMEOS) |
-///////////////////////////////////////////////////////////////////////////// |
+namespace ash { |
-class MockImmersiveModeControllerDelegate |
- : public ImmersiveModeController::Delegate { |
- public: |
- MockImmersiveModeControllerDelegate() : immersive_style_(false) {} |
- virtual ~MockImmersiveModeControllerDelegate() {} |
+namespace { |
- bool immersive_style() const { return immersive_style_; } |
+class MockImmersiveFullscreenControllerDelegate |
+ : public ImmersiveFullscreenController::Delegate { |
+ public: |
+ MockImmersiveFullscreenControllerDelegate(views::View* top_container_view) |
+ : top_container_view_(top_container_view), |
+ enabled_(false), |
+ visible_fraction_(1) { |
+ } |
+ virtual ~MockImmersiveFullscreenControllerDelegate() {} |
- // ImmersiveModeController::Delegate overrides: |
- virtual FullscreenController* GetFullscreenController() OVERRIDE { |
- return NULL; |
+ // ImmersiveFullscreenController::Delegate overrides: |
+ virtual void OnImmersiveRevealStarted() OVERRIDE { |
+ enabled_ = true; |
+ visible_fraction_ = 0; |
+ } |
+ virtual void OnImmersiveRevealEnded() OVERRIDE { |
+ visible_fraction_ = 0; |
} |
- virtual void FullscreenStateChanged() OVERRIDE {} |
- virtual void SetImmersiveStyle(bool immersive) OVERRIDE { |
- immersive_style_ = immersive; |
+ virtual void OnImmersiveFullscreenExited() OVERRIDE { |
+ enabled_ = false; |
+ visible_fraction_ = 0; |
+ } |
+ virtual void SetVisibility(double visible_fraction) OVERRIDE { |
+ visible_fraction_ = visible_fraction; |
+ } |
+ virtual std::vector<gfx::Rect> GetVisibleBoundsInScreen() OVERRIDE { |
+ std::vector<gfx::Rect> bounds_in_screen; |
+ bounds_in_screen.push_back(top_container_view_->GetBoundsInScreen()); |
+ return bounds_in_screen; |
+ } |
+ |
+ bool is_enabled() const { |
+ return enabled_; |
} |
- virtual content::WebContents* GetWebContents() OVERRIDE { |
- return NULL; |
+ |
+ double visible_fraction() const { |
+ return visible_fraction_; |
} |
private: |
- bool immersive_style_; |
+ views::View* top_container_view_; |
+ bool enabled_; |
+ double visible_fraction_; |
- DISALLOW_COPY_AND_ASSIGN(MockImmersiveModeControllerDelegate); |
+ DISALLOW_COPY_AND_ASSIGN(MockImmersiveFullscreenControllerDelegate); |
}; |
+} // namespace |
+ |
///////////////////////////////////////////////////////////////////////////// |
-class ImmersiveModeControllerAshTest : public ash::test::AshTestBase { |
+class ImmersiveFullscreenControllerTest : public ash::test::AshTestBase { |
public: |
enum Modality { |
MODALITY_MOUSE, |
@@ -69,12 +88,24 @@ class ImmersiveModeControllerAshTest : public ash::test::AshTestBase { |
MODALITY_GESTURE |
}; |
- ImmersiveModeControllerAshTest() : widget_(NULL), top_container_(NULL) {} |
- virtual ~ImmersiveModeControllerAshTest() {} |
+ ImmersiveFullscreenControllerTest() : widget_(NULL), top_container_(NULL) {} |
+ virtual ~ImmersiveFullscreenControllerTest() {} |
- ImmersiveModeControllerAsh* controller() { return controller_.get(); } |
- views::View* top_container() { return top_container_; } |
- MockImmersiveModeControllerDelegate* delegate() { return delegate_.get(); } |
+ ImmersiveFullscreenController* controller() { |
+ return controller_.get(); |
+ } |
+ |
+ views::View* top_container() { |
+ return top_container_; |
+ } |
+ |
+ aura::Window* window() { |
+ return widget_->GetNativeWindow(); |
+ } |
+ |
+ MockImmersiveFullscreenControllerDelegate* delegate() { |
+ return delegate_.get(); |
+ } |
// Access to private data from the controller. |
bool top_edge_hover_timer_running() const { |
@@ -88,22 +119,24 @@ class ImmersiveModeControllerAshTest : public ash::test::AshTestBase { |
virtual void SetUp() OVERRIDE { |
ash::test::AshTestBase::SetUp(); |
- controller_.reset(new ImmersiveModeControllerAsh); |
- delegate_.reset(new MockImmersiveModeControllerDelegate); |
- |
widget_ = new views::Widget(); |
views::Widget::InitParams params; |
params.context = CurrentContext(); |
- params.bounds = gfx::Rect(0, 0, 500, 500); |
widget_->Init(params); |
widget_->Show(); |
+ window()->SetProperty(aura::client::kShowStateKey, |
+ ui::SHOW_STATE_FULLSCREEN); |
+ |
top_container_ = new views::View(); |
- top_container_->SetBounds(0, 0, 500, 100); |
+ top_container_->SetBounds( |
+ 0, 0, widget_->GetWindowBoundsInScreen().width(), 100); |
top_container_->set_focusable(true); |
- |
widget_->GetContentsView()->AddChildView(top_container_); |
+ delegate_.reset( |
+ new MockImmersiveFullscreenControllerDelegate(top_container_)); |
+ controller_.reset(new ImmersiveFullscreenController); |
controller_->Init(delegate_.get(), widget_, top_container_); |
SetAnimationsDisabled(true); |
@@ -111,13 +144,14 @@ class ImmersiveModeControllerAshTest : public ash::test::AshTestBase { |
// AshTestBase. |
} |
- // Enable or disable the immersive mode controller's animations. When the |
- // immersive mode controller's animations are disabled, some behavior is |
+ // Enable or disable the ImmersiveFullscreenController's animations. When the |
+ // ImmersiveFullscreenController's animations are disabled, some behavior is |
// slightly different. In particular, the behavior is different when there |
// is a transfer in which lock keeps the top-of-window views revealed (eg |
// bubble keeps top-of-window views revealed -> mouse keeps top-of-window |
- // views revealed). It is necessary to temparily enable the immersive |
- // controller's animations to get the correct behavior in tests. |
+ // views revealed). It is necessary to temporarily enable the |
+ // ImmersiveFullscreenController's animations to get the correct behavior in |
+ // tests. |
void SetAnimationsDisabled(bool disabled) { |
controller_->animations_disabled_for_test_ = disabled; |
// Force any in progress animations to finish. |
@@ -184,69 +218,54 @@ class ImmersiveModeControllerAshTest : public ash::test::AshTestBase { |
} |
case MODALITY_GESTURE: { |
aura::client::GetCursorClient(CurrentContext())->DisableMouseEvents(); |
- ImmersiveModeControllerAsh::SwipeType swipe_type = revealed ? |
- ImmersiveModeControllerAsh::SWIPE_OPEN : |
- ImmersiveModeControllerAsh::SWIPE_CLOSE; |
+ ImmersiveFullscreenController::SwipeType swipe_type = revealed ? |
+ ImmersiveFullscreenController::SWIPE_OPEN : |
+ ImmersiveFullscreenController::SWIPE_CLOSE; |
controller_->UpdateRevealedLocksForSwipe(swipe_type); |
break; |
} |
} |
} |
- scoped_ptr<ImmersiveModeControllerAsh> controller_; |
- scoped_ptr<MockImmersiveModeControllerDelegate> delegate_; |
+ scoped_ptr<ImmersiveFullscreenController> controller_; |
+ scoped_ptr<MockImmersiveFullscreenControllerDelegate> delegate_; |
views::Widget* widget_; // Owned by the native widget. |
views::View* top_container_; // Owned by |root_view_|. |
- DISALLOW_COPY_AND_ASSIGN(ImmersiveModeControllerAshTest); |
+ DISALLOW_COPY_AND_ASSIGN(ImmersiveFullscreenControllerTest); |
}; |
-// Test of initial state and basic functionality. |
-TEST_F(ImmersiveModeControllerAshTest, ImmersiveModeControllerAsh) { |
+// Test the initial state and that the delegate gets notified of the |
+// top-of-window views getting hidden and revealed. |
+TEST_F(ImmersiveFullscreenControllerTest, Delegate) { |
// Initial state. |
EXPECT_FALSE(controller()->IsEnabled()); |
- EXPECT_FALSE(controller()->ShouldHideTopViews()); |
EXPECT_FALSE(controller()->IsRevealed()); |
- EXPECT_FALSE(delegate()->immersive_style()); |
+ EXPECT_FALSE(delegate()->is_enabled()); |
- // Enabling hides the top views. |
+ // Enabling initially hides the top views. |
controller()->SetEnabled(true); |
EXPECT_TRUE(controller()->IsEnabled()); |
EXPECT_FALSE(controller()->IsRevealed()); |
- EXPECT_TRUE(controller()->ShouldHideTopViews()); |
- EXPECT_FALSE(controller()->ShouldHideTabIndicators()); |
- EXPECT_TRUE(delegate()->immersive_style()); |
+ EXPECT_TRUE(delegate()->is_enabled()); |
+ EXPECT_EQ(0, delegate()->visible_fraction()); |
// Revealing shows the top views. |
AttemptReveal(MODALITY_MOUSE); |
- EXPECT_TRUE(controller()->IsRevealed()); |
- EXPECT_FALSE(controller()->ShouldHideTopViews()); |
- // Tabs are painting in the normal style during a reveal. |
- EXPECT_FALSE(delegate()->immersive_style()); |
- |
- // Disabling immersive fullscreen keeps the top views shown. |
- controller()->SetEnabled(false); |
- EXPECT_FALSE(controller()->IsEnabled()); |
- EXPECT_FALSE(controller()->IsRevealed()); |
- EXPECT_FALSE(controller()->ShouldHideTopViews()); |
- EXPECT_FALSE(delegate()->immersive_style()); |
- |
- // Test disabling immersive fullscreen when the top views are hidden. |
- controller()->SetEnabled(true); |
EXPECT_TRUE(controller()->IsEnabled()); |
- EXPECT_FALSE(controller()->IsRevealed()); |
- EXPECT_TRUE(controller()->ShouldHideTopViews()); |
- EXPECT_TRUE(delegate()->immersive_style()); |
+ EXPECT_TRUE(controller()->IsRevealed()); |
+ EXPECT_TRUE(delegate()->is_enabled()); |
+ EXPECT_EQ(1, delegate()->visible_fraction()); |
+ // Disabling ends the immersive reveal. |
controller()->SetEnabled(false); |
EXPECT_FALSE(controller()->IsEnabled()); |
EXPECT_FALSE(controller()->IsRevealed()); |
- EXPECT_FALSE(controller()->ShouldHideTopViews()); |
- EXPECT_FALSE(delegate()->immersive_style()); |
+ EXPECT_FALSE(delegate()->is_enabled()); |
} |
// GetRevealedLock() specific tests. |
-TEST_F(ImmersiveModeControllerAshTest, RevealedLock) { |
+TEST_F(ImmersiveFullscreenControllerTest, RevealedLock) { |
scoped_ptr<ImmersiveRevealedLock> lock1; |
scoped_ptr<ImmersiveRevealedLock> lock2; |
@@ -257,7 +276,7 @@ TEST_F(ImmersiveModeControllerAshTest, RevealedLock) { |
// fullscreen is disabled. Acquiring or releasing the lock should have no |
// effect till immersive fullscreen is enabled. |
lock1.reset(controller()->GetRevealedLock( |
- ImmersiveModeControllerAsh::ANIMATE_REVEAL_NO)); |
+ ImmersiveFullscreenController::ANIMATE_REVEAL_NO)); |
EXPECT_FALSE(controller()->IsEnabled()); |
EXPECT_FALSE(controller()->IsRevealed()); |
@@ -283,13 +302,13 @@ TEST_F(ImmersiveModeControllerAshTest, RevealedLock) { |
// 2) Test that acquiring a lock reveals the top-of-window views if they are |
// hidden. |
lock1.reset(controller()->GetRevealedLock( |
- ImmersiveModeControllerAsh::ANIMATE_REVEAL_NO)); |
+ ImmersiveFullscreenController::ANIMATE_REVEAL_NO)); |
EXPECT_TRUE(controller()->IsRevealed()); |
// 3) Test that the top-of-window views are only hidden when all of the locks |
// are released. |
lock2.reset(controller()->GetRevealedLock( |
- ImmersiveModeControllerAsh::ANIMATE_REVEAL_NO)); |
+ ImmersiveFullscreenController::ANIMATE_REVEAL_NO)); |
lock1.reset(); |
EXPECT_TRUE(controller()->IsRevealed()); |
@@ -298,7 +317,13 @@ TEST_F(ImmersiveModeControllerAshTest, RevealedLock) { |
} |
// Test mouse event processing for top-of-screen reveal triggering. |
-TEST_F(ImmersiveModeControllerAshTest, OnMouseEvent) { |
+TEST_F(ImmersiveFullscreenControllerTest, OnMouseEvent) { |
+ // Set up initial state. |
+ UpdateDisplay("800x600,800x600"); |
+ ash::DisplayLayout display_layout(ash::DisplayLayout::RIGHT, 0); |
+ ash::Shell::GetInstance()->display_manager()->SetLayoutForCurrentDisplays( |
+ display_layout); |
+ |
// Set up initial state. |
controller()->SetEnabled(true); |
ASSERT_TRUE(controller()->IsEnabled()); |
@@ -324,8 +349,8 @@ TEST_F(ImmersiveModeControllerAshTest, OnMouseEvent) { |
EXPECT_TRUE(top_edge_hover_timer_running()); |
EXPECT_EQ(top_edge_pos.x(), mouse_x_when_hit_top()); |
- // Moving |ImmersiveModeControllerAsh::kMouseRevealBoundsHeight| down from |
- // the top edge stops it. |
+ // Moving |ImmersiveFullscreenControllerTest::kMouseRevealBoundsHeight| down |
+ // from the top edge stops it. |
event_generator.MoveMouseBy(0, 3); |
EXPECT_FALSE(top_edge_hover_timer_running()); |
@@ -351,8 +376,7 @@ TEST_F(ImmersiveModeControllerAshTest, OnMouseEvent) { |
EXPECT_EQ(top_edge_pos.x() + 100, mouse_x_when_hit_top()); |
// Moving off the top edge horizontally stops the timer. |
- EXPECT_GT(CurrentContext()->bounds().width(), top_container()->width()); |
- event_generator.MoveMouseTo(top_container_bounds_in_screen.right(), |
+ event_generator.MoveMouseTo(top_container_bounds_in_screen.right() + 1, |
top_container_bounds_in_screen.y()); |
EXPECT_FALSE(top_edge_hover_timer_running()); |
@@ -399,7 +423,7 @@ TEST_F(ImmersiveModeControllerAshTest, OnMouseEvent) { |
// Test mouse event processing for top-of-screen reveal triggering when the user |
// has a vertical display layout (primary display above/below secondary display) |
// and the immersive fullscreen window is on the bottom display. |
-TEST_F(ImmersiveModeControllerAshTest, MouseEventsVerticalDisplayLayout) { |
+TEST_F(ImmersiveFullscreenControllerTest, MouseEventsVerticalDisplayLayout) { |
if (!SupportsMultipleDisplays()) |
return; |
@@ -473,64 +497,8 @@ TEST_F(ImmersiveModeControllerAshTest, MouseEventsVerticalDisplayLayout) { |
EXPECT_FALSE(controller()->IsRevealed()); |
} |
-// Test that hovering the mouse over the find bar does not end a reveal. |
-TEST_F(ImmersiveModeControllerAshTest, FindBar) { |
- // Set up initial state. |
- controller()->SetEnabled(true); |
- ASSERT_TRUE(controller()->IsEnabled()); |
- ASSERT_FALSE(controller()->IsRevealed()); |
- |
- // Compute the find bar bounds relative to TopContainerView. The find |
- // bar is aligned with the bottom right of the TopContainerView. |
- gfx::Rect find_bar_bounds(top_container()->bounds().right() - 100, |
- top_container()->bounds().bottom(), |
- 100, |
- 50); |
- |
- gfx::Point find_bar_position_in_screen = find_bar_bounds.origin(); |
- views::View::ConvertPointToScreen(top_container(), |
- &find_bar_position_in_screen); |
- gfx::Rect find_bar_bounds_in_screen(find_bar_position_in_screen, |
- find_bar_bounds.size()); |
- controller()->OnFindBarVisibleBoundsChanged(find_bar_bounds_in_screen); |
- |
- // Moving the mouse over the find bar does not end the reveal. |
- gfx::Point over_find_bar(find_bar_bounds.x() + 25, find_bar_bounds.y() + 25); |
- AttemptReveal(MODALITY_MOUSE); |
- EXPECT_TRUE(controller()->IsRevealed()); |
- MoveMouse(over_find_bar.x(), over_find_bar.y()); |
- EXPECT_TRUE(controller()->IsRevealed()); |
- |
- // Moving the mouse off of the find bar horizontally ends the reveal. |
- MoveMouse(find_bar_bounds.x() - 25, find_bar_bounds.y() + 25); |
- EXPECT_FALSE(controller()->IsRevealed()); |
- |
- // Moving the mouse off of the find bar vertically ends the reveal. |
- AttemptReveal(MODALITY_MOUSE); |
- EXPECT_TRUE(controller()->IsRevealed()); |
- MoveMouse(find_bar_bounds.x() + 25, find_bar_bounds.bottom() + 25); |
- |
- // Similar to the TopContainerView, moving the mouse slightly off vertically |
- // of the find bar does not end the reveal. |
- AttemptReveal(MODALITY_MOUSE); |
- MoveMouse(find_bar_bounds.x() + 25, find_bar_bounds.bottom() + 1); |
- EXPECT_TRUE(controller()->IsRevealed()); |
- |
- // Similar to the TopContainerView, clicking the mouse even slightly off of |
- // the find bar ends the reveal. |
- GetEventGenerator().ClickLeftButton(); |
- EXPECT_FALSE(controller()->IsRevealed()); |
- |
- // Set the find bar bounds to empty. Hovering over the position previously |
- // occupied by the find bar, |over_find_bar|, should end the reveal. |
- controller()->OnFindBarVisibleBoundsChanged(gfx::Rect()); |
- AttemptReveal(MODALITY_MOUSE); |
- MoveMouse(over_find_bar.x(), over_find_bar.y()); |
- EXPECT_FALSE(controller()->IsRevealed()); |
-} |
- |
// Test behavior when the mouse becomes hovered without moving. |
-TEST_F(ImmersiveModeControllerAshTest, MouseHoveredWithoutMoving) { |
+TEST_F(ImmersiveFullscreenControllerTest, MouseHoveredWithoutMoving) { |
controller()->SetEnabled(true); |
scoped_ptr<ImmersiveRevealedLock> lock; |
@@ -541,7 +509,7 @@ TEST_F(ImmersiveModeControllerAshTest, MouseHoveredWithoutMoving) { |
SetHovered(true); |
EXPECT_FALSE(controller()->IsRevealed()); |
lock.reset(controller()->GetRevealedLock( |
- ImmersiveModeControllerAsh::ANIMATE_REVEAL_NO)); |
+ ImmersiveFullscreenController::ANIMATE_REVEAL_NO)); |
EXPECT_TRUE(controller()->IsRevealed()); |
lock.reset(); |
EXPECT_TRUE(controller()->IsRevealed()); |
@@ -549,7 +517,7 @@ TEST_F(ImmersiveModeControllerAshTest, MouseHoveredWithoutMoving) { |
EXPECT_FALSE(controller()->IsRevealed()); |
// 2) Test that if the mouse becomes hovered without moving because of a |
- // reveal in ImmersiveModeControllerAshTest::controller()->SetEnabled(true) |
+ // reveal in ImmersiveFullscreenController::controller()->SetEnabled(true) |
// and there are no locks keeping the top-of-window views revealed, that mouse |
// hover does not prevent the top-of-window views from closing. |
controller()->SetEnabled(false); |
@@ -559,14 +527,14 @@ TEST_F(ImmersiveModeControllerAshTest, MouseHoveredWithoutMoving) { |
EXPECT_FALSE(controller()->IsRevealed()); |
// 3) Test that if the mouse becomes hovered without moving because of a |
- // reveal in ImmersiveModeControllerAshTest::controller()->SetEnabled(true) |
+ // reveal in ImmersiveFullscreenController::controller()->SetEnabled(true) |
// and there is a lock keeping the top-of-window views revealed, that the |
// top-of-window views do not hide till the mouse moves off of the |
// top-of-window views. |
controller()->SetEnabled(false); |
SetHovered(true); |
lock.reset(controller()->GetRevealedLock( |
- ImmersiveModeControllerAsh::ANIMATE_REVEAL_NO)); |
+ ImmersiveFullscreenController::ANIMATE_REVEAL_NO)); |
EXPECT_FALSE(controller()->IsRevealed()); |
controller()->SetEnabled(true); |
EXPECT_TRUE(controller()->IsRevealed()); |
@@ -580,7 +548,7 @@ TEST_F(ImmersiveModeControllerAshTest, MouseHoveredWithoutMoving) { |
// the reveal via another. For instance, initiating the reveal via a SWIPE_OPEN |
// edge gesture, switching to using the mouse and ending the reveal by moving |
// the mouse off of the top-of-window views. |
-TEST_F(ImmersiveModeControllerAshTest, DifferentModalityEnterExit) { |
+TEST_F(ImmersiveFullscreenControllerTest, DifferentModalityEnterExit) { |
controller()->SetEnabled(true); |
EXPECT_TRUE(controller()->IsEnabled()); |
EXPECT_FALSE(controller()->IsRevealed()); |
@@ -613,7 +581,7 @@ TEST_F(ImmersiveModeControllerAshTest, DifferentModalityEnterExit) { |
} |
// Test when the SWIPE_CLOSE edge gesture closes the top-of-window views. |
-TEST_F(ImmersiveModeControllerAshTest, EndRevealViaGesture) { |
+TEST_F(ImmersiveFullscreenControllerTest, EndRevealViaGesture) { |
controller()->SetEnabled(true); |
EXPECT_TRUE(controller()->IsEnabled()); |
EXPECT_FALSE(controller()->IsRevealed()); |
@@ -631,7 +599,7 @@ TEST_F(ImmersiveModeControllerAshTest, EndRevealViaGesture) { |
// end the reveal. |
AttemptReveal(MODALITY_MOUSE); |
scoped_ptr<ImmersiveRevealedLock> lock(controller()->GetRevealedLock( |
- ImmersiveModeController::ANIMATE_REVEAL_NO)); |
+ ImmersiveFullscreenController::ANIMATE_REVEAL_NO)); |
EXPECT_TRUE(controller()->IsRevealed()); |
AttemptUnreveal(MODALITY_GESTURE); |
EXPECT_TRUE(controller()->IsRevealed()); |
@@ -645,7 +613,7 @@ TEST_F(ImmersiveModeControllerAshTest, EndRevealViaGesture) { |
// Test how focus and activation affects whether the top-of-window views are |
// revealed. |
-TEST_F(ImmersiveModeControllerAshTest, Focus) { |
+TEST_F(ImmersiveFullscreenControllerTest, Focus) { |
// Add views to the view hierarchy which we will focus and unfocus during the |
// test. |
views::View* child_view = new views::View(); |
@@ -699,7 +667,7 @@ TEST_F(ImmersiveModeControllerAshTest, Focus) { |
EXPECT_TRUE(controller()->IsRevealed()); |
controller()->SetEnabled(false); |
scoped_ptr<ImmersiveRevealedLock> lock(controller()->GetRevealedLock( |
- ImmersiveModeController::ANIMATE_REVEAL_NO)); |
+ ImmersiveFullscreenController::ANIMATE_REVEAL_NO)); |
EXPECT_FALSE(controller()->IsRevealed()); |
unrelated_view->RequestFocus(); |
controller()->SetEnabled(true); |
@@ -710,8 +678,8 @@ TEST_F(ImmersiveModeControllerAshTest, Focus) { |
// Test how activation affects whether the top-of-window views are revealed. |
// The behavior when a bubble is activated is tested in |
-// ImmersiveModeControllerAshTest.Bubbles. |
-TEST_F(ImmersiveModeControllerAshTest, Activation) { |
+// ImmersiveFullscreenControllerTest.Bubbles. |
+TEST_F(ImmersiveFullscreenControllerTest, Activation) { |
views::Widget* top_container_widget = top_container()->GetWidget(); |
controller()->SetEnabled(true); |
@@ -758,7 +726,7 @@ TEST_F(ImmersiveModeControllerAshTest, Activation) { |
} |
// Test how bubbles affect whether the top-of-window views are revealed. |
-TEST_F(ImmersiveModeControllerAshTest, Bubbles) { |
+TEST_F(ImmersiveFullscreenControllerTest, Bubbles) { |
scoped_ptr<ImmersiveRevealedLock> revealed_lock; |
views::Widget* top_container_widget = top_container()->GetWidget(); |
@@ -785,7 +753,7 @@ TEST_F(ImmersiveModeControllerAshTest, Bubbles) { |
top_container_widget->Activate(); |
AttemptReveal(MODALITY_MOUSE); |
revealed_lock.reset(controller()->GetRevealedLock( |
- ImmersiveModeController::ANIMATE_REVEAL_NO)); |
+ ImmersiveFullscreenController::ANIMATE_REVEAL_NO)); |
EXPECT_TRUE(controller()->IsRevealed()); |
views::Widget* bubble_widget2 = views::BubbleDelegateView::CreateBubble( |
@@ -887,213 +855,26 @@ TEST_F(ImmersiveModeControllerAshTest, Bubbles) { |
#endif // defined(OS_WIN) |
-class ImmersiveModeControllerAshTestWithBrowserView |
- : public TestWithBrowserView { |
- public: |
- ImmersiveModeControllerAshTestWithBrowserView() {} |
- virtual ~ImmersiveModeControllerAshTestWithBrowserView() {} |
- |
- // TestWithBrowserView override: |
- virtual void SetUp() OVERRIDE { |
- TestWithBrowserView::SetUp(); |
- |
- browser()->window()->Show(); |
- |
- controller_ = browser_view()->immersive_mode_controller(); |
- 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 |
- // is used to trigger changes in whether the shelf is auto hidden and |
- // whether a "light bar" version of the tab strip is used when the |
- // top-of-window views are hidden. |
- scoped_ptr<FullscreenNotificationObserver> waiter( |
- new FullscreenNotificationObserver()); |
- chrome::ToggleFullscreenMode(browser()); |
- waiter->Wait(); |
- } |
- |
- // Set whether the browser is in tab fullscreen. |
- void SetTabFullscreen(bool tab_fullscreen) { |
- content::WebContents* web_contents = |
- browser_view()->GetContentsWebViewForTest()->GetWebContents(); |
- scoped_ptr<FullscreenNotificationObserver> waiter( |
- new FullscreenNotificationObserver()); |
- browser()->fullscreen_controller()->ToggleFullscreenModeForTab( |
- web_contents, tab_fullscreen); |
- waiter->Wait(); |
- } |
- |
- // Attempt revealing the top-of-window views. |
- void AttemptReveal() { |
- if (!revealed_lock_.get()) { |
- revealed_lock_.reset(controller_->GetRevealedLock( |
- ImmersiveModeControllerAsh::ANIMATE_REVEAL_NO)); |
- } |
- } |
- |
- // Attempt unrevealing the top-of-window views. |
- void AttemptUnreveal() { |
- revealed_lock_.reset(); |
- } |
- |
- ImmersiveModeController* controller() { return controller_; } |
- |
- private: |
- // Not owned. |
- ImmersiveModeController* controller_; |
- |
- scoped_ptr<ImmersiveRevealedLock> revealed_lock_; |
- |
- DISALLOW_COPY_AND_ASSIGN(ImmersiveModeControllerAshTestWithBrowserView); |
-}; |
- |
-// Test the layout and visibility of the tabstrip, toolbar and TopContainerView |
-// in immersive fullscreen. |
-TEST_F(ImmersiveModeControllerAshTestWithBrowserView, Layout) { |
- AddTab(browser(), GURL("about:blank")); |
- |
- TabStrip* tabstrip = browser_view()->tabstrip(); |
- ToolbarView* toolbar = browser_view()->toolbar(); |
- views::WebView* contents_web_view = |
- browser_view()->GetContentsWebViewForTest(); |
- |
- // Immersive fullscreen starts out disabled. |
- ASSERT_FALSE(browser_view()->GetWidget()->IsFullscreen()); |
- ASSERT_FALSE(controller()->IsEnabled()); |
- |
- // By default, the tabstrip and toolbar should be visible. |
- EXPECT_TRUE(tabstrip->visible()); |
- EXPECT_TRUE(toolbar->visible()); |
- |
- ToggleFullscreen(); |
- EXPECT_TRUE(browser_view()->GetWidget()->IsFullscreen()); |
- EXPECT_TRUE(controller()->IsEnabled()); |
- EXPECT_FALSE(controller()->IsRevealed()); |
- |
- // Entering immersive fullscreen should make the tab strip use the immersive |
- // style and hide the toolbar. |
- EXPECT_TRUE(tabstrip->visible()); |
- EXPECT_TRUE(tabstrip->IsImmersiveStyle()); |
- EXPECT_FALSE(toolbar->visible()); |
- |
- // The tab indicators should be flush with the top of the widget. |
- EXPECT_EQ(0, GetBoundsInWidget(tabstrip).y()); |
- |
- // The web contents should be immediately below the tab indicators. |
- EXPECT_EQ(Tab::GetImmersiveHeight(), |
- GetBoundsInWidget(contents_web_view).y()); |
- |
- // Revealing the top-of-window views should set the tab strip back to the |
- // normal style and show the toolbar. |
- AttemptReveal(); |
- EXPECT_TRUE(controller()->IsRevealed()); |
- EXPECT_TRUE(tabstrip->visible()); |
- EXPECT_FALSE(tabstrip->IsImmersiveStyle()); |
- EXPECT_TRUE(toolbar->visible()); |
- |
- // The TopContainerView should be flush with the top edge of the widget. If |
- // it is not flush with the top edge the immersive reveal animation looks |
- // wonky. |
- EXPECT_EQ(0, GetBoundsInWidget(browser_view()->top_container()).y()); |
- |
- // The web contents should be at the same y position as they were when the |
- // top-of-window views were hidden. |
- EXPECT_EQ(Tab::GetImmersiveHeight(), |
- GetBoundsInWidget(contents_web_view).y()); |
- |
- // Repeat the test for when in both immersive fullscreen and tab fullscreen. |
- SetTabFullscreen(true); |
- // Hide and reveal the top-of-window views so that they get relain out. |
- AttemptUnreveal(); |
- AttemptReveal(); |
- |
- // The tab strip and toolbar should still be visible and the TopContainerView |
- // should still be flush with the top edge of the widget. |
- EXPECT_TRUE(controller()->IsRevealed()); |
- EXPECT_TRUE(tabstrip->visible()); |
- EXPECT_FALSE(tabstrip->IsImmersiveStyle()); |
- EXPECT_TRUE(toolbar->visible()); |
- EXPECT_EQ(0, GetBoundsInWidget(browser_view()->top_container()).y()); |
- |
- // The web contents should be flush with the top edge of the widget when in |
- // both immersive and tab fullscreen. |
- EXPECT_EQ(0, GetBoundsInWidget(contents_web_view).y()); |
- |
- // Hide the top-of-window views. Both the tab strip and the toolbar should |
- // hide when in both immersive and tab fullscreen. |
- AttemptUnreveal(); |
- EXPECT_FALSE(controller()->IsRevealed()); |
- EXPECT_FALSE(tabstrip->visible()); |
- EXPECT_FALSE(toolbar->visible()); |
- |
- // The web contents should still be flush with the edge of the widget. |
- EXPECT_EQ(0, GetBoundsInWidget(contents_web_view).y()); |
- |
- // Exiting both immersive and tab fullscreen should show the tab strip and |
- // toolbar. |
- ToggleFullscreen(); |
- EXPECT_FALSE(browser_view()->GetWidget()->IsFullscreen()); |
- EXPECT_FALSE(controller()->IsEnabled()); |
- EXPECT_FALSE(controller()->IsRevealed()); |
- EXPECT_TRUE(tabstrip->visible()); |
- EXPECT_FALSE(tabstrip->IsImmersiveStyle()); |
- EXPECT_TRUE(toolbar->visible()); |
-} |
- |
-// Test that the browser commands which are usually disabled in fullscreen are |
-// are enabled in immersive fullscreen. |
-TEST_F(ImmersiveModeControllerAshTestWithBrowserView, EnabledCommands) { |
- ASSERT_FALSE(controller()->IsEnabled()); |
- EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL)); |
- EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_ABOUT)); |
- EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION)); |
- |
- ToggleFullscreen(); |
- EXPECT_TRUE(controller()->IsEnabled()); |
- EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL)); |
- EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_ABOUT)); |
- EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION)); |
-} |
- |
-// Test that restoring a window properly exits immersive fullscreen. |
-TEST_F(ImmersiveModeControllerAshTestWithBrowserView, ExitUponRestore) { |
- ASSERT_FALSE(controller()->IsEnabled()); |
- ToggleFullscreen(); |
- AttemptReveal(); |
- ASSERT_TRUE(controller()->IsEnabled()); |
- ASSERT_TRUE(controller()->IsRevealed()); |
- ASSERT_TRUE(browser_view()->GetWidget()->IsFullscreen()); |
- |
- browser_view()->GetWidget()->Restore(); |
- EXPECT_FALSE(controller()->IsEnabled()); |
-} |
- |
// Test that the shelf is set to auto hide as long as the window is in |
// immersive fullscreen and that the shelf's state before entering immersive |
// fullscreen is restored upon exiting immersive fullscreen. |
-TEST_F(ImmersiveModeControllerAshTestWithBrowserView, Shelf) { |
- // Shelf is visible when the test starts. |
+TEST_F(ImmersiveFullscreenControllerTest, Shelf) { |
ash::internal::ShelfLayoutManager* shelf = |
ash::Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager(); |
+ |
+ // Shelf is visible by default. |
+ window()->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); |
+ ASSERT_FALSE(controller()->IsEnabled()); |
ASSERT_EQ(ash::SHELF_VISIBLE, shelf->visibility_state()); |
// Entering immersive fullscreen sets the shelf to auto hide. |
- ToggleFullscreen(); |
- ASSERT_TRUE(browser_view()->IsFullscreen()); |
- ASSERT_TRUE(controller()->IsEnabled()); |
+ window()->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN); |
+ controller()->SetEnabled(true); |
EXPECT_EQ(ash::SHELF_AUTO_HIDE, shelf->visibility_state()); |
// Disabling immersive fullscreen puts it back. |
- ToggleFullscreen(); |
- ASSERT_FALSE(browser_view()->IsFullscreen()); |
+ controller()->SetEnabled(false); |
+ window()->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); |
ASSERT_FALSE(controller()->IsEnabled()); |
EXPECT_EQ(ash::SHELF_VISIBLE, shelf->visibility_state()); |
@@ -1102,55 +883,17 @@ TEST_F(ImmersiveModeControllerAshTestWithBrowserView, Shelf) { |
EXPECT_EQ(ash::SHELF_AUTO_HIDE, shelf->visibility_state()); |
// Entering immersive fullscreen keeps auto-hide. |
- ToggleFullscreen(); |
- ASSERT_TRUE(browser_view()->IsFullscreen()); |
- ASSERT_TRUE(controller()->IsEnabled()); |
+ window()->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN); |
+ controller()->SetEnabled(true); |
EXPECT_EQ(ash::SHELF_AUTO_HIDE, shelf->visibility_state()); |
// Disabling immersive fullscreen maintains the user's auto-hide selection. |
- ToggleFullscreen(); |
- ASSERT_FALSE(browser_view()->IsFullscreen()); |
- ASSERT_FALSE(controller()->IsEnabled()); |
+ controller()->SetEnabled(false); |
+ window()->SetProperty(aura::client::kShowStateKey, |
+ ui::SHOW_STATE_NORMAL); |
EXPECT_EQ(ash::SHELF_AUTO_HIDE, shelf->visibility_state()); |
} |
-// Test how being simultaneously in tab fullscreen and immersive fullscreen |
-// affects the shelf visibility and whether the tab indicators are hidden. |
-TEST_F(ImmersiveModeControllerAshTestWithBrowserView, TabAndBrowserFullscreen) { |
- AddTab(browser(), GURL("about:blank")); |
- |
- // The shelf should start out as visible. |
- ash::internal::ShelfLayoutManager* shelf = |
- ash::Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager(); |
- ASSERT_EQ(ash::SHELF_VISIBLE, shelf->visibility_state()); |
- |
- // 1) Test that entering tab fullscreen from immersive fullscreen hides the |
- // tab indicators and the shelf. |
- ToggleFullscreen(); |
- ASSERT_TRUE(controller()->IsEnabled()); |
- EXPECT_EQ(ash::SHELF_AUTO_HIDE, shelf->visibility_state()); |
- EXPECT_FALSE(controller()->ShouldHideTabIndicators()); |
- |
- SetTabFullscreen(true); |
- ASSERT_TRUE(controller()->IsEnabled()); |
- EXPECT_EQ(ash::SHELF_HIDDEN, shelf->visibility_state()); |
- EXPECT_TRUE(controller()->ShouldHideTabIndicators()); |
- |
- // 2) Test that exiting tab fullscreen shows the tab indicators and autohides |
- // the shelf. |
- SetTabFullscreen(false); |
- ASSERT_TRUE(controller()->IsEnabled()); |
- EXPECT_EQ(ash::SHELF_AUTO_HIDE, shelf->visibility_state()); |
- EXPECT_FALSE(controller()->ShouldHideTabIndicators()); |
- |
- // 3) Test that exiting tab fullscreen and immersive fullscreen |
- // simultaneously correctly updates the shelf visibility and whether the tab |
- // indicators should be hidden. |
- SetTabFullscreen(true); |
- ToggleFullscreen(); |
- ASSERT_FALSE(controller()->IsEnabled()); |
- EXPECT_EQ(ash::SHELF_VISIBLE, shelf->visibility_state()); |
- EXPECT_TRUE(controller()->ShouldHideTabIndicators()); |
-} |
+} // namespase ash |
#endif // defined(OS_CHROMEOS) |