diff options
author | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-17 20:11:37 +0000 |
---|---|---|
committer | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-17 20:11:37 +0000 |
commit | 94394dc91c469fe2f851769784e4f2d81e0c9573 (patch) | |
tree | ffe5124429535488b7befb9cb767021732255e17 /ui/views/widget | |
parent | c2d1a7f1d4e06928da3b9d7ef57cd72b3272cf99 (diff) | |
download | chromium_src-94394dc91c469fe2f851769784e4f2d81e0c9573.zip chromium_src-94394dc91c469fe2f851769784e4f2d81e0c9573.tar.gz chromium_src-94394dc91c469fe2f851769784e4f2d81e0c9573.tar.bz2 |
aura: Fix a crash caused by wrong ownership used for widget.
- Fix the wrong ownerhsip used in CandidateWindowController::Impl::CreateView;
- Add a DCHECK to Widget dtor so that we catch similar cases in the future;
BUG=110905
TEST=Verify crash in issue 110905 no longer happens.
Review URL: http://codereview.chromium.org/9415019
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@122563 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/views/widget')
-rw-r--r-- | ui/views/widget/widget.cc | 9 | ||||
-rw-r--r-- | ui/views/widget/widget.h | 3 |
2 files changed, 11 insertions, 1 deletions
diff --git a/ui/views/widget/widget.cc b/ui/views/widget/widget.cc index fc76d58..4ccf36d 100644 --- a/ui/views/widget/widget.cc +++ b/ui/views/widget/widget.cc @@ -173,6 +173,7 @@ Widget::Widget() focus_on_creation_(true), is_top_level_(false), native_widget_initialized_(false), + native_widget_destroyed_(false), is_mouse_button_pressed_(false), last_mouse_event_was_move_(false) { } @@ -184,8 +185,13 @@ Widget::~Widget() { } DestroyRootView(); - if (ownership_ == InitParams::WIDGET_OWNS_NATIVE_WIDGET) + if (ownership_ == InitParams::WIDGET_OWNS_NATIVE_WIDGET) { delete native_widget_; + } else { + DCHECK(native_widget_destroyed_) + << "Destroying a widget with a live native widget. " + << "Widget probably should use WIDGET_OWNS_NATIVE_WIDGET ownership."; + } } // static @@ -951,6 +957,7 @@ void Widget::OnNativeWidgetDestroying() { void Widget::OnNativeWidgetDestroyed() { widget_delegate_->DeleteDelegate(); widget_delegate_ = NULL; + native_widget_destroyed_ = true; } gfx::Size Widget::GetMinimumSize() { diff --git a/ui/views/widget/widget.h b/ui/views/widget/widget.h index 9932ae9..319655e 100644 --- a/ui/views/widget/widget.h +++ b/ui/views/widget/widget.h @@ -749,6 +749,9 @@ class VIEWS_EXPORT Widget : public internal::NativeWidgetDelegate, // Tracks whether native widget has been initialized. bool native_widget_initialized_; + // Whether native widget has been destroyed. + bool native_widget_destroyed_; + // TODO(beng): Remove NativeWidgetGtk's dependence on these: // If true, the mouse is currently down. bool is_mouse_button_pressed_; |