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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
8 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 #include "ui/gfx/native_widget_types.h" | 10 #include "ui/gfx/native_widget_types.h" |
(...skipping 594 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
605 EXPECT_TRUE(state.widget_deleted); | 605 EXPECT_TRUE(state.widget_deleted); |
606 EXPECT_TRUE(state.native_widget_deleted); | 606 EXPECT_TRUE(state.native_widget_deleted); |
607 } | 607 } |
608 | 608 |
609 // NativeWidget owns its Widget, part 1: NativeWidget is a platform-native | 609 // NativeWidget owns its Widget, part 1: NativeWidget is a platform-native |
610 // widget. | 610 // widget. |
611 TEST_F(WidgetOwnershipTest, Ownership_PlatformNativeWidgetOwnsWidget) { | 611 TEST_F(WidgetOwnershipTest, Ownership_PlatformNativeWidgetOwnsWidget) { |
612 OwnershipTestState state; | 612 OwnershipTestState state; |
613 | 613 |
614 Widget* widget = new OwnershipTestWidget(&state); | 614 Widget* widget = new OwnershipTestWidget(&state); |
615 Widget::InitParams params(Widget::InitParams::TYPE_POPUP); | 615 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
616 params.native_widget = | 616 params.native_widget = |
617 new OwnershipTestNativeWidgetPlatform(widget, &state); | 617 new OwnershipTestNativeWidgetPlatform(widget, &state); |
618 widget->Init(params); | 618 widget->Init(params); |
619 | 619 |
620 // Now destroy the native widget. | 620 // Now destroy the native widget. |
621 widget->CloseNow(); | 621 widget->CloseNow(); |
622 | 622 |
623 EXPECT_TRUE(state.widget_deleted); | 623 EXPECT_TRUE(state.widget_deleted); |
624 EXPECT_TRUE(state.native_widget_deleted); | 624 EXPECT_TRUE(state.native_widget_deleted); |
625 } | 625 } |
626 | 626 |
627 // NativeWidget owns its Widget, part 2: NativeWidget is a NativeWidget. | 627 // NativeWidget owns its Widget, part 2: NativeWidget is a NativeWidget. |
628 TEST_F(WidgetOwnershipTest, Ownership_ViewsNativeWidgetOwnsWidget) { | 628 TEST_F(WidgetOwnershipTest, Ownership_ViewsNativeWidgetOwnsWidget) { |
629 OwnershipTestState state; | 629 OwnershipTestState state; |
630 | 630 |
631 Widget* toplevel = CreateTopLevelPlatformWidget(); | 631 Widget* toplevel = CreateTopLevelPlatformWidget(); |
632 | 632 |
633 Widget* widget = new OwnershipTestWidget(&state); | 633 Widget* widget = new OwnershipTestWidget(&state); |
634 Widget::InitParams params(Widget::InitParams::TYPE_POPUP); | 634 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
635 params.native_widget = | 635 params.native_widget = |
636 new OwnershipTestNativeWidgetPlatform(widget, &state); | 636 new OwnershipTestNativeWidgetPlatform(widget, &state); |
637 params.parent = toplevel->GetNativeView(); | 637 params.parent = toplevel->GetNativeView(); |
638 widget->Init(params); | 638 widget->Init(params); |
639 | 639 |
640 // Now destroy the native widget. This is achieved by closing the toplevel. | 640 // Now destroy the native widget. This is achieved by closing the toplevel. |
641 toplevel->CloseNow(); | 641 toplevel->CloseNow(); |
642 | 642 |
643 // The NativeWidget won't be deleted until after a return to the message loop | 643 // The NativeWidget won't be deleted until after a return to the message loop |
644 // so we have to run pending messages before testing the destruction status. | 644 // so we have to run pending messages before testing the destruction status. |
645 RunPendingMessages(); | 645 RunPendingMessages(); |
646 | 646 |
647 EXPECT_TRUE(state.widget_deleted); | 647 EXPECT_TRUE(state.widget_deleted); |
648 EXPECT_TRUE(state.native_widget_deleted); | 648 EXPECT_TRUE(state.native_widget_deleted); |
649 } | 649 } |
650 | 650 |
651 // NativeWidget owns its Widget, part 3: NativeWidget is a platform-native | 651 // NativeWidget owns its Widget, part 3: NativeWidget is a platform-native |
652 // widget, destroyed out from under it by the OS. | 652 // widget, destroyed out from under it by the OS. |
653 TEST_F(WidgetOwnershipTest, | 653 TEST_F(WidgetOwnershipTest, |
654 Ownership_PlatformNativeWidgetOwnsWidget_NativeDestroy) { | 654 Ownership_PlatformNativeWidgetOwnsWidget_NativeDestroy) { |
655 OwnershipTestState state; | 655 OwnershipTestState state; |
656 | 656 |
657 Widget* widget = new OwnershipTestWidget(&state); | 657 Widget* widget = new OwnershipTestWidget(&state); |
658 Widget::InitParams params(Widget::InitParams::TYPE_POPUP); | 658 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
659 params.native_widget = | 659 params.native_widget = |
660 new OwnershipTestNativeWidgetPlatform(widget, &state); | 660 new OwnershipTestNativeWidgetPlatform(widget, &state); |
661 widget->Init(params); | 661 widget->Init(params); |
662 | 662 |
663 // Now simulate a destroy of the platform native widget from the OS: | 663 // Now simulate a destroy of the platform native widget from the OS: |
664 #if defined(USE_AURA) | 664 #if defined(USE_AURA) |
665 delete widget->GetNativeView(); | 665 delete widget->GetNativeView(); |
666 #elif defined(OS_WIN) | 666 #elif defined(OS_WIN) |
667 DestroyWindow(widget->GetNativeView()); | 667 DestroyWindow(widget->GetNativeView()); |
668 #endif | 668 #endif |
669 | 669 |
670 EXPECT_TRUE(state.widget_deleted); | 670 EXPECT_TRUE(state.widget_deleted); |
671 EXPECT_TRUE(state.native_widget_deleted); | 671 EXPECT_TRUE(state.native_widget_deleted); |
672 } | 672 } |
673 | 673 |
674 // NativeWidget owns its Widget, part 4: NativeWidget is a NativeWidget, | 674 // NativeWidget owns its Widget, part 4: NativeWidget is a NativeWidget, |
675 // destroyed by the view hierarchy that contains it. | 675 // destroyed by the view hierarchy that contains it. |
676 TEST_F(WidgetOwnershipTest, | 676 TEST_F(WidgetOwnershipTest, |
677 Ownership_ViewsNativeWidgetOwnsWidget_NativeDestroy) { | 677 Ownership_ViewsNativeWidgetOwnsWidget_NativeDestroy) { |
678 OwnershipTestState state; | 678 OwnershipTestState state; |
679 | 679 |
680 Widget* toplevel = CreateTopLevelPlatformWidget(); | 680 Widget* toplevel = CreateTopLevelPlatformWidget(); |
681 | 681 |
682 Widget* widget = new OwnershipTestWidget(&state); | 682 Widget* widget = new OwnershipTestWidget(&state); |
683 Widget::InitParams params(Widget::InitParams::TYPE_POPUP); | 683 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
684 params.native_widget = | 684 params.native_widget = |
685 new OwnershipTestNativeWidgetPlatform(widget, &state); | 685 new OwnershipTestNativeWidgetPlatform(widget, &state); |
686 params.parent = toplevel->GetNativeView(); | 686 params.parent = toplevel->GetNativeView(); |
687 widget->Init(params); | 687 widget->Init(params); |
688 | 688 |
689 // Destroy the widget (achieved by closing the toplevel). | 689 // Destroy the widget (achieved by closing the toplevel). |
690 toplevel->CloseNow(); | 690 toplevel->CloseNow(); |
691 | 691 |
692 // The NativeWidget won't be deleted until after a return to the message loop | 692 // The NativeWidget won't be deleted until after a return to the message loop |
693 // so we have to run pending messages before testing the destruction status. | 693 // so we have to run pending messages before testing the destruction status. |
694 RunPendingMessages(); | 694 RunPendingMessages(); |
695 | 695 |
696 EXPECT_TRUE(state.widget_deleted); | 696 EXPECT_TRUE(state.widget_deleted); |
697 EXPECT_TRUE(state.native_widget_deleted); | 697 EXPECT_TRUE(state.native_widget_deleted); |
698 } | 698 } |
699 | 699 |
700 // NativeWidget owns its Widget, part 5: NativeWidget is a NativeWidget, | 700 // NativeWidget owns its Widget, part 5: NativeWidget is a NativeWidget, |
701 // we close it directly. | 701 // we close it directly. |
702 TEST_F(WidgetOwnershipTest, | 702 TEST_F(WidgetOwnershipTest, |
703 Ownership_ViewsNativeWidgetOwnsWidget_Close) { | 703 Ownership_ViewsNativeWidgetOwnsWidget_Close) { |
704 OwnershipTestState state; | 704 OwnershipTestState state; |
705 | 705 |
706 Widget* toplevel = CreateTopLevelPlatformWidget(); | 706 Widget* toplevel = CreateTopLevelPlatformWidget(); |
707 | 707 |
708 Widget* widget = new OwnershipTestWidget(&state); | 708 Widget* widget = new OwnershipTestWidget(&state); |
709 Widget::InitParams params(Widget::InitParams::TYPE_POPUP); | 709 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
710 params.native_widget = | 710 params.native_widget = |
711 new OwnershipTestNativeWidgetPlatform(widget, &state); | 711 new OwnershipTestNativeWidgetPlatform(widget, &state); |
712 params.parent = toplevel->GetNativeView(); | 712 params.parent = toplevel->GetNativeView(); |
713 widget->Init(params); | 713 widget->Init(params); |
714 | 714 |
715 // Destroy the widget. | 715 // Destroy the widget. |
716 widget->Close(); | 716 widget->Close(); |
717 toplevel->CloseNow(); | 717 toplevel->CloseNow(); |
718 | 718 |
719 // The NativeWidget won't be deleted until after a return to the message loop | 719 // The NativeWidget won't be deleted until after a return to the message loop |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1164 EXPECT_FALSE(widget.received_paint_while_hidden()); | 1164 EXPECT_FALSE(widget.received_paint_while_hidden()); |
1165 widget.Close(); | 1165 widget.Close(); |
1166 } | 1166 } |
1167 | 1167 |
1168 #endif // !defined(OS_CHROMEOS) | 1168 #endif // !defined(OS_CHROMEOS) |
1169 | 1169 |
1170 #endif // defined(USE_AURA) | 1170 #endif // defined(USE_AURA) |
1171 | 1171 |
1172 } // namespace | 1172 } // namespace |
1173 } // namespace views | 1173 } // namespace views |
OLD | NEW |