| Index: ui/views/accessibility/native_view_accessibility_unittest.cc
|
| diff --git a/ui/views/accessibility/native_view_accessibility_unittest.cc b/ui/views/accessibility/native_view_accessibility_unittest.cc
|
| index 7fff8436f997f54abd28a84c2a045ee28122824e..705f3efc77f963f796c9e9b103ba1b3a864e6ee2 100644
|
| --- a/ui/views/accessibility/native_view_accessibility_unittest.cc
|
| +++ b/ui/views/accessibility/native_view_accessibility_unittest.cc
|
| @@ -73,5 +73,41 @@ TEST_F(NativeViewAccessibilityTest, LabelIsChildOfButton) {
|
| label_accessibility_->GetParent());
|
| }
|
|
|
| +// Subclass of NativeViewAccessibility that destroys itself when its
|
| +// parent widget is destroyed, for the purposes of making sure this
|
| +// doesn't lead to a crash.
|
| +class TestNativeViewAccessibility : public NativeViewAccessibility {
|
| + public:
|
| + explicit TestNativeViewAccessibility(View* view)
|
| + : NativeViewAccessibility(view) {}
|
| +
|
| + void OnWidgetDestroying(Widget* widget) override {
|
| + bool is_destroying_parent_widget = (parent_widget_ == widget);
|
| + NativeViewAccessibility::OnWidgetDestroying(widget);
|
| + if (is_destroying_parent_widget)
|
| + delete this;
|
| + }
|
| +};
|
| +
|
| +TEST_F(NativeViewAccessibilityTest, CrashOnWidgetDestroyed) {
|
| + scoped_ptr<Widget> parent_widget(new Widget);
|
| + Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
|
| + params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
|
| + params.bounds = gfx::Rect(50, 50, 650, 650);
|
| + parent_widget->Init(params);
|
| +
|
| + scoped_ptr<Widget> child_widget(new Widget);
|
| + child_widget->Init(params);
|
| +
|
| + // Make sure that deleting the parent widget can't cause a crash
|
| + // due to NativeViewAccessibility not unregistering itself as a
|
| + // WidgetObserver. Note that TestNativeViewAccessibility is a subclass
|
| + // defined above that destroys itself when its parent widget is destroyed.
|
| + TestNativeViewAccessibility* child_accessible =
|
| + new TestNativeViewAccessibility(child_widget->GetRootView());
|
| + child_accessible->SetParentWidget(parent_widget.get());
|
| + parent_widget.reset();
|
| +}
|
| +
|
| } // namespace test
|
| } // namespace views
|
|
|