| Index: ui/views/widget/widget_unittest.cc | 
| diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc | 
| index c23fd0f6d0d6bbdd972abd08e5e0ad3d6f5f26d3..45c34c15d0e029942f7a49c63ac2b4c03473b819 100644 | 
| --- a/ui/views/widget/widget_unittest.cc | 
| +++ b/ui/views/widget/widget_unittest.cc | 
| @@ -826,6 +826,29 @@ TEST_F(WidgetOwnershipTest, | 
| EXPECT_TRUE(state.native_widget_deleted); | 
| } | 
|  | 
| +// Widget owns its NativeWidget and has a WidgetDelegateView as its contents. | 
| +TEST_F(WidgetOwnershipTest, | 
| +       Ownership_WidgetOwnsNativeWidgetWithWithWidgetDelegateView) { | 
| +  OwnershipTestState state; | 
| + | 
| +  WidgetDelegateView* delegate_view = new WidgetDelegateView; | 
| + | 
| +  scoped_ptr<Widget> widget(new OwnershipTestWidget(&state)); | 
| +  Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 
| +  params.native_widget = | 
| +      new OwnershipTestNativeWidgetPlatform(widget.get(), &state); | 
| +  params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 
| +  params.delegate = delegate_view; | 
| +  widget->Init(params); | 
| +  widget->SetContentsView(delegate_view); | 
| + | 
| +  // Now delete the Widget. There should be no crash or use-after-free. | 
| +  widget.reset(); | 
| + | 
| +  EXPECT_TRUE(state.widget_deleted); | 
| +  EXPECT_TRUE(state.native_widget_deleted); | 
| +} | 
| + | 
| //////////////////////////////////////////////////////////////////////////////// | 
| // Widget observer tests. | 
| // | 
| @@ -902,7 +925,6 @@ class WidgetObserverTest : public WidgetTest, public WidgetObserver { | 
| const Widget* widget_bounds_changed() const { return widget_bounds_changed_; } | 
|  | 
| private: | 
| - | 
| Widget* active_; | 
|  | 
| Widget* widget_closed_; | 
|  |