| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <algorithm> | 5 #include <algorithm> |
| 6 #include <set> | 6 #include <set> |
| 7 | 7 |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 1305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1316 | 1316 |
| 1317 DISALLOW_COPY_AND_ASSIGN(CloseWidgetView); | 1317 DISALLOW_COPY_AND_ASSIGN(CloseWidgetView); |
| 1318 }; | 1318 }; |
| 1319 | 1319 |
| 1320 // Generates two moves (first generates enter, second real move), a press, drag | 1320 // Generates two moves (first generates enter, second real move), a press, drag |
| 1321 // and release stopping at |last_event_type|. | 1321 // and release stopping at |last_event_type|. |
| 1322 void GenerateMouseEvents(Widget* widget, ui::EventType last_event_type) { | 1322 void GenerateMouseEvents(Widget* widget, ui::EventType last_event_type) { |
| 1323 const gfx::Rect screen_bounds(widget->GetWindowBoundsInScreen()); | 1323 const gfx::Rect screen_bounds(widget->GetWindowBoundsInScreen()); |
| 1324 ui::MouseEvent move_event(ui::ET_MOUSE_MOVED, screen_bounds.CenterPoint(), | 1324 ui::MouseEvent move_event(ui::ET_MOUSE_MOVED, screen_bounds.CenterPoint(), |
| 1325 screen_bounds.CenterPoint(), 0, 0); | 1325 screen_bounds.CenterPoint(), 0, 0); |
| 1326 aura::WindowTreeHostDelegate* rwhd = | 1326 aura::WindowEventDispatcher* dispatcher = |
| 1327 widget->GetNativeWindow()->GetDispatcher()->AsWindowTreeHostDelegate(); | 1327 widget->GetNativeWindow()->GetDispatcher(); |
| 1328 rwhd->OnHostMouseEvent(&move_event); | 1328 ui::EventDispatchDetails details = dispatcher->OnEventFromSource(&move_event); |
| 1329 if (last_event_type == ui::ET_MOUSE_ENTERED) | 1329 if (last_event_type == ui::ET_MOUSE_ENTERED || details.dispatcher_destroyed) |
| 1330 return; | 1330 return; |
| 1331 rwhd->OnHostMouseEvent(&move_event); | 1331 details = dispatcher->OnEventFromSource(&move_event); |
| 1332 if (last_event_type == ui::ET_MOUSE_MOVED) | 1332 if (last_event_type == ui::ET_MOUSE_MOVED || details.dispatcher_destroyed) |
| 1333 return; | 1333 return; |
| 1334 | 1334 |
| 1335 ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, screen_bounds.CenterPoint(), | 1335 ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, screen_bounds.CenterPoint(), |
| 1336 screen_bounds.CenterPoint(), 0, 0); | 1336 screen_bounds.CenterPoint(), 0, 0); |
| 1337 rwhd->OnHostMouseEvent(&press_event); | 1337 details = dispatcher->OnEventFromSource(&press_event); |
| 1338 if (last_event_type == ui::ET_MOUSE_PRESSED) | 1338 if (last_event_type == ui::ET_MOUSE_PRESSED || details.dispatcher_destroyed) |
| 1339 return; | 1339 return; |
| 1340 | 1340 |
| 1341 gfx::Point end_point(screen_bounds.CenterPoint()); | 1341 gfx::Point end_point(screen_bounds.CenterPoint()); |
| 1342 end_point.Offset(1, 1); | 1342 end_point.Offset(1, 1); |
| 1343 ui::MouseEvent drag_event(ui::ET_MOUSE_DRAGGED, end_point, end_point, 0, 0); | 1343 ui::MouseEvent drag_event(ui::ET_MOUSE_DRAGGED, end_point, end_point, 0, 0); |
| 1344 rwhd->OnHostMouseEvent(&drag_event); | 1344 details = dispatcher->OnEventFromSource(&drag_event); |
| 1345 if (last_event_type == ui::ET_MOUSE_DRAGGED) | 1345 if (last_event_type == ui::ET_MOUSE_DRAGGED || details.dispatcher_destroyed) |
| 1346 return; | 1346 return; |
| 1347 | 1347 |
| 1348 ui::MouseEvent release_event(ui::ET_MOUSE_RELEASED, end_point, end_point, 0, | 1348 ui::MouseEvent release_event(ui::ET_MOUSE_RELEASED, end_point, end_point, 0, |
| 1349 0); | 1349 0); |
| 1350 rwhd->OnHostMouseEvent(&release_event); | 1350 details = dispatcher->OnEventFromSource(&release_event); |
| 1351 if (details.dispatcher_destroyed) |
| 1352 return; |
| 1351 } | 1353 } |
| 1352 | 1354 |
| 1353 // Creates a widget and invokes GenerateMouseEvents() with |last_event_type|. | 1355 // Creates a widget and invokes GenerateMouseEvents() with |last_event_type|. |
| 1354 void RunCloseWidgetDuringDispatchTest(WidgetTest* test, | 1356 void RunCloseWidgetDuringDispatchTest(WidgetTest* test, |
| 1355 ui::EventType last_event_type) { | 1357 ui::EventType last_event_type) { |
| 1356 // |widget| is deleted by CloseWidgetView. | 1358 // |widget| is deleted by CloseWidgetView. |
| 1357 Widget* widget = new Widget; | 1359 Widget* widget = new Widget; |
| 1358 Widget::InitParams params = | 1360 Widget::InitParams params = |
| 1359 test->CreateParams(Widget::InitParams::TYPE_POPUP); | 1361 test->CreateParams(Widget::InitParams::TYPE_POPUP); |
| 1360 params.native_widget = new DesktopNativeWidgetAura(widget); | 1362 params.native_widget = new DesktopNativeWidgetAura(widget); |
| (...skipping 718 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2079 EventCountView* widget_view = new EventCountView(); | 2081 EventCountView* widget_view = new EventCountView(); |
| 2080 widget_view->SetBounds(0, 0, 10, 10); | 2082 widget_view->SetBounds(0, 0, 10, 10); |
| 2081 top_level_widget.GetRootView()->AddChildView(widget_view); | 2083 top_level_widget.GetRootView()->AddChildView(widget_view); |
| 2082 | 2084 |
| 2083 gfx::Point cursor_location_main(5, 5); | 2085 gfx::Point cursor_location_main(5, 5); |
| 2084 ui::MouseEvent move_main(ui::ET_MOUSE_MOVED, | 2086 ui::MouseEvent move_main(ui::ET_MOUSE_MOVED, |
| 2085 cursor_location_main, | 2087 cursor_location_main, |
| 2086 cursor_location_main, | 2088 cursor_location_main, |
| 2087 ui::EF_NONE, | 2089 ui::EF_NONE, |
| 2088 ui::EF_NONE); | 2090 ui::EF_NONE); |
| 2089 top_level_widget.GetNativeView()->GetDispatcher()-> | 2091 ui::EventDispatchDetails details = top_level_widget.GetNativeView()-> |
| 2090 AsWindowTreeHostDelegate()->OnHostMouseEvent(&move_main); | 2092 GetDispatcher()->OnEventFromSource(&move_main); |
| 2093 ASSERT_FALSE(details.dispatcher_destroyed); |
| 2091 | 2094 |
| 2092 EXPECT_EQ(1, widget_view->GetEventCount(ui::ET_MOUSE_ENTERED)); | 2095 EXPECT_EQ(1, widget_view->GetEventCount(ui::ET_MOUSE_ENTERED)); |
| 2093 widget_view->ResetCounts(); | 2096 widget_view->ResetCounts(); |
| 2094 | 2097 |
| 2095 // Create a modal dialog and validate that a mouse down message makes it to | 2098 // Create a modal dialog and validate that a mouse down message makes it to |
| 2096 // the main view within the dialog. | 2099 // the main view within the dialog. |
| 2097 | 2100 |
| 2098 // This instance will be destroyed when the dialog is destroyed. | 2101 // This instance will be destroyed when the dialog is destroyed. |
| 2099 ModalDialogDelegate* dialog_delegate = new ModalDialogDelegate; | 2102 ModalDialogDelegate* dialog_delegate = new ModalDialogDelegate; |
| 2100 | 2103 |
| 2101 Widget* modal_dialog_widget = views::DialogDelegate::CreateDialogWidget( | 2104 Widget* modal_dialog_widget = views::DialogDelegate::CreateDialogWidget( |
| 2102 dialog_delegate, NULL, top_level_widget.GetNativeWindow()); | 2105 dialog_delegate, NULL, top_level_widget.GetNativeWindow()); |
| 2103 modal_dialog_widget->SetBounds(gfx::Rect(100, 100, 200, 200)); | 2106 modal_dialog_widget->SetBounds(gfx::Rect(100, 100, 200, 200)); |
| 2104 EventCountView* dialog_widget_view = new EventCountView(); | 2107 EventCountView* dialog_widget_view = new EventCountView(); |
| 2105 dialog_widget_view->SetBounds(0, 0, 50, 50); | 2108 dialog_widget_view->SetBounds(0, 0, 50, 50); |
| 2106 modal_dialog_widget->GetRootView()->AddChildView(dialog_widget_view); | 2109 modal_dialog_widget->GetRootView()->AddChildView(dialog_widget_view); |
| 2107 modal_dialog_widget->Show(); | 2110 modal_dialog_widget->Show(); |
| 2108 EXPECT_TRUE(modal_dialog_widget->IsVisible()); | 2111 EXPECT_TRUE(modal_dialog_widget->IsVisible()); |
| 2109 | 2112 |
| 2110 gfx::Point cursor_location_dialog(100, 100); | 2113 gfx::Point cursor_location_dialog(100, 100); |
| 2111 ui::MouseEvent mouse_down_dialog(ui::ET_MOUSE_PRESSED, | 2114 ui::MouseEvent mouse_down_dialog(ui::ET_MOUSE_PRESSED, |
| 2112 cursor_location_dialog, | 2115 cursor_location_dialog, |
| 2113 cursor_location_dialog, | 2116 cursor_location_dialog, |
| 2114 ui::EF_NONE, | 2117 ui::EF_NONE, |
| 2115 ui::EF_NONE); | 2118 ui::EF_NONE); |
| 2116 top_level_widget.GetNativeView()->GetDispatcher()-> | 2119 details = top_level_widget.GetNativeView()->GetDispatcher()-> |
| 2117 AsWindowTreeHostDelegate()->OnHostMouseEvent(&mouse_down_dialog); | 2120 OnEventFromSource(&mouse_down_dialog); |
| 2121 ASSERT_FALSE(details.dispatcher_destroyed); |
| 2118 EXPECT_EQ(1, dialog_widget_view->GetEventCount(ui::ET_MOUSE_PRESSED)); | 2122 EXPECT_EQ(1, dialog_widget_view->GetEventCount(ui::ET_MOUSE_PRESSED)); |
| 2119 | 2123 |
| 2120 // Send a mouse move message to the main window. It should not be received by | 2124 // Send a mouse move message to the main window. It should not be received by |
| 2121 // the main window as the modal dialog is still active. | 2125 // the main window as the modal dialog is still active. |
| 2122 gfx::Point cursor_location_main2(6, 6); | 2126 gfx::Point cursor_location_main2(6, 6); |
| 2123 ui::MouseEvent mouse_down_main(ui::ET_MOUSE_MOVED, | 2127 ui::MouseEvent mouse_down_main(ui::ET_MOUSE_MOVED, |
| 2124 cursor_location_main2, | 2128 cursor_location_main2, |
| 2125 cursor_location_main2, | 2129 cursor_location_main2, |
| 2126 ui::EF_NONE, | 2130 ui::EF_NONE, |
| 2127 ui::EF_NONE); | 2131 ui::EF_NONE); |
| 2128 top_level_widget.GetNativeView()->GetDispatcher()-> | 2132 details = top_level_widget.GetNativeView()->GetDispatcher()-> |
| 2129 AsWindowTreeHostDelegate()->OnHostMouseEvent(&mouse_down_main); | 2133 OnEventFromSource(&mouse_down_main); |
| 2134 ASSERT_FALSE(details.dispatcher_destroyed); |
| 2130 EXPECT_EQ(0, widget_view->GetEventCount(ui::ET_MOUSE_MOVED)); | 2135 EXPECT_EQ(0, widget_view->GetEventCount(ui::ET_MOUSE_MOVED)); |
| 2131 | 2136 |
| 2132 modal_dialog_widget->CloseNow(); | 2137 modal_dialog_widget->CloseNow(); |
| 2133 top_level_widget.CloseNow(); | 2138 top_level_widget.CloseNow(); |
| 2134 } | 2139 } |
| 2135 | 2140 |
| 2136 #if defined(USE_AURA) | 2141 #if defined(USE_AURA) |
| 2137 // Verifies nativeview visbility matches that of Widget visibility when | 2142 // Verifies nativeview visbility matches that of Widget visibility when |
| 2138 // SetFullscreen is invoked. | 2143 // SetFullscreen is invoked. |
| 2139 TEST_F(WidgetTest, FullscreenStatePropagated) { | 2144 TEST_F(WidgetTest, FullscreenStatePropagated) { |
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2376 widget->SetFullscreen(true); | 2381 widget->SetFullscreen(true); |
| 2377 widget->Show(); | 2382 widget->Show(); |
| 2378 RunPendingMessages(); | 2383 RunPendingMessages(); |
| 2379 EXPECT_TRUE(frame->fullscreen_layout_called()); | 2384 EXPECT_TRUE(frame->fullscreen_layout_called()); |
| 2380 | 2385 |
| 2381 widget->CloseNow(); | 2386 widget->CloseNow(); |
| 2382 } | 2387 } |
| 2383 | 2388 |
| 2384 } // namespace test | 2389 } // namespace test |
| 2385 } // namespace views | 2390 } // namespace views |
| OLD | NEW |