Chromium Code Reviews| Index: ui/views/widget/widget_unittest.cc |
| diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc |
| index c20eddf4827086a4144bf7c39b036d1beef8d393..5b8e69f9304ba67a011c09807ed6d06cb846880f 100644 |
| --- a/ui/views/widget/widget_unittest.cc |
| +++ b/ui/views/widget/widget_unittest.cc |
| @@ -12,12 +12,6 @@ |
| #include "base/run_loop.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| -#include "ui/aura/client/aura_constants.h" |
| -#include "ui/aura/client/window_tree_client.h" |
| -#include "ui/aura/test/event_generator.h" |
| -#include "ui/aura/test/test_window_delegate.h" |
| -#include "ui/aura/window.h" |
| -#include "ui/aura/window_tree_host.h" |
| #include "ui/base/hit_test.h" |
| #include "ui/compositor/scoped_animation_duration_scale_mode.h" |
| #include "ui/compositor/scoped_layer_animation_settings.h" |
| @@ -27,20 +21,17 @@ |
| #include "ui/gfx/point.h" |
| #include "ui/views/bubble/bubble_delegate.h" |
| #include "ui/views/controls/textfield/textfield.h" |
| +#include "ui/views/ime/input_method_delegate.h" |
| #include "ui/views/test/test_views_delegate.h" |
| +#include "ui/views/test/widget_event_generator.h" |
| #include "ui/views/test/widget_test.h" |
| #include "ui/views/views_delegate.h" |
| -#include "ui/views/widget/native_widget_aura.h" |
| #include "ui/views/widget/native_widget_delegate.h" |
| #include "ui/views/widget/root_view.h" |
| #include "ui/views/widget/widget_deletion_observer.h" |
| #include "ui/views/window/dialog_delegate.h" |
| #include "ui/views/window/native_frame_view.h" |
| -#if !defined(OS_CHROMEOS) |
| -#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h" |
| -#endif |
| - |
| #if defined(OS_WIN) |
| #include "ui/views/win/hwnd_util.h" |
| #endif |
| @@ -51,7 +42,7 @@ namespace test { |
| // A view that keeps track of the events it receives, but consumes no events. |
| class EventCountView : public View { |
| public: |
| - EventCountView() {} |
| + EventCountView() : last_flags_(0) {} |
| virtual ~EventCountView() {} |
| int GetEventCount(ui::EventType type) { |
| @@ -62,27 +53,43 @@ class EventCountView : public View { |
| event_count_.clear(); |
| } |
| + int last_flags() const { |
| + return last_flags_; |
| + } |
| + |
| protected: |
| + // Overridden from View: |
| + virtual void OnMouseMoved(const ui::MouseEvent& event) OVERRIDE { |
| + // MouseMove events are not re-dispatched from the RootView. |
| + ++event_count_[ui::ET_MOUSE_MOVED]; |
| + last_flags_ = 0; |
| + } |
| + |
| // Overridden from ui::EventHandler: |
| virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE { |
| - RecordEvent(*event); |
| + RecordEvent(event); |
| } |
| virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE { |
| - RecordEvent(*event); |
| + RecordEvent(event); |
| } |
| virtual void OnScrollEvent(ui::ScrollEvent* event) OVERRIDE { |
| - RecordEvent(*event); |
| + RecordEvent(event); |
| } |
| virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE { |
| - RecordEvent(*event); |
| + RecordEvent(event); |
| } |
| private: |
| - void RecordEvent(const ui::Event& event) { |
| - ++event_count_[event.type()]; |
| + void RecordEvent(ui::Event* event) { |
| + ++event_count_[event->type()]; |
| + last_flags_ = event->flags(); |
| + // Mark the event as handled so that EventCountView receives future events |
| + // in the event sequence. |
| + event->SetHandled(); |
| } |
| std::map<ui::EventType, int> event_count_; |
| + int last_flags_; |
| DISALLOW_COPY_AND_ASSIGN(EventCountView); |
| }; |
| @@ -314,11 +321,11 @@ struct OwnershipTestState { |
| // A platform NativeWidget subclass that updates a bag of state when it is |
| // destroyed. |
| -class OwnershipTestNativeWidget : public NativeWidgetAura { |
| +class OwnershipTestNativeWidget : public PlatformNativeWidget { |
| public: |
| OwnershipTestNativeWidget(internal::NativeWidgetDelegate* delegate, |
| OwnershipTestState* state) |
| - : NativeWidgetAura(delegate), |
| + : PlatformNativeWidget(delegate), |
| state_(state) { |
| } |
| virtual ~OwnershipTestNativeWidget() { |
| @@ -495,7 +502,7 @@ TEST_F(WidgetOwnershipTest, |
| widget->Init(params); |
| // Now simulate a destroy of the platform native widget from the OS: |
| - delete widget->GetNativeView(); |
| + test::WidgetEventGenerator::SimulateNativeDestroy(widget); |
| EXPECT_TRUE(state.widget_deleted); |
| EXPECT_TRUE(state.native_widget_deleted); |
| @@ -649,11 +656,12 @@ TEST_F(WidgetWithDestroyedNativeViewTest, Test) { |
| widget.native_widget_private()->CloseNow(); |
| InvokeWidgetMethods(&widget); |
| } |
| + |
| #if !defined(OS_CHROMEOS) |
| { |
| Widget widget; |
| Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
| - params.native_widget = new DesktopNativeWidgetAura(&widget); |
| + params.native_widget = new PlatformDesktopNativeWidget(&widget); |
| params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| widget.Init(params); |
| widget.Show(); |
| @@ -934,7 +942,7 @@ TEST_F(WidgetTest, DISABLED_FocusChangesOnBubble) { |
| init_params.bounds = gfx::Rect(0, 0, 200, 200); |
| init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| #if !defined(OS_CHROMEOS) |
| - init_params.native_widget = new DesktopNativeWidgetAura(&widget); |
| + init_params.native_widget = new PlatformDesktopNativeWidget(&widget); |
| #endif |
| widget.Init(init_params); |
| widget.SetContentsView(contents_view); |
| @@ -1002,7 +1010,7 @@ TEST_F(WidgetTest, TestViewWidthAfterMinimizingWidget) { |
| gfx::Rect initial_bounds(0, 0, 300, 400); |
| init_params.bounds = initial_bounds; |
| init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| - init_params.native_widget = new DesktopNativeWidgetAura(&widget); |
| + init_params.native_widget = new PlatformDesktopNativeWidget(&widget); |
| widget.Init(init_params); |
| NonClientView* non_client_view = widget.non_client_view(); |
| NonClientFrameView* frame_view = new MinimumSizeFrameView(&widget); |
| @@ -1056,7 +1064,7 @@ class DesktopAuraTestValidPaintWidget : public views::Widget { |
| bool received_paint_while_hidden_; |
| }; |
| -TEST_F(WidgetTest, DesktopNativeWidgetAuraNoPaintAfterCloseTest) { |
| +TEST_F(WidgetTest, DesktopNativeWidgetNoPaintAfterCloseTest) { |
| View* contents_view = new View; |
| contents_view->SetFocusable(true); |
| DesktopAuraTestValidPaintWidget widget; |
| @@ -1064,7 +1072,7 @@ TEST_F(WidgetTest, DesktopNativeWidgetAuraNoPaintAfterCloseTest) { |
| CreateParams(Widget::InitParams::TYPE_WINDOW_FRAMELESS); |
| init_params.bounds = gfx::Rect(0, 0, 200, 200); |
| init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| - init_params.native_widget = new DesktopNativeWidgetAura(&widget); |
| + init_params.native_widget = new PlatformDesktopNativeWidget(&widget); |
| widget.Init(init_params); |
| widget.SetContentsView(contents_view); |
| widget.Show(); |
| @@ -1076,7 +1084,7 @@ TEST_F(WidgetTest, DesktopNativeWidgetAuraNoPaintAfterCloseTest) { |
| EXPECT_FALSE(widget.received_paint_while_hidden()); |
| } |
| -TEST_F(WidgetTest, DesktopNativeWidgetAuraNoPaintAfterHideTest) { |
| +TEST_F(WidgetTest, DesktopNativeWidgetNoPaintAfterHideTest) { |
| View* contents_view = new View; |
| contents_view->SetFocusable(true); |
| DesktopAuraTestValidPaintWidget widget; |
| @@ -1084,7 +1092,7 @@ TEST_F(WidgetTest, DesktopNativeWidgetAuraNoPaintAfterHideTest) { |
| CreateParams(Widget::InitParams::TYPE_WINDOW_FRAMELESS); |
| init_params.bounds = gfx::Rect(0, 0, 200, 200); |
| init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| - init_params.native_widget = new DesktopNativeWidgetAura(&widget); |
| + init_params.native_widget = new PlatformDesktopNativeWidget(&widget); |
| widget.Init(init_params); |
| widget.SetContentsView(contents_view); |
| widget.Show(); |
| @@ -1097,165 +1105,6 @@ TEST_F(WidgetTest, DesktopNativeWidgetAuraNoPaintAfterHideTest) { |
| widget.Close(); |
| } |
| -// This class provides functionality to create fullscreen and top level popup |
| -// windows. It additionally tests whether the destruction of these windows |
| -// occurs correctly in desktop AURA without crashing. |
| -// It provides facilities to test the following cases:- |
| -// 1. Child window destroyed which should lead to the destruction of the |
| -// parent. |
| -// 2. Parent window destroyed which should lead to the child being destroyed. |
| -class DesktopAuraTopLevelWindowTest |
| - : public views::TestViewsDelegate, |
| - public aura::WindowObserver { |
| - public: |
| - DesktopAuraTopLevelWindowTest() |
| - : top_level_widget_(NULL), |
| - owned_window_(NULL), |
| - owner_destroyed_(false), |
| - owned_window_destroyed_(false) {} |
| - |
| - virtual ~DesktopAuraTopLevelWindowTest() { |
| - EXPECT_TRUE(owner_destroyed_); |
| - EXPECT_TRUE(owned_window_destroyed_); |
| - top_level_widget_ = NULL; |
| - owned_window_ = NULL; |
| - } |
| - |
| - // views::TestViewsDelegate overrides. |
| - virtual void OnBeforeWidgetInit( |
| - Widget::InitParams* params, |
| - internal::NativeWidgetDelegate* delegate) OVERRIDE { |
| - if (!params->native_widget) |
| - params->native_widget = new views::DesktopNativeWidgetAura(delegate); |
| - } |
| - |
| - void CreateTopLevelWindow(const gfx::Rect& bounds, bool fullscreen) { |
| - Widget::InitParams init_params; |
| - init_params.type = Widget::InitParams::TYPE_WINDOW; |
| - init_params.bounds = bounds; |
| - init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| - init_params.layer_type = aura::WINDOW_LAYER_NOT_DRAWN; |
| - init_params.accept_events = fullscreen; |
| - |
| - widget_.Init(init_params); |
| - |
| - owned_window_ = new aura::Window(&child_window_delegate_); |
| - owned_window_->SetType(ui::wm::WINDOW_TYPE_NORMAL); |
| - owned_window_->SetName("TestTopLevelWindow"); |
| - if (fullscreen) { |
| - owned_window_->SetProperty(aura::client::kShowStateKey, |
| - ui::SHOW_STATE_FULLSCREEN); |
| - } else { |
| - owned_window_->SetType(ui::wm::WINDOW_TYPE_MENU); |
| - } |
| - owned_window_->Init(aura::WINDOW_LAYER_TEXTURED); |
| - aura::client::ParentWindowWithContext( |
| - owned_window_, |
| - widget_.GetNativeView()->GetRootWindow(), |
| - gfx::Rect(0, 0, 1900, 1600)); |
| - owned_window_->Show(); |
| - owned_window_->AddObserver(this); |
| - |
| - ASSERT_TRUE(owned_window_->parent() != NULL); |
| - owned_window_->parent()->AddObserver(this); |
| - |
| - top_level_widget_ = |
| - views::Widget::GetWidgetForNativeView(owned_window_->parent()); |
| - ASSERT_TRUE(top_level_widget_ != NULL); |
| - } |
| - |
| - void DestroyOwnedWindow() { |
| - ASSERT_TRUE(owned_window_ != NULL); |
| - delete owned_window_; |
| - } |
| - |
| - void DestroyOwnerWindow() { |
| - ASSERT_TRUE(top_level_widget_ != NULL); |
| - top_level_widget_->CloseNow(); |
| - } |
| - |
| - virtual void OnWindowDestroying(aura::Window* window) OVERRIDE { |
| - window->RemoveObserver(this); |
| - if (window == owned_window_) { |
| - owned_window_destroyed_ = true; |
| - } else if (window == top_level_widget_->GetNativeView()) { |
| - owner_destroyed_ = true; |
| - } else { |
| - ADD_FAILURE() << "Unexpected window destroyed callback: " << window; |
| - } |
| - } |
| - |
| - aura::Window* owned_window() { |
| - return owned_window_; |
| - } |
| - |
| - views::Widget* top_level_widget() { |
| - return top_level_widget_; |
| - } |
| - |
| - private: |
| - views::Widget widget_; |
| - views::Widget* top_level_widget_; |
| - aura::Window* owned_window_; |
| - bool owner_destroyed_; |
| - bool owned_window_destroyed_; |
| - aura::test::TestWindowDelegate child_window_delegate_; |
| - |
| - DISALLOW_COPY_AND_ASSIGN(DesktopAuraTopLevelWindowTest); |
| -}; |
| - |
| -TEST_F(WidgetTest, DesktopAuraFullscreenWindowDestroyedBeforeOwnerTest) { |
| - ViewsDelegate::views_delegate = NULL; |
| - DesktopAuraTopLevelWindowTest fullscreen_window; |
| - ASSERT_NO_FATAL_FAILURE(fullscreen_window.CreateTopLevelWindow( |
| - gfx::Rect(0, 0, 200, 200), true)); |
| - |
| - RunPendingMessages(); |
| - ASSERT_NO_FATAL_FAILURE(fullscreen_window.DestroyOwnedWindow()); |
| - RunPendingMessages(); |
| -} |
| - |
| -TEST_F(WidgetTest, DesktopAuraFullscreenWindowOwnerDestroyed) { |
| - ViewsDelegate::views_delegate = NULL; |
| - |
| - DesktopAuraTopLevelWindowTest fullscreen_window; |
| - ASSERT_NO_FATAL_FAILURE(fullscreen_window.CreateTopLevelWindow( |
| - gfx::Rect(0, 0, 200, 200), true)); |
| - |
| - RunPendingMessages(); |
| - ASSERT_NO_FATAL_FAILURE(fullscreen_window.DestroyOwnerWindow()); |
| - RunPendingMessages(); |
| -} |
| - |
| -TEST_F(WidgetTest, DesktopAuraTopLevelOwnedPopupTest) { |
| - ViewsDelegate::views_delegate = NULL; |
| - DesktopAuraTopLevelWindowTest popup_window; |
| - ASSERT_NO_FATAL_FAILURE(popup_window.CreateTopLevelWindow( |
| - gfx::Rect(0, 0, 200, 200), false)); |
| - |
| - RunPendingMessages(); |
| - ASSERT_NO_FATAL_FAILURE(popup_window.DestroyOwnedWindow()); |
| - RunPendingMessages(); |
| -} |
| - |
| -// This test validates that when a top level owned popup Aura window is |
| -// resized, the widget is resized as well. |
| -TEST_F(WidgetTest, DesktopAuraTopLevelOwnedPopupResizeTest) { |
| - ViewsDelegate::views_delegate = NULL; |
| - DesktopAuraTopLevelWindowTest popup_window; |
| - ASSERT_NO_FATAL_FAILURE(popup_window.CreateTopLevelWindow( |
| - gfx::Rect(0, 0, 200, 200), false)); |
| - |
| - gfx::Rect new_size(0, 0, 400, 400); |
| - popup_window.owned_window()->SetBounds(new_size); |
| - |
| - EXPECT_EQ(popup_window.top_level_widget()->GetNativeView()->bounds().size(), |
| - new_size.size()); |
| - RunPendingMessages(); |
| - ASSERT_NO_FATAL_FAILURE(popup_window.DestroyOwnedWindow()); |
| - RunPendingMessages(); |
| -} |
| - |
| // Test to ensure that the aura Window's visiblity state is set to visible if |
| // the underlying widget is hidden and then shown. |
| TEST_F(WidgetTest, TestWindowVisibilityAfterHide) { |
| @@ -1267,16 +1116,16 @@ TEST_F(WidgetTest, TestWindowVisibilityAfterHide) { |
| gfx::Rect initial_bounds(0, 0, 300, 400); |
| init_params.bounds = initial_bounds; |
| init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| - init_params.native_widget = new DesktopNativeWidgetAura(&widget); |
| + init_params.native_widget = new PlatformDesktopNativeWidget(&widget); |
| widget.Init(init_params); |
| NonClientView* non_client_view = widget.non_client_view(); |
| NonClientFrameView* frame_view = new MinimumSizeFrameView(&widget); |
| non_client_view->SetFrameView(frame_view); |
| widget.Hide(); |
| - EXPECT_FALSE(widget.GetNativeView()->IsVisible()); |
| + EXPECT_FALSE(IsNativeWindowVisible(widget.GetNativeWindow())); |
| widget.Show(); |
| - EXPECT_TRUE(widget.GetNativeView()->IsVisible()); |
| + EXPECT_TRUE(IsNativeWindowVisible(widget.GetNativeWindow())); |
| } |
| // The following code verifies we can correctly destroy a Widget from a mouse |
| @@ -1290,8 +1139,7 @@ void GenerateMouseEvents(Widget* widget, ui::EventType last_event_type) { |
| const gfx::Rect screen_bounds(widget->GetWindowBoundsInScreen()); |
| ui::MouseEvent move_event(ui::ET_MOUSE_MOVED, screen_bounds.CenterPoint(), |
| screen_bounds.CenterPoint(), 0, 0); |
| - ui::EventProcessor* dispatcher = |
| - widget->GetNativeWindow()->GetHost()->event_processor(); |
| + ui::EventProcessor* dispatcher = WidgetTest::GetEventProcessor(widget); |
| ui::EventDispatchDetails details = dispatcher->OnEventFromSource(&move_event); |
| if (last_event_type == ui::ET_MOUSE_ENTERED || details.dispatcher_destroyed) |
| return; |
| @@ -1326,7 +1174,7 @@ void RunCloseWidgetDuringDispatchTest(WidgetTest* test, |
| Widget* widget = new Widget; |
| Widget::InitParams params = |
| test->CreateParams(Widget::InitParams::TYPE_POPUP); |
| - params.native_widget = new DesktopNativeWidgetAura(widget); |
| + params.native_widget = new PlatformDesktopNativeWidget(widget); |
| params.bounds = gfx::Rect(0, 0, 50, 100); |
| widget->Init(params); |
| widget->SetContentsView(new CloseWidgetView(last_event_type)); |
| @@ -1615,7 +1463,7 @@ TEST_F(WidgetTest, SingleWindowClosing) { |
| init_params.bounds = gfx::Rect(0, 0, 200, 200); |
| init_params.delegate = delegate.get(); |
| #if !defined(OS_CHROMEOS) |
| - init_params.native_widget = new DesktopNativeWidgetAura(widget); |
| + init_params.native_widget = new PlatformDesktopNativeWidget(widget); |
| #endif |
| widget->Init(init_params); |
| EXPECT_EQ(0, delegate->count()); |
| @@ -1633,7 +1481,7 @@ class WidgetWindowTitleTest : public WidgetTest { |
| #if !defined(OS_CHROMEOS) |
| if (desktop_native_widget) |
| - init_params.native_widget = new DesktopNativeWidgetAura(widget); |
| + init_params.native_widget = new PlatformDesktopNativeWidget(widget); |
| #else |
| DCHECK(!desktop_native_widget) |
| << "DesktopNativeWidget does not exist on non-Aura or on ChromeOS."; |
| @@ -1691,7 +1539,7 @@ TEST_F(WidgetTest, WidgetDeleted_InOnMousePressed) { |
| widget->SetSize(gfx::Size(100, 100)); |
| widget->Show(); |
| - aura::test::EventGenerator generator(GetContext(), widget->GetNativeWindow()); |
| + test::WidgetEventGenerator generator(GetContext(), widget); |
| WidgetDeletionObserver deletion_observer(widget); |
| generator.ClickLeftButton(); |
| @@ -1711,7 +1559,7 @@ TEST_F(WidgetTest, WidgetDeleted_InDispatchGestureEvent) { |
| widget->SetSize(gfx::Size(100, 100)); |
| widget->Show(); |
| - aura::test::EventGenerator generator(GetContext()); |
| + test::WidgetEventGenerator generator(GetContext()); |
| WidgetDeletionObserver deletion_observer(widget); |
| generator.GestureTapAt(widget->GetWindowBoundsInScreen().CenterPoint()); |
| @@ -1754,7 +1602,7 @@ bool RunGetNativeThemeFromDestructor(const Widget::InitParams& in_params, |
| params.delegate = new GetNativeThemeFromDestructorView; |
| #if !defined(OS_CHROMEOS) |
| if (is_first_run) { |
| - params.native_widget = new DesktopNativeWidgetAura(widget); |
| + params.native_widget = new PlatformDesktopNativeWidget(widget); |
| needs_second_run = true; |
| } |
| #endif |
| @@ -1802,7 +1650,7 @@ TEST_F(WidgetTest, CloseDestroys) { |
| CreateParams(views::Widget::InitParams::TYPE_MENU); |
| params.opacity = Widget::InitParams::OPAQUE_WINDOW; |
| #if !defined(OS_CHROMEOS) |
| - params.native_widget = new DesktopNativeWidgetAura(widget); |
| + params.native_widget = new PlatformDesktopNativeWidget(widget); |
| #endif |
| widget->Init(params); |
| widget->Show(); |
| @@ -1830,7 +1678,7 @@ TEST_F(WidgetTest, CloseWidgetWhileAnimating) { |
| ui::ScopedAnimationDurationScaleMode animation_scale_mode( |
| ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION); |
| ui::ScopedLayerAnimationSettings animation_settings( |
| - widget->GetNativeWindow()->layer()->GetAnimator()); |
| + widget->GetLayer()->GetAnimator()); |
| widget->Show(); |
| // Animate the bounds change. |
| widget->SetBounds(gfx::Rect(0, 0, 200, 200)); |
| @@ -2006,7 +1854,7 @@ class WidgetChildDestructionTest : public WidgetTest { |
| CreateParams(views::Widget::InitParams::TYPE_WINDOW); |
| #if !defined(OS_CHROMEOS) |
| if (top_level_has_desktop_native_widget_aura) |
| - params.native_widget = new DesktopNativeWidgetAura(top_level); |
| + params.native_widget = new PlatformDesktopNativeWidget(top_level); |
| #endif |
| top_level->Init(params); |
| top_level->GetRootView()->AddChildView( |
| @@ -2019,7 +1867,7 @@ class WidgetChildDestructionTest : public WidgetTest { |
| child_params.parent = top_level->GetNativeView(); |
| #if !defined(OS_CHROMEOS) |
| if (child_has_desktop_native_widget_aura) |
| - child_params.native_widget = new DesktopNativeWidgetAura(child); |
| + child_params.native_widget = new PlatformDesktopNativeWidget(child); |
| #endif |
| child->Init(child_params); |
| child->GetRootView()->AddChildView( |
| @@ -2053,7 +1901,7 @@ TEST_F(WidgetChildDestructionTest, |
| DestroyChildWidgetsInOrderWithDesktopNativeWidgetForBoth) { |
| RunDestroyChildWidgetsTest(true, true); |
| } |
| -#endif |
| +#endif // !defined(OS_CHROMEOS) |
| // See description of RunDestroyChildWidgetsTest(). |
| TEST_F(WidgetChildDestructionTest, DestroyChildWidgetsInOrder) { |
| @@ -2087,7 +1935,8 @@ TEST_F(WidgetTest, WindowMouseModalityTest) { |
| gfx::Rect initial_bounds(0, 0, 500, 500); |
| init_params.bounds = initial_bounds; |
| init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| - init_params.native_widget = new DesktopNativeWidgetAura(&top_level_widget); |
| + init_params.native_widget = |
| + new PlatformDesktopNativeWidget(&top_level_widget); |
| top_level_widget.Init(init_params); |
| top_level_widget.Show(); |
| EXPECT_TRUE(top_level_widget.IsVisible()); |
| @@ -2103,8 +1952,8 @@ TEST_F(WidgetTest, WindowMouseModalityTest) { |
| cursor_location_main, |
| ui::EF_NONE, |
| ui::EF_NONE); |
| - ui::EventDispatchDetails details = top_level_widget.GetNativeView()-> |
| - GetHost()->event_processor()->OnEventFromSource(&move_main); |
| + ui::EventDispatchDetails details = |
| + GetEventProcessor(&top_level_widget)->OnEventFromSource(&move_main); |
| ASSERT_FALSE(details.dispatcher_destroyed); |
| EXPECT_EQ(1, widget_view->GetEventCount(ui::ET_MOUSE_ENTERED)); |
| @@ -2117,7 +1966,7 @@ TEST_F(WidgetTest, WindowMouseModalityTest) { |
| ModalDialogDelegate* dialog_delegate = new ModalDialogDelegate; |
| Widget* modal_dialog_widget = views::DialogDelegate::CreateDialogWidget( |
| - dialog_delegate, NULL, top_level_widget.GetNativeWindow()); |
| + dialog_delegate, NULL, top_level_widget.GetNativeView()); |
| modal_dialog_widget->SetBounds(gfx::Rect(100, 100, 200, 200)); |
| EventCountView* dialog_widget_view = new EventCountView(); |
| dialog_widget_view->SetBounds(0, 0, 50, 50); |
| @@ -2131,8 +1980,8 @@ TEST_F(WidgetTest, WindowMouseModalityTest) { |
| cursor_location_dialog, |
| ui::EF_NONE, |
| ui::EF_NONE); |
| - details = top_level_widget.GetNativeView()->GetHost()->event_processor()-> |
| - OnEventFromSource(&mouse_down_dialog); |
| + details = GetEventProcessor(&top_level_widget)->OnEventFromSource( |
| + &mouse_down_dialog); |
| ASSERT_FALSE(details.dispatcher_destroyed); |
| EXPECT_EQ(1, dialog_widget_view->GetEventCount(ui::ET_MOUSE_PRESSED)); |
| @@ -2144,8 +1993,8 @@ TEST_F(WidgetTest, WindowMouseModalityTest) { |
| cursor_location_main2, |
| ui::EF_NONE, |
| ui::EF_NONE); |
| - details = top_level_widget.GetNativeView()->GetHost()->event_processor()-> |
| - OnEventFromSource(&mouse_down_main); |
| + details = GetEventProcessor(&top_level_widget)->OnEventFromSource( |
| + &mouse_down_main); |
| ASSERT_FALSE(details.dispatcher_destroyed); |
| EXPECT_EQ(0, widget_view->GetEventCount(ui::ET_MOUSE_MOVED)); |
| @@ -2167,21 +2016,20 @@ TEST_F(WidgetTest, FullscreenStatePropagated) { |
| top_level_widget.Init(init_params); |
| top_level_widget.SetFullscreen(true); |
| EXPECT_EQ(top_level_widget.IsVisible(), |
| - top_level_widget.GetNativeView()->IsVisible()); |
| + IsNativeWindowVisible(top_level_widget.GetNativeWindow())); |
| top_level_widget.CloseNow(); |
| } |
| -#if !defined(OS_CHROMEOS) |
| { |
| Widget top_level_widget; |
| - init_params.native_widget = new DesktopNativeWidgetAura(&top_level_widget); |
| + init_params.native_widget = |
| + new PlatformDesktopNativeWidget(&top_level_widget); |
| top_level_widget.Init(init_params); |
| top_level_widget.SetFullscreen(true); |
| EXPECT_EQ(top_level_widget.IsVisible(), |
| - top_level_widget.GetNativeView()->IsVisible()); |
| + IsNativeWindowVisible(top_level_widget.GetNativeWindow())); |
| top_level_widget.CloseNow(); |
| } |
| -#endif |
| } |
| #if defined(OS_WIN) |
| @@ -2275,8 +2123,8 @@ TEST_F(WidgetTest, WindowModalityActivationTest) { |
| modal_dialog_widget->CloseNow(); |
| top_level_widget.CloseNow(); |
| } |
| -#endif |
| -#endif |
| +#endif // defined(OS_WIN) |
| +#endif // !defined(OS_CHROMEOS) |
| TEST_F(WidgetTest, ShowCreatesActiveWindow) { |
| Widget* widget = CreateTopLevelPlatformWidget(); |
| @@ -2324,7 +2172,7 @@ TEST_F(WidgetTest, InactiveWidgetDoesNotGrabActivation) { |
| Widget widget2; |
| Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
| - params.native_widget = new DesktopNativeWidgetAura(&widget2); |
| + params.native_widget = new PlatformDesktopNativeWidget(&widget2); |
| params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| widget2.Init(params); |
| widget2.Show(); |
| @@ -2335,7 +2183,7 @@ TEST_F(WidgetTest, InactiveWidgetDoesNotGrabActivation) { |
| widget->CloseNow(); |
| widget2.CloseNow(); |
| } |
| -#endif |
| +#endif // !defined(OS_CHROMEOS) |
| namespace { |
| @@ -2425,7 +2273,7 @@ TEST_F(WidgetTest, IsActiveFromDestroy) { |
| Widget parent_widget; |
| Widget::InitParams parent_params = |
| CreateParams(Widget::InitParams::TYPE_POPUP); |
| - parent_params.native_widget = new DesktopNativeWidgetAura(&parent_widget); |
| + parent_params.native_widget = new PlatformDesktopNativeWidget(&parent_widget); |
| parent_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| parent_widget.Init(parent_params); |
| parent_widget.Show(); |
| @@ -2441,7 +2289,73 @@ TEST_F(WidgetTest, IsActiveFromDestroy) { |
| parent_widget.CloseNow(); |
| } |
| -#endif |
| +#endif // !defined(OS_CHROMEOS) |
| + |
| +// Tests that events propagate through from the dispatcher with the correct |
| +// event type, and that the different platforms behave the same. |
| +TEST_F(WidgetTest, MouseEventTypesViaGenerator) { |
| + EventCountView* view = new EventCountView; |
| + view->SetBounds(10, 10, 50, 40); |
| + |
| + Widget* widget = CreateTopLevelPlatformWidget(); |
| + widget->GetRootView()->AddChildView(view); |
| + |
| + widget->SetBounds(gfx::Rect(0, 0, 100, 80)); |
| + |
| + test::WidgetEventGenerator generator(widget); |
| + generator.set_current_location(gfx::Point(20, 20)); |
| + |
| + generator.ClickLeftButton(); |
| + EXPECT_EQ(1, view->GetEventCount(ui::ET_MOUSE_PRESSED)); |
| + EXPECT_EQ(1, view->GetEventCount(ui::ET_MOUSE_RELEASED)); |
| + EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, view->last_flags()); |
| + |
| + generator.PressRightButton(); |
| + EXPECT_EQ(2, view->GetEventCount(ui::ET_MOUSE_PRESSED)); |
| + EXPECT_EQ(1, view->GetEventCount(ui::ET_MOUSE_RELEASED)); |
| + EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, view->last_flags()); |
| + |
| + generator.ReleaseRightButton(); |
| + EXPECT_EQ(2, view->GetEventCount(ui::ET_MOUSE_PRESSED)); |
| + EXPECT_EQ(2, view->GetEventCount(ui::ET_MOUSE_RELEASED)); |
| + EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, view->last_flags()); |
| + |
| + // Test mouse move events. |
|
Andre
2014/06/17 21:17:56
In Cocoa, mouseEntered: and mouseExited: are sent
tapted
2014/06/18 08:28:06
Yeah - EmulateSendEvent in the event generator cur
|
| + EXPECT_EQ(0, view->GetEventCount(ui::ET_MOUSE_MOVED)); |
| + EXPECT_EQ(0, view->GetEventCount(ui::ET_MOUSE_ENTERED)); |
| + |
| + // Move the mouse within the view (20, 20) -> (30, 30). |
| + generator.MoveMouseTo(gfx::Point(30, 30)); |
| + EXPECT_EQ(1, view->GetEventCount(ui::ET_MOUSE_MOVED)); |
| + EXPECT_EQ(1, view->GetEventCount(ui::ET_MOUSE_ENTERED)); |
| + EXPECT_EQ(ui::EF_NONE, view->last_flags()); |
| + |
| + // Move it again - entered count shouldn't change. |
| + generator.MoveMouseTo(gfx::Point(31, 31)); |
| + EXPECT_EQ(2, view->GetEventCount(ui::ET_MOUSE_MOVED)); |
| + EXPECT_EQ(1, view->GetEventCount(ui::ET_MOUSE_ENTERED)); |
| + EXPECT_EQ(0, view->GetEventCount(ui::ET_MOUSE_EXITED)); |
| + |
| + // Move it off the view. |
| + generator.MoveMouseTo(gfx::Point(5, 5)); |
| + EXPECT_EQ(2, view->GetEventCount(ui::ET_MOUSE_MOVED)); |
|
Andre
2014/06/17 21:17:56
MOUSE_MOVED does not increase to 3 here?
Seems a l
tapted
2014/06/18 08:28:06
I think that's reasonable - if a MOUSEMOVED were s
|
| + EXPECT_EQ(1, view->GetEventCount(ui::ET_MOUSE_EXITED)); |
| + |
| + // Move it back on. |
| + generator.MoveMouseTo(gfx::Point(20, 20)); |
| + EXPECT_EQ(3, view->GetEventCount(ui::ET_MOUSE_MOVED)); |
| + EXPECT_EQ(2, view->GetEventCount(ui::ET_MOUSE_ENTERED)); |
| + EXPECT_EQ(1, view->GetEventCount(ui::ET_MOUSE_EXITED)); |
| + |
| + // Drargging. Cover HasCapture() and NativeWidgetPrivate::IsMouseButtonDown(). |
| + generator.DragMouseTo(gfx::Point(40, 40)); |
| + EXPECT_EQ(3, view->GetEventCount(ui::ET_MOUSE_PRESSED)); |
| + EXPECT_EQ(3, view->GetEventCount(ui::ET_MOUSE_RELEASED)); |
| + EXPECT_EQ(1, view->GetEventCount(ui::ET_MOUSE_DRAGGED)); |
| + EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, view->last_flags()); |
| + |
| + widget->CloseNow(); |
| +} |
| } // namespace test |
| } // namespace views |