| Index: ui/aura_shell/drag_drop_controller_unittest.cc
|
| diff --git a/ui/aura_shell/drag_drop_controller_unittest.cc b/ui/aura_shell/drag_drop_controller_unittest.cc
|
| index c5a2142b8caf64c1751f4c4bdc27e901840ad935..a153ceeea7b2d8f690f3ec48c89ab29936efcfd9 100644
|
| --- a/ui/aura_shell/drag_drop_controller_unittest.cc
|
| +++ b/ui/aura_shell/drag_drop_controller_unittest.cc
|
| @@ -367,5 +367,60 @@ TEST_F(DragDropControllerTest, DragDropInMultipleViewsMultipleWidgetsTest) {
|
| delete widget2;
|
| }
|
|
|
| +TEST_F(DragDropControllerTest, ViewRemovedWhileInDragDropTest) {
|
| + views::Widget* widget = CreateNewWidget();
|
| + DragTestView* drag_view = new DragTestView;
|
| + AddViewToWidgetAndResize(widget, drag_view);
|
| + gfx::Point point = gfx::Rect(drag_view->bounds()).CenterPoint();
|
| + ui::OSExchangeData data;
|
| + data.SetString(UTF8ToUTF16("I am being dragged"));
|
| +
|
| + aura::MouseEvent event1(ui::ET_MOUSE_PRESSED, point, ui::EF_LEFT_BUTTON_DOWN);
|
| + aura::Desktop::GetInstance()->DispatchMouseEvent(&event1);
|
| +
|
| + int num_drags_1 = 17;
|
| + for (int i = 0; i < num_drags_1; ++i) {
|
| + // Because we are not doing a blocking drag and drop, the original
|
| + // OSDragExchangeData object is lost as soon as we return from the drag
|
| + // initiation in DragDropController::StartDragAndDrop(). Hence we set the
|
| + // drag_data_ to a fake drag data object that we created.
|
| + if (i > 0)
|
| + UpdateDragData(&data);
|
| + point.Offset(0, 1);
|
| + aura::MouseEvent drag_event(ui::ET_MOUSE_DRAGGED, point,
|
| + ui::EF_LEFT_BUTTON_DOWN);
|
| + aura::Desktop::GetInstance()->DispatchMouseEvent(&drag_event);
|
| + }
|
| +
|
| + drag_view->parent()->RemoveChildView(drag_view);
|
| + // View has been removed. We will not get any of the following drag updates.
|
| + int num_drags_2 = 23;
|
| + for (int i = 0; i < num_drags_2; ++i) {
|
| + UpdateDragData(&data);
|
| + point.Offset(0, 1);
|
| + aura::MouseEvent drag_event(ui::ET_MOUSE_DRAGGED, point,
|
| + ui::EF_LEFT_BUTTON_DOWN);
|
| + aura::Desktop::GetInstance()->DispatchMouseEvent(&drag_event);
|
| + }
|
| +
|
| + aura::MouseEvent event2(ui::ET_MOUSE_RELEASED, point, 0);
|
| + aura::Desktop::GetInstance()->DispatchMouseEvent(&event2);
|
| +
|
| + EXPECT_TRUE(drag_drop_controller_->drag_start_received_);
|
| + EXPECT_EQ(num_drags_1 + num_drags_2 - 1 - drag_view->VerticalDragThreshold(),
|
| + drag_drop_controller_->num_drag_updates_);
|
| + EXPECT_TRUE(drag_drop_controller_->drop_received_);
|
| + EXPECT_EQ(UTF8ToUTF16("I am being dragged"),
|
| + drag_drop_controller_->drag_string_);
|
| +
|
| + EXPECT_EQ(1, drag_view->num_drag_enters_);
|
| + EXPECT_EQ(num_drags_1 - 1 - drag_view->VerticalDragThreshold(),
|
| + drag_view->num_drag_updates_);
|
| + EXPECT_EQ(0, drag_view->num_drops_);
|
| + EXPECT_EQ(0, drag_view->num_drag_exits_);
|
| + EXPECT_TRUE(drag_view->drag_done_received_);
|
| + delete widget;
|
| +}
|
| +
|
| } // namespace test
|
| } // namespace aura
|
|
|