| 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 |