| 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 "ash/drag_drop/drag_drop_controller.h" | 5 #include "ash/drag_drop/drag_drop_controller.h" |
| 6 | 6 |
| 7 #include "ash/drag_drop/drag_drop_tracker.h" | 7 #include "ash/drag_drop/drag_drop_tracker.h" |
| 8 #include "ash/drag_drop/drag_image_view.h" | 8 #include "ash/drag_drop/drag_image_view.h" |
| 9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
| 10 #include "ash/test/ash_test_base.h" | 10 #include "ash/test/ash_test_base.h" |
| 11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
| 12 #include "base/location.h" | 12 #include "base/location.h" |
| 13 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
| 14 #include "ui/aura/client/capture_client.h" | 14 #include "ui/aura/client/capture_client.h" |
| 15 #include "ui/aura/test/event_generator.h" | |
| 16 #include "ui/aura/window_event_dispatcher.h" | 15 #include "ui/aura/window_event_dispatcher.h" |
| 17 #include "ui/aura/window_tree_host.h" | 16 #include "ui/aura/window_tree_host.h" |
| 18 #include "ui/base/clipboard/clipboard.h" | 17 #include "ui/base/clipboard/clipboard.h" |
| 19 #include "ui/base/clipboard/scoped_clipboard_writer.h" | 18 #include "ui/base/clipboard/scoped_clipboard_writer.h" |
| 20 #include "ui/base/dragdrop/drag_drop_types.h" | 19 #include "ui/base/dragdrop/drag_drop_types.h" |
| 21 #include "ui/base/dragdrop/drag_utils.h" | 20 #include "ui/base/dragdrop/drag_utils.h" |
| 22 #include "ui/base/dragdrop/os_exchange_data.h" | 21 #include "ui/base/dragdrop/os_exchange_data.h" |
| 23 #include "ui/base/ui_base_switches.h" | 22 #include "ui/base/ui_base_switches.h" |
| 24 #include "ui/events/event.h" | 23 #include "ui/events/event.h" |
| 25 #include "ui/events/event_utils.h" | 24 #include "ui/events/event_utils.h" |
| 26 #include "ui/events/gestures/gesture_types.h" | 25 #include "ui/events/gestures/gesture_types.h" |
| 26 #include "ui/events/test/event_generator.h" |
| 27 #include "ui/events/test/events_test_utils.h" | 27 #include "ui/events/test/events_test_utils.h" |
| 28 #include "ui/gfx/animation/linear_animation.h" | 28 #include "ui/gfx/animation/linear_animation.h" |
| 29 #include "ui/gfx/image/image_skia_rep.h" | 29 #include "ui/gfx/image/image_skia_rep.h" |
| 30 #include "ui/views/view.h" | 30 #include "ui/views/view.h" |
| 31 #include "ui/views/views_delegate.h" | 31 #include "ui/views/views_delegate.h" |
| 32 #include "ui/views/widget/native_widget_aura.h" | 32 #include "ui/views/widget/native_widget_aura.h" |
| 33 #include "ui/views/widget/native_widget_delegate.h" | 33 #include "ui/views/widget/native_widget_delegate.h" |
| 34 #include "ui/views/widget/widget.h" | 34 #include "ui/views/widget/widget.h" |
| 35 | 35 |
| 36 namespace ash { | 36 namespace ash { |
| (...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 #define MAYBE_DragDropInSingleViewTest DISABLED_DragDropInSingleViewTest | 352 #define MAYBE_DragDropInSingleViewTest DISABLED_DragDropInSingleViewTest |
| 353 #else | 353 #else |
| 354 #define MAYBE_DragDropInSingleViewTest DragDropInSingleViewTest | 354 #define MAYBE_DragDropInSingleViewTest DragDropInSingleViewTest |
| 355 #endif | 355 #endif |
| 356 TEST_F(DragDropControllerTest, MAYBE_DragDropInSingleViewTest) { | 356 TEST_F(DragDropControllerTest, MAYBE_DragDropInSingleViewTest) { |
| 357 scoped_ptr<views::Widget> widget(CreateNewWidget()); | 357 scoped_ptr<views::Widget> widget(CreateNewWidget()); |
| 358 DragTestView* drag_view = new DragTestView; | 358 DragTestView* drag_view = new DragTestView; |
| 359 AddViewToWidgetAndResize(widget.get(), drag_view); | 359 AddViewToWidgetAndResize(widget.get(), drag_view); |
| 360 ui::OSExchangeData data; | 360 ui::OSExchangeData data; |
| 361 data.SetString(base::UTF8ToUTF16("I am being dragged")); | 361 data.SetString(base::UTF8ToUTF16("I am being dragged")); |
| 362 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 362 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
| 363 widget->GetNativeView()); | 363 widget->GetNativeView()); |
| 364 generator.PressLeftButton(); | 364 generator.PressLeftButton(); |
| 365 | 365 |
| 366 int num_drags = 17; | 366 int num_drags = 17; |
| 367 SetCheckIfCaptureLost(widget.get(), true); | 367 SetCheckIfCaptureLost(widget.get(), true); |
| 368 for (int i = 0; i < num_drags; ++i) { | 368 for (int i = 0; i < num_drags; ++i) { |
| 369 // Because we are not doing a blocking drag and drop, the original | 369 // Because we are not doing a blocking drag and drop, the original |
| 370 // OSDragExchangeData object is lost as soon as we return from the drag | 370 // OSDragExchangeData object is lost as soon as we return from the drag |
| 371 // initiation in DragDropController::StartDragAndDrop(). Hence we set the | 371 // initiation in DragDropController::StartDragAndDrop(). Hence we set the |
| 372 // drag_data_ to a fake drag data object that we created. | 372 // drag_data_ to a fake drag data object that we created. |
| 373 if (i > 0) | 373 if (i > 0) |
| (...skipping 24 matching lines...) Expand all Loading... |
| 398 EXPECT_EQ(0, drag_view->num_drag_exits_); | 398 EXPECT_EQ(0, drag_view->num_drag_exits_); |
| 399 EXPECT_TRUE(drag_view->drag_done_received_); | 399 EXPECT_TRUE(drag_view->drag_done_received_); |
| 400 } | 400 } |
| 401 | 401 |
| 402 TEST_F(DragDropControllerTest, DragDropWithZeroDragUpdates) { | 402 TEST_F(DragDropControllerTest, DragDropWithZeroDragUpdates) { |
| 403 scoped_ptr<views::Widget> widget(CreateNewWidget()); | 403 scoped_ptr<views::Widget> widget(CreateNewWidget()); |
| 404 DragTestView* drag_view = new DragTestView; | 404 DragTestView* drag_view = new DragTestView; |
| 405 AddViewToWidgetAndResize(widget.get(), drag_view); | 405 AddViewToWidgetAndResize(widget.get(), drag_view); |
| 406 ui::OSExchangeData data; | 406 ui::OSExchangeData data; |
| 407 data.SetString(base::UTF8ToUTF16("I am being dragged")); | 407 data.SetString(base::UTF8ToUTF16("I am being dragged")); |
| 408 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 408 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
| 409 widget->GetNativeView()); | 409 widget->GetNativeView()); |
| 410 generator.PressLeftButton(); | 410 generator.PressLeftButton(); |
| 411 | 411 |
| 412 int num_drags = drag_view->VerticalDragThreshold() + 1; | 412 int num_drags = drag_view->VerticalDragThreshold() + 1; |
| 413 for (int i = 0; i < num_drags; ++i) { | 413 for (int i = 0; i < num_drags; ++i) { |
| 414 // Because we are not doing a blocking drag and drop, the original | 414 // Because we are not doing a blocking drag and drop, the original |
| 415 // OSDragExchangeData object is lost as soon as we return from the drag | 415 // OSDragExchangeData object is lost as soon as we return from the drag |
| 416 // initiation in DragDropController::StartDragAndDrop(). Hence we set the | 416 // initiation in DragDropController::StartDragAndDrop(). Hence we set the |
| 417 // drag_data_ to a fake drag data object that we created. | 417 // drag_data_ to a fake drag data object that we created. |
| 418 if (i > 0) | 418 if (i > 0) |
| 419 UpdateDragData(&data); | 419 UpdateDragData(&data); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 446 TEST_F(DragDropControllerTest, MAYBE_DragDropInMultipleViewsSingleWidgetTest) { | 446 TEST_F(DragDropControllerTest, MAYBE_DragDropInMultipleViewsSingleWidgetTest) { |
| 447 scoped_ptr<views::Widget> widget(CreateNewWidget()); | 447 scoped_ptr<views::Widget> widget(CreateNewWidget()); |
| 448 DragTestView* drag_view1 = new DragTestView; | 448 DragTestView* drag_view1 = new DragTestView; |
| 449 AddViewToWidgetAndResize(widget.get(), drag_view1); | 449 AddViewToWidgetAndResize(widget.get(), drag_view1); |
| 450 DragTestView* drag_view2 = new DragTestView; | 450 DragTestView* drag_view2 = new DragTestView; |
| 451 AddViewToWidgetAndResize(widget.get(), drag_view2); | 451 AddViewToWidgetAndResize(widget.get(), drag_view2); |
| 452 | 452 |
| 453 ui::OSExchangeData data; | 453 ui::OSExchangeData data; |
| 454 data.SetString(base::UTF8ToUTF16("I am being dragged")); | 454 data.SetString(base::UTF8ToUTF16("I am being dragged")); |
| 455 | 455 |
| 456 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); | 456 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); |
| 457 generator.MoveMouseRelativeTo(widget->GetNativeView(), | 457 generator.MoveMouseRelativeTo(widget->GetNativeView(), |
| 458 drag_view1->bounds().CenterPoint()); | 458 drag_view1->bounds().CenterPoint()); |
| 459 generator.PressLeftButton(); | 459 generator.PressLeftButton(); |
| 460 | 460 |
| 461 int num_drags = drag_view1->width(); | 461 int num_drags = drag_view1->width(); |
| 462 for (int i = 0; i < num_drags; ++i) { | 462 for (int i = 0; i < num_drags; ++i) { |
| 463 // Because we are not doing a blocking drag and drop, the original | 463 // Because we are not doing a blocking drag and drop, the original |
| 464 // OSDragExchangeData object is lost as soon as we return from the drag | 464 // OSDragExchangeData object is lost as soon as we return from the drag |
| 465 // initiation in DragDropController::StartDragAndDrop(). Hence we set the | 465 // initiation in DragDropController::StartDragAndDrop(). Hence we set the |
| 466 // drag_data_ to a fake drag data object that we created. | 466 // drag_data_ to a fake drag data object that we created. |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 512 DragTestView* drag_view2 = new DragTestView; | 512 DragTestView* drag_view2 = new DragTestView; |
| 513 AddViewToWidgetAndResize(widget2.get(), drag_view2); | 513 AddViewToWidgetAndResize(widget2.get(), drag_view2); |
| 514 gfx::Rect widget1_bounds = widget1->GetClientAreaBoundsInScreen(); | 514 gfx::Rect widget1_bounds = widget1->GetClientAreaBoundsInScreen(); |
| 515 gfx::Rect widget2_bounds = widget2->GetClientAreaBoundsInScreen(); | 515 gfx::Rect widget2_bounds = widget2->GetClientAreaBoundsInScreen(); |
| 516 widget2->SetBounds(gfx::Rect(widget1_bounds.width(), 0, | 516 widget2->SetBounds(gfx::Rect(widget1_bounds.width(), 0, |
| 517 widget2_bounds.width(), widget2_bounds.height())); | 517 widget2_bounds.width(), widget2_bounds.height())); |
| 518 | 518 |
| 519 ui::OSExchangeData data; | 519 ui::OSExchangeData data; |
| 520 data.SetString(base::UTF8ToUTF16("I am being dragged")); | 520 data.SetString(base::UTF8ToUTF16("I am being dragged")); |
| 521 | 521 |
| 522 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 522 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
| 523 widget1->GetNativeView()); | 523 widget1->GetNativeView()); |
| 524 generator.PressLeftButton(); | 524 generator.PressLeftButton(); |
| 525 | 525 |
| 526 int num_drags = drag_view1->width(); | 526 int num_drags = drag_view1->width(); |
| 527 for (int i = 0; i < num_drags; ++i) { | 527 for (int i = 0; i < num_drags; ++i) { |
| 528 // Because we are not doing a blocking drag and drop, the original | 528 // Because we are not doing a blocking drag and drop, the original |
| 529 // OSDragExchangeData object is lost as soon as we return from the drag | 529 // OSDragExchangeData object is lost as soon as we return from the drag |
| 530 // initiation in DragDropController::StartDragAndDrop(). Hence we set the | 530 // initiation in DragDropController::StartDragAndDrop(). Hence we set the |
| 531 // drag_data_ to a fake drag data object that we created. | 531 // drag_data_ to a fake drag data object that we created. |
| 532 if (i > 0) | 532 if (i > 0) |
| 533 UpdateDragData(&data); | 533 UpdateDragData(&data); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 570 #define MAYBE_ViewRemovedWhileInDragDropTest ViewRemovedWhileInDragDropTest | 570 #define MAYBE_ViewRemovedWhileInDragDropTest ViewRemovedWhileInDragDropTest |
| 571 #endif | 571 #endif |
| 572 TEST_F(DragDropControllerTest, MAYBE_ViewRemovedWhileInDragDropTest) { | 572 TEST_F(DragDropControllerTest, MAYBE_ViewRemovedWhileInDragDropTest) { |
| 573 scoped_ptr<views::Widget> widget(CreateNewWidget()); | 573 scoped_ptr<views::Widget> widget(CreateNewWidget()); |
| 574 scoped_ptr<DragTestView> drag_view(new DragTestView); | 574 scoped_ptr<DragTestView> drag_view(new DragTestView); |
| 575 AddViewToWidgetAndResize(widget.get(), drag_view.get()); | 575 AddViewToWidgetAndResize(widget.get(), drag_view.get()); |
| 576 gfx::Point point = gfx::Rect(drag_view->bounds()).CenterPoint(); | 576 gfx::Point point = gfx::Rect(drag_view->bounds()).CenterPoint(); |
| 577 ui::OSExchangeData data; | 577 ui::OSExchangeData data; |
| 578 data.SetString(base::UTF8ToUTF16("I am being dragged")); | 578 data.SetString(base::UTF8ToUTF16("I am being dragged")); |
| 579 | 579 |
| 580 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); | 580 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); |
| 581 generator.MoveMouseToCenterOf(widget->GetNativeView()); | 581 generator.MoveMouseToCenterOf(widget->GetNativeView()); |
| 582 generator.PressLeftButton(); | 582 generator.PressLeftButton(); |
| 583 | 583 |
| 584 int num_drags_1 = 17; | 584 int num_drags_1 = 17; |
| 585 for (int i = 0; i < num_drags_1; ++i) { | 585 for (int i = 0; i < num_drags_1; ++i) { |
| 586 // Because we are not doing a blocking drag and drop, the original | 586 // Because we are not doing a blocking drag and drop, the original |
| 587 // OSDragExchangeData object is lost as soon as we return from the drag | 587 // OSDragExchangeData object is lost as soon as we return from the drag |
| 588 // initiation in DragDropController::StartDragAndDrop(). Hence we set the | 588 // initiation in DragDropController::StartDragAndDrop(). Hence we set the |
| 589 // drag_data_ to a fake drag data object that we created. | 589 // drag_data_ to a fake drag data object that we created. |
| 590 if (i > 0) | 590 if (i > 0) |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 631 ui::ScopedClipboardWriter scw(cb, ui::CLIPBOARD_TYPE_COPY_PASTE); | 631 ui::ScopedClipboardWriter scw(cb, ui::CLIPBOARD_TYPE_COPY_PASTE); |
| 632 scw.WriteText(base::ASCIIToUTF16(clip_str)); | 632 scw.WriteText(base::ASCIIToUTF16(clip_str)); |
| 633 } | 633 } |
| 634 EXPECT_TRUE(cb->IsFormatAvailable(ui::Clipboard::GetPlainTextFormatType(), | 634 EXPECT_TRUE(cb->IsFormatAvailable(ui::Clipboard::GetPlainTextFormatType(), |
| 635 ui::CLIPBOARD_TYPE_COPY_PASTE)); | 635 ui::CLIPBOARD_TYPE_COPY_PASTE)); |
| 636 | 636 |
| 637 scoped_ptr<views::Widget> widget(CreateNewWidget()); | 637 scoped_ptr<views::Widget> widget(CreateNewWidget()); |
| 638 DragTestView* drag_view = new DragTestView; | 638 DragTestView* drag_view = new DragTestView; |
| 639 AddViewToWidgetAndResize(widget.get(), drag_view); | 639 AddViewToWidgetAndResize(widget.get(), drag_view); |
| 640 | 640 |
| 641 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 641 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
| 642 widget->GetNativeView()); | 642 widget->GetNativeView()); |
| 643 ui::OSExchangeData data; | 643 ui::OSExchangeData data; |
| 644 std::string data_str("I am being dragged"); | 644 std::string data_str("I am being dragged"); |
| 645 data.SetString(base::ASCIIToUTF16(data_str)); | 645 data.SetString(base::ASCIIToUTF16(data_str)); |
| 646 | 646 |
| 647 generator.PressLeftButton(); | 647 generator.PressLeftButton(); |
| 648 generator.MoveMouseBy(0, drag_view->VerticalDragThreshold() + 1); | 648 generator.MoveMouseBy(0, drag_view->VerticalDragThreshold() + 1); |
| 649 | 649 |
| 650 // Execute any scheduled draws to process deferred mouse events. | 650 // Execute any scheduled draws to process deferred mouse events. |
| 651 RunAllPendingInMessageLoop(); | 651 RunAllPendingInMessageLoop(); |
| 652 | 652 |
| 653 // Verify the clipboard contents haven't changed | 653 // Verify the clipboard contents haven't changed |
| 654 std::string result; | 654 std::string result; |
| 655 EXPECT_TRUE(cb->IsFormatAvailable(ui::Clipboard::GetPlainTextFormatType(), | 655 EXPECT_TRUE(cb->IsFormatAvailable(ui::Clipboard::GetPlainTextFormatType(), |
| 656 ui::CLIPBOARD_TYPE_COPY_PASTE)); | 656 ui::CLIPBOARD_TYPE_COPY_PASTE)); |
| 657 cb->ReadAsciiText(ui::CLIPBOARD_TYPE_COPY_PASTE, &result); | 657 cb->ReadAsciiText(ui::CLIPBOARD_TYPE_COPY_PASTE, &result); |
| 658 EXPECT_EQ(clip_str, result); | 658 EXPECT_EQ(clip_str, result); |
| 659 // Destory the clipboard here because ash doesn't delete it. | 659 // Destory the clipboard here because ash doesn't delete it. |
| 660 // crbug.com/158150. | 660 // crbug.com/158150. |
| 661 ui::Clipboard::DestroyClipboardForCurrentThread(); | 661 ui::Clipboard::DestroyClipboardForCurrentThread(); |
| 662 } | 662 } |
| 663 | 663 |
| 664 TEST_F(DragDropControllerTest, WindowDestroyedDuringDragDrop) { | 664 TEST_F(DragDropControllerTest, WindowDestroyedDuringDragDrop) { |
| 665 scoped_ptr<views::Widget> widget(CreateNewWidget()); | 665 scoped_ptr<views::Widget> widget(CreateNewWidget()); |
| 666 DragTestView* drag_view = new DragTestView; | 666 DragTestView* drag_view = new DragTestView; |
| 667 AddViewToWidgetAndResize(widget.get(), drag_view); | 667 AddViewToWidgetAndResize(widget.get(), drag_view); |
| 668 aura::Window* window = widget->GetNativeView(); | 668 aura::Window* window = widget->GetNativeView(); |
| 669 | 669 |
| 670 ui::OSExchangeData data; | 670 ui::OSExchangeData data; |
| 671 data.SetString(base::UTF8ToUTF16("I am being dragged")); | 671 data.SetString(base::UTF8ToUTF16("I am being dragged")); |
| 672 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 672 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
| 673 widget->GetNativeView()); | 673 widget->GetNativeView()); |
| 674 generator.PressLeftButton(); | 674 generator.PressLeftButton(); |
| 675 | 675 |
| 676 int num_drags = 17; | 676 int num_drags = 17; |
| 677 for (int i = 0; i < num_drags; ++i) { | 677 for (int i = 0; i < num_drags; ++i) { |
| 678 // Because we are not doing a blocking drag and drop, the original | 678 // Because we are not doing a blocking drag and drop, the original |
| 679 // OSDragExchangeData object is lost as soon as we return from the drag | 679 // OSDragExchangeData object is lost as soon as we return from the drag |
| 680 // initiation in DragDropController::StartDragAndDrop(). Hence we set the | 680 // initiation in DragDropController::StartDragAndDrop(). Hence we set the |
| 681 // drag_data_ to a fake drag data object that we created. | 681 // drag_data_ to a fake drag data object that we created. |
| 682 if (i > 0) | 682 if (i > 0) |
| 683 UpdateDragData(&data); | 683 UpdateDragData(&data); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 706 EXPECT_TRUE(drag_drop_controller_->drag_start_received_); | 706 EXPECT_TRUE(drag_drop_controller_->drag_start_received_); |
| 707 EXPECT_TRUE(drag_drop_controller_->drop_received_); | 707 EXPECT_TRUE(drag_drop_controller_->drop_received_); |
| 708 } | 708 } |
| 709 | 709 |
| 710 TEST_F(DragDropControllerTest, SyntheticEventsDuringDragDrop) { | 710 TEST_F(DragDropControllerTest, SyntheticEventsDuringDragDrop) { |
| 711 scoped_ptr<views::Widget> widget(CreateNewWidget()); | 711 scoped_ptr<views::Widget> widget(CreateNewWidget()); |
| 712 DragTestView* drag_view = new DragTestView; | 712 DragTestView* drag_view = new DragTestView; |
| 713 AddViewToWidgetAndResize(widget.get(), drag_view); | 713 AddViewToWidgetAndResize(widget.get(), drag_view); |
| 714 ui::OSExchangeData data; | 714 ui::OSExchangeData data; |
| 715 data.SetString(base::UTF8ToUTF16("I am being dragged")); | 715 data.SetString(base::UTF8ToUTF16("I am being dragged")); |
| 716 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 716 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
| 717 widget->GetNativeView()); | 717 widget->GetNativeView()); |
| 718 generator.PressLeftButton(); | 718 generator.PressLeftButton(); |
| 719 | 719 |
| 720 int num_drags = 17; | 720 int num_drags = 17; |
| 721 for (int i = 0; i < num_drags; ++i) { | 721 for (int i = 0; i < num_drags; ++i) { |
| 722 // Because we are not doing a blocking drag and drop, the original | 722 // Because we are not doing a blocking drag and drop, the original |
| 723 // OSDragExchangeData object is lost as soon as we return from the drag | 723 // OSDragExchangeData object is lost as soon as we return from the drag |
| 724 // initiation in DragDropController::StartDragAndDrop(). Hence we set the | 724 // initiation in DragDropController::StartDragAndDrop(). Hence we set the |
| 725 // drag_data_ to a fake drag data object that we created. | 725 // drag_data_ to a fake drag data object that we created. |
| 726 if (i > 0) | 726 if (i > 0) |
| 727 UpdateDragData(&data); | 727 UpdateDragData(&data); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 762 #else | 762 #else |
| 763 #define MAYBE_PressingEscapeCancelsDragDrop PressingEscapeCancelsDragDrop | 763 #define MAYBE_PressingEscapeCancelsDragDrop PressingEscapeCancelsDragDrop |
| 764 #define MAYBE_CaptureLostCancelsDragDrop CaptureLostCancelsDragDrop | 764 #define MAYBE_CaptureLostCancelsDragDrop CaptureLostCancelsDragDrop |
| 765 #endif | 765 #endif |
| 766 TEST_F(DragDropControllerTest, MAYBE_PressingEscapeCancelsDragDrop) { | 766 TEST_F(DragDropControllerTest, MAYBE_PressingEscapeCancelsDragDrop) { |
| 767 scoped_ptr<views::Widget> widget(CreateNewWidget()); | 767 scoped_ptr<views::Widget> widget(CreateNewWidget()); |
| 768 DragTestView* drag_view = new DragTestView; | 768 DragTestView* drag_view = new DragTestView; |
| 769 AddViewToWidgetAndResize(widget.get(), drag_view); | 769 AddViewToWidgetAndResize(widget.get(), drag_view); |
| 770 ui::OSExchangeData data; | 770 ui::OSExchangeData data; |
| 771 data.SetString(base::UTF8ToUTF16("I am being dragged")); | 771 data.SetString(base::UTF8ToUTF16("I am being dragged")); |
| 772 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 772 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
| 773 widget->GetNativeView()); | 773 widget->GetNativeView()); |
| 774 generator.PressLeftButton(); | 774 generator.PressLeftButton(); |
| 775 | 775 |
| 776 int num_drags = 17; | 776 int num_drags = 17; |
| 777 for (int i = 0; i < num_drags; ++i) { | 777 for (int i = 0; i < num_drags; ++i) { |
| 778 // Because we are not doing a blocking drag and drop, the original | 778 // Because we are not doing a blocking drag and drop, the original |
| 779 // OSDragExchangeData object is lost as soon as we return from the drag | 779 // OSDragExchangeData object is lost as soon as we return from the drag |
| 780 // initiation in DragDropController::StartDragAndDrop(). Hence we set the | 780 // initiation in DragDropController::StartDragAndDrop(). Hence we set the |
| 781 // drag_data_ to a fake drag data object that we created. | 781 // drag_data_ to a fake drag data object that we created. |
| 782 if (i > 0) | 782 if (i > 0) |
| 783 UpdateDragData(&data); | 783 UpdateDragData(&data); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 804 EXPECT_EQ(1, drag_view->num_drag_exits_); | 804 EXPECT_EQ(1, drag_view->num_drag_exits_); |
| 805 EXPECT_TRUE(drag_view->drag_done_received_); | 805 EXPECT_TRUE(drag_view->drag_done_received_); |
| 806 } | 806 } |
| 807 | 807 |
| 808 TEST_F(DragDropControllerTest, MAYBE_CaptureLostCancelsDragDrop) { | 808 TEST_F(DragDropControllerTest, MAYBE_CaptureLostCancelsDragDrop) { |
| 809 scoped_ptr<views::Widget> widget(CreateNewWidget()); | 809 scoped_ptr<views::Widget> widget(CreateNewWidget()); |
| 810 DragTestView* drag_view = new DragTestView; | 810 DragTestView* drag_view = new DragTestView; |
| 811 AddViewToWidgetAndResize(widget.get(), drag_view); | 811 AddViewToWidgetAndResize(widget.get(), drag_view); |
| 812 ui::OSExchangeData data; | 812 ui::OSExchangeData data; |
| 813 data.SetString(base::UTF8ToUTF16("I am being dragged")); | 813 data.SetString(base::UTF8ToUTF16("I am being dragged")); |
| 814 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 814 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
| 815 widget->GetNativeView()); | 815 widget->GetNativeView()); |
| 816 generator.PressLeftButton(); | 816 generator.PressLeftButton(); |
| 817 | 817 |
| 818 int num_drags = 17; | 818 int num_drags = 17; |
| 819 for (int i = 0; i < num_drags; ++i) { | 819 for (int i = 0; i < num_drags; ++i) { |
| 820 // Because we are not doing a blocking drag and drop, the original | 820 // Because we are not doing a blocking drag and drop, the original |
| 821 // OSDragExchangeData object is lost as soon as we return from the drag | 821 // OSDragExchangeData object is lost as soon as we return from the drag |
| 822 // initiation in DragDropController::StartDragAndDrop(). Hence we set the | 822 // initiation in DragDropController::StartDragAndDrop(). Hence we set the |
| 823 // drag_data_ to a fake drag data object that we created. | 823 // drag_data_ to a fake drag data object that we created. |
| 824 if (i > 0) | 824 if (i > 0) |
| 825 UpdateDragData(&data); | 825 UpdateDragData(&data); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 866 DragTestView* drag_view2 = new DragTestView; | 866 DragTestView* drag_view2 = new DragTestView; |
| 867 AddViewToWidgetAndResize(widget2.get(), drag_view2); | 867 AddViewToWidgetAndResize(widget2.get(), drag_view2); |
| 868 gfx::Rect widget1_bounds = widget1->GetClientAreaBoundsInScreen(); | 868 gfx::Rect widget1_bounds = widget1->GetClientAreaBoundsInScreen(); |
| 869 gfx::Rect widget2_bounds = widget2->GetClientAreaBoundsInScreen(); | 869 gfx::Rect widget2_bounds = widget2->GetClientAreaBoundsInScreen(); |
| 870 widget2->SetBounds(gfx::Rect(widget1_bounds.width(), 0, | 870 widget2->SetBounds(gfx::Rect(widget1_bounds.width(), 0, |
| 871 widget2_bounds.width(), widget2_bounds.height())); | 871 widget2_bounds.width(), widget2_bounds.height())); |
| 872 | 872 |
| 873 ui::OSExchangeData data; | 873 ui::OSExchangeData data; |
| 874 data.SetString(base::UTF8ToUTF16("I am being dragged")); | 874 data.SetString(base::UTF8ToUTF16("I am being dragged")); |
| 875 | 875 |
| 876 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 876 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
| 877 widget1->GetNativeView()); | 877 widget1->GetNativeView()); |
| 878 generator.PressTouch(); | 878 generator.PressTouch(); |
| 879 gfx::Point point = gfx::Rect(drag_view1->bounds()).CenterPoint(); | 879 gfx::Point point = gfx::Rect(drag_view1->bounds()).CenterPoint(); |
| 880 DispatchGesture(ui::ET_GESTURE_LONG_PRESS, point); | 880 DispatchGesture(ui::ET_GESTURE_LONG_PRESS, point); |
| 881 // Because we are not doing a blocking drag and drop, the original | 881 // Because we are not doing a blocking drag and drop, the original |
| 882 // OSDragExchangeData object is lost as soon as we return from the drag | 882 // OSDragExchangeData object is lost as soon as we return from the drag |
| 883 // initiation in DragDropController::StartDragAndDrop(). Hence we set the | 883 // initiation in DragDropController::StartDragAndDrop(). Hence we set the |
| 884 // drag_data_ to a fake drag data object that we created. | 884 // drag_data_ to a fake drag data object that we created. |
| 885 UpdateDragData(&data); | 885 UpdateDragData(&data); |
| 886 gfx::Point gesture_location = point; | 886 gfx::Point gesture_location = point; |
| 887 int num_drags = drag_view1->width(); | 887 int num_drags = drag_view1->width(); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 916 EXPECT_EQ(0, drag_view2->num_drag_exits_); | 916 EXPECT_EQ(0, drag_view2->num_drag_exits_); |
| 917 EXPECT_FALSE(drag_view2->drag_done_received_); | 917 EXPECT_FALSE(drag_view2->drag_done_received_); |
| 918 } | 918 } |
| 919 | 919 |
| 920 TEST_F(DragDropControllerTest, TouchDragDropCancelsOnLongTap) { | 920 TEST_F(DragDropControllerTest, TouchDragDropCancelsOnLongTap) { |
| 921 CommandLine::ForCurrentProcess()->AppendSwitch( | 921 CommandLine::ForCurrentProcess()->AppendSwitch( |
| 922 switches::kEnableTouchDragDrop); | 922 switches::kEnableTouchDragDrop); |
| 923 scoped_ptr<views::Widget> widget(CreateNewWidget()); | 923 scoped_ptr<views::Widget> widget(CreateNewWidget()); |
| 924 DragTestView* drag_view = new DragTestView; | 924 DragTestView* drag_view = new DragTestView; |
| 925 AddViewToWidgetAndResize(widget.get(), drag_view); | 925 AddViewToWidgetAndResize(widget.get(), drag_view); |
| 926 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 926 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
| 927 widget->GetNativeView()); | 927 widget->GetNativeView()); |
| 928 | 928 |
| 929 generator.PressTouch(); | 929 generator.PressTouch(); |
| 930 gfx::Point point = gfx::Rect(drag_view->bounds()).CenterPoint(); | 930 gfx::Point point = gfx::Rect(drag_view->bounds()).CenterPoint(); |
| 931 DispatchGesture(ui::ET_GESTURE_LONG_PRESS, point); | 931 DispatchGesture(ui::ET_GESTURE_LONG_PRESS, point); |
| 932 DispatchGesture(ui::ET_GESTURE_LONG_TAP, point); | 932 DispatchGesture(ui::ET_GESTURE_LONG_TAP, point); |
| 933 | 933 |
| 934 EXPECT_TRUE(drag_drop_controller_->drag_start_received_); | 934 EXPECT_TRUE(drag_drop_controller_->drag_start_received_); |
| 935 EXPECT_TRUE(drag_drop_controller_->drag_canceled_); | 935 EXPECT_TRUE(drag_drop_controller_->drag_canceled_); |
| 936 EXPECT_EQ(0, drag_drop_controller_->num_drag_updates_); | 936 EXPECT_EQ(0, drag_drop_controller_->num_drag_updates_); |
| 937 EXPECT_FALSE(drag_drop_controller_->drop_received_); | 937 EXPECT_FALSE(drag_drop_controller_->drop_received_); |
| 938 EXPECT_EQ(base::UTF8ToUTF16("I am being dragged"), | 938 EXPECT_EQ(base::UTF8ToUTF16("I am being dragged"), |
| 939 drag_drop_controller_->drag_string_); | 939 drag_drop_controller_->drag_string_); |
| 940 EXPECT_EQ(0, drag_view->num_drag_enters_); | 940 EXPECT_EQ(0, drag_view->num_drag_enters_); |
| 941 EXPECT_EQ(0, drag_view->num_drops_); | 941 EXPECT_EQ(0, drag_view->num_drops_); |
| 942 EXPECT_EQ(0, drag_view->num_drag_exits_); | 942 EXPECT_EQ(0, drag_view->num_drag_exits_); |
| 943 EXPECT_TRUE(drag_view->drag_done_received_); | 943 EXPECT_TRUE(drag_view->drag_done_received_); |
| 944 } | 944 } |
| 945 | 945 |
| 946 TEST_F(DragDropControllerTest, TouchDragDropLongTapGestureIsForwarded) { | 946 TEST_F(DragDropControllerTest, TouchDragDropLongTapGestureIsForwarded) { |
| 947 CommandLine::ForCurrentProcess()->AppendSwitch( | 947 CommandLine::ForCurrentProcess()->AppendSwitch( |
| 948 switches::kEnableTouchDragDrop); | 948 switches::kEnableTouchDragDrop); |
| 949 scoped_ptr<views::Widget> widget(CreateNewWidget()); | 949 scoped_ptr<views::Widget> widget(CreateNewWidget()); |
| 950 DragTestView* drag_view = new DragTestView; | 950 DragTestView* drag_view = new DragTestView; |
| 951 AddViewToWidgetAndResize(widget.get(), drag_view); | 951 AddViewToWidgetAndResize(widget.get(), drag_view); |
| 952 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 952 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
| 953 widget->GetNativeView()); | 953 widget->GetNativeView()); |
| 954 | 954 |
| 955 generator.PressTouch(); | 955 generator.PressTouch(); |
| 956 gfx::Point point = gfx::Rect(drag_view->bounds()).CenterPoint(); | 956 gfx::Point point = gfx::Rect(drag_view->bounds()).CenterPoint(); |
| 957 DispatchGesture(ui::ET_GESTURE_LONG_PRESS, point); | 957 DispatchGesture(ui::ET_GESTURE_LONG_PRESS, point); |
| 958 | 958 |
| 959 // Since we are not running inside a nested loop, the |drag_source_window_| | 959 // Since we are not running inside a nested loop, the |drag_source_window_| |
| 960 // will get destroyed immediately. Hence we reassign it. | 960 // will get destroyed immediately. Hence we reassign it. |
| 961 EXPECT_EQ(NULL, GetDragSourceWindow()); | 961 EXPECT_EQ(NULL, GetDragSourceWindow()); |
| 962 SetDragSourceWindow(widget->GetNativeView()); | 962 SetDragSourceWindow(widget->GetNativeView()); |
| 963 EXPECT_FALSE(drag_view->long_tap_received_); | 963 EXPECT_FALSE(drag_view->long_tap_received_); |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1075 EXPECT_EQ("405,405", observer.window_location_on_destroying().ToString()); | 1075 EXPECT_EQ("405,405", observer.window_location_on_destroying().ToString()); |
| 1076 } | 1076 } |
| 1077 for (aura::Window::Windows::iterator iter = root_windows.begin(); | 1077 for (aura::Window::Windows::iterator iter = root_windows.begin(); |
| 1078 iter != root_windows.end(); ++iter) { | 1078 iter != root_windows.end(); ++iter) { |
| 1079 aura::client::SetDragDropClient(*iter, NULL); | 1079 aura::client::SetDragDropClient(*iter, NULL); |
| 1080 } | 1080 } |
| 1081 } | 1081 } |
| 1082 | 1082 |
| 1083 } // namespace test | 1083 } // namespace test |
| 1084 } // namespace aura | 1084 } // namespace aura |
| OLD | NEW |