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 f24f95d724b01a36cb569ee320212d1b0e22f1c1..991b3fc55ef74a1551e0e4f779169c353d6ef551 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 |
@@ -5,6 +5,7 @@ |
#include "chrome/browser/ui/views/frame/immersive_mode_controller_ash.h" |
#include "ash/display/display_manager.h" |
+#include "ash/screen_ash.h" |
#include "ash/shell.h" |
#include "ash/test/ash_test_base.h" |
#include "chrome/app/chrome_command_ids.h" |
@@ -17,11 +18,13 @@ |
#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" |
#include "ui/aura/test/event_generator.h" |
#include "ui/aura/window.h" |
+#include "ui/base/ui_base_types.h" |
#include "ui/gfx/animation/slide_animation.h" |
#include "ui/views/bubble/bubble_delegate.h" |
#include "ui/views/controls/webview/webview.h" |
@@ -48,9 +51,6 @@ class MockImmersiveModeControllerDelegate |
virtual void SetImmersiveStyle(bool immersive) OVERRIDE { |
immersive_style_ = immersive; |
} |
- virtual content::WebContents* GetWebContents() OVERRIDE { |
- return NULL; |
- } |
private: |
bool immersive_style_; |
@@ -58,6 +58,21 @@ class MockImmersiveModeControllerDelegate |
DISALLOW_COPY_AND_ASSIGN(MockImmersiveModeControllerDelegate); |
}; |
+// View which consumes all touch events. |
+class TouchEventConsumerView : public views::View { |
+ public: |
+ TouchEventConsumerView() { |
+ } |
+ virtual ~TouchEventConsumerView() { |
+ } |
+ |
+ virtual void OnTouchEvent(ui::TouchEvent* event) OVERRIDE { |
+ event->SetHandled(); |
+ } |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(TouchEventConsumerView); |
+}; |
+ |
///////////////////////////////////////////////////////////////////////////// |
class ImmersiveModeControllerAshTest : public ash::test::AshTestBase { |
@@ -96,14 +111,16 @@ class ImmersiveModeControllerAshTest : public ash::test::AshTestBase { |
widget_ = new views::Widget(); |
views::Widget::InitParams params; |
params.context = CurrentContext(); |
- params.bounds = gfx::Rect(0, 0, 500, 500); |
widget_->Init(params); |
widget_->Show(); |
+ widget_->GetNativeWindow()->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_); |
controller_->Init(delegate_.get(), widget_, top_container_); |
@@ -251,6 +268,12 @@ TEST_F(ImmersiveModeControllerAshTest, ImmersiveModeControllerAsh) { |
// Test mouse event processing for top-of-screen reveal triggering. |
TEST_F(ImmersiveModeControllerAshTest, 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()); |
ASSERT_FALSE(controller()->IsRevealed()); |
@@ -302,8 +325,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()); |
@@ -975,4 +997,50 @@ TEST_F(ImmersiveModeControllerAshTestWithBrowserView, ExitUponRestore) { |
EXPECT_FALSE(controller()->IsEnabled()); |
} |
+// Test that it is still possible to reveal and hide the top-of-window views |
+// via a gesture when a child window consumes touch events. |
+TEST_F(ImmersiveModeControllerAshTestWithBrowserView, |
+ RevealViaGestureChildWindowConsumesTouchEvents) { |
+ views::Widget* browser_widget = browser_view()->GetWidget(); |
+ |
+ // Create a child widget which consumes all touch events. |
+ views::Widget::InitParams child_params( |
+ views::Widget::InitParams::TYPE_CONTROL); |
+ child_params.ownership = |
+ views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
+ child_params.parent = browser_widget->GetNativeView(); |
+ child_params.bounds = |
+ gfx::Rect(browser_widget->GetWindowBoundsInScreen().size()); |
+ scoped_ptr<views::Widget> child_widget(new views::Widget()); |
+ child_widget->Init(child_params); |
+ child_widget->SetContentsView(new TouchEventConsumerView()); |
+ child_widget->Show(); |
+ |
+ ASSERT_FALSE(controller()->IsEnabled()); |
+ chrome::ToggleFullscreenMode(browser()); |
+ ASSERT_TRUE(controller()->IsEnabled()); |
+ EXPECT_FALSE(controller()->IsRevealed()); |
+ |
+ gfx::Rect top_container_bounds_in_root = |
+ ash::ScreenAsh::ConvertRectFromScreen( |
+ browser_widget->GetNativeView()->GetRootWindow(), |
+ browser_view()->top_container()->GetBoundsInScreen()); |
+ |
+ gfx::Point top(top_container_bounds_in_root.origin()); |
+ gfx::Point bottom = top + gfx::Vector2d(0, 100); |
+ aura::test::EventGenerator generator( |
+ browser_widget->GetNativeView()->GetRootWindow()); |
+ generator.GestureScrollSequence(top, |
+ bottom, |
+ base::TimeDelta::FromMilliseconds(10), |
+ 3); |
+ EXPECT_TRUE(controller()->IsRevealed()); |
+ |
+ generator.GestureScrollSequence(bottom, |
+ top, |
+ base::TimeDelta::FromMilliseconds(10), |
+ 3); |
+ EXPECT_FALSE(controller()->IsRevealed()); |
+} |
+ |
#endif // defined(OS_CHROMEOS) |